logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: c67506ba689633cd65f266610f2cd2a5da34912b
parent 086ba59d0346be870dc7df2660fbb55666bf0af7
Author: Lain Soykaf <lain@lain.com>
Date:   Mon, 20 May 2024 18:21:46 +0400

Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into auth-fetch-exception

Diffstat:

A.dialyzer_ignore.exs6++++++
M.gitignore5+++--
M.gitlab-ci.yml121++++++++++++++++++++++++++++++++++++++-----------------------------------------
A.rgignore1+
MCHANGELOG.md28++++++++++++++++++++++------
MDockerfile5+++--
Achangelog.d/2.6.1-mergeback.skip0
Achangelog.d/3987.fix1+
Achangelog.d/account-rendering-auth-check.fix1+
Achangelog.d/add-outbox.fix1+
Dchangelog.d/akkoma-xml-remote-entities.security1-
Achangelog.d/anonymous-exception-else.fix1+
Achangelog.d/api-docs.skip0
Achangelog.d/atom-leak.skip0
Achangelog.d/authorize-interaction.add2++
Achangelog.d/backups-follows.add2++
Achangelog.d/bad_inbox_request.change1+
Achangelog.d/bandit.change1+
Achangelog.d/blurhash.change1+
Achangelog.d/bookmark-folders.add2++
Achangelog.d/bookmark-folders.skip0
Achangelog.d/bugfix-ccworks.fix2++
Achangelog.d/build-release-with-local-libvips.skip0
Achangelog.d/card-endpoint.remove1+
Achangelog.d/card-image-description.add2++
Achangelog.d/chat-attachment-empty-array.fix1+
Dchangelog.d/check-attachment-attribution.security1-
Achangelog.d/config-stat-symlink.fix1+
Achangelog.d/content-length.fix1+
Achangelog.d/deprecations.skip1+
Achangelog.d/deprecations2.skip0
Achangelog.d/deps-bump-2024-01-25.skip0
Achangelog.d/description-meilisearch-type.skip0
Achangelog.d/dialyzer.skip0
Achangelog.d/dialyzer2.skip0
Achangelog.d/dialyzer3.skip0
Achangelog.d/dialyzer4.skip0
Achangelog.d/doc-fix.skip0
Achangelog.d/emoji-download-paginate.fix2++
Dchangelog.d/emoji-pack-sanitization.security1-
Achangelog.d/emoji-use-v1.fix2++
Achangelog.d/exile-bsds.skip0
Achangelog.d/exile-freebsd.skip0
Achangelog.d/exile-macos.skip0
Achangelog.d/exile.skip0
Achangelog.d/familiar-followers.add2++
Achangelog.d/favicon.add1+
Achangelog.d/federator-modules.remove1+
Achangelog.d/federator.skip0
Achangelog.d/fep-2c59.add2++
Achangelog.d/ffmpeg-limiter.add1+
Achangelog.d/finch_redirects.fix1+
Achangelog.d/fix-bookmark-folder-tests.skip0
Achangelog.d/fix-dockerfile.skip0
Achangelog.d/fix-duplicate-inbox-deliveries.fix0
Achangelog.d/fix-otp-comparison.skip0
Achangelog.d/fix-tests.skip0
Achangelog.d/force-mention-mrf.add2++
Achangelog.d/framegrabs.fix1+
Achangelog.d/frontend-management.add1+
Achangelog.d/generate-unset-user-keys-migration.skip0
Achangelog.d/group-actor.add1+
Achangelog.d/gun-logs.skip0
Achangelog.d/gun_pool.fix1+
Achangelog.d/gun_pool2.fix1+
Achangelog.d/gun_pool3.skip0
Achangelog.d/handle_object_fetch_failures.change1+
Achangelog.d/instance-contact-account.add2++
Achangelog.d/instance-defdelegates.skip0
Achangelog.d/instance-rules.add2++
Achangelog.d/instance-v2.add2++
Achangelog.d/instance-v2.skip0
Achangelog.d/issue-3241.fix1+
Achangelog.d/last_status_at.change2++
Achangelog.d/link-verification.add2++
Achangelog.d/loading-order-test-fix.skip0
Achangelog.d/local-webfinger.fix2++
Achangelog.d/mark-read.fix1+
Achangelog.d/mastodon_api_v2.add1+
Achangelog.d/mastodon_directory.fix1+
Achangelog.d/memleak.fix1+
Achangelog.d/mergeback-2.6.2.skip0
Achangelog.d/migration-fix.skip1+
Achangelog.d/missing-mrfs.add1+
Achangelog.d/mrf-regex-error.fix1+
Achangelog.d/mrf-steal-emoji-extname.fix1+
Achangelog.d/mrf_hashtags.fix1+
Achangelog.d/nil-content-map.fix1+
Achangelog.d/no-async-with-clear-config.skip0
Achangelog.d/notifications-index.fix1+
Achangelog.d/notifications.fix2++
Achangelog.d/oauth-nickname.skip2++
Achangelog.d/opengraph-rich-media-proxy.add1+
Achangelog.d/optimistic-inbox.change1+
Achangelog.d/otp26.add1+
Dchangelog.d/otp_perms.security2--
Achangelog.d/postgres-jit.change1+
Achangelog.d/prioritize-direct-recipients.add1+
Achangelog.d/promex.change1+
Achangelog.d/public-polls.add2++
Achangelog.d/publisher_discard.change1+
Achangelog.d/publisher_log.change1+
Achangelog.d/qtfaststart.fix1+
Achangelog.d/reachability.change1+
Achangelog.d/receiverworker-error-handling.fix2++
Achangelog.d/remote-fetcher-error.skip0
Achangelog.d/rich_media.fix1+
Achangelog.d/rich_media_refactor.change1+
Achangelog.d/rich_media_tests.skip0
Achangelog.d/scrobble-url.add1+
Achangelog.d/tesla.deps1+
Achangelog.d/test-improvements.skip0
Achangelog.d/testsecrets.skip0
Achangelog.d/transient-validators-defaults.change1+
Achangelog.d/typo.skip0
Achangelog.d/vips.change1+
Achangelog.d/web_push.fix1+
Achangelog.d/web_push_filtered.fix1+
Achangelog.d/websocket-refactor.change1+
Dci/build_and_push.sh1-
Rci/Dockerfile -> ci/elixir-1.12/Dockerfile0
Aci/elixir-1.12/build_and_push.sh1+
Aci/elixir-1.15-otp25/Dockerfile8++++++++
Aci/elixir-1.15-otp25/build_and_push.sh1+
Aci/postgres-with-rum-13/Dockerfile3+++
Aci/postgres-with-rum-13/build_and_push.sh1+
Mconfig/benchmark.exs6+++++-
Mconfig/config.exs65+++++++++++++++++++++++++++++++++++++++++++++--------------------
Mconfig/description.exs36++++++++++++++++++++++++++++--------
Mconfig/dev.exs3+--
Mconfig/test.exs40+++++++++++++++++++++++++++++++++++++---
Mdocs/administration/CLI_tasks/config.md4++--
Mdocs/administration/backup.md2+-
Adocs/administration/frontends-management.md71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adocs/assets/admin_dash_location.png0
Adocs/assets/frontends_tab.png0
Adocs/assets/old_adminfe_link.png0
Adocs/assets/primary_frontend_section.png0
Adocs/assets/way_to_install_frontends.png0
Mdocs/configuration/cheatsheet.md15++++++++++-----
Mdocs/configuration/custom_emoji.md2+-
Mdocs/configuration/i2p.md2+-
Mdocs/configuration/onion_federation.md2+-
Mdocs/configuration/optimizing_beam.md2+-
Mdocs/configuration/postgresql.md2+-
Mdocs/configuration/search.md4++--
Mdocs/development/API/admin_api.md60+++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
Mdocs/development/API/differences_in_mastoapi_responses.md21+++++++++++++++++++--
Mdocs/development/API/pleroma_api.md76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mdocs/development/ap_extensions.md6+++---
Mdocs/development/setting_up_pleroma_dev.md4++--
Mdocs/installation/debian_based_jp.md4++--
Mdocs/installation/freebsd_en.md3++-
Mdocs/installation/generic_dependencies.include4++--
Mdocs/installation/gentoo_en.md4++--
Mdocs/installation/gentoo_otp_en.md2+-
Mdocs/installation/openbsd_en.md4++--
Mdocs/installation/otp_en.md2+-
Minstallation/pleroma-mongooseim.cfg6+++---
Mlib/mix/tasks/pleroma/database.ex2+-
Mlib/mix/tasks/pleroma/digest.ex2+-
Mlib/mix/tasks/pleroma/ecto/rollback.ex2+-
Mlib/mix/tasks/pleroma/emoji.ex2+-
Mlib/mix/tasks/pleroma/instance.ex4+---
Dlib/phoenix/transports/web_socket/raw.ex93-------------------------------------------------------------------------------
Mlib/pleroma/activity/html.ex2+-
Mlib/pleroma/activity/queries.ex2+-
Mlib/pleroma/announcement.ex16+++++++++-------
Mlib/pleroma/application.ex150++++++++++++++++++++++++++++++-------------------------------------------------
Mlib/pleroma/application_requirements.ex35++++++++++++++++++++++++++++-------
Mlib/pleroma/bookmark.ex41+++++++++++++++++++++++++++++++----------
Alib/pleroma/bookmark_folder.ex115+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/caching.ex3+++
Mlib/pleroma/captcha/kocaptcha.ex2+-
Mlib/pleroma/chat.ex12++++++------
Mlib/pleroma/config/deprecation_warnings.ex36++++++++++++++++++------------------
Mlib/pleroma/config/oban.ex2+-
Mlib/pleroma/config/release_runtime_provider.ex2+-
Mlib/pleroma/config/transfer_task.ex9++++-----
Mlib/pleroma/config_db.ex6+++---
Mlib/pleroma/constants.ex11++++++++++-
Mlib/pleroma/conversation.ex2+-
Mlib/pleroma/data_migration.ex2++
Mlib/pleroma/docs/generator.ex4+++-
Mlib/pleroma/docs/json.ex2+-
Mlib/pleroma/ecto_type/activity_pub/object_validators/bare_uri.ex10++++++----
Mlib/pleroma/emoji.ex16+++++++++-------
Mlib/pleroma/emoji/loader.ex6++----
Mlib/pleroma/emoji/pack.ex14++++++++++----
Mlib/pleroma/filter.ex3---
Mlib/pleroma/following_relationship.ex10+++++-----
Mlib/pleroma/gopher/server.ex2+-
Mlib/pleroma/gun/conn.ex6+++---
Mlib/pleroma/gun/connection_pool/reclaimer.ex2+-
Mlib/pleroma/gun/connection_pool/worker_supervisor.ex6++++--
Mlib/pleroma/helpers/media_helper.ex173+++++++++++++++++++++++--------------------------------------------------------
Mlib/pleroma/helpers/qt_fast_start.ex37++++++++++++++++++++++++-------------
Mlib/pleroma/html.ex21++++-----------------
Mlib/pleroma/http.ex4++++
Mlib/pleroma/http/adapter_helper.ex12++++++------
Mlib/pleroma/http/request_builder.ex4++--
Mlib/pleroma/http/web_push.ex6+++++-
Mlib/pleroma/instances.ex11+++++------
Mlib/pleroma/instances/instance.ex16++++++----------
Mlib/pleroma/maintenance.ex2+-
Mlib/pleroma/maps.ex15++++++++++++++-
Mlib/pleroma/mfa.ex2+-
Mlib/pleroma/mfa/totp.ex3++-
Mlib/pleroma/migrators/hashtags_table_migrator.ex2+-
Mlib/pleroma/migrators/support/base_migrator.ex11++++++-----
Mlib/pleroma/moderation_log.ex5+++--
Mlib/pleroma/notification.ex77+++++++++++++++++++++++++++++++++++------------------------------------------
Mlib/pleroma/object.ex13++++++++-----
Mlib/pleroma/object/fetcher.ex63+++++++++++++++++++++++++++++----------------------------------
Mlib/pleroma/pagination.ex9+++++----
Mlib/pleroma/password/pbkdf2.ex2+-
Alib/pleroma/prom_ex.ex49+++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/release_tasks.ex6------
Mlib/pleroma/repo.ex2--
Mlib/pleroma/report_note.ex8++++----
Mlib/pleroma/reverse_proxy.ex20+++++++-------------
Alib/pleroma/rule.ex68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/scheduled_activity.ex9+++++----
Mlib/pleroma/search/database_search.ex9+--------
Mlib/pleroma/search/search_backend.ex4++--
Mlib/pleroma/signature.ex2+-
Mlib/pleroma/telemetry/logger.ex6+++---
Mlib/pleroma/upload.ex20+++++++++++---------
Mlib/pleroma/upload/filter/analyze_metadata.ex44+++++++++++++++++++++++++++++++++-----------
Mlib/pleroma/upload/filter/exiftool/read_description.ex2--
Mlib/pleroma/uploaders/s3.ex15++++++++++-----
Mlib/pleroma/uploaders/uploader.ex11++---------
Mlib/pleroma/user.ex142++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Mlib/pleroma/user/backup.ex94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mlib/pleroma/user/query.ex4++--
Mlib/pleroma/user_invite_token.ex2+-
Mlib/pleroma/user_relationship.ex2++
Mlib/pleroma/web/activity_pub/activity_pub.ex36++++++++++++++++++++++--------------
Mlib/pleroma/web/activity_pub/activity_pub_controller.ex18+++++++++++-------
Mlib/pleroma/web/activity_pub/builder.ex7++++---
Mlib/pleroma/web/activity_pub/mrf.ex19++++++++++++++++---
Mlib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex2--
Mlib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex2+-
Alib/pleroma/web/activity_pub/mrf/force_mention.ex59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/activity_pub/mrf/hashtag_policy.ex4++--
Mlib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex1-
Mlib/pleroma/web/activity_pub/mrf/keyword_policy.ex5+----
Mlib/pleroma/web/activity_pub/mrf/no_empty_policy.ex16++++++++--------
Mlib/pleroma/web/activity_pub/mrf/policy.ex4++--
Mlib/pleroma/web/activity_pub/mrf/quote_to_link_tag_policy.ex2+-
Mlib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex10+++++++---
Mlib/pleroma/web/activity_pub/object_validator.ex3+++
Mlib/pleroma/web/activity_pub/object_validators/announce_validator.ex2+-
Mlib/pleroma/web/activity_pub/object_validators/attachment_validator.ex4++--
Mlib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex5+++++
Mlib/pleroma/web/activity_pub/object_validators/common_fixes.ex9++++++---
Mlib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex8++++----
Mlib/pleroma/web/activity_pub/object_validators/question_options_validator.ex4++--
Mlib/pleroma/web/activity_pub/object_validators/question_validator.ex1+
Mlib/pleroma/web/activity_pub/pipeline.ex2+-
Mlib/pleroma/web/activity_pub/publisher.ex202+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
Mlib/pleroma/web/activity_pub/relay.ex2+-
Mlib/pleroma/web/activity_pub/side_effects.ex55++++++++++++++++++++++++++++++++++++-------------------
Mlib/pleroma/web/activity_pub/side_effects/handling.ex2+-
Mlib/pleroma/web/activity_pub/transmogrifier.ex12++++--------
Mlib/pleroma/web/activity_pub/utils.ex51++++++++++++++++++++++++++++++++++++++++-----------
Mlib/pleroma/web/activity_pub/views/user_view.ex13++++++++++---
Mlib/pleroma/web/activity_pub/visibility.ex50+++++++++++++++++++++++++-------------------------
Mlib/pleroma/web/admin_api/controllers/config_controller.ex6+++---
Mlib/pleroma/web/admin_api/controllers/instance_document_controller.ex13+++++++++----
Mlib/pleroma/web/admin_api/controllers/invite_controller.ex14++++++++++----
Mlib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex15+++++++++++----
Mlib/pleroma/web/admin_api/controllers/relay_controller.ex18+++++++++++++++---
Mlib/pleroma/web/admin_api/controllers/report_controller.ex42+++++++++++++++++++++++++++++++-----------
Alib/pleroma/web/admin_api/controllers/rule_controller.ex62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/admin_api/controllers/user_controller.ex107++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mlib/pleroma/web/admin_api/views/report_view.ex17++++++++++++++++-
Alib/pleroma/web/admin_api/views/rule_view.ex22++++++++++++++++++++++
Mlib/pleroma/web/api_spec.ex12+++++++-----
Mlib/pleroma/web/api_spec/cast_and_validate.ex14++++++++------
Mlib/pleroma/web/api_spec/helpers.ex2+-
Mlib/pleroma/web/api_spec/operations/account_operation.ex62+++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Mlib/pleroma/web/api_spec/operations/admin/frontend_operation.ex4++--
Mlib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex8++++----
Mlib/pleroma/web/api_spec/operations/admin/report_operation.ex29+++++++++++++++++++++++------
Alib/pleroma/web/api_spec/operations/admin/rule_operation.ex115+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/api_spec/operations/chat_operation.ex14++++++++++++--
Mlib/pleroma/web/api_spec/operations/directory_operation.ex2+-
Mlib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex6+++---
Mlib/pleroma/web/api_spec/operations/instance_operation.ex229++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mlib/pleroma/web/api_spec/operations/notification_operation.ex2+-
Mlib/pleroma/web/api_spec/operations/pleroma_account_operation.ex2+-
Alib/pleroma/web/api_spec/operations/pleroma_bookmark_folder_operation.ex125+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex8+-------
Mlib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex8++++++--
Mlib/pleroma/web/api_spec/operations/pleroma_status_operation.ex2+-
Mlib/pleroma/web/api_spec/operations/poll_operation.ex2+-
Mlib/pleroma/web/api_spec/operations/report_operation.ex9++++++++-
Mlib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex2+-
Mlib/pleroma/web/api_spec/operations/search_operation.ex4++--
Mlib/pleroma/web/api_spec/operations/status_operation.ex32++++++++++++++++++++++++++------
Mlib/pleroma/web/api_spec/operations/timeline_operation.ex7++++++-
Mlib/pleroma/web/api_spec/operations/twitter_util_operation.ex10+++++-----
Mlib/pleroma/web/api_spec/schemas/attachment.ex2+-
Alib/pleroma/web/api_spec/schemas/bookmark_folder.ex26++++++++++++++++++++++++++
Mlib/pleroma/web/api_spec/schemas/poll.ex14+++++++++++++-
Mlib/pleroma/web/api_spec/schemas/status.ex4++++
Mlib/pleroma/web/auth/authenticator.ex2+-
Mlib/pleroma/web/common_api.ex24++++++++++++++++++------
Mlib/pleroma/web/common_api/activity_draft.ex4+++-
Mlib/pleroma/web/common_api/utils.ex6+++---
Mlib/pleroma/web/controller_helper.ex18++++++++++--------
Mlib/pleroma/web/embed_controller.ex4+---
Mlib/pleroma/web/endpoint.ex85+++++++++++++++++++++++++++++++------------------------------------------------
Mlib/pleroma/web/fallback/redirect_controller.ex27+++++++++++++++++++++------
Mlib/pleroma/web/federator.ex19++++++++++++++-----
Dlib/pleroma/web/federator/publisher.ex109-------------------------------------------------------------------------------
Mlib/pleroma/web/feed/feed_view.ex4++--
Mlib/pleroma/web/gettext.ex4++--
Mlib/pleroma/web/mastodon_api/controllers/account_controller.ex105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mlib/pleroma/web/mastodon_api/controllers/directory_controller.ex2+-
Mlib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex18+++++++++++++-----
Mlib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex4++--
Mlib/pleroma/web/mastodon_api/controllers/instance_controller.ex12+++++++++++-
Mlib/pleroma/web/mastodon_api/controllers/list_controller.ex52+++++++++++++++++++++++++++++++++++++++-------------
Mlib/pleroma/web/mastodon_api/controllers/media_controller.ex26+++++++++++++++++++++-----
Mlib/pleroma/web/mastodon_api/controllers/notification_controller.ex63+++++++++++++++++++++++++++++++++++++++------------------------
Mlib/pleroma/web/mastodon_api/controllers/poll_controller.ex12+++++++++---
Mlib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex17+++++++++++++----
Mlib/pleroma/web/mastodon_api/controllers/search_controller.ex17+++++++++++++----
Mlib/pleroma/web/mastodon_api/controllers/status_controller.ex192++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
Mlib/pleroma/web/mastodon_api/views/account_view.ex43++++++++++++++++++++++++++++++++++++++-----
Mlib/pleroma/web/mastodon_api/views/instance_view.ex174++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Mlib/pleroma/web/mastodon_api/views/poll_view.ex5++++-
Mlib/pleroma/web/mastodon_api/views/status_view.ex84+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
Mlib/pleroma/web/mastodon_api/websocket_handler.ex256++++++++++++++++++++++++++++++++++++++-----------------------------------------
Mlib/pleroma/web/media_proxy/media_proxy_controller.ex2+-
Mlib/pleroma/web/nodeinfo/nodeinfo.ex2+-
Mlib/pleroma/web/o_auth/authorization.ex8++++----
Mlib/pleroma/web/o_auth/o_auth_controller.ex9++-------
Mlib/pleroma/web/o_auth/token.ex9+++++----
Mlib/pleroma/web/o_auth/token/query.ex4++--
Mlib/pleroma/web/o_status/o_status_controller.ex9++++-----
Alib/pleroma/web/pleroma_api/controllers/bookmark_folder_controller.ex68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/pleroma_api/controllers/chat_controller.ex69++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mlib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex24++++++++++++++++++++----
Mlib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex29++++++++++++++++++++---------
Mlib/pleroma/web/pleroma_api/controllers/mascot_controller.ex13++++++++++---
Mlib/pleroma/web/pleroma_api/controllers/notification_controller.ex36+++++++++++++++++++++++++-----------
Mlib/pleroma/web/pleroma_api/controllers/user_import_controller.ex41+++++++++++++++++++++++++++++++----------
Alib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex42++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex13++++++++-----
Mlib/pleroma/web/pleroma_api/views/scrobble_view.ex1+
Mlib/pleroma/web/plugs/cache.ex2+-
Mlib/pleroma/web/plugs/http_security_plug.ex2+-
Mlib/pleroma/web/plugs/o_auth_plug.ex4++--
Mlib/pleroma/web/plugs/rate_limiter.ex2+-
Mlib/pleroma/web/plugs/rate_limiter/supervisor.ex2+-
Mlib/pleroma/web/plugs/uploaded_media.ex2+-
Mlib/pleroma/web/push.ex2+-
Mlib/pleroma/web/push/impl.ex2+-
Alib/pleroma/web/rich_media/backfill.ex101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/pleroma/web/rich_media/card.ex157+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/pleroma/web/rich_media/helpers.ex89+++++++++++--------------------------------------------------------------------
Mlib/pleroma/web/rich_media/parser.ex169++++++++++++++++++++++++-------------------------------------------------------
Mlib/pleroma/web/rich_media/parser/ttl.ex15++++++++++++++-
Mlib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex15++++++++-------
Alib/pleroma/web/rich_media/parser/ttl/opengraph.ex20++++++++++++++++++++
Mlib/pleroma/web/router.ex22+++++++++++++++++++---
Mlib/pleroma/web/static_fe/static_fe_controller.ex3+--
Mlib/pleroma/web/streamer.ex38++++++++++++++++----------------------
Mlib/pleroma/web/templates/o_auth/o_auth/show.html.eex2+-
Mlib/pleroma/web/twitter_api/controllers/password_controller.ex2+-
Mlib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex11+++++++++--
Mlib/pleroma/web/twitter_api/controllers/util_controller.ex54+++++++++++++++++++++++++++++++++++++++++-------------
Mlib/pleroma/web/web_finger.ex10+++++-----
Mlib/pleroma/web/web_finger/web_finger_controller.ex2+-
Mlib/pleroma/workers/background_worker.ex7++++++-
Mlib/pleroma/workers/publisher_worker.ex4++--
Mlib/pleroma/workers/receiver_worker.ex41+++++++++++++++++++++++++++++++++++++----
Mlib/pleroma/workers/remote_fetcher_worker.ex20+++++++++++++++++++-
Alib/pleroma/workers/rich_media_expiration_worker.ex15+++++++++++++++
Mmix.exs39+++++++++++++++++----------------------
Mmix.lock99++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mpriv/gettext/ja/LC_MESSAGES/errors.po90++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mpriv/repo/migrations/20180516144508_add_trigram_extension.exs6+++---
Mpriv/repo/migrations/20190710125158_add_following_address_from_source_data.exs2+-
Mpriv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs2+-
Mpriv/repo/migrations/20200811143147_ap_id_not_null.exs2+-
Apriv/repo/migrations/20220203224011_create_rules.exs12++++++++++++
Mpriv/repo/migrations/20220527134341_add_quote_url_index_to_objects.exs8+++++++-
Mpriv/repo/migrations/20220905011454_generate_unset_user_keys.exs10+++++++++-
Apriv/repo/migrations/20240207035927_create_rich_media_card.exs14++++++++++++++
Apriv/repo/migrations/20240223165000_create_bookmark_folders.exs27+++++++++++++++++++++++++++
Apriv/repo/migrations/20240406000000_add_hint_to_rules.exs13+++++++++++++
Mpriv/static/index.html4++--
Mpriv/static/schemas/litepub-0.1.jsonld5++++-
Apriv/static/static/css/8859.d26a3b0841a7beb8fd4a.css3+++
Apriv/static/static/css/8859.d26a3b0841a7beb8fd4a.css.map2++
Dpriv/static/static/css/9801.cfe503d4c949ae0c3813.css3---
Dpriv/static/static/css/9801.cfe503d4c949ae0c3813.css.map2--
Apriv/static/static/css/app.a7f63ee9107a77599942.css3+++
Apriv/static/static/css/app.a7f63ee9107a77599942.css.map2++
Dpriv/static/static/css/app.c18a2c80794a1b699a61.css3---
Dpriv/static/static/css/app.c18a2c80794a1b699a61.css.map2--
Apriv/static/static/js/7586.628f729b9c8b2e6f4e1f.js3+++
Apriv/static/static/js/7586.628f729b9c8b2e6f4e1f.js.map2++
Dpriv/static/static/js/7586.981b2305a0019f6042a5.js3---
Dpriv/static/static/js/7586.981b2305a0019f6042a5.js.map2--
Apriv/static/static/js/8859.c76b0a0c3a4b5acbef11.js3+++
Apriv/static/static/js/8859.c76b0a0c3a4b5acbef11.js.map2++
Dpriv/static/static/js/9801.99ace6b5dc657bf1a65b.js3---
Dpriv/static/static/js/9801.99ace6b5dc657bf1a65b.js.map2--
Dpriv/static/static/js/app.7c4b412b26221a7c8572.js3---
Dpriv/static/static/js/app.7c4b412b26221a7c8572.js.map2--
Apriv/static/static/js/app.d42ab31e1d50a3265a82.js3+++
Apriv/static/static/js/app.d42ab31e1d50a3265a82.js.map2++
Dpriv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js3---
Dpriv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js.map2--
Apriv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js3+++
Apriv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js.map2++
Mpriv/static/sw-pleroma.js2+-
Atest/fixtures/ccworld-ap-bridge_note.json1+
Atest/fixtures/minds-invalid-mention-post.json2++
Atest/fixtures/minds-pleroma-mentioned-post.json2++
Atest/fixtures/png_with_transparency.png0
Atest/fixtures/rich_media/google.html12++++++++++++
Mtest/fixtures/rich_media/oembed.html2+-
Atest/fixtures/rich_media/reddit.html393+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atest/fixtures/rich_media/yahoo.html12++++++++++++
Atest/fixtures/tesla_mock/smithereen_non_anonymous_poll.json2++
Atest/fixtures/tesla_mock/smithereen_user.json2++
Mtest/mix/pleroma_test.exs2+-
Mtest/mix/tasks/pleroma/config_test.exs5++---
Mtest/mix/tasks/pleroma/ecto/migrate_test.exs2+-
Mtest/mix/tasks/pleroma/ecto/rollback_test.exs4++--
Mtest/mix/tasks/pleroma/robots_txt_test.exs2+-
Mtest/pleroma/activity/ir/topics_test.exs2+-
Mtest/pleroma/activity_test.exs2+-
Atest/pleroma/bookmark_folder_test.exs60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/bookmark_test.exs17++++++++++++++++-
Mtest/pleroma/config/deprecation_warnings_test.exs11+++++------
Mtest/pleroma/config_db_test.exs8++++----
Mtest/pleroma/conversation/participation_test.exs2+-
Mtest/pleroma/emoji/loader_test.exs2+-
Mtest/pleroma/emoji_test.exs26+++++++++++++-------------
Mtest/pleroma/formatter_test.exs4++--
Mtest/pleroma/healthcheck_test.exs8+++++---
Mtest/pleroma/html_test.exs12++++++------
Mtest/pleroma/http/adapter_helper/gun_test.exs4++--
Mtest/pleroma/http/adapter_helper/hackney_test.exs2+-
Atest/pleroma/http/web_push_test.exs45+++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/instances/instance_test.exs8--------
Mtest/pleroma/integration/mastodon_websocket_test.exs11-----------
Atest/pleroma/maps_test.exs22++++++++++++++++++++++
Mtest/pleroma/mfa/totp_test.exs6+++++-
Mtest/pleroma/notification_test.exs205++++++++-----------------------------------------------------------------------
Mtest/pleroma/object/fetcher_test.exs7+++----
Mtest/pleroma/object_test.exs3+++
Mtest/pleroma/otp_version_test.exs2+-
Mtest/pleroma/repo/migrations/autolinker_to_linkify_test.exs6+++---
Mtest/pleroma/repo/migrations/fix_malformed_formatter_config_test.exs4++--
Mtest/pleroma/reverse_proxy_test.exs2+-
Atest/pleroma/rule_test.exs57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/scheduled_activity_test.exs32+++++++++++++++++++++++++-------
Mtest/pleroma/search/database_search_test.exs15---------------
Mtest/pleroma/signature_test.exs7++-----
Mtest/pleroma/upload/filter/analyze_metadata_test.exs14++++++++++++++
Mtest/pleroma/upload/filter/exiftool/read_description_test.exs2+-
Mtest/pleroma/upload_test.exs11+++++++++++
Mtest/pleroma/uploaders/s3_test.exs89+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Atest/pleroma/user/backup_async_test.exs51+++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/user/backup_test.exs59+++++++++++++++++++++++++++++++++--------------------------
Mtest/pleroma/user_test.exs109+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Mtest/pleroma/web/activity_pub/activity_pub_controller_test.exs27++++++++++++++++++++++-----
Mtest/pleroma/web/activity_pub/activity_pub_test.exs9++++++++-
Mtest/pleroma/web/activity_pub/mrf/ensure_re_prepended_test.exs2+-
Mtest/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs2+-
Atest/pleroma/web/activity_pub/mrf/force_mention_test.exs73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/activity_pub/mrf/media_proxy_warming_policy_test.exs9+++++++++
Mtest/pleroma/web/activity_pub/mrf/steal_emoji_policy_test.exs53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/activity_pub/mrf_test.exs15+++++++++++++--
Mtest/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs11+++++++++++
Mtest/pleroma/web/activity_pub/object_validators/attachment_validator_test.exs7++++++-
Mtest/pleroma/web/activity_pub/object_validators/chat_validation_test.exs26++++++++++++++++++++++++++
Mtest/pleroma/web/activity_pub/publisher_test.exs90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mtest/pleroma/web/activity_pub/side_effects_test.exs114+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mtest/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs15++++++++++++++-
Mtest/pleroma/web/activity_pub/transmogrifier/undo_handling_test.exs2+-
Mtest/pleroma/web/activity_pub/transmogrifier_test.exs15++++++++-------
Mtest/pleroma/web/activity_pub/utils_test.exs39+++++++++++++++++++++++++++++++++++++--
Mtest/pleroma/web/activity_pub/views/user_view_test.exs16++++++++++++++++
Mtest/pleroma/web/activity_pub/visibility_test.exs50+++++++++++++++++++++++++-------------------------
Mtest/pleroma/web/admin_api/controllers/admin_api_controller_test.exs4++++
Mtest/pleroma/web/admin_api/controllers/config_controller_test.exs4++--
Mtest/pleroma/web/admin_api/controllers/media_proxy_cache_controller_test.exs10+++++++++-
Mtest/pleroma/web/admin_api/controllers/o_auth_app_controller_test.exs2+-
Mtest/pleroma/web/admin_api/controllers/report_controller_test.exs29+++++++++++++++++++++++++++++
Atest/pleroma/web/admin_api/controllers/rule_controller_test.exs82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/admin_api/views/report_view_test.exs25+++++++++++++++++++++++--
Mtest/pleroma/web/common_api_test.exs122++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Dtest/pleroma/web/endpoint/metrics_exporter_test.exs69---------------------------------------------------------------------
Mtest/pleroma/web/fallback_test.exs41++++++++++++++++++-----------------------
Mtest/pleroma/web/federator_test.exs38++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/mastodon_api/controllers/account_controller_test.exs55++++++++++++++++++++++++++++++++++++++++++++++++++++---
Mtest/pleroma/web/mastodon_api/controllers/directory_controller_test.exs2+-
Mtest/pleroma/web/mastodon_api/controllers/instance_controller_test.exs48+++++++++++++++++++++++++++++++++++++++++++++++-
Mtest/pleroma/web/mastodon_api/controllers/media_controller_test.exs11+++++++++++
Mtest/pleroma/web/mastodon_api/controllers/report_controller_test.exs39+++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/mastodon_api/controllers/scheduled_activity_controller_test.exs18+++++++++++++-----
Mtest/pleroma/web/mastodon_api/controllers/search_controller_test.exs32+++++++++++++-------------------
Mtest/pleroma/web/mastodon_api/controllers/status_controller_test.exs208+++++++++++++++++++++++++++----------------------------------------------------
Mtest/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs15+++++++++------
Mtest/pleroma/web/mastodon_api/mastodon_api_test.exs5+++++
Mtest/pleroma/web/mastodon_api/update_credentials_test.exs45++++++++++++++++++++++++++++++++++++++-------
Mtest/pleroma/web/mastodon_api/views/account_view_test.exs14++++++++++----
Mtest/pleroma/web/mastodon_api/views/poll_view_test.exs10+++++++++-
Mtest/pleroma/web/mastodon_api/views/scheduled_activity_view_test.exs7+++++++
Mtest/pleroma/web/mastodon_api/views/status_view_test.exs120+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Mtest/pleroma/web/media_proxy/media_proxy_controller_test.exs26+++++++++++++++++---------
Mtest/pleroma/web/media_proxy_test.exs17++++++++++++++++-
Mtest/pleroma/web/metadata/providers/open_graph_test.exs10++++++++++
Mtest/pleroma/web/o_auth/mfa_controller_test.exs2+-
Mtest/pleroma/web/o_auth/token/utils_test.exs4++--
Mtest/pleroma/web/o_status/o_status_controller_test.exs2+-
Mtest/pleroma/web/pleroma_api/controllers/backup_controller_test.exs5+++++
Atest/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs161+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/pleroma_api/controllers/chat_controller_test.exs55++++++++++++++++++++++++++++++++++++++++++++-----------
Mtest/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs16+++++++++-------
Mtest/pleroma/web/pleroma_api/controllers/instances_controller_test.exs2+-
Mtest/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs9+++++++++
Mtest/pleroma/web/pleroma_api/controllers/notification_controller_test.exs27++++++++++++++-------------
Mtest/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs12++++++++----
Mtest/pleroma/web/pleroma_api/views/backup_view_test.exs11+++++++++++
Mtest/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs26+++++++++++++++++++-------
Mtest/pleroma/web/plugs/ensure_privileged_plug_test.exs2+-
Mtest/pleroma/web/plugs/frontend_static_plug_test.exs8++++++++
Mtest/pleroma/web/plugs/uploaded_media_plug_test.exs15+++++++++++++++
Mtest/pleroma/web/push/impl_test.exs5+++++
Atest/pleroma/web/rich_media/card_test.exs71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dtest/pleroma/web/rich_media/helpers_test.exs84-------------------------------------------------------------------------------
Mtest/pleroma/web/rich_media/parser/ttl/aws_signed_url_test.exs49+++++++++++++++++++++++++++++++++----------------
Atest/pleroma/web/rich_media/parser/ttl/opengraph_test.exs41+++++++++++++++++++++++++++++++++++++++++
Mtest/pleroma/web/rich_media/parser_test.exs128+++++++++++++++++++++++++------------------------------------------------------
Mtest/pleroma/web/twitter_api/remote_follow_controller_test.exs45++++++++++++++++++++++++++++++++++++++++++---
Mtest/pleroma/web/web_finger/web_finger_controller_test.exs25++++++++++---------------
Mtest/pleroma/workers/purge_expired_token_test.exs2+-
Mtest/pleroma/workers/receiver_worker_test.exs2+-
Atest/pleroma/workers/remote_fetcher_worker_test.exs69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/support/cachex_proxy.ex6++++++
Mtest/support/cluster.ex15++++++++++++++-
Mtest/support/data_case.ex1+
Mtest/support/factory.ex2+-
Mtest/support/helpers.ex35++++++++++++++++++++++++++++++++++-
Mtest/support/http_request_mock.ex94++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
Mtest/support/mocks.ex5+++++
Mtest/support/null_cache.ex6++++++
Mtest/test_helper.exs24++++++++++++++++++++++--
Duploads/.gitignore3---
559 files changed, 7890 insertions(+), 3263 deletions(-)

diff --git a/.dialyzer_ignore.exs b/.dialyzer_ignore.exs @@ -0,0 +1,6 @@ +[ +{"lib/cachex.ex", "Unknown type: Spec.cache/0."}, +{"lib/pleroma/web/plugs/rate_limiter.ex", "The pattern can never match the type {:commit, _} | {:ignore, _}."}, +{"lib/pleroma/web/plugs/rate_limiter.ex", "Function get_scale/2 will never be called."}, +{"lib/pleroma/web/plugs/rate_limiter.ex", "Function initialize_buckets!/1 will never be called."} +] diff --git a/.gitignore b/.gitignore @@ -57,5 +57,6 @@ pleroma.iml .tool-versions # Editor temp files -/*~ -/*# +*~ +*# +*.swp diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml @@ -1,12 +1,13 @@ image: git.pleroma.social:5050/pleroma/pleroma/ci-base variables: &global_variables + # Only used for the release ELIXIR_VER: 1.12.3 POSTGRES_DB: pleroma_test POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres DB_HOST: postgres - DB_PORT: 5432 + DB_PORT: "5432" MIX_ENV: test workflow: @@ -25,9 +26,10 @@ cache: &global_cache_policy - _build stages: - - check-changelog - build + - lint - test + - check-changelog - benchmark - deploy - release @@ -70,7 +72,7 @@ check-changelog: tags: - amd64 -build: +build-1.12.3: extends: - .build_changes_policy - .using-ci-base @@ -78,10 +80,20 @@ build: script: - mix compile --force +build-1.15.7-otp-25: + extends: + - .build_changes_policy + - .using-ci-base + stage: build + image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.15 + allow_failure: true + script: + - mix compile --force + spec-build: extends: - .using-ci-base - stage: test + stage: build rules: - changes: - ".gitlab-ci.yml" @@ -101,7 +113,7 @@ benchmark: variables: MIX_ENV: benchmark services: - - name: postgres:9.6-alpine + - name: postgres:11.22-alpine alias: postgres command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] script: @@ -109,7 +121,7 @@ benchmark: - mix ecto.migrate - mix pleroma.load_testing -unit-testing: +unit-testing-1.12.3: extends: - .build_changes_policy - .using-ci-base @@ -117,12 +129,11 @@ unit-testing: cache: &testing_cache_policy <<: *global_cache_policy policy: pull - - services: + services: &testing_services - name: postgres:13-alpine alias: postgres command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - script: + script: &testing_script - mix ecto.create - mix ecto.migrate - mix test --cover --preload-modules @@ -133,65 +144,35 @@ unit-testing: coverage_format: cobertura path: coverage.xml -unit-testing-erratic: +unit-testing-1.15.7-otp-25: extends: - .build_changes_policy - .using-ci-base stage: test - retry: 2 + image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.15-otp25 allow_failure: true - cache: &testing_cache_policy - <<: *global_cache_policy - policy: pull - - services: - - name: postgres:13-alpine - alias: postgres - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - script: - - mix ecto.create - - mix ecto.migrate - - mix test --only=erratic + cache: *testing_cache_policy + services: *testing_services + script: *testing_script -# Removed to fix CI issue. In this early state it wasn't adding much value anyway. -# TODO Fix and reinstate federated testing -# federated-testing: -# stage: test -# cache: *testing_cache_policy -# services: -# - name: minibikini/postgres-with-rum:12 -# alias: postgres -# command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] -# script: -# - mix deps.get -# - mix ecto.create -# - mix ecto.migrate -# - epmd -daemon -# - mix test --trace --only federated - -unit-testing-rum: +unit-testing-1.12-erratic: extends: - .build_changes_policy - .using-ci-base stage: test + retry: 2 + allow_failure: true cache: *testing_cache_policy - services: - - name: minibikini/postgres-with-rum:12 - alias: postgres - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - variables: - <<: *global_variables - RUM_ENABLED: "true" + services: *testing_services script: - mix ecto.create - mix ecto.migrate - - "mix ecto.migrate --migrations-path priv/repo/optional_migrations/rum_indexing/" - - mix test --preload-modules + - mix test --only=erratic -lint: +formatting-1.13: extends: .build_changes_policy - image: &current_elixir elixir:1.12-alpine - stage: test + image: &formatting_elixir elixir:1.13-alpine + stage: lint cache: *testing_cache_policy before_script: &current_bfr_script - apk update @@ -202,24 +183,37 @@ lint: script: - mix format --check-formatted +cycles-1.13: + extends: .build_changes_policy + image: *formatting_elixir + stage: lint + cache: {} + before_script: *current_bfr_script + script: + - mix compile + - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}' + analysis: extends: - .build_changes_policy - .using-ci-base - stage: test + stage: lint cache: *testing_cache_policy script: - mix credo --strict --only=warnings,todo,fixme,consistency,readability -cycles: - extends: .build_changes_policy - image: *current_elixir - stage: test - cache: {} - before_script: *current_bfr_script +dialyzer: + extends: + - .build_changes_policy + - .using-ci-base + stage: lint + allow_failure: true + when: manual + cache: *testing_cache_policy + tags: + - feld script: - - mix compile - - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}' + - mix dialyzer docs-deploy: stage: deploy @@ -319,8 +313,9 @@ amd64: - deps variables: &release-variables MIX_ENV: prod + VIX_COMPILATION_MODE: PLATFORM_PROVIDED_LIBVIPS before_script: &before-release - - apt-get update && apt-get install -y cmake libmagic-dev + - apt-get update && apt-get install -y cmake libmagic-dev libvips-dev erlang-dev - echo "import Config" > config/prod.secret.exs - mix local.hex --force - mix local.rebar --force @@ -341,7 +336,7 @@ amd64-musl: cache: *release-cache variables: *release-variables before_script: &before-release-musl - - apk add git build-base cmake file-dev openssl + - apk add git build-base cmake file-dev openssl vips-dev - echo "import Config" > config/prod.secret.exs - mix local.hex --force - mix local.rebar --force diff --git a/.rgignore b/.rgignore @@ -0,0 +1 @@ +priv/static diff --git a/CHANGELOG.md b/CHANGELOG.md @@ -4,6 +4,22 @@ 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.6.2 + +### Security +- MRF StealEmojiPolicy: Sanitize shortcodes (thanks to Hazel K for the report + +## 2.6.1 +### Changed +- - Document maximum supported version of Erlang & Elixir + +### Added +- [docs] add frontends management documentation + +### Fixed +- TwitterAPI: Return proper error when healthcheck is disabled +- Fix eblurhash and elixir-captcha not using system cflags + ## 2.6.0 ### Security - Preload: Make generated JSON html-safe. It already was html safe because it only consists of config data that is base64 encoded, but this will keep it safe it that ever changes. @@ -51,7 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## 2.5.4 ## Security -- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitary files from the server's filesystem +- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitrary files from the server's filesystem ## 2.5.3 @@ -67,7 +83,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## 2.5.4 ## Security -- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitary files from the server's filesystem +- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitrary files from the server's filesystem ## 2.5.3 @@ -107,7 +123,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix `block_from_stranger` setting - Fix rel="me" - Docker images will now run properly -- Fix inproper content being cached in report content +- Fix improper content being cached in report content - Notification filter on object content will not operate on the ones that inherently have no content - ZWNJ and double dots in links are parsed properly for Plain-text posts - OTP releases will work on systems with a newer libcrypt @@ -773,7 +789,7 @@ switched to a new configuration mechanism, however it was not officially removed - Rate limiter crashes when there is no explicitly specified ip in the config - 500 errors when no `Accept` header is present if Static-FE is enabled - Instance panel not being updated immediately due to wrong `Cache-Control` headers -- Statuses posted with BBCode/Markdown having unncessary newlines in Pleroma-FE +- Statuses posted with BBCode/Markdown having unnecessary newlines in Pleroma-FE - OTP: Fix some settings not being migrated to in-database config properly - No `Cache-Control` headers on attachment/media proxy requests - Character limit enforcement being off by 1 @@ -1093,10 +1109,10 @@ curl -Lo ./bin/pleroma_ctl 'https://git.pleroma.social/pleroma/pleroma/raw/devel - Reverse Proxy limiting `max_body_length` was incorrectly defined and only checked `Content-Length` headers which may not be sufficient in some circumstances ### Added -- Expiring/ephemeral activites. All activities can have expires_at value set, which controls when they should be deleted automatically. +- Expiring/ephemeral activities. All activities can have expires_at value set, which controls when they should be deleted automatically. - Mastodon API: in post_status, the expires_in parameter lets you set the number of seconds until an activity expires. It must be at least one hour. - Mastodon API: all status JSON responses contain a `pleroma.expires_at` item which states when an activity will expire. The value is only shown to the user who created the activity. To everyone else it's empty. -- Configuration: `ActivityExpiration.enabled` controls whether expired activites will get deleted at the appropriate time. Enabled by default. +- Configuration: `ActivityExpiration.enabled` controls whether expired activities will get deleted at the appropriate time. Enabled by default. - Conversations: Add Pleroma-specific conversation endpoints and status posting extensions. Run the `bump_all_conversations` task again to create the necessary data. - MRF: Support for priming the mediaproxy cache (`Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy`) - MRF: Support for excluding specific domains from Transparency. diff --git a/Dockerfile b/Dockerfile @@ -8,8 +8,9 @@ FROM ${ELIXIR_IMG}:${ELIXIR_VER}-erlang-${ERLANG_VER}-alpine-${ALPINE_VER} as bu COPY . . ENV MIX_ENV=prod +ENV VIX_COMPILATION_MODE=PLATFORM_PROVIDED_LIBVIPS -RUN apk add git gcc g++ musl-dev make cmake file-dev &&\ +RUN apk add git gcc g++ musl-dev make cmake file-dev vips-dev &&\ echo "import Config" > config/prod.secret.exs &&\ mix local.hex --force &&\ mix local.rebar --force &&\ @@ -37,7 +38,7 @@ ARG HOME=/opt/pleroma ARG DATA=/var/lib/pleroma RUN apk update &&\ - apk add exiftool ffmpeg imagemagick libmagic ncurses postgresql-client &&\ + apk add exiftool ffmpeg vips libmagic ncurses postgresql-client &&\ adduser --system --shell /bin/false --home ${HOME} pleroma &&\ mkdir -p ${DATA}/uploads &&\ mkdir -p ${DATA}/static &&\ diff --git a/changelog.d/2.6.1-mergeback.skip b/changelog.d/2.6.1-mergeback.skip diff --git a/changelog.d/3987.fix b/changelog.d/3987.fix @@ -0,0 +1 @@ +Remove checking ImageMagick's commands for Pleroma.Upload.Filter.AnalyzeMetadata diff --git a/changelog.d/account-rendering-auth-check.fix b/changelog.d/account-rendering-auth-check.fix @@ -0,0 +1 @@ +Fix authentication check on account rendering when bio is defined diff --git a/changelog.d/add-outbox.fix b/changelog.d/add-outbox.fix @@ -0,0 +1 @@ +ap userview: add outbox field. diff --git a/changelog.d/akkoma-xml-remote-entities.security b/changelog.d/akkoma-xml-remote-entities.security @@ -1 +0,0 @@ -Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitary files from the server's filesystem diff --git a/changelog.d/anonymous-exception-else.fix b/changelog.d/anonymous-exception-else.fix @@ -0,0 +1 @@ +Fix #strip_report_status_data diff --git a/changelog.d/api-docs.skip b/changelog.d/api-docs.skip diff --git a/changelog.d/atom-leak.skip b/changelog.d/atom-leak.skip diff --git a/changelog.d/authorize-interaction.add b/changelog.d/authorize-interaction.add @@ -0,0 +1 @@ +Support /authorize-interaction route used by Mastodon +\ No newline at end of file diff --git a/changelog.d/backups-follows.add b/changelog.d/backups-follows.add @@ -0,0 +1 @@ +Include following/followers in backups +\ No newline at end of file diff --git a/changelog.d/bad_inbox_request.change b/changelog.d/bad_inbox_request.change @@ -0,0 +1 @@ +Invalid activities delivered to the inbox will be rejected with a 400 Bad Request diff --git a/changelog.d/bandit.change b/changelog.d/bandit.change @@ -0,0 +1 @@ +Support Bandit as an alternative to Cowboy for the HTTP server. diff --git a/changelog.d/blurhash.change b/changelog.d/blurhash.change @@ -0,0 +1 @@ +Replace eblurhash with rinpatch_blurhash. This also removes a dependency on ImageMagick. diff --git a/changelog.d/bookmark-folders.add b/changelog.d/bookmark-folders.add @@ -0,0 +1 @@ +Allow to group bookmarks in folders +\ No newline at end of file diff --git a/changelog.d/bookmark-folders.skip b/changelog.d/bookmark-folders.skip diff --git a/changelog.d/bugfix-ccworks.fix b/changelog.d/bugfix-ccworks.fix @@ -0,0 +1 @@ +Fix federation with Convergence AP Bridge +\ No newline at end of file diff --git a/changelog.d/build-release-with-local-libvips.skip b/changelog.d/build-release-with-local-libvips.skip diff --git a/changelog.d/card-endpoint.remove b/changelog.d/card-endpoint.remove @@ -0,0 +1 @@ +Mastodon API: Remove deprecated GET /api/v1/statuses/:id/card endpoint https://github.com/mastodon/mastodon/pull/11213 diff --git a/changelog.d/card-image-description.add b/changelog.d/card-image-description.add @@ -0,0 +1 @@ +Include image description in status media cards +\ No newline at end of file diff --git a/changelog.d/chat-attachment-empty-array.fix b/changelog.d/chat-attachment-empty-array.fix @@ -0,0 +1 @@ +ChatMessage: Tolerate attachment field set to an empty array diff --git a/changelog.d/check-attachment-attribution.security b/changelog.d/check-attachment-attribution.security @@ -1 +0,0 @@ -CommonAPI: Prevent users from accessing media of other users by creating a status with reused attachment ID diff --git a/changelog.d/config-stat-symlink.fix b/changelog.d/config-stat-symlink.fix @@ -0,0 +1 @@ +- Config: Check the permissions of the linked file instead of the symlink diff --git a/changelog.d/content-length.fix b/changelog.d/content-length.fix @@ -0,0 +1 @@ +MediaProxy was setting the content-length header which is not permitted by RFC9112§6.2 when we are chunking the reply as it conflicts with the existence of the transfer-encoding header. diff --git a/changelog.d/deprecations.skip b/changelog.d/deprecations.skip @@ -0,0 +1 @@ + diff --git a/changelog.d/deprecations2.skip b/changelog.d/deprecations2.skip diff --git a/changelog.d/deps-bump-2024-01-25.skip b/changelog.d/deps-bump-2024-01-25.skip diff --git a/changelog.d/description-meilisearch-type.skip b/changelog.d/description-meilisearch-type.skip diff --git a/changelog.d/dialyzer.skip b/changelog.d/dialyzer.skip diff --git a/changelog.d/dialyzer2.skip b/changelog.d/dialyzer2.skip diff --git a/changelog.d/dialyzer3.skip b/changelog.d/dialyzer3.skip diff --git a/changelog.d/dialyzer4.skip b/changelog.d/dialyzer4.skip diff --git a/changelog.d/doc-fix.skip b/changelog.d/doc-fix.skip diff --git a/changelog.d/emoji-download-paginate.fix b/changelog.d/emoji-download-paginate.fix @@ -0,0 +1 @@ +When downloading remote emojis packs, account for pagination +\ No newline at end of file diff --git a/changelog.d/emoji-pack-sanitization.security b/changelog.d/emoji-pack-sanitization.security @@ -1 +0,0 @@ -Emoji pack loader sanitizes pack names diff --git a/changelog.d/emoji-use-v1.fix b/changelog.d/emoji-use-v1.fix @@ -0,0 +1 @@ +Make remote emoji packs API use specifically the V1 URL. Akkoma does not understand it without V1, and it works either way with normal pleroma, so no reason to not do this +\ No newline at end of file diff --git a/changelog.d/exile-bsds.skip b/changelog.d/exile-bsds.skip diff --git a/changelog.d/exile-freebsd.skip b/changelog.d/exile-freebsd.skip diff --git a/changelog.d/exile-macos.skip b/changelog.d/exile-macos.skip diff --git a/changelog.d/exile.skip b/changelog.d/exile.skip diff --git a/changelog.d/familiar-followers.add b/changelog.d/familiar-followers.add @@ -0,0 +1 @@ +Implement `/api/v1/accounts/familiar_followers` +\ No newline at end of file diff --git a/changelog.d/favicon.add b/changelog.d/favicon.add @@ -0,0 +1 @@ +Add support for configuring favicon, embed favicon and PWA manifest in server-generated meta diff --git a/changelog.d/federator-modules.remove b/changelog.d/federator-modules.remove @@ -0,0 +1 @@ +Removed support for multiple federator modules as we only support ActivityPub diff --git a/changelog.d/federator.skip b/changelog.d/federator.skip diff --git a/changelog.d/fep-2c59.add b/changelog.d/fep-2c59.add @@ -0,0 +1 @@ +Implement FEP-2c59, add "webfinger" to user actor +\ No newline at end of file diff --git a/changelog.d/ffmpeg-limiter.add b/changelog.d/ffmpeg-limiter.add @@ -0,0 +1 @@ +Framegrabs with ffmpeg will execute with a 5 second timeout and cache the URLs of failures with a TTL of 15 minutes to prevent excessive retries. diff --git a/changelog.d/finch_redirects.fix b/changelog.d/finch_redirects.fix @@ -0,0 +1 @@ +Following HTTP Redirects when the HTTP Adapter is Finch diff --git a/changelog.d/fix-bookmark-folder-tests.skip b/changelog.d/fix-bookmark-folder-tests.skip diff --git a/changelog.d/fix-dockerfile.skip b/changelog.d/fix-dockerfile.skip diff --git a/changelog.d/fix-duplicate-inbox-deliveries.fix b/changelog.d/fix-duplicate-inbox-deliveries.fix diff --git a/changelog.d/fix-otp-comparison.skip b/changelog.d/fix-otp-comparison.skip diff --git a/changelog.d/fix-tests.skip b/changelog.d/fix-tests.skip diff --git a/changelog.d/force-mention-mrf.add b/changelog.d/force-mention-mrf.add @@ -0,0 +1 @@ +Add ForceMention MRF +\ No newline at end of file diff --git a/changelog.d/framegrabs.fix b/changelog.d/framegrabs.fix @@ -0,0 +1 @@ +Video framegrabs were not working correctly after the change to use Exile to execute ffmpeg diff --git a/changelog.d/frontend-management.add b/changelog.d/frontend-management.add @@ -0,0 +1 @@ +[docs] add frontends management documentation diff --git a/changelog.d/generate-unset-user-keys-migration.skip b/changelog.d/generate-unset-user-keys-migration.skip diff --git a/changelog.d/group-actor.add b/changelog.d/group-actor.add @@ -0,0 +1 @@ +Implement group actors diff --git a/changelog.d/gun-logs.skip b/changelog.d/gun-logs.skip diff --git a/changelog.d/gun_pool.fix b/changelog.d/gun_pool.fix @@ -0,0 +1 @@ +Fix logic error in Gun connection pooling which prevented retries even when the worker was launched with retry = true diff --git a/changelog.d/gun_pool2.fix b/changelog.d/gun_pool2.fix @@ -0,0 +1 @@ +Connection pool errors when publishing an activity is a soft-error that will be retried shortly. diff --git a/changelog.d/gun_pool3.skip b/changelog.d/gun_pool3.skip diff --git a/changelog.d/handle_object_fetch_failures.change b/changelog.d/handle_object_fetch_failures.change @@ -0,0 +1 @@ +Remote object fetch failures will prevent the object fetch job from retrying if the object request returns 401, 403, 404, 410, or exceeds the maximum thread depth. diff --git a/changelog.d/instance-contact-account.add b/changelog.d/instance-contact-account.add @@ -0,0 +1 @@ +Add contact account to InstanceView +\ No newline at end of file diff --git a/changelog.d/instance-defdelegates.skip b/changelog.d/instance-defdelegates.skip diff --git a/changelog.d/instance-rules.add b/changelog.d/instance-rules.add @@ -0,0 +1 @@ +Add instance rules +\ No newline at end of file diff --git a/changelog.d/instance-v2.add b/changelog.d/instance-v2.add @@ -0,0 +1 @@ +Implement /api/v2/instance route +\ No newline at end of file diff --git a/changelog.d/instance-v2.skip b/changelog.d/instance-v2.skip diff --git a/changelog.d/issue-3241.fix b/changelog.d/issue-3241.fix @@ -0,0 +1 @@ +Handle cases when users.inbox is nil. diff --git a/changelog.d/last_status_at.change b/changelog.d/last_status_at.change @@ -0,0 +1 @@ +- Change AccountView `last_status_at` from a datetime to a date (as done in Mastodon 3.1.0) +\ No newline at end of file diff --git a/changelog.d/link-verification.add b/changelog.d/link-verification.add @@ -0,0 +1 @@ +Verify profile link ownership with rel="me" +\ No newline at end of file diff --git a/changelog.d/loading-order-test-fix.skip b/changelog.d/loading-order-test-fix.skip diff --git a/changelog.d/local-webfinger.fix b/changelog.d/local-webfinger.fix @@ -0,0 +1 @@ +Use correct domain for fqn and InstanceView +\ No newline at end of file diff --git a/changelog.d/mark-read.fix b/changelog.d/mark-read.fix @@ -0,0 +1 @@ +The query for marking notifications as read has been simplified diff --git a/changelog.d/mastodon_api_v2.add b/changelog.d/mastodon_api_v2.add @@ -0,0 +1 @@ +Add new parameters to /api/v2/instance: configuration[accounts][max_pinned_statuses] and configuration[statuses][characters_reserved_per_url] diff --git a/changelog.d/mastodon_directory.fix b/changelog.d/mastodon_directory.fix @@ -0,0 +1 @@ +Mastodon API /api/v1/directory: Fix listing directory contents when not authenticated diff --git a/changelog.d/memleak.fix b/changelog.d/memleak.fix @@ -0,0 +1 @@ +Fix a memory leak caused by Websocket connections that would not enter a state where a full garbage collection run could be triggered. diff --git a/changelog.d/mergeback-2.6.2.skip b/changelog.d/mergeback-2.6.2.skip diff --git a/changelog.d/migration-fix.skip b/changelog.d/migration-fix.skip @@ -0,0 +1 @@ + diff --git a/changelog.d/missing-mrfs.add b/changelog.d/missing-mrfs.add @@ -0,0 +1 @@ +Startup detection for configured MRF modules that are missing or incorrectly defined diff --git a/changelog.d/mrf-regex-error.fix b/changelog.d/mrf-regex-error.fix @@ -0,0 +1 @@ +MRF: Log sensible error for subdomains_regex diff --git a/changelog.d/mrf-steal-emoji-extname.fix b/changelog.d/mrf-steal-emoji-extname.fix @@ -0,0 +1 @@ +MRF.StealEmojiPolicy: Properly add fallback extension to filenames missing one diff --git a/changelog.d/mrf_hashtags.fix b/changelog.d/mrf_hashtags.fix @@ -0,0 +1 @@ +Federated timeline removal of hashtags via MRF HashtagPolicy diff --git a/changelog.d/nil-content-map.fix b/changelog.d/nil-content-map.fix @@ -0,0 +1 @@ +Support objects with a null contentMap (firefish) diff --git a/changelog.d/no-async-with-clear-config.skip b/changelog.d/no-async-with-clear-config.skip diff --git a/changelog.d/notifications-index.fix b/changelog.d/notifications-index.fix @@ -0,0 +1 @@ +Fix notifications query which was not using the index properly diff --git a/changelog.d/notifications.fix b/changelog.d/notifications.fix @@ -0,0 +1 @@ +Notifications: improve performance by filtering on users table instead of activities table +\ No newline at end of file diff --git a/changelog.d/oauth-nickname.skip b/changelog.d/oauth-nickname.skip @@ -0,0 +1 @@ +Use User.full_nickname/1 in oauth html template +\ No newline at end of file diff --git a/changelog.d/opengraph-rich-media-proxy.add b/changelog.d/opengraph-rich-media-proxy.add @@ -0,0 +1 @@ +Add media proxy to opengraph rich media cards diff --git a/changelog.d/optimistic-inbox.change b/changelog.d/optimistic-inbox.change @@ -0,0 +1 @@ +Optimistic Inbox reduces the processing overhead of incoming activities without instantly verifiable signatures. diff --git a/changelog.d/otp26.add b/changelog.d/otp26.add @@ -0,0 +1 @@ +Support for Erlang OTP 26 diff --git a/changelog.d/otp_perms.security b/changelog.d/otp_perms.security @@ -1 +0,0 @@ -- Reduced permissions of config files and directories, distros requiring greater permissions like group-read need to pre-create the directories -\ No newline at end of file diff --git a/changelog.d/postgres-jit.change b/changelog.d/postgres-jit.change @@ -0,0 +1 @@ +Disable jit by default for PostgreSQL diff --git a/changelog.d/prioritize-direct-recipients.add b/changelog.d/prioritize-direct-recipients.add @@ -0,0 +1 @@ +- Prioritize mentioned recipients (i.e., those that are not just followers) when federating. diff --git a/changelog.d/promex.change b/changelog.d/promex.change @@ -0,0 +1 @@ +Change the prometheus library to PromEx. diff --git a/changelog.d/public-polls.add b/changelog.d/public-polls.add @@ -0,0 +1 @@ +Expose nonAnonymous field from Smithereen polls +\ No newline at end of file diff --git a/changelog.d/publisher_discard.change b/changelog.d/publisher_discard.change @@ -0,0 +1 @@ +Activity publishing failures will prevent the job from retrying if the publishing request returns a 403 or 410 diff --git a/changelog.d/publisher_log.change b/changelog.d/publisher_log.change @@ -0,0 +1 @@ +Publisher errors will now emit logs indicating the inbox that was not available for delivery. diff --git a/changelog.d/qtfaststart.fix b/changelog.d/qtfaststart.fix @@ -0,0 +1 @@ +MediaProxy Preview failures prevented when encountering certain video files diff --git a/changelog.d/reachability.change b/changelog.d/reachability.change @@ -0,0 +1 @@ +Reduce the reachability timestamp update to a single upsert query diff --git a/changelog.d/receiverworker-error-handling.fix b/changelog.d/receiverworker-error-handling.fix @@ -0,0 +1 @@ +ReceiverWorker: Make sure non-{:ok, _} is returned as {:error, …} +\ No newline at end of file diff --git a/changelog.d/remote-fetcher-error.skip b/changelog.d/remote-fetcher-error.skip diff --git a/changelog.d/rich_media.fix b/changelog.d/rich_media.fix @@ -0,0 +1 @@ +Rich Media Preview cache eviction when the activity is updated. diff --git a/changelog.d/rich_media_refactor.change b/changelog.d/rich_media_refactor.change @@ -0,0 +1 @@ +Refactored Rich Media to cache the content in the database. Fetching operations that could block status rendering have been eliminated. diff --git a/changelog.d/rich_media_tests.skip b/changelog.d/rich_media_tests.skip diff --git a/changelog.d/scrobble-url.add b/changelog.d/scrobble-url.add @@ -0,0 +1 @@ +Adds the capability to add a URL to a scrobble (optional field) diff --git a/changelog.d/tesla.deps b/changelog.d/tesla.deps @@ -0,0 +1 @@ +Update Tesla HTTP client middleware to 1.8.0 diff --git a/changelog.d/test-improvements.skip b/changelog.d/test-improvements.skip diff --git a/changelog.d/testsecrets.skip b/changelog.d/testsecrets.skip diff --git a/changelog.d/transient-validators-defaults.change b/changelog.d/transient-validators-defaults.change @@ -0,0 +1 @@ +Set default values on validators for transient objects (attachment, poll options) diff --git a/changelog.d/typo.skip b/changelog.d/typo.skip diff --git a/changelog.d/vips.change b/changelog.d/vips.change @@ -0,0 +1 @@ +Change mediaproxy previews to use vips to generate thumbnails instead of ImageMagick diff --git a/changelog.d/web_push.fix b/changelog.d/web_push.fix @@ -0,0 +1 @@ +Fix web push notifications not successfully delivering diff --git a/changelog.d/web_push_filtered.fix b/changelog.d/web_push_filtered.fix @@ -0,0 +1 @@ +Web Push notifications are no longer generated for muted/blocked threads and users. diff --git a/changelog.d/websocket-refactor.change b/changelog.d/websocket-refactor.change @@ -0,0 +1 @@ +Refactor the Mastodon /api/v1/streaming websocket handler to use Phoenix.Socket.Transport diff --git a/ci/build_and_push.sh b/ci/build_and_push.sh @@ -1 +0,0 @@ -docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t git.pleroma.social:5050/pleroma/pleroma/ci-base:latest --push . diff --git a/ci/Dockerfile b/ci/elixir-1.12/Dockerfile diff --git a/ci/elixir-1.12/build_and_push.sh b/ci/elixir-1.12/build_and_push.sh @@ -0,0 +1 @@ +docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.12 --push . diff --git a/ci/elixir-1.15-otp25/Dockerfile b/ci/elixir-1.15-otp25/Dockerfile @@ -0,0 +1,8 @@ +FROM elixir:1.15.7-otp-25 + +# Single RUN statement, otherwise intermediate images are created +# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run +RUN apt-get update &&\ + apt-get install -y libmagic-dev cmake libimage-exiftool-perl ffmpeg &&\ + mix local.hex --force &&\ + mix local.rebar --force diff --git a/ci/elixir-1.15-otp25/build_and_push.sh b/ci/elixir-1.15-otp25/build_and_push.sh @@ -0,0 +1 @@ +docker buildx build --platform linux/amd64 -t git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.15-otp25 --push . diff --git a/ci/postgres-with-rum-13/Dockerfile b/ci/postgres-with-rum-13/Dockerfile @@ -0,0 +1,3 @@ +FROM postgres:13-bullseye + +RUN apt-get update && apt-get install -y postgresql-13-rum/bullseye-pgdg diff --git a/ci/postgres-with-rum-13/build_and_push.sh b/ci/postgres-with-rum-13/build_and_push.sh @@ -0,0 +1 @@ +docker buildx build --platform linux/amd64,linux/arm64 -t git.pleroma.social:5050/pleroma/pleroma/postgres-with-rum-13:latest --push . diff --git a/config/benchmark.exs b/config/benchmark.exs @@ -14,7 +14,7 @@ config :pleroma, Pleroma.Captcha, method: Pleroma.Captcha.Mock # Print only warnings and errors during test -config :logger, level: :warn +config :logger, level: :warning config :pleroma, :auth, oauth_consumer_strategies: [] @@ -79,6 +79,10 @@ IO.puts("RUM enabled: #{rum_enabled}") config :pleroma, Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.ClientMock +config :pleroma, Pleroma.Application, + background_migrators: false, + streamer_registry: false + if File.exists?("./config/benchmark.secret.exs") do import_config "benchmark.secret.exs" else diff --git a/config/config.exs b/config/config.exs @@ -114,14 +114,7 @@ config :pleroma, :uri_schemes, config :pleroma, Pleroma.Web.Endpoint, url: [host: "localhost"], http: [ - ip: {127, 0, 0, 1}, - dispatch: [ - {:_, - [ - {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []}, - {:_, Plug.Cowboy.Handler, {Pleroma.Web.Endpoint, []}} - ]} - ] + ip: {127, 0, 0, 1} ], protocol: "https", secret_key_base: "aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl", @@ -171,6 +164,7 @@ config :pleroma, :instance, short_description: "", background_image: "/images/city.jpg", instance_thumbnail: "/instance/thumbnail.jpeg", + favicon: "/favicon.png", limit: 5_000, description_limit: 5_000, remote_limit: 100_000, @@ -191,9 +185,6 @@ config :pleroma, :instance, federating: true, federation_incoming_replies_max_depth: 100, federation_reachability_timeout_days: 7, - federation_publisher_modules: [ - Pleroma.Web.ActivityPub.Publisher - ], allow_relay: true, public: true, quarantined_instances: [], @@ -346,6 +337,8 @@ config :pleroma, :manifest, icons: [ %{ src: "/static/logo.svg", + sizes: "144x144", + purpose: "any", type: "image/svg+xml" } ], @@ -422,6 +415,10 @@ config :pleroma, :mrf_follow_bot, follower_nickname: nil config :pleroma, :mrf_inline_quote, template: "<bdi>RT:</bdi> {url}" +config :pleroma, :mrf_force_mention, + mention_parent: true, + mention_quoted: true + config :pleroma, :rich_media, enabled: true, ignore_hosts: [], @@ -431,7 +428,11 @@ config :pleroma, :rich_media, Pleroma.Web.RichMedia.Parsers.OEmbed ], failure_backoff: 60_000, - ttl_setters: [Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl] + ttl_setters: [ + Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl, + Pleroma.Web.RichMedia.Parser.TTL.Opengraph + ], + max_body: 5_000_000 config :pleroma, :media_proxy, enabled: false, @@ -578,7 +579,8 @@ config :pleroma, Oban, attachments_cleanup: 1, new_users_digest: 1, mute_expire: 5, - search_indexing: 10 + search_indexing: 10, + rich_media_expiration: 2 ], plugins: [Oban.Plugins.Pruner], crontab: [ @@ -648,12 +650,26 @@ config :pleroma, Pleroma.Emails.UserEmail, config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, - enabled: false, - auth: false, - ip_whitelist: [], - path: "/api/pleroma/app_metrics", - format: :text +config :pleroma, Pleroma.PromEx, + disabled: false, + manual_metrics_start_delay: :no_delay, + drop_metrics_groups: [], + grafana: [ + host: System.get_env("GRAFANA_HOST", "http://localhost:3000"), + auth_token: System.get_env("GRAFANA_TOKEN"), + upload_dashboards_on_start: false, + folder_name: "BEAM", + annotate_app_lifecycle: true + ], + metrics_server: [ + port: 4021, + path: "/metrics", + protocol: :http, + pool_size: 5, + cowboy_opts: [], + auth_strategy: :none + ], + datasource: "Prometheus" config :pleroma, Pleroma.ScheduledActivity, daily_user_limit: 25, @@ -788,7 +804,7 @@ config :pleroma, :modules, runtime_dir: "instance/modules" config :pleroma, configurable_from_database: false config :pleroma, Pleroma.Repo, - parameters: [gin_fuzzy_search_limit: "500"], + parameters: [gin_fuzzy_search_limit: "500", jit: "off"], prepare: :unnamed config :pleroma, :connections_pool, @@ -890,6 +906,15 @@ config :pleroma, Pleroma.Search.Meilisearch, private_key: nil, initial_indexing_chunk_size: 100_000 +config :pleroma, Pleroma.Application, + background_migrators: true, + internal_fetch: true, + load_custom_modules: true, + max_restarts: 3, + streamer_registry: true + +config :pleroma, Pleroma.Uploaders.Uploader, timeout: 30_000 + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/config/description.exs b/config/description.exs @@ -567,6 +567,20 @@ config :pleroma, :config_description, [ ] }, %{ + key: :status_page, + type: :string, + description: "A page where people can see the status of the server during an outage", + suggestions: [ + "https://status.pleroma.example.org" + ] + }, + %{ + key: :contact_username, + type: :string, + description: "Instance owner username", + suggestions: ["admin"] + }, + %{ key: :limit, type: :integer, description: "Posts character limit (CW/Subject included in the counter)", @@ -988,6 +1002,12 @@ config :pleroma, :config_description, [ suggestions: ["/instance/thumbnail.jpeg"] }, %{ + key: :favicon, + type: {:string, :image}, + description: "Favicon of the instance", + suggestions: ["/favicon.png"] + }, + %{ key: :show_reactions, type: :boolean, description: "Let favourites and emoji reactions be viewed through the API." @@ -1181,7 +1201,7 @@ config :pleroma, :config_description, [ type: [:atom, :tuple, :module], description: "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.", - suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger] + suggestions: [:console, {ExSyslogger, :ex_syslogger}] } ] }, @@ -1196,7 +1216,7 @@ config :pleroma, :config_description, [ key: :level, type: {:dropdown, :atom}, description: "Log level", - suggestions: [:debug, :info, :warn, :error] + suggestions: [:debug, :info, :warning, :error] }, %{ key: :ident, @@ -1229,7 +1249,7 @@ config :pleroma, :config_description, [ key: :level, type: {:dropdown, :atom}, description: "Log level", - suggestions: [:debug, :info, :warn, :error] + suggestions: [:debug, :info, :warning, :error] }, %{ key: :format, @@ -1438,7 +1458,7 @@ config :pleroma, :config_description, [ label: "Subject line behavior", type: :string, description: "Allows changing the default behaviour of subject lines in replies. - `email`: copy and preprend re:, as in email, + `email`: copy and prepend re:, as in email, `masto`: copy verbatim, as in Mastodon, `noop`: don't copy the subject.", suggestions: ["email", "masto", "noop"] @@ -1937,7 +1957,7 @@ config :pleroma, :config_description, [ key: :log, type: {:dropdown, :atom}, description: "Logs verbose mode", - suggestions: [false, :error, :warn, :info, :debug] + suggestions: [false, :error, :warning, :info, :debug] }, %{ key: :queues, @@ -3096,7 +3116,7 @@ config :pleroma, :config_description, [ key: :max_waiting, type: :integer, description: - "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made", + "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errors when a new request is made", suggestions: [10] }, %{ @@ -3362,7 +3382,7 @@ config :pleroma, :config_description, [ %{ key: :purge_after_days, type: :integer, - description: "Remove backup achives after N days", + description: "Remove backup archives after N days", suggestions: [30] }, %{ @@ -3508,7 +3528,7 @@ config :pleroma, :config_description, [ }, %{ key: :initial_indexing_chunk_size, - type: :int, + type: :integer, description: "Amount of posts in a batch when running the initial indexing operation. Should probably not be more than 100000" <> " since there's a limit on maximum insert size", diff --git a/config/dev.exs b/config/dev.exs @@ -8,8 +8,7 @@ import Config # with brunch.io to recompile .js and .css sources. config :pleroma, Pleroma.Web.Endpoint, http: [ - port: 4000, - protocol_options: [max_request_line_length: 8192, max_header_value_length: 8192] + port: 4000 ], protocol: "http", debug_errors: true, diff --git a/config/test.exs b/config/test.exs @@ -16,7 +16,7 @@ config :pleroma, Pleroma.Captcha, # Print only warnings and errors during test config :logger, :console, - level: :warn, + level: :warning, format: "\n[$level] $message\n" config :pleroma, :auth, oauth_consumer_strategies: [] @@ -49,7 +49,7 @@ config :pleroma, Pleroma.Repo, hostname: System.get_env("DB_HOST") || "localhost", port: System.get_env("DB_PORT") || "5432", pool: Ecto.Adapters.SQL.Sandbox, - pool_size: 50 + pool_size: System.schedulers_online() * 2 config :pleroma, :dangerzone, override_repo_pool_size: true @@ -61,7 +61,8 @@ config :tesla, adapter: Tesla.Mock config :pleroma, :rich_media, enabled: false, ignore_hosts: [], - ignore_tld: ["local", "localdomain", "lan"] + ignore_tld: ["local", "localdomain", "lan"], + max_body: 2_000_000 config :pleroma, :instance, multi_factor_authentication: [ @@ -143,6 +144,39 @@ config :phoenix, :plug_init_mode, :runtime config :pleroma, :config_impl, Pleroma.UnstubbedConfigMock +config :pleroma, Pleroma.PromEx, disabled: true + +# Mox definitions. Only read during compile time. +config :pleroma, Pleroma.User.Backup, config_impl: Pleroma.UnstubbedConfigMock +config :pleroma, Pleroma.Uploaders.S3, ex_aws_impl: Pleroma.Uploaders.S3.ExAwsMock +config :pleroma, Pleroma.Uploaders.S3, config_impl: Pleroma.UnstubbedConfigMock +config :pleroma, Pleroma.Upload, config_impl: Pleroma.UnstubbedConfigMock +config :pleroma, Pleroma.ScheduledActivity, config_impl: Pleroma.UnstubbedConfigMock +config :pleroma, Pleroma.Web.RichMedia.Helpers, config_impl: Pleroma.StaticStubbedConfigMock + +peer_module = + if String.to_integer(System.otp_release()) >= 25 do + :peer + else + :slave + end + +config :pleroma, Pleroma.Cluster, peer_module: peer_module + +config :pleroma, Pleroma.Application, + background_migrators: false, + internal_fetch: false, + load_custom_modules: false, + max_restarts: 100, + streamer_registry: false, + test_http_pools: true + +config :pleroma, Pleroma.Uploaders.Uploader, timeout: 1_000 + +config :pleroma, Pleroma.Emoji.Loader, test_emoji: true + +config :pleroma, Pleroma.Web.RichMedia.Backfill, provider: Pleroma.Web.RichMedia.Backfill + if File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" else diff --git a/docs/administration/CLI_tasks/config.md b/docs/administration/CLI_tasks/config.md @@ -1,4 +1,4 @@ -# Transfering the config to/from the database +# Transferring the config to/from the database {! backend/administration/CLI_tasks/general_cli_task_info.include !} @@ -34,7 +34,7 @@ Options: -- `<path>` - where to save migrated config. E.g. `--path=/tmp`. If file saved into non standart folder, you must manually copy file into directory where Pleroma can read it. For OTP install path will be `PLEROMA_CONFIG_PATH` or `/etc/pleroma`. For installation from source - `config` directory in the pleroma folder. +- `<path>` - where to save migrated config. E.g. `--path=/tmp`. If file saved into non-standard folder, you must manually copy file into directory where Pleroma can read it. For OTP install path will be `PLEROMA_CONFIG_PATH` or `/etc/pleroma`. For installation from source - `config` directory in the pleroma folder. - `<env>` - environment, for which is migrated config. By default is `prod`. - To delete transferred settings from database optional flag `-d` can be used diff --git a/docs/administration/backup.md b/docs/administration/backup.md @@ -31,7 +31,7 @@ 1. Optionally you can remove the users of your instance. This will trigger delete requests for their accounts and posts. Note that this is 'best effort' and doesn't mean that all traces of your instance will be gone from the fediverse. * You can do this from the admin-FE where you can select all local users and delete the accounts using the *Moderate multiple users* dropdown. - * You can also list local users and delete them individualy using the CLI tasks for [Managing users](./CLI_tasks/user.md). + * You can also list local users and delete them individually using the CLI tasks for [Managing users](./CLI_tasks/user.md). 2. Stop the Pleroma service `systemctl stop pleroma` 3. Disable pleroma from systemd `systemctl disable pleroma` 4. Remove the files and folders you created during installation (see installation guide). This includes the pleroma, nginx and systemd files and folders. diff --git a/docs/administration/frontends-management.md b/docs/administration/frontends-management.md @@ -0,0 +1,71 @@ +# Managing installed frontends + +Pleroma lets you install multiple frontends including multiple versions of same frontend. Right now it's only possible to switch which frontend is the default, but in the future it would be possible for user to select which frontend they prefer to use. + +As of 2.6.0 there are two ways of managing frontends - through PleromaFE's Admin Dashboard (preferred, easier method) or through AdminFE (clunky but also works on versions older than 2.6.0). + +!!! note + Managing frontends through UI requires [in-database configuration](../configuration/howto_database_config.md) to be enabled (default on newer instances but might be off on older ones). + +## How it works + +When installing frontends, it creates a folder in [static directory](../configuration/static_dir.md) that follows this pattern: `/frontends/${front-end name}/${front-end version}/`, puts contents of the built frontend in there. Then when accessing the server backend checks what front-end name and version are set to be default and serves index.html and assets from appropriate path. + +!!! warning + + If you've been putting your frontend build directly into static dir as an antiquated way of serving custom frontend, this system will not work and will still serve the custom index.html you put in there. You can still serve custom frontend builds if you put your build into `/frontends/$name/$version` instead and set the "default frontend" fields appropriately. + +Currently, there is no backup system, i.e. when installing `master` version it _will_ overwrite installed `master` version, for now if you want to keep previous version you should back it up manually, i.e. running `cp -r ./frontends/pleroma-fe/master ./frontends/pleroma-fe/master_old` in your static dir. + +## Managing front-ends through Admin Dashboard + +Open up Admin Dashboard (gauge icon in top bar, same as where link to AdminFE was),__ +![location of Admin Dashboard icon](../assets/admin_dash_location.png) +switch to "Front-ends" tab. +![screenshot of Front-ends tab](../assets/frontends_tab.png) +This page is designed to be self-explanatory and easy to use, while avoiding issues and pitfalls of AdminFE, but it's also early in development, everything is subject to change. + +!!! warning + This goes without saying, but if you set default frontend to anything except >2.6.0 version of PleromaFE you'll lose the access to Admin Dashboard and will have to use AdminFE to get it back. See below on how to use AdminFE. + +### Limitations + +Currently the list of available for install frontends is essentially hard-coded in backend's configuration, each providing only one version, with exception for PleromaFE which overrides 'pleroma-fe' to also include `develop` version. There is no way to manually install build with a URL (coming soon) nor add more available frontends to the repository (it's broken). + +There is also no way to tell if there is an update available or not, for now you should watch for [announcements](https://pleroma.social/announcements/) of new PleromaFE stable releases to see if there is new stable version. For `develop` version it's up to you whether you want to follow the development process or just reinstall it periodically hoping for new stuff. + +## Using AdminFE to manage frontends + +Access AdminFE either directly by going to `/pleroma/admin` of your instance or by opening Admin Dashboard and clicking the link at the bottom of the window +![link to open old AdminFE](../assets/old_adminfe_link.png) + + +Go to Settings -> Frontend. + +### Installing front-ends + +At the very top of the page there's a list of available frontends and button to install custom front-end + +!!! tip + Remember to click "Submit" in bottom right corner to save your changes! + +!!! bug + **Available Frontends** section lets you _install_ frontends but **NOT** update/reinstall them. It's only useful for installing a frontend once. + +Due to aforementioned bug, preferred way of installing frontends in AdminFE is by clicking the "Install another frontend" +![screenshot of admin-fe with instructions on how to install a frontend](../assets/way_to_install_frontends.png) +and filling in the fields. Unfortunately AdminFE does not provide the raw data necessary for you to fill those fields, so your best bet is to see what backend returns in browser's devtools or refer to the [source code](https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs?ref_type=heads#L742-791). For the most part, only **Name**, **Ref** (i.e. version) and **Build URL** fields are required, although some frontends might also require **Build Directory** to work. + +For pleroma-fe you can use either `master` or `develop` refs, or potentially any ref in GitLab that has artifacts for `build` job, but that's outside scope of this document. + +### Selecting default frontend + +Scroll page waaaaay down, search for "Frontends" section, subtitled "Installed frontends management", change the name and reference of the "Primary" frontend. +![screenshot of admin-fe with instructions on how to install a frontend](../assets/primary_frontend_section.png) + + +!!! danger + If you change "Admin" frontend name/reference you risk losing access to AdminFE as well. + +!!! warning + Don't put anything into the "Available" section as it will break the list of available frontends completely, including the "add another frontend" button. If you accidentally put something in there, click the trashbin icon next to "Available" to reset it and restore the frontends list. diff --git a/docs/assets/admin_dash_location.png b/docs/assets/admin_dash_location.png Binary files differ. diff --git a/docs/assets/frontends_tab.png b/docs/assets/frontends_tab.png Binary files differ. diff --git a/docs/assets/old_adminfe_link.png b/docs/assets/old_adminfe_link.png Binary files differ. diff --git a/docs/assets/primary_frontend_section.png b/docs/assets/primary_frontend_section.png Binary files differ. diff --git a/docs/assets/way_to_install_frontends.png b/docs/assets/way_to_install_frontends.png Binary files differ. diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md @@ -154,14 +154,15 @@ To add configuration to your config file, you can copy it from the base config. * `Pleroma.Web.ActivityPub.MRF.MentionPolicy`: Drops posts mentioning configurable users. (See [`:mrf_mention`](#mrf_mention)). * `Pleroma.Web.ActivityPub.MRF.VocabularyPolicy`: Restricts activities to a configured set of vocabulary. (See [`:mrf_vocabulary`](#mrf_vocabulary)). * `Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy`: Rejects or delists posts based on their age when received. (See [`:mrf_object_age`](#mrf_object_age)). - * `Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy`: Sets a default expiration on all posts made by users of the local instance. Requires `Pleroma.Workers.PurgeExpiredActivity` to be enabled for processing the scheduled delections. + * `Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy`: Sets a default expiration on all posts made by users of the local instance. Requires `Pleroma.Workers.PurgeExpiredActivity` to be enabled for processing the scheduled deletions. * `Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy`: Makes all bot posts to disappear from public timelines. * `Pleroma.Web.ActivityPub.MRF.FollowBotPolicy`: Automatically follows newly discovered users from the specified bot account. Local accounts, locked accounts, and users with "#nobot" in their bio are respected and excluded from being followed. * `Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy`: Drops follow requests from followbots. Users can still allow bots to follow them by first following the bot. * `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)). * `Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent`: Forces every mentioned user to be reflected in the post content. * `Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy`: Forces quote post URLs to be reflected in the message content inline. - * `Pleroma.Web.ActivityPub.MRF.QuoteToLinkTagPolicy`: Force a Link tag for posts quoting another post. (may break outgoing federation of quote posts with older Pleroma versions) + * `Pleroma.Web.ActivityPub.MRF.QuoteToLinkTagPolicy`: Force a Link tag for posts quoting another post. (may break outgoing federation of quote posts with older Pleroma versions). + * `Pleroma.Web.ActivityPub.MRF.ForceMention`: Forces posts to include a mention of the author of parent post or the author of quoted post. * `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo). * `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. @@ -272,6 +273,10 @@ Notes: #### :mrf_inline_quote * `template`: The template to append to the post. `{url}` will be replaced with the actual link to the quoted post. Default: `<bdi>RT:</bdi> {url}` +#### :mrf_force_mention +* `mention_parent`: Whether to append mention of parent post author +* `mention_quoted`: Whether to append mention of parent quoted author + ### :activitypub * `unfollow_blocked`: Whether blocks result in people getting unfollowed * `outgoing_blocks`: Whether to federate blocks to other instances @@ -507,7 +512,7 @@ config :pleroma, :rate_limit, Means that: 1. In 60 seconds, 15 authentication attempts can be performed from the same IP address. -2. In 1 second, 10 search requests can be performed from the same IP adress by unauthenticated users, while authenticated users can perform 30 search requests per second. +2. In 1 second, 10 search requests can be performed from the same IP address by unauthenticated users, while authenticated users can perform 30 search requests per second. Supported rate limiters: @@ -1082,7 +1087,7 @@ config :pleroma, Pleroma.Formatter, ## :configurable_from_database -Boolean, enables/disables in-database configuration. Read [Transfering the config to/from the database](../administration/CLI_tasks/config.md) for more information. +Boolean, enables/disables in-database configuration. Read [Transferring the config to/from the database](../administration/CLI_tasks/config.md) for more information. ## :database_config_whitelist @@ -1143,7 +1148,7 @@ Control favicons for instances. !!! note Requires enabled email -* `:purge_after_days` an integer, remove backup achives after N days. +* `:purge_after_days` an integer, remove backup achieves after N days. * `:limit_days` an integer, limit user to export not more often than once per N days. * `:dir` a string with a path to backup temporary directory or `nil` to let Pleroma choose temporary directory in the following order: 1. the directory named by the TMPDIR environment variable diff --git a/docs/configuration/custom_emoji.md b/docs/configuration/custom_emoji.md @@ -29,7 +29,7 @@ foo, /emoji/custom/foo.png The files should be PNG (APNG is okay with `.png` for `image/png` Content-type) and under 50kb for compatibility with mastodon. -Default file extentions and locations for emojis are set in `config.exs`. To use different locations or file-extentions, add the `shortcode_globs` to your secrets file (`prod.secret.exs` or `dev.secret.exs`) and edit it. Note that not all fediverse-software will show emojis with other file extentions: +Default file extensions and locations for emojis are set in `config.exs`. To use different locations or file-extensions, add the `shortcode_globs` to your secrets file (`prod.secret.exs` or `dev.secret.exs`) and edit it. Note that not all fediverse-software will show emojis with other file extensions: ```elixir config :pleroma, :emoji, shortcode_globs: ["/emoji/custom/**/*.png", "/emoji/custom/**/*.gif"] ``` diff --git a/docs/configuration/i2p.md b/docs/configuration/i2p.md @@ -1,4 +1,4 @@ -# I2P Federation and Accessability +# I2P Federation and Accessibility This guide is going to focus on the Pleroma federation aspect. The actual installation is neatly explained in the official documentation, and more likely to remain up-to-date. It might be added to this guide if there will be a need for that. diff --git a/docs/configuration/onion_federation.md b/docs/configuration/onion_federation.md @@ -29,7 +29,7 @@ HiddenServiceDir /var/lib/tor/pleroma_hidden_service/ HiddenServicePort 80 127.0.0.1:8099 HiddenServiceVersion 3 # Remove if Tor version is below 0.3 ( tor --version ) ``` -Restart Tor to generate an adress: +Restart Tor to generate an address: ``` systemctl restart tor@default.service ``` diff --git 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 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. +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 processes 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. diff --git a/docs/configuration/postgresql.md b/docs/configuration/postgresql.md @@ -22,7 +22,7 @@ config :pleroma, Pleroma.Repo, ] ``` -A more detailed explaination of the issue can be found at <https://blog.soykaf.com/post/postgresql-elixir-troubles/>. +A more detailed explanation of the issue can be found at <https://blog.soykaf.com/post/postgresql-elixir-troubles/>. ## Example configurations diff --git a/docs/configuration/search.md b/docs/configuration/search.md @@ -38,7 +38,7 @@ indexes faster when it can process many posts in a single batch. Information about setting up meilisearch can be found in the [official documentation](https://docs.meilisearch.com/learn/getting_started/installation.html). You probably want to start it with `MEILI_NO_ANALYTICS=true` environment variable to disable analytics. -At least version 0.25.0 is required, but you are strongly adviced to use at least 0.26.0, as it introduces +At least version 0.25.0 is required, but you are strongly advised to use at least 0.26.0, as it introduces the `--enable-auto-batching` option which drastically improves performance. Without this option, the search is hardly usable on a somewhat big instance. @@ -61,7 +61,7 @@ You will see a "Default Admin API Key", this is the key you actually put into yo ### Initial indexing -After setting up the configuration, you'll want to index all of your already existsing posts. Only public posts are indexed. You'll only +After setting up the configuration, you'll want to index all of your already existing posts. Only public posts are indexed. You'll only have to do it one time, but it might take a while, depending on the amount of posts your instance has seen. This is also a fairly RAM consuming process for `meilisearch`, and it will take a lot of RAM when running if you have a lot of posts (seems to be around 5G for ~1.2 million posts while idle and up to 7G while indexing initially, but your experience may be different). diff --git a/docs/development/API/admin_api.md b/docs/development/API/admin_api.md @@ -303,7 +303,7 @@ Removes the user(s) from follower recommendations. ## `GET /api/v1/pleroma/admin/users/:nickname_or_id` -### Retrive the details of a user +### Retrieve the details of a user - Params: - `nickname` or `id` @@ -313,7 +313,7 @@ Removes the user(s) from follower recommendations. ## `GET /api/v1/pleroma/admin/users/:nickname_or_id/statuses` -### Retrive user's latest statuses +### Retrieve user's latest statuses - Params: - `nickname` or `id` @@ -337,7 +337,7 @@ Removes the user(s) from follower recommendations. ## `GET /api/v1/pleroma/admin/instances/:instance/statuses` -### Retrive instance's latest statuses +### Retrieve instance's latest statuses - Params: - `instance`: instance name @@ -377,7 +377,7 @@ It may take some time. ## `GET /api/v1/pleroma/admin/statuses` -### Retrives all latest statuses +### Retrieves all latest statuses - Params: - *optional* `page_size`: number of statuses to return (default is `20`) @@ -541,7 +541,7 @@ Response: ## `PATCH /api/v1/pleroma/admin/users/force_password_reset` -### Force passord reset for a user with a given nickname +### Force password reset for a user with a given nickname - Params: - `nicknames` @@ -1751,3 +1751,53 @@ Note that this differs from the Mastodon API variant: Mastodon API only returns ```json {} ``` + + +## `GET /api/v1/pleroma/admin/rules` + +### List rules + +- Response: JSON, list of rules + +```json +[ + { + "id": "1", + "priority": 1, + "text": "There are no rules", + "hint": null + } +] +``` + +## `POST /api/v1/pleroma/admin/rules` + +### Create a rule + +- Params: + - `text`: string, required, rule content + - `hint`: string, optional, rule description + - `priority`: integer, optional, rule ordering priority + +- Response: JSON, a single rule + +## `PATCH /api/v1/pleroma/admin/rules/:id` + +### Update a rule + +- Params: + - `text`: string, optional, rule content + - `hint`: string, optional, rule description + - `priority`: integer, optional, rule ordering priority + +- Response: JSON, a single rule + +## `DELETE /api/v1/pleroma/admin/rules/:id` + +### Delete a rule + +- Response: JSON, empty object + +```json +{} +``` diff --git a/docs/development/API/differences_in_mastoapi_responses.md b/docs/development/API/differences_in_mastoapi_responses.md @@ -1,6 +1,6 @@ # Differences in Mastodon API responses from vanilla Mastodon -A Pleroma instance can be identified by "<Mastodon version> (compatible; Pleroma <version>)" present in `version` field in response from `/api/v1/instance` +A Pleroma instance can be identified by "<Mastodon version> (compatible; Pleroma <version>)" present in `version` field in response from `/api/v1/instance` and `/api/v2/instance` ## Flake IDs @@ -39,6 +39,9 @@ Has these additional fields under the `pleroma` object: - `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. - `pinned_at`: a datetime (iso8601) when status was pinned, `null` otherwise. +- `quotes_count`: the count of status quotes. +- `non_anonymous`: true if the source post specifies the poll results are not anonymous. Currently only implemented by Smithereen. +- `bookmark_folder`: the ID of the folder bookmark is stored within (if any). The `GET /api/v1/statuses/:id/source` endpoint additionally has the following attributes: @@ -64,6 +67,12 @@ Some apps operate under the assumption that no more than 4 attachments can be re Pleroma does not process remote images and therefore cannot include fields such as `meta` and `blurhash`. It does not support focal points or aspect ratios. The frontend is expected to handle it. +## Bookmarks + +The `GET /api/v1/bookmarks` endpoint accepts optional parameter `folder_id` for bookmark folder ID. + +The `POST /api/v1/statuses/:id/bookmark` endpoint accepts optional parameter `folder_id` for bookmark folder ID. + ## Accounts The `id` parameter can also be the `nickname` of the user. This only works in these endpoints, not the deeper nested ones for following etc. @@ -304,19 +313,27 @@ Has these additional parameters (which are the same as in Pleroma-API): `GET /api/v1/instance` has additional fields - `max_toot_chars`: The maximum characters per post +- `max_media_attachments`: Maximum number of post media attachments - `chat_limit`: The maximum characters per chat message - `description_limit`: The maximum characters per image description - `poll_limits`: The limits of polls +- `shout_limit`: The maximum characters per Shoutbox message - `upload_limit`: The maximum upload file size - `avatar_upload_limit`: The same for avatars - `background_upload_limit`: The same for backgrounds - `banner_upload_limit`: The same for banners - `background_image`: A background image that frontends can use +- `pleroma.metadata.account_activation_required`: Whether users are required to confirm their emails before signing in +- `pleroma.metadata.birthday_required`: Whether users are required to provide their birth day when signing in +- `pleroma.metadata.birthday_min_age`: The minimum user age (in days) - `pleroma.metadata.features`: A list of supported features - `pleroma.metadata.federation`: The federation restrictions of this instance - `pleroma.metadata.fields_limits`: A list of values detailing the length and count limitation for various instance-configurable fields. - `pleroma.metadata.post_formats`: A list of the allowed post format types -- `vapid_public_key`: The public key needed for push messages +- `pleroma.stats.mau`: Monthly active user count +- `pleroma.vapid_public_key`: The public key needed for push messages + +In, `GET /api/v2/instance` Pleroma-specific fields are all moved into `pleroma` object. `max_toot_chars`, `poll_limits` and `upload_limit` are replaced with their MastoAPI counterparts. ## Push Subscription diff --git a/docs/development/API/pleroma_api.md b/docs/development/API/pleroma_api.md @@ -129,7 +129,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * method: `GET` * Authentication: required * OAuth scope: `write:security` -* Response: JSON. Returns `{"codes": codes}`when successful, otherwise HTTP 422 `{"error": "[error message]"}` +* Response: JSON. Returns `{"codes": codes}` when successful, otherwise HTTP 422 `{"error": "[error message]"}` ## `/api/v1/pleroma/admin/` See [Admin-API](admin_api.md) @@ -251,6 +251,15 @@ See [Admin-API](admin_api.md) ] ``` + +## `/api/v1/pleroma/accounts/:id/endorsements` +### Returns users endorsed by a user +* Method `GET` +* Authentication: not required +* Params: + * `id`: the id of the account for whom to return results +* Response: JSON, returns a list of Mastodon Account entities + ## `/api/v1/pleroma/accounts/update_*` ### Set and clear account avatar, banner, and background @@ -266,6 +275,60 @@ See [Admin-API](admin_api.md) * Authentication: not required * Response: 204 No Content +## `/api/v1/pleroma/statuses/:id/quotes` +### Gets quotes for a given status +* Method `GET` +* Authentication: not required +* Params: + * `id`: the id of the status +* Response: JSON, returns a list of Mastodon Status entities + +## `GET /api/v1/pleroma/bookmark_folders` +### Gets user bookmark folders +* Authentication: required + +* Response: JSON. Returns a list of bookmark folders. +* Example response: +```json +[ + { + "id": "9umDrYheeY451cQnEe", + "name": "Read later", + "emoji": "🕓", + "source": { + "emoji": "🕓" + } + } +] +``` + +## `POST /api/v1/pleroma/bookmark_folders` +### Creates a bookmark folder +* Authentication: required + +* Params: + * `name`: folder name + * `emoji`: folder emoji (optional) +* Response: JSON. Returns a single bookmark folder. + +## `PATCH /api/v1/pleroma/bookmark_folders/:id` +### Updates a bookmark folder +* Authentication: required + +* Params: + * `id`: folder id + * `name`: folder name (optional) + * `emoji`: folder emoji (optional) +* Response: JSON. Returns a single bookmark folder. + +## `DELETE /api/v1/pleroma/bookmark_folders/:id` +### Deletes a bookmark folder +* Authentication: required + +* Params: + * `id`: folder id +* Response: JSON. Returns a single bookmark folder. + ## `/api/v1/pleroma/mascot` ### Gets user mascot image * Method `GET` @@ -372,6 +435,15 @@ See [Admin-API](admin_api.md) * `alias`: the nickname of the alias to delete, e.g. `foo@example.org`. * Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise +## `/api/v1/pleroma/remote_interaction` +## Interact with profile or status from remote account +* Metod `POST` +* Authentication: not required +* Params: + * `ap_id`: Profile or status ActivityPub ID + * `profile`: Remote profile webfinger +* Response: JSON. Returns `{"url": "[redirect url]"}` on success, `{"error": "[error message]"}` otherwise + # Pleroma Conversations Pleroma Conversations have the same general structure that Mastodon Conversations have. The behavior differs in the following ways when using these endpoints: @@ -382,7 +454,7 @@ Pleroma Conversations have the same general structure that Mastodon Conversation Conversations have the additional field `recipients` under the `pleroma` key. This holds a list of all the accounts that will receive a message in this conversation. -The status posting endpoint takes an additional parameter, `in_reply_to_conversation_id`, which, when set, will set the visiblity to direct and address only the people who are the recipients of that Conversation. +The status posting endpoint takes an additional parameter, `in_reply_to_conversation_id`, which, when set, will set the visibility to direct and address only the people who are the recipients of that Conversation. ⚠ Conversation IDs can be found in direct messages with the `pleroma.direct_conversation_id` key, do not confuse it with `pleroma.conversation_id`. diff --git a/docs/development/ap_extensions.md b/docs/development/ap_extensions.md @@ -20,16 +20,16 @@ Content-Type: multipart/form-data Parameters: - (required) `file`: The file being uploaded -- (optionnal) `description`: A plain-text description of the media, for accessibility purposes. +- (optional) `description`: A plain-text description of the media, for accessibility purposes. Response: HTTP 201 Created with the object into the body, no `Location` header provided as it doesn't have an `id` -The object given in the reponse should then be inserted into an Object's `attachment` field. +The object given in the response should then be inserted into an Object's `attachment` field. ## ChatMessages `ChatMessage`s are the messages sent in 1-on-1 chats. They are similar to -`Note`s, but the addresing is done by having a single AP actor in the `to` +`Note`s, but the addressing is done by having a single AP actor in the `to` field. Addressing multiple actors is not allowed. These messages are always private, there is no public version of them. They are created with a `Create` activity. diff --git a/docs/development/setting_up_pleroma_dev.md b/docs/development/setting_up_pleroma_dev.md @@ -15,7 +15,7 @@ Pleroma requires some adjustments from the defaults for running the instance loc 2. Change the dev.secret.exs * Change the scheme in `config :pleroma, Pleroma.Web.Endpoint` to http (see examples below) * If you want to change other settings, you can do that too -3. You can now start the server `mix phx.server`. Once it's build and started, you can access the instance on `http://<host>:<port>` (e.g.http://localhost:4000 ) and should be able to do everything locally you normaly can. +3. You can now start the server `mix phx.server`. Once it's build and started, you can access the instance on `http://<host>:<port>` (e.g.http://localhost:4000 ) and should be able to do everything locally you normally can. Example config to change the scheme to http. Change the port if you want to run on another port. ```elixir @@ -38,7 +38,7 @@ config :logger, :console, ## Testing -1. Create a `test.secret.exs` file with the content as shown below +1. Create a `config/test.secret.exs` file with the content as shown below 2. Create the database user and test database. 1. You can use the `config/setup_db.psql` as a template. Copy the file if you want and change the database name, user and password to the values for the test-database (e.g. 'pleroma_local_test' for database and user). Then run this file like you did during installation. 2. The tests will try to create the Database, so we'll have to allow our test-database user to create databases, `sudo -Hu postgres psql -c "ALTER USER pleroma_local_test WITH CREATEDB;"` diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md @@ -12,8 +12,8 @@ Note: This article is potentially outdated because at this time we may not have ### 必要なソフトウェア -- PostgreSQL 9.6以上 (Ubuntu16.04では9.5しか提供されていないので,[](https://www.postgresql.org/download/linux/ubuntu/)こちらから新しいバージョンを入手してください) -- `postgresql-contrib` 9.6以上 (同上) +- PostgreSQL 11.0以上 (Ubuntu16.04では9.5しか提供されていないので,[](https://www.postgresql.org/download/linux/ubuntu/)こちらから新しいバージョンを入手してください) +- `postgresql-contrib` 11.0以上 (同上) - Elixir 1.8 以上 ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をpleromaユーザーでインストールしてください) - `erlang-dev` - `erlang-nox` diff --git a/docs/installation/freebsd_en.md b/docs/installation/freebsd_en.md @@ -9,7 +9,7 @@ This document was written for FreeBSD 12.1, but should be work on future release This assumes the target system has `pkg(8)`. ``` -# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake +# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake vips ``` Copy the rc.d scripts to the right directory: @@ -41,6 +41,7 @@ Create a user for Pleroma: ``` # pw add user pleroma -m # echo 'export LC_ALL="en_US.UTF-8"' >> /home/pleroma/.profile +# echo 'export VIX_COMPILATION_MODE=PLATFORM_PROVIDED_LIBVIPS' >> /home/pleroma/.profile # su -l pleroma ``` diff --git a/docs/installation/generic_dependencies.include b/docs/installation/generic_dependencies.include @@ -1,8 +1,8 @@ ## Required dependencies -* PostgreSQL >=9.6 +* PostgreSQL >=11.0 * Elixir >=1.11.0 <1.15 -* Erlang OTP >=22.2.0 <26 +* Erlang OTP >=22.2.0 (supported: <27) * git * file / libmagic * gcc or clang diff --git a/docs/installation/gentoo_en.md b/docs/installation/gentoo_en.md @@ -59,7 +59,7 @@ Gentoo quite pointedly does not come with a cron daemon installed, and as such i If you would not like to install the optional packages, remove them from this line. -If you're running this from a low-powered virtual machine, it should work though it will take some time. There were no issues on a VPS with a single core and 1GB of RAM; if you are using an even more limited device and run into issues, you can try creating a swapfile or use a more powerful machine running Gentoo to [cross build](https://wiki.gentoo.org/wiki/Cross_build_environment). If you have a wait ahead of you, now would be a good time to take a break, strech a bit, refresh your beverage of choice and/or get a snack, and reply to Arch users' posts with "I use Gentoo btw" as we do. +If you're running this from a low-powered virtual machine, it should work though it will take some time. There were no issues on a VPS with a single core and 1GB of RAM; if you are using an even more limited device and run into issues, you can try creating a swapfile or use a more powerful machine running Gentoo to [cross build](https://wiki.gentoo.org/wiki/Cross_build_environment). If you have a wait ahead of you, now would be a good time to take a break, stretch a bit, refresh your beverage of choice and/or get a snack, and reply to Arch users' posts with "I use Gentoo btw" as we do. ### Install PostgreSQL @@ -104,7 +104,7 @@ Not only does this make it much easier to deploy changes you make, as you can co * Add a new system user for the Pleroma service and set up default directories: -Remove `,wheel` if you do not want this user to be able to use `sudo`, however note that being able to `sudo` as the `pleroma` user will make finishing the insallation and common maintenence tasks somewhat easier: +Remove `,wheel` if you do not want this user to be able to use `sudo`, however note that being able to `sudo` as the `pleroma` user will make finishing the installation and common maintenance tasks somewhat easier: ```shell # useradd -m -G users,wheel -s /bin/bash pleroma diff --git a/docs/installation/gentoo_otp_en.md b/docs/installation/gentoo_otp_en.md @@ -49,7 +49,7 @@ Gentoo quite pointedly does not come with a cron daemon installed, and as such i If you would not like to install the optional packages, remove them from this line. -If you're running this from a low-powered virtual machine, it should work though it will take some time. There were no issues on a VPS with a single core and 1GB of RAM; if you are using an even more limited device and run into issues, you can try creating a swapfile or use a more powerful machine running Gentoo to [cross build](https://wiki.gentoo.org/wiki/Cross_build_environment). If you have a wait ahead of you, now would be a good time to take a break, strech a bit, refresh your beverage of choice and/or get a snack, and reply to Arch users' posts with "I use Gentoo btw" as we do. +If you're running this from a low-powered virtual machine, it should work though it will take some time. There were no issues on a VPS with a single core and 1GB of RAM; if you are using an even more limited device and run into issues, you can try creating a swapfile or use a more powerful machine running Gentoo to [cross build](https://wiki.gentoo.org/wiki/Cross_build_environment). If you have a wait ahead of you, now would be a good time to take a break, stretch a bit, refresh your beverage of choice and/or get a snack, and reply to Arch users' posts with "I use Gentoo btw" as we do. ### Setup PostgreSQL diff --git a/docs/installation/openbsd_en.md b/docs/installation/openbsd_en.md @@ -62,7 +62,7 @@ rcctl start postgresql To check that it started properly and didn't fail right after starting, you can run `ps aux | grep postgres`, there should be multiple lines of output. #### httpd -httpd will have three fuctions: +httpd will have three functions: * redirect requests trying to reach the instance over http to the https URL * serve a robots.txt file @@ -225,7 +225,7 @@ pass in quick on $if inet6 proto icmp6 to ($if) icmp6-type { echoreq unreach par pass in quick on $if proto tcp to ($if) port { http https } # relayd/httpd pass in quick on $if proto tcp from $authorized_ssh_clients to ($if) port ssh ``` -Replace *<network interface\>* by your server's network interface name (which you can get with ifconfig). Consider replacing the content of the authorized\_ssh\_clients macro by, for exemple, your home IP address, to avoid SSH connection attempts from bots. +Replace *<network interface\>* by your server's network interface name (which you can get with ifconfig). Consider replacing the content of the authorized\_ssh\_clients macro by, for example, your home IP address, to avoid SSH connection attempts from bots. Check pf's configuration by running `pfctl -nf /etc/pf.conf`, load it with `pfctl -f /etc/pf.conf` and enable pf at boot with `rcctl enable pf`. diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md @@ -238,7 +238,7 @@ At this point if you open your (sub)domain in a browser you should see a 502 err systemctl enable pleroma ``` -If everything worked, you should see Pleroma-FE when visiting your domain. If that didn't happen, try reviewing the installation steps, starting Pleroma in the foreground and seeing if there are any errrors. +If everything worked, you should see Pleroma-FE when visiting your domain. If that didn't happen, try reviewing the installation steps, starting Pleroma in the foreground and seeing if there are any errors. Questions about the installation or didn’t it work as it should be, ask in [#pleroma:libera.chat](https://matrix.to/#/#pleroma:libera.chat) via Matrix or **#pleroma** on **libera.chat** via IRC, you can also [file an issue on our Gitlab](https://git.pleroma.social/pleroma/pleroma-support/issues/new). diff --git a/installation/pleroma-mongooseim.cfg b/installation/pleroma-mongooseim.cfg @@ -204,7 +204,7 @@ ]} ]}, - %% Following HTTP API is deprected, the new one abouve should be used instead + %% Following HTTP API is deprecated, the new one above should be used instead { {5288, "127.0.0.1"} , ejabberd_cowboy, [ {num_acceptors, 10}, @@ -824,7 +824,7 @@ %% Enable archivization for private messages (default) % {pm, [ - %% Top-level options can be overriden here if needed, for example: + %% Top-level options can be overridden here if needed, for example: % {async_writer, false} % ]}, @@ -834,7 +834,7 @@ %% % {muc, [ % {host, "muc.@HOST@"} - %% As with pm, top-level options can be overriden for MUC archive + %% As with pm, top-level options can be overridden for MUC archive % ]}, % %% Do not use a <stanza-id/> element (by default stanzaid is used) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex @@ -193,7 +193,7 @@ defmodule Mix.Tasks.Pleroma.Database do "ALTER DATABASE #{db} SET default_text_search_config = '#{tsconfig}';" ) - # non-exist config will not raise excpetion but only give >0 messages + # non-exist config will not raise exception but only give >0 messages if length(msg) > 0 do shell_info("Error: #{inspect(msg, pretty: true)}") else diff --git a/lib/mix/tasks/pleroma/digest.ex b/lib/mix/tasks/pleroma/digest.ex @@ -30,7 +30,7 @@ defmodule Mix.Tasks.Pleroma.Digest do shell_info("Digest email have been sent to #{nickname} (#{user.email})") else _ -> - shell_info("Cound't find any mentions for #{nickname} since #{last_digest_emailed_at}") + shell_info("Couldn't find any mentions for #{nickname} since #{last_digest_emailed_at}") end end end diff --git a/lib/mix/tasks/pleroma/ecto/rollback.ex b/lib/mix/tasks/pleroma/ecto/rollback.ex @@ -61,7 +61,7 @@ defmodule Mix.Tasks.Pleroma.Ecto.Rollback do Logger.configure(level: :info) if opts[:env] == "test" do - Logger.info("Rollback succesfully") + Logger.info("Rollback successfully") else {:ok, _, _} = Ecto.Migrator.with_repo(Pleroma.Repo, &Ecto.Migrator.run(&1, path, :down, opts)) diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex @@ -111,7 +111,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do {:ok, _} = :zip.unzip(binary_archive, - cwd: pack_path, + cwd: String.to_charlist(pack_path), file_list: files_to_unzip ) diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex @@ -292,7 +292,7 @@ defmodule Mix.Tasks.Pleroma.Instance do if db_configurable? do shell_info( - " Please transfer your config to the database after running database migrations. Refer to \"Transfering the config to/from the database\" section of the docs for more information." + " Please transfer your config to the database after running database migrations. Refer to \"Transferring the config to/from the database\" section of the docs for more information." ) end else @@ -352,6 +352,4 @@ defmodule Mix.Tasks.Pleroma.Instance do enabled_filters end - - defp upload_filters(_), do: [] end diff --git a/lib/phoenix/transports/web_socket/raw.ex b/lib/phoenix/transports/web_socket/raw.ex @@ -1,93 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Phoenix.Transports.WebSocket.Raw do - import Plug.Conn, - only: [ - fetch_query_params: 1, - send_resp: 3 - ] - - alias Phoenix.Socket.Transport - - def default_config do - [ - timeout: 60_000, - transport_log: false, - cowboy: Phoenix.Endpoint.CowboyWebSocket - ] - end - - def init(%Plug.Conn{method: "GET"} = conn, {endpoint, handler, transport}) do - {_, opts} = handler.__transport__(transport) - - conn = - conn - |> fetch_query_params - |> Transport.transport_log(opts[:transport_log]) - |> Transport.check_origin(handler, endpoint, opts) - - case conn do - %{halted: false} = conn -> - case handler.connect(%{ - endpoint: endpoint, - transport: transport, - options: [serializer: nil], - params: conn.params - }) do - {:ok, socket} -> - {:ok, conn, {__MODULE__, {socket, opts}}} - - :error -> - send_resp(conn, :forbidden, "") - {:error, conn} - end - - _ -> - {:error, conn} - end - end - - def init(conn, _) do - send_resp(conn, :bad_request, "") - {:error, conn} - end - - def ws_init({socket, config}) do - Process.flag(:trap_exit, true) - {:ok, %{socket: socket}, config[:timeout]} - end - - def ws_handle(op, data, state) do - state.socket.handler - |> apply(:handle, [op, data, state]) - |> case do - {op, data} -> - {:reply, {op, data}, state} - - {op, data, state} -> - {:reply, {op, data}, state} - - %{} = state -> - {:ok, state} - - _ -> - {:ok, state} - end - end - - def ws_info({_, _} = tuple, state) do - {:reply, tuple, state} - end - - def ws_info(_tuple, state), do: {:ok, state} - - def ws_close(state) do - ws_handle(:closed, :normal, state) - end - - def ws_terminate(reason, state) do - ws_handle(:closed, reason, state) - end -end diff --git a/lib/pleroma/activity/html.ex b/lib/pleroma/activity/html.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Activity.HTML do end end - defp add_cache_key_for(activity_id, additional_key) do + def add_cache_key_for(activity_id, additional_key) do current = get_cache_keys_for(activity_id) unless additional_key in current do diff --git a/lib/pleroma/activity/queries.ex b/lib/pleroma/activity/queries.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Activity.Queries do import Ecto.Query, only: [from: 2, where: 3] - @type query :: Ecto.Queryable.t() | Activity.t() + @type query :: Ecto.Queryable.t() | Pleroma.Activity.t() alias Pleroma.Activity alias Pleroma.User diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex @@ -23,19 +23,21 @@ defmodule Pleroma.Announcement do timestamps(type: :utc_datetime) end - def change(struct, params \\ %{}) do - struct - |> cast(validate_params(struct, params), [:data, :starts_at, :ends_at, :rendered]) + @doc "Generates changeset for %Pleroma.Announcement{}" + @spec changeset(%__MODULE__{}, map()) :: %Ecto.Changeset{} + def changeset(announcement \\ %__MODULE__{}, params \\ %{data: %{}}) do + announcement + |> cast(validate_params(announcement, params), [:data, :starts_at, :ends_at, :rendered]) |> validate_required([:data]) end - defp validate_params(struct, params) do + defp validate_params(announcement, params) do base_data = %{ "content" => "", "all_day" => false } - |> Map.merge((struct && struct.data) || %{}) + |> Map.merge((announcement && announcement.data) || %{}) merged_data = Map.merge(base_data, params.data) @@ -61,13 +63,13 @@ defmodule Pleroma.Announcement do end def add(params) do - changeset = change(%__MODULE__{}, params) + changeset = changeset(%__MODULE__{}, params) Repo.insert(changeset) end def update(announcement, params) do - changeset = change(announcement, params) + changeset = changeset(announcement, params) Repo.update(changeset) end diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex @@ -14,7 +14,6 @@ defmodule Pleroma.Application do @name Mix.Project.config()[:name] @version Mix.Project.config()[:version] @repository Mix.Project.config()[:source_url] - @mix_env Mix.env() def name, do: @name def version, do: @version @@ -54,7 +53,6 @@ defmodule Pleroma.Application do Config.DeprecationWarnings.warn() Pleroma.Web.Plugs.HTTPSecurityPlug.warn_if_disabled() Pleroma.ApplicationRequirements.verify!() - setup_instrumenters() load_custom_modules() Pleroma.Docs.JSON.compile() limiters_setup() @@ -91,6 +89,7 @@ defmodule Pleroma.Application do # Define workers and child supervisors to be supervised children = [ + Pleroma.PromEx, Pleroma.Repo, Config.TransferTask, Pleroma.Emoji, @@ -98,7 +97,7 @@ defmodule Pleroma.Application do {Task.Supervisor, name: Pleroma.TaskSupervisor} ] ++ cachex_children() ++ - http_children(adapter, @mix_env) ++ + http_children(adapter) ++ [ Pleroma.Stats, Pleroma.JobQueueMonitor, @@ -106,8 +105,9 @@ defmodule Pleroma.Application do {Oban, Config.get(Oban)}, Pleroma.Web.Endpoint ] ++ - task_children(@mix_env) ++ - dont_run_in_test(@mix_env) ++ + task_children() ++ + streamer_registry() ++ + background_migrators() ++ shout_child(shout_enabled?()) ++ [Pleroma.Gopher.Server] @@ -116,36 +116,10 @@ defmodule Pleroma.Application do # If we have a lot of caches, default max_restarts can cause test # resets to fail. # Go for the default 3 unless we're in test - max_restarts = - if @mix_env == :test do - 100 - else - 3 - end + max_restarts = Application.get_env(:pleroma, __MODULE__)[:max_restarts] opts = [strategy: :one_for_one, name: Pleroma.Supervisor, max_restarts: max_restarts] - result = Supervisor.start_link(children, opts) - - set_postgres_server_version() - - result - end - - defp set_postgres_server_version do - version = - with %{rows: [[version]]} <- Ecto.Adapters.SQL.query!(Pleroma.Repo, "show server_version"), - {num, _} <- Float.parse(version) do - num - else - e -> - Logger.warn( - "Could not get the postgres version: #{inspect(e)}.\nSetting the default value of 9.6" - ) - - 9.6 - end - - :persistent_term.put({Pleroma.Repo, :postgres_version}, version) + Supervisor.start_link(children, opts) end def load_custom_modules do @@ -159,7 +133,7 @@ defmodule Pleroma.Application do raise "Invalid custom modules" {:ok, modules, _warnings} -> - if @mix_env != :test do + if Application.get_env(:pleroma, __MODULE__)[:load_custom_modules] do Enum.each(modules, fn mod -> Logger.info("Custom module loaded: #{inspect(mod)}") end) @@ -170,29 +144,6 @@ defmodule Pleroma.Application do end end - defp setup_instrumenters do - require Prometheus.Registry - - if Application.get_env(:prometheus, Pleroma.Repo.Instrumenter) do - :ok = - :telemetry.attach( - "prometheus-ecto", - [:pleroma, :repo, :query], - &Pleroma.Repo.Instrumenter.handle_event/4, - %{} - ) - - Pleroma.Repo.Instrumenter.setup() - end - - Pleroma.Web.Endpoint.MetricsExporter.setup() - Pleroma.Web.Endpoint.PipelineInstrumenter.setup() - - # Note: disabled until prometheus-phx is integrated into prometheus-phoenix: - # Pleroma.Web.Endpoint.Instrumenter.setup() - PrometheusPhx.setup() - end - defp cachex_children do [ build_cachex("used_captcha", ttl_interval: seconds_valid_interval()), @@ -205,6 +156,7 @@ defmodule Pleroma.Application do build_cachex("web_resp", limit: 2500), build_cachex("emoji_packs", expiration: emoji_packs_expiration(), limit: 10), build_cachex("failed_proxy_url", limit: 2500), + build_cachex("failed_media_helper_url", default_ttl: :timer.minutes(15), limit: 2_500), build_cachex("banned_urls", default_ttl: :timer.hours(24 * 30), limit: 5_000), build_cachex("chat_message_id_idempotency_key", expiration: chat_message_id_idempotency_key_expiration(), @@ -236,24 +188,30 @@ defmodule Pleroma.Application do defp shout_enabled?, do: Config.get([:shout, :enabled]) - defp dont_run_in_test(env) when env in [:test, :benchmark], do: [] - - defp dont_run_in_test(_) do - [ - {Registry, - [ - name: Pleroma.Web.Streamer.registry(), - keys: :duplicate, - partitions: System.schedulers_online() - ]} - ] ++ background_migrators() + defp streamer_registry do + if Application.get_env(:pleroma, __MODULE__)[:streamer_registry] do + [ + {Registry, + [ + name: Pleroma.Web.Streamer.registry(), + keys: :duplicate, + partitions: System.schedulers_online() + ]} + ] + else + [] + end end defp background_migrators do - [ - Pleroma.Migrators.HashtagsTableMigrator, - Pleroma.Migrators.ContextObjectsDeletionMigrator - ] + if Application.get_env(:pleroma, __MODULE__)[:background_migrators] do + [ + Pleroma.Migrators.HashtagsTableMigrator, + Pleroma.Migrators.ContextObjectsDeletionMigrator + ] + else + [] + end end defp shout_child(true) do @@ -265,37 +223,43 @@ defmodule Pleroma.Application do defp shout_child(_), do: [] - defp task_children(:test) do - [ + defp task_children do + children = [ %{ id: :web_push_init, start: {Task, :start_link, [&Pleroma.Web.Push.init/0]}, restart: :temporary } ] - end - defp task_children(_) do - [ - %{ - id: :web_push_init, - start: {Task, :start_link, [&Pleroma.Web.Push.init/0]}, - restart: :temporary - }, - %{ - id: :internal_fetch_init, - start: {Task, :start_link, [&Pleroma.Web.ActivityPub.InternalFetchActor.init/0]}, - restart: :temporary - } - ] + if Application.get_env(:pleroma, __MODULE__)[:internal_fetch] do + children ++ + [ + %{ + id: :internal_fetch_init, + start: {Task, :start_link, [&Pleroma.Web.ActivityPub.InternalFetchActor.init/0]}, + restart: :temporary + } + ] + else + children + end end # start hackney and gun pools in tests - defp http_children(_, :test) do - http_children(Tesla.Adapter.Hackney, nil) ++ http_children(Tesla.Adapter.Gun, nil) + defp http_children(adapter) do + if Application.get_env(:pleroma, __MODULE__)[:test_http_pools] do + http_children_hackney() ++ http_children_gun() + else + cond do + match?(Tesla.Adapter.Hackney, adapter) -> http_children_hackney() + match?(Tesla.Adapter.Gun, adapter) -> http_children_gun() + true -> [] + end + end end - defp http_children(Tesla.Adapter.Hackney, _) do + defp http_children_hackney do pools = [:federation, :media] pools = @@ -311,13 +275,11 @@ defmodule Pleroma.Application do end end - defp http_children(Tesla.Adapter.Gun, _) do + defp http_children_gun do Pleroma.Gun.ConnectionPool.children() ++ [{Task, &Pleroma.HTTP.AdapterHelper.Gun.limiter_setup/0}] end - defp http_children(_, _), do: [] - @spec limiters_setup() :: :ok def limiters_setup do config = Config.get(ConcurrentLimiter, []) diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex @@ -7,7 +7,10 @@ defmodule Pleroma.ApplicationRequirements do The module represents the collection of validations to runs before start server. """ - defmodule VerifyError, do: defexception([:message]) + defmodule VerifyError do + defexception([:message]) + @type t :: %__MODULE__{} + end alias Pleroma.Config alias Pleroma.Helpers.MediaHelper @@ -25,6 +28,7 @@ defmodule Pleroma.ApplicationRequirements do |> check_welcome_message_config!() |> check_rum!() |> check_repo_pool_size!() + |> check_mrfs() |> handle_result() end @@ -34,7 +38,7 @@ defmodule Pleroma.ApplicationRequirements do defp check_welcome_message_config!(:ok) do if Pleroma.Config.get([:welcome, :email, :enabled], false) and not Pleroma.Emails.Mailer.enabled?() do - Logger.warn(""" + Logger.warning(""" To send welcome emails, you need to enable the mailer. Welcome emails will NOT be sent with the current config. @@ -53,7 +57,7 @@ defmodule Pleroma.ApplicationRequirements do def check_confirmation_accounts!(:ok) do if Pleroma.Config.get([:instance, :account_activation_required]) && not Pleroma.Emails.Mailer.enabled?() do - Logger.warn(""" + Logger.warning(""" Account activation is required, but the mailer is disabled. Users will NOT be able to confirm their accounts with this config. Either disable account activation or enable the mailer. @@ -168,8 +172,6 @@ defmodule Pleroma.ApplicationRequirements do check_filter(Pleroma.Upload.Filter.Exiftool.ReadDescription, "exiftool"), check_filter(Pleroma.Upload.Filter.Mogrify, "mogrify"), check_filter(Pleroma.Upload.Filter.Mogrifun, "mogrify"), - check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "mogrify"), - check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "convert"), check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "ffprobe") ] @@ -195,8 +197,6 @@ defmodule Pleroma.ApplicationRequirements do end end - defp check_system_commands!(result), do: result - defp check_repo_pool_size!(:ok) do if Pleroma.Config.get([Pleroma.Repo, :pool_size], 10) != 10 and not Pleroma.Config.get([:dangerzone, :override_repo_pool_size], false) do @@ -235,4 +235,25 @@ defmodule Pleroma.ApplicationRequirements do true end end + + defp check_mrfs(:ok) do + mrfs = Config.get!([:mrf, :policies]) + + missing_mrfs = + Enum.reduce(mrfs, [], fn x, acc -> + if Code.ensure_compiled(x) do + acc + else + acc ++ [x] + end + end) + + if Enum.empty?(missing_mrfs) do + :ok + else + {:error, "The following MRF modules are configured but missing: #{inspect(missing_mrfs)}"} + end + end + + defp check_mrfs(result), do: result end diff --git a/lib/pleroma/bookmark.ex b/lib/pleroma/bookmark.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Bookmark do alias Pleroma.Activity alias Pleroma.Bookmark + alias Pleroma.BookmarkFolder alias Pleroma.Repo alias Pleroma.User @@ -18,33 +19,46 @@ defmodule Pleroma.Bookmark do schema "bookmarks" do belongs_to(:user, User, type: FlakeId.Ecto.CompatType) belongs_to(:activity, Activity, type: FlakeId.Ecto.CompatType) + belongs_to(:folder, BookmarkFolder, type: FlakeId.Ecto.CompatType) timestamps() end - @spec create(FlakeId.Ecto.CompatType.t(), FlakeId.Ecto.CompatType.t()) :: - {:ok, Bookmark.t()} | {:error, Changeset.t()} - def create(user_id, activity_id) do + @spec create(Ecto.UUID.t(), Ecto.UUID.t()) :: + {:ok, Bookmark.t()} | {:error, Ecto.Changeset.t()} + def create(user_id, activity_id, folder_id \\ nil) do attrs = %{ user_id: user_id, - activity_id: activity_id + activity_id: activity_id, + folder_id: folder_id } %Bookmark{} - |> cast(attrs, [:user_id, :activity_id]) + |> cast(attrs, [:user_id, :activity_id, :folder_id]) |> validate_required([:user_id, :activity_id]) |> unique_constraint(:activity_id, name: :bookmarks_user_id_activity_id_index) - |> Repo.insert() + |> Repo.insert( + on_conflict: [set: [folder_id: folder_id]], + conflict_target: [:user_id, :activity_id] + ) end - @spec for_user_query(FlakeId.Ecto.CompatType.t()) :: Ecto.Query.t() - def for_user_query(user_id) do + @spec for_user_query(Ecto.UUID.t()) :: Ecto.Query.t() + def for_user_query(user_id, folder_id \\ nil) do Bookmark |> where(user_id: ^user_id) + |> maybe_filter_by_folder(folder_id) |> join(:inner, [b], activity in assoc(b, :activity)) |> preload([b, a], activity: a) end + defp maybe_filter_by_folder(query, nil), do: query + + defp maybe_filter_by_folder(query, folder_id) do + query + |> where(folder_id: ^folder_id) + end + def get(user_id, activity_id) do Bookmark |> where(user_id: ^user_id) @@ -52,8 +66,8 @@ defmodule Pleroma.Bookmark do |> Repo.one() end - @spec destroy(FlakeId.Ecto.CompatType.t(), FlakeId.Ecto.CompatType.t()) :: - {:ok, Bookmark.t()} | {:error, Changeset.t()} + @spec destroy(Ecto.UUID.t(), Ecto.UUID.t()) :: + {:ok, Bookmark.t()} | {:error, Ecto.Changeset.t()} def destroy(user_id, activity_id) do from(b in Bookmark, where: b.user_id == ^user_id, @@ -62,4 +76,11 @@ defmodule Pleroma.Bookmark do |> Repo.one() |> Repo.delete() end + + def set_folder(bookmark, folder_id) do + bookmark + |> cast(%{folder_id: folder_id}, [:folder_id]) + |> validate_required([:folder_id]) + |> Repo.update() + end end diff --git a/lib/pleroma/bookmark_folder.ex b/lib/pleroma/bookmark_folder.ex @@ -0,0 +1,115 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.BookmarkFolder do + use Ecto.Schema + + import Ecto.Changeset + import Ecto.Query + + alias Pleroma.BookmarkFolder + alias Pleroma.Emoji + alias Pleroma.Repo + alias Pleroma.User + + @type t :: %__MODULE__{} + @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true} + + schema "bookmark_folders" do + field(:name, :string) + field(:emoji, :string) + + belongs_to(:user, User, type: FlakeId.Ecto.CompatType) + + timestamps() + end + + def get_by_id(id), do: Repo.get_by(BookmarkFolder, id: id) + + def create(user_id, name, emoji \\ nil) do + %BookmarkFolder{} + |> cast( + %{ + user_id: user_id, + name: name, + emoji: emoji + }, + [:user_id, :name, :emoji] + ) + |> validate_required([:user_id, :name]) + |> fix_emoji() + |> validate_emoji() + |> unique_constraint([:user_id, :name]) + |> Repo.insert() + end + + def update(folder_id, name, emoji \\ nil) do + get_by_id(folder_id) + |> cast( + %{ + name: name, + emoji: emoji + }, + [:name, :emoji] + ) + |> fix_emoji() + |> validate_emoji() + |> unique_constraint([:user_id, :name]) + |> Repo.update() + end + + defp fix_emoji(changeset) do + with {:emoji_field, emoji} when is_binary(emoji) <- + {:emoji_field, get_field(changeset, :emoji)}, + {:fixed_emoji, emoji} <- + {:fixed_emoji, + emoji + |> Pleroma.Emoji.fully_qualify_emoji() + |> Pleroma.Emoji.maybe_quote()} do + put_change(changeset, :emoji, emoji) + else + {:emoji_field, _} -> changeset + end + end + + defp validate_emoji(changeset) do + validate_change(changeset, :emoji, fn + :emoji, nil -> + [] + + :emoji, emoji -> + if Emoji.unicode?(emoji) or valid_local_custom_emoji?(emoji) do + [] + else + [emoji: "Invalid emoji"] + end + end) + end + + defp valid_local_custom_emoji?(emoji) do + with %{file: _path} <- Emoji.get(emoji) do + true + else + _ -> false + end + end + + def delete(folder_id) do + BookmarkFolder + |> Repo.get_by(id: folder_id) + |> Repo.delete() + end + + def for_user(user_id) do + BookmarkFolder + |> where(user_id: ^user_id) + |> Repo.all() + end + + def belongs_to_user?(folder_id, user_id) do + BookmarkFolder + |> where(id: ^folder_id, user_id: ^user_id) + |> Repo.exists?() + end +end diff --git a/lib/pleroma/caching.ex b/lib/pleroma/caching.ex @@ -8,10 +8,13 @@ defmodule Pleroma.Caching do @callback put(Cachex.cache(), any(), any(), Keyword.t()) :: {Cachex.status(), boolean()} @callback put(Cachex.cache(), any(), any()) :: {Cachex.status(), boolean()} @callback fetch!(Cachex.cache(), any(), function() | nil) :: any() + @callback fetch(Cachex.cache(), any(), function() | nil) :: + {atom(), any()} | {atom(), any(), any()} # @callback del(Cachex.cache(), any(), Keyword.t()) :: {Cachex.status(), boolean()} @callback del(Cachex.cache(), any()) :: {Cachex.status(), boolean()} @callback stream!(Cachex.cache(), any()) :: Enumerable.t() @callback expire_at(Cachex.cache(), binary(), number()) :: {Cachex.status(), boolean()} + @callback expire(Cachex.cache(), binary(), number()) :: {Cachex.status(), boolean()} @callback exists?(Cachex.cache(), any()) :: {Cachex.status(), boolean()} @callback execute!(Cachex.cache(), function()) :: any() @callback get_and_update(Cachex.cache(), any(), function()) :: diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex @@ -29,7 +29,7 @@ defmodule Pleroma.Captcha.Kocaptcha do @impl Service def validate(_token, captcha, answer_data) do - # Here the token is unsed, because the unencrypted captcha answer is just passed to method + # Here the token is unused, because the unencrypted captcha answer is just passed to method if not is_nil(captcha) and :crypto.hash(:md5, captcha) |> Base.encode16() == String.upcase(answer_data), do: :ok, diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex @@ -42,7 +42,7 @@ defmodule Pleroma.Chat do |> unique_constraint(:user_id, name: :chats_user_id_recipient_index) end - @spec get_by_user_and_id(User.t(), FlakeId.Ecto.CompatType.t()) :: + @spec get_by_user_and_id(User.t(), Ecto.UUID.t()) :: {:ok, t()} | {:error, :not_found} def get_by_user_and_id(%User{id: user_id}, id) do from(c in __MODULE__, @@ -52,17 +52,17 @@ defmodule Pleroma.Chat do |> Repo.find_resource() end - @spec get_by_id(FlakeId.Ecto.CompatType.t()) :: t() | nil + @spec get_by_id(Ecto.UUID.t()) :: t() | nil def get_by_id(id) do Repo.get(__MODULE__, id) end - @spec get(FlakeId.Ecto.CompatType.t(), String.t()) :: t() | nil + @spec get(Ecto.UUID.t(), String.t()) :: t() | nil def get(user_id, recipient) do Repo.get_by(__MODULE__, user_id: user_id, recipient: recipient) end - @spec get_or_create(FlakeId.Ecto.CompatType.t(), String.t()) :: + @spec get_or_create(Ecto.UUID.t(), String.t()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def get_or_create(user_id, recipient) do %__MODULE__{} @@ -75,7 +75,7 @@ defmodule Pleroma.Chat do ) end - @spec bump_or_create(FlakeId.Ecto.CompatType.t(), String.t()) :: + @spec bump_or_create(Ecto.UUID.t(), String.t()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def bump_or_create(user_id, recipient) do %__MODULE__{} @@ -87,7 +87,7 @@ defmodule Pleroma.Chat do ) end - @spec for_user_query(FlakeId.Ecto.CompatType.t()) :: Ecto.Query.t() + @spec for_user_query(Ecto.UUID.t()) :: Ecto.Query.t() def for_user_query(user_id) do from(c in Chat, where: c.user_id == ^user_id, diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex @@ -24,7 +24,7 @@ defmodule Pleroma.Config.DeprecationWarnings do filters = Config.get([Pleroma.Upload]) |> Keyword.get(:filters, []) if Pleroma.Upload.Filter.Exiftool in filters do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using Exiftool as a filter instead of Exiftool.StripLocation. This should work for now, but you are advised to change to the new configuration to prevent possible issues later: @@ -63,7 +63,7 @@ defmodule Pleroma.Config.DeprecationWarnings do |> Enum.any?(fn {_, v} -> Enum.any?(v, &is_binary/1) end) if has_strings do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using strings in the SimplePolicy configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later: @@ -121,7 +121,7 @@ defmodule Pleroma.Config.DeprecationWarnings do has_strings = Config.get([:instance, :quarantined_instances]) |> Enum.any?(&is_binary/1) if has_strings do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using strings in the quarantined_instances configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later: @@ -158,7 +158,7 @@ defmodule Pleroma.Config.DeprecationWarnings do has_strings = Config.get([:mrf, :transparency_exclusions]) |> Enum.any?(&is_binary/1) if has_strings do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using strings in the transparency_exclusions configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later: @@ -172,7 +172,7 @@ defmodule Pleroma.Config.DeprecationWarnings do ``` config :pleroma, :mrf, - transparency_exclusions: [{"instance.tld", "Reason to exlude transparency"}] + transparency_exclusions: [{"instance.tld", "Reason to exclude transparency"}] ``` """) @@ -193,7 +193,7 @@ defmodule Pleroma.Config.DeprecationWarnings do def check_hellthread_threshold do if Config.get([:mrf_hellthread, :threshold]) do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! You are using the old configuration mechanism for the hellthread filter. Please check config.md. """) @@ -213,7 +213,7 @@ defmodule Pleroma.Config.DeprecationWarnings do check_gun_pool_options(), check_activity_expiration_config(), check_remote_ip_plug_name(), - check_uploders_s3_public_endpoint(), + check_uploaders_s3_public_endpoint(), check_old_chat_shoutbox(), check_quarantined_instances_tuples(), check_transparency_exclusions_tuples(), @@ -256,7 +256,7 @@ defmodule Pleroma.Config.DeprecationWarnings do move_namespace_and_warn(@mrf_config_map, warning_preface) end - @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | nil + @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | :error def move_namespace_and_warn(config_map, warning_preface) do warning = Enum.reduce(config_map, "", fn @@ -274,17 +274,17 @@ defmodule Pleroma.Config.DeprecationWarnings do if warning == "" do :ok else - Logger.warn(warning_preface <> warning) + Logger.warning(warning_preface <> warning) :error end end - @spec check_media_proxy_whitelist_config() :: :ok | nil + @spec check_media_proxy_whitelist_config() :: :ok | :error def check_media_proxy_whitelist_config do whitelist = Config.get([:media_proxy, :whitelist]) if Enum.any?(whitelist, &(not String.starts_with?(&1, "http"))) do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using old format (only domain) for MediaProxy whitelist option. Setting should work for now, but you are advised to change format to scheme with port to prevent possible issues later. """) @@ -299,7 +299,7 @@ defmodule Pleroma.Config.DeprecationWarnings do pool_config = Config.get(:connections_pool) if timeout = pool_config[:await_up_timeout] do - Logger.warn(""" + Logger.warning(""" !!!DEPRECATION WARNING!!! Your config is using old setting `config :pleroma, :connections_pool, await_up_timeout`. Please change to `config :pleroma, :connections_pool, connect_timeout` to ensure compatibility with future releases. """) @@ -331,7 +331,7 @@ defmodule Pleroma.Config.DeprecationWarnings do "\n* `:timeout` options in #{pool_name} pool is now `:recv_timeout`" end) - Logger.warn(Enum.join([warning_preface | pool_warnings])) + Logger.warning(Enum.join([warning_preface | pool_warnings])) Config.put(:pools, updated_config) :error @@ -340,7 +340,7 @@ defmodule Pleroma.Config.DeprecationWarnings do end end - @spec check_activity_expiration_config() :: :ok | nil + @spec check_activity_expiration_config() :: :ok | :error def check_activity_expiration_config do warning_preface = """ !!!DEPRECATION WARNING!!! @@ -356,7 +356,7 @@ defmodule Pleroma.Config.DeprecationWarnings do ) end - @spec check_remote_ip_plug_name() :: :ok | nil + @spec check_remote_ip_plug_name() :: :ok | :error def check_remote_ip_plug_name do warning_preface = """ !!!DEPRECATION WARNING!!! @@ -372,8 +372,8 @@ defmodule Pleroma.Config.DeprecationWarnings do ) end - @spec check_uploders_s3_public_endpoint() :: :ok | nil - def check_uploders_s3_public_endpoint do + @spec check_uploaders_s3_public_endpoint() :: :ok | :error + def check_uploaders_s3_public_endpoint do s3_config = Pleroma.Config.get([Pleroma.Uploaders.S3]) use_old_config = Keyword.has_key?(s3_config, :public_endpoint) @@ -393,7 +393,7 @@ defmodule Pleroma.Config.DeprecationWarnings do end end - @spec check_old_chat_shoutbox() :: :ok | nil + @spec check_old_chat_shoutbox() :: :ok | :error def check_old_chat_shoutbox do instance_config = Pleroma.Config.get([:instance]) chat_config = Pleroma.Config.get([:chat]) || [] diff --git a/lib/pleroma/config/oban.ex b/lib/pleroma/config/oban.ex @@ -23,7 +23,7 @@ defmodule Pleroma.Config.Oban do You are using old workers in Oban crontab settings, which were removed. Please, remove setting from crontab in your config file (prod.secret.exs): #{inspect(setting)} """ - |> Logger.warn() + |> Logger.warning() List.delete(acc, setting) else diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex @@ -21,7 +21,7 @@ defmodule Pleroma.Config.ReleaseRuntimeProvider do with_runtime_config = if File.exists?(config_path) do # <https://git.pleroma.social/pleroma/pleroma/-/issues/3135> - %File.Stat{mode: mode} = File.lstat!(config_path) + %File.Stat{mode: mode} = File.stat!(config_path) if Bitwise.band(mode, 0o007) > 0 do raise "Configuration at #{config_path} has world-permissions, execute the following: chmod o= #{config_path}" diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex @@ -55,8 +55,7 @@ defmodule Pleroma.Config.TransferTask do started_applications = Application.started_applications() - # TODO: some problem with prometheus after restart! - reject = [nil, :prometheus, :postgrex] + reject = [nil, :postgrex] reject = if restart_pleroma? do @@ -145,7 +144,7 @@ defmodule Pleroma.Config.TransferTask do error_msg = "updating env causes error, group: #{inspect(group)}, key: #{inspect(key)}, value: #{inspect(value)} error: #{inspect(error)}" - Logger.warn(error_msg) + Logger.warning(error_msg) nil end @@ -179,12 +178,12 @@ defmodule Pleroma.Config.TransferTask do :ok = Application.start(app) else nil -> - Logger.warn("#{app} is not started.") + Logger.warning("#{app} is not started.") error -> error |> inspect() - |> Logger.warn() + |> Logger.warning() end end diff --git a/lib/pleroma/config_db.ex b/lib/pleroma/config_db.ex @@ -54,7 +54,7 @@ defmodule Pleroma.ConfigDB do @spec get_by_params(map()) :: ConfigDB.t() | nil def get_by_params(%{group: _, key: _} = params), do: Repo.get_by(ConfigDB, params) - @spec changeset(ConfigDB.t(), map()) :: Changeset.t() + @spec changeset(ConfigDB.t(), map()) :: Ecto.Changeset.t() def changeset(config, params \\ %{}) do config |> cast(params, [:key, :group, :value]) @@ -138,7 +138,7 @@ defmodule Pleroma.ConfigDB do end end - @spec update_or_create(map()) :: {:ok, ConfigDB.t()} | {:error, Changeset.t()} + @spec update_or_create(map()) :: {:ok, ConfigDB.t()} | {:error, Ecto.Changeset.t()} def update_or_create(params) do params = Map.put(params, :value, to_elixir_types(params[:value])) search_opts = Map.take(params, [:group, :key]) @@ -175,7 +175,7 @@ defmodule Pleroma.ConfigDB do end) end - @spec delete(ConfigDB.t() | map()) :: {:ok, ConfigDB.t()} | {:error, Changeset.t()} + @spec delete(ConfigDB.t() | map()) :: {:ok, ConfigDB.t()} | {:error, Ecto.Changeset.t()} def delete(%ConfigDB{} = config), do: Repo.delete(config) def delete(params) do diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex @@ -19,7 +19,8 @@ defmodule Pleroma.Constants do "context_id", "deleted_activity_id", "pleroma_internal", - "generator" + "generator", + "rules" ] ) @@ -76,6 +77,14 @@ defmodule Pleroma.Constants do ] ) + const(allowed_user_actor_types, + do: [ + "Person", + "Service", + "Group" + ] + ) + # basic regex, just there to weed out potential mistakes # https://datatracker.ietf.org/doc/html/rfc2045#section-5.1 const(mime_regex, diff --git a/lib/pleroma/conversation.ex b/lib/pleroma/conversation.ex @@ -57,7 +57,7 @@ defmodule Pleroma.Conversation do 3. Bump all relevant participations to 'unread' """ def create_or_bump_for(activity, opts \\ []) do - with true <- Pleroma.Web.ActivityPub.Visibility.is_direct?(activity), + with true <- Pleroma.Web.ActivityPub.Visibility.direct?(activity), "Create" <- activity.data["type"], %Object{} = object <- Object.normalize(activity, fetch: false), true <- object.data["type"] in ["Note", "Question"], diff --git a/lib/pleroma/data_migration.ex b/lib/pleroma/data_migration.ex @@ -12,6 +12,8 @@ defmodule Pleroma.DataMigration do import Ecto.Changeset import Ecto.Query + @type t :: %__MODULE__{} + schema "data_migrations" do field(:name, :string) field(:state, State, default: :pending) diff --git a/lib/pleroma/docs/generator.ex b/lib/pleroma/docs/generator.ex @@ -15,8 +15,10 @@ defmodule Pleroma.Docs.Generator do :code.all_loaded() |> Enum.filter(fn {module, _} -> # This shouldn't be needed as all modules are expected to have module_info/1, - # but in test enviroments some transient modules `:elixir_compiler_XX` + # but in test environments some transient modules `:elixir_compiler_XX` # are loaded for some reason (where XX is a random integer). + Code.ensure_loaded(module) + if function_exported?(module, :module_info, 1) do module.module_info(:attributes) |> Keyword.get_values(:behaviour) diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Docs.JSON do :persistent_term.put(@term, Pleroma.Docs.Generator.convert_to_strings(descriptions)) end - @spec compiled_descriptions :: Map.t() + @spec compiled_descriptions :: map() def compiled_descriptions do :persistent_term.get(@term) end diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/bare_uri.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/bare_uri.ex @@ -8,10 +8,12 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.BareUri do def type, do: :string def cast(uri) when is_binary(uri) do - case URI.parse(uri) do - %URI{scheme: nil} -> :error - %URI{} -> {:ok, uri} - _ -> :error + parsed = URI.parse(uri) + + if is_nil(parsed.scheme) do + :error + else + {:ok, uri} end end diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex @@ -24,6 +24,8 @@ defmodule Pleroma.Emoji do defstruct [:code, :file, :tags, :safe_code, :safe_file] + @type t :: %__MODULE__{} + @doc "Build emoji struct" def build({code, file, tags}) do %__MODULE__{ @@ -49,12 +51,12 @@ defmodule Pleroma.Emoji do end @doc "Returns the path of the emoji `name`." - @spec get(String.t()) :: String.t() | nil + @spec get(String.t()) :: Pleroma.Emoji.t() | nil def get(name) do name = maybe_strip_name(name) case :ets.lookup(@ets, name) do - [{_, path}] -> path + [{_, emoji}] -> emoji _ -> nil end end @@ -136,23 +138,23 @@ defmodule Pleroma.Emoji do emojis = emojis ++ regional_indicators for emoji <- emojis do - def is_unicode_emoji?(unquote(emoji)), do: true + def unicode?(unquote(emoji)), do: true end - def is_unicode_emoji?(_), do: false + def unicode?(_), do: false @emoji_regex ~r/:[A-Za-z0-9_-]+(@.+)?:/ - def is_custom_emoji?(s) when is_binary(s), do: Regex.match?(@emoji_regex, s) + def custom?(s) when is_binary(s), do: Regex.match?(@emoji_regex, s) - def is_custom_emoji?(_), do: false + def custom?(_), do: false def maybe_strip_name(name) when is_binary(name), do: String.trim(name, ":") def maybe_strip_name(name), do: name def maybe_quote(name) when is_binary(name) do - if is_unicode_emoji?(name) do + if unicode?(name) do name else if String.starts_with?(name, ":") do diff --git a/lib/pleroma/emoji/loader.ex b/lib/pleroma/emoji/loader.ex @@ -15,8 +15,6 @@ defmodule Pleroma.Emoji.Loader do require Logger - @mix_env Mix.env() - @type pattern :: Regex.t() | module() | String.t() @type patterns :: pattern() | [pattern()] @type group_patterns :: keyword(patterns()) @@ -59,7 +57,7 @@ defmodule Pleroma.Emoji.Loader do Logger.info("Found emoji packs: #{Enum.join(packs, ", ")}") if not Enum.empty?(files) do - Logger.warn( + Logger.warning( "Found files in the emoji folder. These will be ignored, please move them to a subdirectory\nFound files: #{Enum.join(files, ", ")}" ) end @@ -79,7 +77,7 @@ defmodule Pleroma.Emoji.Loader do # for testing emoji.txt entries we do not want exposed in normal operation test_emoji = - if @mix_env == :test do + if Application.get_env(:pleroma, __MODULE__)[:test_emoji] do load_from_file("test/config/emoji.txt", emoji_groups) else [] diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex @@ -100,7 +100,7 @@ defmodule Pleroma.Emoji.Pack do {:ok, _emoji_files} = :zip.unzip( to_charlist(file.path), - [{:file_list, Enum.map(emojies, & &1[:path])}, {:cwd, tmp_dir}] + [{:file_list, Enum.map(emojies, & &1[:path])}, {:cwd, String.to_charlist(tmp_dir)}] ) {_, updated_pack} = @@ -209,7 +209,9 @@ defmodule Pleroma.Emoji.Pack do with :ok <- validate_shareable_packs_available(uri) do uri - |> URI.merge("/api/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}") + |> URI.merge( + "/api/v1/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}" + ) |> http_get() end end @@ -249,8 +251,12 @@ defmodule Pleroma.Emoji.Pack do uri = url |> String.trim() |> URI.parse() with :ok <- validate_shareable_packs_available(uri), + {:ok, %{"files_count" => files_count}} <- + uri |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}&page_size=0") |> http_get(), {:ok, remote_pack} <- - uri |> URI.merge("/api/pleroma/emoji/pack?name=#{name}") |> http_get(), + uri + |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}&page_size=#{files_count}") + |> http_get(), {:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name), {:ok, archive} <- download_archive(url, sha), pack <- copy_as(remote_pack, as || name), @@ -592,7 +598,7 @@ defmodule Pleroma.Emoji.Pack do {:ok, %{ sha: sha, - url: URI.merge(uri, "/api/pleroma/emoji/packs/archive?name=#{name}") |> to_string() + url: URI.merge(uri, "/api/v1/pleroma/emoji/packs/archive?name=#{name}") |> to_string() }} %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> diff --git a/lib/pleroma/filter.ex b/lib/pleroma/filter.ex @@ -216,9 +216,6 @@ defmodule Pleroma.Filter do :re -> ~r/\b#{phrases}\b/i - - _ -> - nil end end diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex @@ -241,13 +241,13 @@ defmodule Pleroma.FollowingRelationship do end @doc """ - For a query with joined activity, - keeps rows where activity's actor is followed by user -or- is NOT domain-blocked by user. + For a query with joined activity's actor, + keeps rows where actor is followed by user -or- is NOT domain-blocked by user. """ def keep_following_or_not_domain_blocked(query, user) do where( query, - [_, activity], + [_, user_actor: user_actor], fragment( # "(actor's domain NOT in domain_blocks) OR (actor IS in followed AP IDs)" """ @@ -255,9 +255,9 @@ defmodule Pleroma.FollowingRelationship do ? = ANY(SELECT ap_id FROM users AS u INNER JOIN following_relationships AS fr ON u.id = fr.following_id WHERE fr.follower_id = ? AND fr.state = ?) """, - activity.actor, + user_actor.ap_id, ^user.domain_blocks, - activity.actor, + user_actor.ap_id, ^User.binary_id(user.id), ^accept_state_code() ) diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex @@ -114,7 +114,7 @@ defmodule Pleroma.Gopher.Server.ProtocolHandler do def response("/notices/" <> id) do with %Activity{} = activity <- Activity.get_by_id(id), - true <- Visibility.is_public?(activity) do + true <- Visibility.public?(activity) do activities = ActivityPub.fetch_activities_for_context(activity.data["context"]) |> render_activities diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex @@ -56,7 +56,7 @@ defmodule Pleroma.Gun.Conn do {:ok, conn, protocol} else error -> - Logger.warn( + Logger.warning( "Opening proxied connection to #{compose_uri_log(uri)} failed with error #{inspect(error)}" ) @@ -90,7 +90,7 @@ defmodule Pleroma.Gun.Conn do {:ok, conn, protocol} else error -> - Logger.warn( + Logger.warning( "Opening socks proxied connection to #{compose_uri_log(uri)} failed with error #{inspect(error)}" ) @@ -106,7 +106,7 @@ defmodule Pleroma.Gun.Conn do {:ok, conn, protocol} else error -> - Logger.warn( + Logger.warning( "Opening connection to #{compose_uri_log(uri)} failed with error #{inspect(error)}" ) diff --git a/lib/pleroma/gun/connection_pool/reclaimer.ex b/lib/pleroma/gun/connection_pool/reclaimer.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Gun.ConnectionPool.Reclaimer do def start_monitor do pid = - case :gen_server.start(__MODULE__, [], name: {:via, Registry, {registry(), "reclaimer"}}) do + case GenServer.start_link(__MODULE__, [], name: {:via, Registry, {registry(), "reclaimer"}}) do {:ok, pid} -> pid diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -18,10 +18,12 @@ defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do ) end - def start_worker(opts, retry \\ false) do + def start_worker(opts, last_attempt \\ false) do case DynamicSupervisor.start_child(__MODULE__, {Pleroma.Gun.ConnectionPool.Worker, opts}) do {:error, :max_children} -> - if retry or free_pool() == :error do + funs = [fn -> last_attempt end, fn -> match?(:error, free_pool()) end] + + if Enum.any?(funs, fn fun -> fun.() end) do :telemetry.execute([:pleroma, :connection_pool, :provision_failure], %{opts: opts}) {:error, :pool_full} else diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex @@ -8,11 +8,14 @@ defmodule Pleroma.Helpers.MediaHelper do """ alias Pleroma.HTTP + alias Vix.Vips.Operation require Logger + @cachex Pleroma.Config.get([:cachex, :provider], Cachex) + def missing_dependencies do - Enum.reduce([imagemagick: "convert", ffmpeg: "ffmpeg"], [], fn {sym, executable}, acc -> + Enum.reduce([ffmpeg: "ffmpeg"], [], fn {sym, executable}, acc -> if Pleroma.Utils.command_available?(executable) do acc else @@ -22,141 +25,63 @@ defmodule Pleroma.Helpers.MediaHelper do end def image_resize(url, options) do - with executable when is_binary(executable) <- System.find_executable("convert"), - {:ok, args} <- prepare_image_resize_args(options), - {:ok, env} <- HTTP.get(url, [], pool: :media), - {:ok, fifo_path} <- mkfifo() do - args = List.flatten([fifo_path, args]) - run_fifo(fifo_path, env, executable, args) + with {:ok, env} <- HTTP.get(url, [], pool: :media), + {:ok, resized} <- + Operation.thumbnail_buffer(env.body, options.max_width, + height: options.max_height, + size: :VIPS_SIZE_DOWN + ) do + if options[:format] == "png" do + Operation.pngsave_buffer(resized, Q: options[:quality]) + else + Operation.jpegsave_buffer(resized, Q: options[:quality], interlace: true) + end else - nil -> {:error, {:convert, :command_not_found}} {:error, _} = error -> error end end - defp prepare_image_resize_args( - %{max_width: max_width, max_height: max_height, format: "png"} = options - ) do - quality = options[:quality] || 85 - resize = Enum.join([max_width, "x", max_height, ">"]) - - args = [ - "-resize", - resize, - "-quality", - to_string(quality), - "png:-" - ] - - {:ok, args} - end - - defp prepare_image_resize_args(%{max_width: max_width, max_height: max_height} = options) do - quality = options[:quality] || 85 - resize = Enum.join([max_width, "x", max_height, ">"]) - - args = [ - "-interlace", - "Plane", - "-resize", - resize, - "-quality", - to_string(quality), - "jpg:-" - ] - - {:ok, args} - end - - defp prepare_image_resize_args(_), do: {:error, :missing_options} - # Note: video thumbnail is intentionally not resized (always has original dimensions) + @spec video_framegrab(String.t()) :: {:ok, binary()} | {:error, any()} def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), + false <- @cachex.exists?(:failed_media_helper_cache, url), {:ok, env} <- HTTP.get(url, [], pool: :media), - {:ok, fifo_path} <- mkfifo(), - args = [ - "-y", - "-i", - fifo_path, - "-vframes", - "1", - "-f", - "mjpeg", - "-loglevel", - "error", - "-" - ] do - run_fifo(fifo_path, env, executable, args) + {:ok, pid} <- StringIO.open(env.body) do + body_stream = IO.binstream(pid, 1) + + task = + Task.async(fn -> + Exile.stream!( + [ + executable, + "-i", + "pipe:0", + "-vframes", + "1", + "-f", + "mjpeg", + "pipe:1" + ], + input: body_stream, + ignore_epipe: true, + stderr: :disable + ) + |> Enum.into(<<>>) + end) + + case Task.yield(task, 5_000) do + nil -> + Task.shutdown(task) + @cachex.put(:failed_media_helper_cache, url, nil) + {:error, {:ffmpeg, :timeout}} + + result -> + {:ok, result} + end else nil -> {:error, {:ffmpeg, :command_not_found}} {:error, _} = error -> error end end - - defp run_fifo(fifo_path, env, executable, args) do - pid = - Port.open({:spawn_executable, executable}, [ - :use_stdio, - :stream, - :exit_status, - :binary, - args: args - ]) - - fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) - fix = Pleroma.Helpers.QtFastStart.fix(env.body) - true = Port.command(fifo, fix) - :erlang.port_close(fifo) - loop_recv(pid) - after - File.rm(fifo_path) - end - - defp mkfifo do - path = Path.join(System.tmp_dir!(), "pleroma-media-preview-pipe-#{Ecto.UUID.generate()}") - - case System.cmd("mkfifo", [path]) do - {_, 0} -> - spawn(fifo_guard(path)) - {:ok, path} - - {_, err} -> - {:error, {:fifo_failed, err}} - end - end - - defp fifo_guard(path) do - pid = self() - - fn -> - ref = Process.monitor(pid) - - receive do - {:DOWN, ^ref, :process, ^pid, _} -> - File.rm(path) - end - end - end - - defp loop_recv(pid) do - loop_recv(pid, <<>>) - end - - defp loop_recv(pid, acc) do - receive do - {^pid, {:data, data}} -> - loop_recv(pid, acc <> data) - - {^pid, {:exit_status, 0}} -> - {:ok, acc} - - {^pid, {:exit_status, status}} -> - {:error, status} - after - 5000 -> - :erlang.port_close(pid) - {:error, :timeout} - end - end end diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex @@ -40,16 +40,21 @@ defmodule Pleroma.Helpers.QtFastStart do got_mdat, acc ) do - full_size = (size - 8) * 8 - <<data::bits-size(full_size), rest::bits>> = rest - - acc = [ - {fourcc, pos, pos + size, size, - <<size::integer-big-size(32), fourcc::bits-size(32), data::bits>>} - | acc - ] - - fix(rest, pos + size, got_moov || fourcc == "moov", got_mdat || fourcc == "mdat", acc) + try do + full_size = (size - 8) * 8 + <<data::bits-size(full_size), rest::bits>> = rest + + acc = [ + {fourcc, pos, pos + size, size, + <<size::integer-big-size(32), fourcc::bits-size(32), data::bits>>} + | acc + ] + + fix(rest, pos + size, got_moov || fourcc == "moov", got_mdat || fourcc == "mdat", acc) + rescue + _ -> + :abort + end end defp fix(<<>>, _pos, _, _, acc) do @@ -121,9 +126,15 @@ defmodule Pleroma.Helpers.QtFastStart do <<pos::integer-big-size(unquote(size)), rest::bits>>, acc ) do - rewrite_entries(unquote(size), offset, rest, [ - acc | <<pos + offset::integer-big-size(unquote(size))>> - ]) + rewrite_entries( + unquote(size), + offset, + rest, + acc ++ + [ + <<pos + offset::integer-big-size(unquote(size))>> + ] + ) end end diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex @@ -6,8 +6,6 @@ defmodule Pleroma.HTML do # Scrubbers are compiled on boot so they can be configured in OTP releases # @on_load :compile_scrubbers - @cachex Pleroma.Config.get([:cachex, :provider], Cachex) - def compile_scrubbers do dir = Path.join(:code.priv_dir(:pleroma), "scrubbers") @@ -67,22 +65,9 @@ defmodule Pleroma.HTML do end end - def extract_first_external_url_from_object(%{data: %{"content" => content}} = object) + @spec extract_first_external_url_from_object(Pleroma.Object.t()) :: String.t() | nil + def extract_first_external_url_from_object(%{data: %{"content" => content}}) when is_binary(content) do - unless object.data["fake"] do - key = "URL|#{object.id}" - - @cachex.fetch!(:scrubber_cache, key, fn _key -> - {:commit, {:ok, extract_first_external_url(content)}} - end) - else - {:ok, extract_first_external_url(content)} - end - end - - def extract_first_external_url_from_object(_), do: {:error, :no_content} - - def extract_first_external_url(content) do content |> Floki.parse_fragment!() |> Floki.find("a:not(.mention,.hashtag,.attachment,[rel~=\"tag\"])") @@ -90,4 +75,6 @@ defmodule Pleroma.HTML do |> Floki.attribute("href") |> Enum.at(0) end + + def extract_first_external_url_from_object(_), do: nil end diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex @@ -106,6 +106,10 @@ defmodule Pleroma.HTTP do [Tesla.Middleware.FollowRedirects, Pleroma.Tesla.Middleware.ConnectionPool] end + defp adapter_middlewares({Tesla.Adapter.Finch, _}) do + [Tesla.Middleware.FollowRedirects] + end + defp adapter_middlewares(_) do if Pleroma.Config.get(:env) == :test do # Emulate redirects in test env, which are handled by adapters in other environments diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex @@ -15,8 +15,8 @@ defmodule Pleroma.HTTP.AdapterHelper do require Logger @type proxy :: - {Connection.host(), pos_integer()} - | {Connection.proxy_type(), Connection.host(), pos_integer()} + {host(), pos_integer()} + | {proxy_type(), host(), pos_integer()} @callback options(keyword(), URI.t()) :: keyword() @@ -70,15 +70,15 @@ defmodule Pleroma.HTTP.AdapterHelper do {:ok, parse_host(host), port} else {_, _} -> - Logger.warn("Parsing port failed #{inspect(proxy)}") + Logger.warning("Parsing port failed #{inspect(proxy)}") {:error, :invalid_proxy_port} :error -> - Logger.warn("Parsing port failed #{inspect(proxy)}") + Logger.warning("Parsing port failed #{inspect(proxy)}") {:error, :invalid_proxy_port} _ -> - Logger.warn("Parsing proxy failed #{inspect(proxy)}") + Logger.warning("Parsing proxy failed #{inspect(proxy)}") {:error, :invalid_proxy} end end @@ -88,7 +88,7 @@ defmodule Pleroma.HTTP.AdapterHelper do {:ok, type, parse_host(host), port} else _ -> - Logger.warn("Parsing proxy failed #{inspect(proxy)}") + Logger.warning("Parsing proxy failed #{inspect(proxy)}") {:error, :invalid_proxy} end end diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex @@ -54,12 +54,12 @@ defmodule Pleroma.HTTP.RequestBuilder do @doc """ Add optional parameters to the request """ - @spec add_param(Request.t(), atom(), atom(), any()) :: Request.t() + @spec add_param(Request.t(), atom(), atom() | String.t(), any()) :: Request.t() def add_param(request, :query, :query, values), do: %{request | query: values} def add_param(request, :body, :body, value), do: %{request | body: value} - def add_param(request, :body, key, value) do + def add_param(request, :body, key, value) when is_binary(key) do request |> Map.put(:body, Multipart.new()) |> Map.update!( diff --git a/lib/pleroma/http/web_push.ex b/lib/pleroma/http/web_push.ex @@ -6,7 +6,11 @@ defmodule Pleroma.HTTP.WebPush do @moduledoc false def post(url, payload, headers, options \\ []) do - list_headers = Map.to_list(headers) + list_headers = + headers + |> Map.to_list() + |> Kernel.++([{"content-type", "octet-stream"}]) + Pleroma.HTTP.post(url, payload, list_headers, options) end end diff --git a/lib/pleroma/instances.ex b/lib/pleroma/instances.ex @@ -7,16 +7,15 @@ defmodule Pleroma.Instances do alias Pleroma.Instances.Instance - def filter_reachable(urls_or_hosts), do: Instance.filter_reachable(urls_or_hosts) + defdelegate filter_reachable(urls_or_hosts), to: Instance - def reachable?(url_or_host), do: Instance.reachable?(url_or_host) + defdelegate reachable?(url_or_host), to: Instance - def set_reachable(url_or_host), do: Instance.set_reachable(url_or_host) + defdelegate set_reachable(url_or_host), to: Instance - def set_unreachable(url_or_host, unreachable_since \\ nil), - do: Instance.set_unreachable(url_or_host, unreachable_since) + defdelegate set_unreachable(url_or_host, unreachable_since \\ nil), to: Instance - def get_consistently_unreachable, do: Instance.get_consistently_unreachable() + defdelegate get_consistently_unreachable, to: Instance def set_consistently_unreachable(url_or_host), do: set_unreachable(url_or_host, reachability_datetime_threshold()) diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex @@ -97,13 +97,9 @@ defmodule Pleroma.Instances.Instance do def reachable?(url_or_host) when is_binary(url_or_host), do: true def set_reachable(url_or_host) when is_binary(url_or_host) do - with host <- host(url_or_host), - %Instance{} = existing_record <- Repo.get_by(Instance, %{host: host}) do - {:ok, _instance} = - existing_record - |> changeset(%{unreachable_since: nil}) - |> Repo.update() - end + %Instance{host: host(url_or_host)} + |> changeset(%{unreachable_since: nil}) + |> Repo.insert(on_conflict: {:replace, [:unreachable_since]}, conflict_target: :host) end def set_reachable(_), do: {:error, nil} @@ -177,7 +173,7 @@ defmodule Pleroma.Instances.Instance do end rescue e -> - Logger.warn("Instance.get_or_update_favicon(\"#{host}\") error: #{inspect(e)}") + Logger.warning("Instance.get_or_update_favicon(\"#{host}\") error: #{inspect(e)}") nil end @@ -205,7 +201,7 @@ defmodule Pleroma.Instances.Instance do end rescue e -> - Logger.warn( + Logger.warning( "Instance.scrape_favicon(\"#{to_string(instance_uri)}\") error: #{inspect(e)}" ) @@ -288,7 +284,7 @@ defmodule Pleroma.Instances.Instance do end rescue e -> - Logger.warn( + Logger.warning( "Instance.scrape_metadata(\"#{to_string(instance_uri)}\") error: #{inspect(e)}" ) diff --git a/lib/pleroma/maintenance.ex b/lib/pleroma/maintenance.ex @@ -20,7 +20,7 @@ defmodule Pleroma.Maintenance do "full" -> Logger.info("Running VACUUM FULL.") - Logger.warn( + Logger.warning( "Re-packing your entire database may take a while and will consume extra disk space during the process." ) diff --git a/lib/pleroma/maps.ex b/lib/pleroma/maps.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Maps do @@ -18,4 +18,17 @@ defmodule Pleroma.Maps do rescue _ -> data end + + def filter_empty_values(data) do + # TODO: Change to Map.filter in Elixir 1.13+ + data + |> Enum.filter(fn + {_k, nil} -> false + {_k, ""} -> false + {_k, []} -> false + {_k, %{} = v} -> Map.keys(v) != [] + {_k, _v} -> true + end) + |> Map.new() + end end diff --git a/lib/pleroma/mfa.ex b/lib/pleroma/mfa.ex @@ -77,7 +77,7 @@ defmodule Pleroma.MFA do {:ok, codes} else {:error, msg} -> - %{error: msg} + {:error, msg} end end diff --git a/lib/pleroma/mfa/totp.ex b/lib/pleroma/mfa/totp.ex @@ -14,6 +14,7 @@ defmodule Pleroma.MFA.TOTP do @doc """ https://github.com/google/google-authenticator/wiki/Key-Uri-Format """ + @spec provisioning_uri(String.t(), String.t(), list()) :: String.t() def provisioning_uri(secret, label, opts \\ []) do query = %{ @@ -27,7 +28,7 @@ defmodule Pleroma.MFA.TOTP do |> URI.encode_query() %URI{scheme: "otpauth", host: "totp", path: "/" <> label, query: query} - |> URI.to_string() + |> to_string() end defp default_period, do: Config.get(@config_ns ++ [:period]) diff --git a/lib/pleroma/migrators/hashtags_table_migrator.ex b/lib/pleroma/migrators/hashtags_table_migrator.ex @@ -100,7 +100,7 @@ defmodule Pleroma.Migrators.HashtagsTableMigrator do |> where([_o, hashtags_objects], is_nil(hashtags_objects.object_id)) end - @spec transfer_object_hashtags(Map.t()) :: {:noop | :ok | :error, integer()} + @spec transfer_object_hashtags(map()) :: {:noop | :ok | :error, integer()} defp transfer_object_hashtags(object) do embedded_tags = if Map.has_key?(object, :tag), do: object.tag, else: object.data["tag"] hashtags = Object.object_data_hashtags(%{"tag" => embedded_tags}) diff --git a/lib/pleroma/migrators/support/base_migrator.ex b/lib/pleroma/migrators/support/base_migrator.ex @@ -73,7 +73,7 @@ defmodule Pleroma.Migrators.Support.BaseMigrator do data_migration.state == :manual or data_migration.name in manual_migrations -> message = "Data migration is in manual execution or manual fix mode." update_status(:manual, message) - Logger.warn("#{__MODULE__}: #{message}") + Logger.warning("#{__MODULE__}: #{message}") data_migration.state == :complete -> on_complete(data_migration) @@ -109,7 +109,7 @@ defmodule Pleroma.Migrators.Support.BaseMigrator do Putting data migration to manual fix mode. Try running `#{__MODULE__}.retry_failed/0`. """ - Logger.warn("#{__MODULE__}: #{message}") + Logger.warning("#{__MODULE__}: #{message}") update_status(:manual, message) on_complete(data_migration()) @@ -125,7 +125,7 @@ defmodule Pleroma.Migrators.Support.BaseMigrator do defp on_complete(data_migration) do if data_migration.feature_lock || feature_state() == :disabled do - Logger.warn( + Logger.warning( "#{__MODULE__}: migration complete but feature is locked; consider enabling." ) @@ -188,10 +188,11 @@ defmodule Pleroma.Migrators.Support.BaseMigrator do end defp fault_rate do - with failures_count when is_integer(failures_count) <- failures_count() do + with failures_count when is_integer(failures_count) <- failures_count(), + true <- failures_count > 0 do failures_count / Enum.max([get_stat(:affected_count, 0), 1]) else - _ -> :error + _ -> 0 end end diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex @@ -121,7 +121,7 @@ defmodule Pleroma.ModerationLog do defp prepare_log_data(attrs), do: attrs - @spec insert_log(log_params()) :: {:ok, ModerationLog} | {:error, any} + @spec insert_log(log_params()) :: {:ok, ModerationLog.t()} | {:error, any} def insert_log(%{actor: %User{}, subject: subjects, permission: permission} = attrs) do data = attrs @@ -248,7 +248,8 @@ defmodule Pleroma.ModerationLog do |> insert_log_entry_with_message() end - @spec insert_log_entry_with_message(ModerationLog) :: {:ok, ModerationLog} | {:error, any} + @spec insert_log_entry_with_message(ModerationLog.t()) :: + {:ok, ModerationLog.t()} | {:error, any} defp insert_log_entry_with_message(entry) do entry.data["message"] |> put_in(get_log_entry_message(entry)) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex @@ -88,7 +88,7 @@ defmodule Pleroma.Notification do where: q.seen == true, select: type(q.id, :string), limit: 1, - order_by: [desc: :id] + order_by: fragment("? desc nulls last", q.id) ) end @@ -137,7 +137,7 @@ defmodule Pleroma.Notification do blocked_ap_ids = opts[:blocked_users_ap_ids] || User.blocked_users_ap_ids(user) query - |> where([n, a], a.actor not in ^blocked_ap_ids) + |> where([..., user_actor: user_actor], user_actor.ap_id not in ^blocked_ap_ids) |> FollowingRelationship.keep_following_or_not_domain_blocked(user) end @@ -148,7 +148,7 @@ defmodule Pleroma.Notification do blocker_ap_ids = User.incoming_relationships_ungrouped_ap_ids(user, [:block]) query - |> where([n, a], a.actor not in ^blocker_ap_ids) + |> where([..., user_actor: user_actor], user_actor.ap_id not in ^blocker_ap_ids) end end @@ -161,7 +161,7 @@ defmodule Pleroma.Notification do opts[:notification_muted_users_ap_ids] || User.notification_muted_users_ap_ids(user) query - |> where([n, a], a.actor not in ^notification_muted_ap_ids) + |> where([..., user_actor: user_actor], user_actor.ap_id not in ^notification_muted_ap_ids) |> join(:left, [n, a], tm in ThreadMute, on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data), as: :thread_mute @@ -280,15 +280,10 @@ defmodule Pleroma.Notification do select: n.id ) - {:ok, %{ids: {_, notification_ids}}} = - Multi.new() - |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) - |> Marker.multi_set_last_read_id(user, "notifications") - |> Repo.transaction() - - for_user_query(user) - |> where([n], n.id in ^notification_ids) - |> Repo.all() + Multi.new() + |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) + |> Marker.multi_set_last_read_id(user, "notifications") + |> Repo.transaction() end @spec read_one(User.t(), String.t()) :: @@ -299,10 +294,6 @@ defmodule Pleroma.Notification do |> Multi.update(:update, changeset(notification, %{seen: true})) |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() - |> case do - {:ok, %{update: notification}} -> {:ok, notification} - {:error, :update, changeset, _} -> {:error, changeset} - end end end @@ -361,36 +352,32 @@ defmodule Pleroma.Notification do end end - @spec create_notifications(Activity.t(), keyword()) :: {:ok, [Notification.t()] | []} - def create_notifications(activity, options \\ []) + @spec create_notifications(Activity.t()) :: {:ok, [Notification.t()] | []} + def create_notifications(activity) - def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = activity, options) do + def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = activity) do object = Object.normalize(activity, fetch: false) if object && object.data["type"] == "Answer" do {:ok, []} else - do_create_notifications(activity, options) + do_create_notifications(activity) end end - def create_notifications(%Activity{data: %{"type" => type}} = activity, options) + def create_notifications(%Activity{data: %{"type" => type}} = activity) when type in ["Follow", "Like", "Announce", "Move", "EmojiReact", "Flag", "Update"] do - do_create_notifications(activity, options) + do_create_notifications(activity) end - def create_notifications(_, _), do: {:ok, []} - - defp do_create_notifications(%Activity{} = activity, options) do - do_send = Keyword.get(options, :do_send, true) + def create_notifications(_), do: {:ok, []} - {enabled_receivers, disabled_receivers} = get_notified_from_activity(activity) - potential_receivers = enabled_receivers ++ disabled_receivers + defp do_create_notifications(%Activity{} = activity) do + enabled_receivers = get_notified_from_activity(activity) notifications = - Enum.map(potential_receivers, fn user -> - do_send = do_send && user in enabled_receivers - create_notification(activity, user, do_send: do_send) + Enum.map(enabled_receivers, fn user -> + create_notification(activity, user) end) |> Enum.reject(&is_nil/1) @@ -450,7 +437,6 @@ defmodule Pleroma.Notification do # TODO move to sql, too. def create_notification(%Activity{} = activity, %User{} = user, opts \\ []) do - do_send = Keyword.get(opts, :do_send, true) type = Keyword.get(opts, :type, type_from_activity(activity)) unless skip?(activity, user, opts) do @@ -465,11 +451,6 @@ defmodule Pleroma.Notification do |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() - if do_send do - Streamer.stream(["user", "user:notification"], notification) - Push.send(notification) - end - notification end end @@ -527,10 +508,7 @@ defmodule Pleroma.Notification do |> exclude_relationship_restricted_ap_ids(activity) |> exclude_thread_muter_ap_ids(activity) - notification_enabled_users = - Enum.filter(potential_receivers, fn u -> u.ap_id in notification_enabled_ap_ids end) - - {notification_enabled_users, potential_receivers -- notification_enabled_users} + Enum.filter(potential_receivers, fn u -> u.ap_id in notification_enabled_ap_ids end) end def get_notified_from_activity(_, _local_only), do: {[], []} @@ -643,6 +621,7 @@ defmodule Pleroma.Notification do def skip?(%Activity{} = activity, %User{} = user, opts) do [ :self, + :internal, :invisible, :block_from_strangers, :recently_followed, @@ -662,6 +641,12 @@ defmodule Pleroma.Notification do end end + def skip?(:internal, %Activity{} = activity, _user, _opts) do + actor = activity.data["actor"] + user = User.get_cached_by_ap_id(actor) + User.internal?(user) + end + def skip?(:invisible, %Activity{} = activity, _user, _opts) do actor = activity.data["actor"] user = User.get_cached_by_ap_id(actor) @@ -748,4 +733,12 @@ defmodule Pleroma.Notification do ) |> Repo.update_all(set: [seen: true]) end + + @spec send(list(Notification.t())) :: :ok + def send(notifications) do + Enum.each(notifications, fn notification -> + Streamer.stream(["user", "user:notification"], notification) + Push.send(notification) + end) + end end diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex @@ -177,7 +177,10 @@ defmodule Pleroma.Object do ap_id Keyword.get(options, :fetch) -> - Fetcher.fetch_object_from_id!(ap_id, options) + case Fetcher.fetch_object_from_id(ap_id, options) do + {:ok, object} -> object + _ -> nil + end true -> get_cached_by_ap_id(ap_id) @@ -239,17 +242,17 @@ defmodule Pleroma.Object do {:ok, _} <- invalid_object_cache(object) do cleanup_attachments( Config.get([:instance, :cleanup_attachments]), - %{"object" => object} + object ) {:ok, object, deleted_activity} end end - @spec cleanup_attachments(boolean(), %{required(:object) => map()}) :: + @spec cleanup_attachments(boolean(), Object.t()) :: {:ok, Oban.Job.t() | nil} - def cleanup_attachments(true, %{"object" => _} = params) do - AttachmentsCleanupWorker.enqueue("cleanup_attachments", params) + def cleanup_attachments(true, %Object{} = object) do + AttachmentsCleanupWorker.enqueue("cleanup_attachments", %{"object" => object}) end def cleanup_attachments(_, _), do: {:ok, nil} diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex @@ -72,20 +72,25 @@ defmodule Pleroma.Object.Fetcher do {:object, data, Object.normalize(activity, fetch: false)} do {:ok, object} else - {:allowed_depth, false} -> - {:error, "Max thread distance exceeded."} + {:allowed_depth, false} = e -> + log_fetch_error(id, e) + {:error, :allowed_depth} - {:containment, _} -> - {:error, "Object containment failed."} + {:containment, reason} = e -> + log_fetch_error(id, e) + {:error, reason} - {:transmogrifier, {:error, {:reject, e}}} -> - {:reject, e} + {:transmogrifier, {:error, {:reject, reason}}} = e -> + log_fetch_error(id, e) + {:reject, reason} - {:transmogrifier, {:reject, e}} -> - {:reject, e} + {:transmogrifier, {:reject, reason}} = e -> + log_fetch_error(id, e) + {:reject, reason} - {:transmogrifier, _} = e -> - {:error, e} + {:transmogrifier, reason} = e -> + log_fetch_error(id, e) + {:error, reason} {:object, data, nil} -> reinject_object(%Object{}, data) @@ -96,14 +101,21 @@ defmodule Pleroma.Object.Fetcher do {:fetch_object, %Object{} = object} -> {:ok, object} - {:fetch, {:error, error}} -> - {:error, error} + {:fetch, {:error, reason}} = e -> + log_fetch_error(id, e) + {:error, reason} e -> - e + log_fetch_error(id, e) + {:error, e} end end + defp log_fetch_error(id, error) do + Logger.metadata(object: id) + Logger.error("Object rejected while fetching #{id} #{inspect(error)}") + end + defp prepare_activity_params(data) do %{ "type" => "Create", @@ -117,26 +129,6 @@ defmodule Pleroma.Object.Fetcher do |> Maps.put_if_present("bcc", data["bcc"]) end - def fetch_object_from_id!(id, options \\ []) do - with {:ok, object} <- fetch_object_from_id(id, options) do - object - else - {:error, %Tesla.Mock.Error{}} -> - nil - - {:error, "Object has been deleted"} -> - nil - - {:reject, reason} -> - Logger.info("Rejected #{id} while fetching: #{inspect(reason)}") - nil - - e -> - Logger.error("Error while fetching #{id}: #{inspect(e)}") - nil - end - end - defp make_signature(id, date) do uri = URI.parse(id) @@ -227,8 +219,11 @@ defmodule Pleroma.Object.Fetcher do {:error, {:content_type, nil}} end + {:ok, %{status: code}} when code in [401, 403] -> + {:error, :forbidden} + {:ok, %{status: code}} when code in [404, 410] -> - {:error, "Object has been deleted"} + {:error, :not_found} {:error, e} -> {:error, e} diff --git a/lib/pleroma/pagination.ex b/lib/pleroma/pagination.ex @@ -61,15 +61,16 @@ defmodule Pleroma.Pagination do |> Repo.all() end - @spec paginate(Ecto.Query.t(), map(), type(), atom() | nil) :: [Ecto.Schema.t()] - def paginate(query, options, method \\ :keyset, table_binding \\ nil) - - def paginate(list, options, _method, _table_binding) when is_list(list) do + @spec paginate_list(list(), keyword()) :: list() + def paginate_list(list, options) do offset = options[:offset] || 0 limit = options[:limit] || 0 Enum.slice(list, offset, limit) end + @spec paginate(Ecto.Query.t(), map(), type(), atom() | nil) :: [Ecto.Schema.t()] + def paginate(query, options, method \\ :keyset, table_binding \\ nil) + def paginate(query, options, :keyset, table_binding) do query |> restrict(:min_id, options, table_binding) diff --git a/lib/pleroma/password/pbkdf2.ex b/lib/pleroma/password/pbkdf2.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Password.Pbkdf2 do iterations = String.to_integer(iterations) - digest = String.to_atom(digest) + digest = String.to_existing_atom(digest) binary_hash = KeyGenerator.generate(password, salt, digest: digest, iterations: iterations, length: 64) diff --git a/lib/pleroma/prom_ex.ex b/lib/pleroma/prom_ex.ex @@ -0,0 +1,49 @@ +defmodule Pleroma.PromEx do + use PromEx, otp_app: :pleroma + + alias PromEx.Plugins + + @impl true + def plugins do + [ + # PromEx built in plugins + Plugins.Application, + Plugins.Beam, + {Plugins.Phoenix, router: Pleroma.Web.Router, endpoint: Pleroma.Web.Endpoint}, + Plugins.Ecto, + Plugins.Oban + # Plugins.PhoenixLiveView, + # Plugins.Absinthe, + # Plugins.Broadway, + + # Add your own PromEx metrics plugins + # Pleroma.Users.PromExPlugin + ] + end + + @impl true + def dashboard_assigns do + [ + datasource_id: Pleroma.Config.get([Pleroma.PromEx, :datasource]), + default_selected_interval: "30s" + ] + end + + @impl true + def dashboards do + [ + # PromEx built in Grafana dashboards + {:prom_ex, "application.json"}, + {:prom_ex, "beam.json"}, + {:prom_ex, "phoenix.json"}, + {:prom_ex, "ecto.json"}, + {:prom_ex, "oban.json"} + # {:prom_ex, "phoenix_live_view.json"}, + # {:prom_ex, "absinthe.json"}, + # {:prom_ex, "broadway.json"}, + + # Add your dashboard definitions here with the format: {:otp_app, "path_in_priv"} + # {:pleroma, "/grafana_dashboards/user_metrics.json"} + ] + end +end diff --git a/lib/pleroma/release_tasks.ex b/lib/pleroma/release_tasks.ex @@ -55,12 +55,6 @@ defmodule Pleroma.ReleaseTasks do {:error, term} when is_binary(term) -> IO.puts(:stderr, "The database for #{inspect(@repo)} couldn't be created: #{term}") - - {:error, term} -> - IO.puts( - :stderr, - "The database for #{inspect(@repo)} couldn't be created: #{inspect(term)}" - ) end end end diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Repo do import Ecto.Query require Logger - defmodule Instrumenter, do: use(Prometheus.EctoInstrumenter) - @doc """ Dynamically loads the repository url from the DATABASE_URL environment variable. diff --git a/lib/pleroma/report_note.ex b/lib/pleroma/report_note.ex @@ -23,8 +23,8 @@ defmodule Pleroma.ReportNote do timestamps() end - @spec create(FlakeId.Ecto.CompatType.t(), FlakeId.Ecto.CompatType.t(), String.t()) :: - {:ok, ReportNote.t()} | {:error, Changeset.t()} + @spec create(Ecto.UUID.t(), Ecto.UUID.t(), String.t()) :: + {:ok, ReportNote.t()} | {:error, Ecto.Changeset.t()} def create(user_id, activity_id, content) do attrs = %{ user_id: user_id, @@ -38,8 +38,8 @@ defmodule Pleroma.ReportNote do |> Repo.insert() end - @spec destroy(FlakeId.Ecto.CompatType.t()) :: - {:ok, ReportNote.t()} | {:error, Changeset.t()} + @spec destroy(Ecto.UUID.t()) :: + {:ok, ReportNote.t()} | {:error, Ecto.Changeset.t()} def destroy(id) do from(r in ReportNote, where: r.id == ^id) |> Repo.one() diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex @@ -8,7 +8,7 @@ defmodule Pleroma.ReverseProxy do ~w(if-unmodified-since if-none-match) ++ @range_headers @resp_cache_headers ~w(etag date last-modified) @keep_resp_headers @resp_cache_headers ++ - ~w(content-length content-type content-disposition content-encoding) ++ + ~w(content-type content-disposition content-encoding) ++ ~w(content-range accept-ranges vary) @default_cache_control_header "public, max-age=1209600" @valid_resp_codes [200, 206, 304] @@ -81,16 +81,16 @@ defmodule Pleroma.ReverseProxy do import Plug.Conn @type option() :: - {:max_read_duration, :timer.time() | :infinity} + {:max_read_duration, non_neg_integer() | :infinity} | {:max_body_length, non_neg_integer() | :infinity} - | {:failed_request_ttl, :timer.time() | :infinity} - | {:http, []} + | {:failed_request_ttl, non_neg_integer() | :infinity} + | {:http, keyword()} | {:req_headers, [{String.t(), String.t()}]} | {:resp_headers, [{String.t(), String.t()}]} - | {:inline_content_types, boolean() | [String.t()]} + | {:inline_content_types, boolean() | list(String.t())} | {:redirect_on_failure, boolean()} - @spec call(Plug.Conn.t(), url :: String.t(), [option()]) :: Plug.Conn.t() + @spec call(Plug.Conn.t(), String.t(), list(option())) :: Plug.Conn.t() def call(_conn, _url, _opts \\ []) def call(conn = %{method: method}, url, opts) when method in @methods do @@ -192,7 +192,7 @@ defmodule Pleroma.ReverseProxy do halt(conn) {:error, error, conn} -> - Logger.warn( + Logger.warning( "#{__MODULE__} request to #{url} failed while reading/chunking: #{inspect(error)}" ) @@ -388,8 +388,6 @@ defmodule Pleroma.ReverseProxy do defp body_size_constraint(_, _), do: :ok - defp check_read_duration(nil = _duration, max), do: check_read_duration(@max_read_duration, max) - defp check_read_duration(duration, max) when is_integer(duration) and is_integer(max) and max > 0 do if duration > max do @@ -407,10 +405,6 @@ defmodule Pleroma.ReverseProxy do {:ok, previous_duration + duration} end - defp increase_read_duration(_) do - {:ok, :no_duration_limit, :no_duration_limit} - end - defp client, do: Pleroma.ReverseProxy.Client.Wrapper defp track_failed_url(url, error, opts) do diff --git a/lib/pleroma/rule.ex b/lib/pleroma/rule.ex @@ -0,0 +1,68 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Rule do + use Ecto.Schema + + import Ecto.Changeset + import Ecto.Query + + alias Pleroma.Repo + alias Pleroma.Rule + + schema "rules" do + field(:priority, :integer, default: 0) + field(:text, :string) + field(:hint, :string) + + timestamps() + end + + def changeset(%Rule{} = rule, params \\ %{}) do + rule + |> cast(params, [:priority, :text, :hint]) + |> validate_required([:text]) + end + + def query do + Rule + |> order_by(asc: :priority) + |> order_by(asc: :id) + end + + def get(ids) when is_list(ids) do + from(r in __MODULE__, where: r.id in ^ids) + |> Repo.all() + end + + def get(id), do: Repo.get(__MODULE__, id) + + def exists?(id) do + from(r in __MODULE__, where: r.id == ^id) + |> Repo.exists?() + end + + def create(params) do + {:ok, rule} = + %Rule{} + |> changeset(params) + |> Repo.insert() + + rule + end + + def update(params, id) do + {:ok, rule} = + get(id) + |> changeset(params) + |> Repo.update() + + rule + end + + def delete(id) do + get(id) + |> Repo.delete() + end +end diff --git a/lib/pleroma/scheduled_activity.ex b/lib/pleroma/scheduled_activity.ex @@ -6,7 +6,6 @@ defmodule Pleroma.ScheduledActivity do use Ecto.Schema alias Ecto.Multi - alias Pleroma.Config alias Pleroma.Repo alias Pleroma.ScheduledActivity alias Pleroma.User @@ -20,6 +19,8 @@ defmodule Pleroma.ScheduledActivity do @min_offset :timer.minutes(5) + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) + schema "scheduled_activities" do belongs_to(:user, User, type: FlakeId.Ecto.CompatType) field(:scheduled_at, :naive_datetime) @@ -87,7 +88,7 @@ defmodule Pleroma.ScheduledActivity do |> where([sa], type(sa.scheduled_at, :date) == type(^scheduled_at, :date)) |> select([sa], count(sa.id)) |> Repo.one() - |> Kernel.>=(Config.get([ScheduledActivity, :daily_user_limit])) + |> Kernel.>=(@config_impl.get([ScheduledActivity, :daily_user_limit])) end def exceeds_total_user_limit?(user_id) do @@ -95,7 +96,7 @@ defmodule Pleroma.ScheduledActivity do |> where(user_id: ^user_id) |> select([sa], count(sa.id)) |> Repo.one() - |> Kernel.>=(Config.get([ScheduledActivity, :total_user_limit])) + |> Kernel.>=(@config_impl.get([ScheduledActivity, :total_user_limit])) end def far_enough?(scheduled_at) when is_binary(scheduled_at) do @@ -123,7 +124,7 @@ defmodule Pleroma.ScheduledActivity do def create(%User{} = user, attrs) do Multi.new() |> Multi.insert(:scheduled_activity, new(user, attrs)) - |> maybe_add_jobs(Config.get([ScheduledActivity, :enabled])) + |> maybe_add_jobs(@config_impl.get([ScheduledActivity, :enabled])) |> Repo.transaction() |> transaction_response end diff --git a/lib/pleroma/search/database_search.ex b/lib/pleroma/search/database_search.ex @@ -23,19 +23,12 @@ defmodule Pleroma.Search.DatabaseSearch do offset = Keyword.get(options, :offset, 0) author = Keyword.get(options, :author) - search_function = - if :persistent_term.get({Pleroma.Repo, :postgres_version}) >= 11 do - :websearch - else - :plain - end - try do Activity |> Activity.with_preloaded_object() |> Activity.restrict_deactivated_users() |> restrict_public(user) - |> query_with(index_type, search_query, search_function) + |> query_with(index_type, search_query, :websearch) |> maybe_restrict_local(user) |> maybe_restrict_author(author) |> maybe_restrict_blocked(user) diff --git a/lib/pleroma/search/search_backend.ex b/lib/pleroma/search/search_backend.ex @@ -17,8 +17,8 @@ defmodule Pleroma.Search.SearchBackend do Remove the object from the index. Just the object, as opposed to the whole activity, is passed, since the object - is what contains the actual content and there is no need for fitlering when removing + is what contains the actual content and there is no need for filtering when removing from index. """ - @callback remove_from_index(object :: Pleroma.Object.t()) :: {:ok, any()} | {:error, any()} + @callback remove_from_index(object :: Pleroma.Object.t()) :: :ok | {:error, any()} end diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex @@ -27,7 +27,7 @@ defmodule Pleroma.Signature do _ -> case Pleroma.Web.WebFinger.finger(maybe_ap_id) do - %{"ap_id" => ap_id} -> {:ok, ap_id} + {:ok, %{"ap_id" => ap_id}} -> {:ok, ap_id} _ -> {:error, maybe_ap_id} end end diff --git a/lib/pleroma/telemetry/logger.ex b/lib/pleroma/telemetry/logger.ex @@ -59,7 +59,7 @@ defmodule Pleroma.Telemetry.Logger do _, _ ) do - Logger.error(fn -> + Logger.debug(fn -> "Connection pool had to refuse opening a connection to #{key} due to connection limit exhaustion" end) end @@ -70,7 +70,7 @@ defmodule Pleroma.Telemetry.Logger do %{key: key}, _ ) do - Logger.warn(fn -> + Logger.warning(fn -> "Pool worker for #{key}: Client #{inspect(client_pid)} died before releasing the connection with #{inspect(reason)}" end) end @@ -81,7 +81,7 @@ defmodule Pleroma.Telemetry.Logger do %{key: key, protocol: :http}, _ ) do - Logger.info(fn -> + Logger.debug(fn -> "Pool worker for #{key}: #{length(clients)} clients are using an HTTP1 connection at the same time, head-of-line blocking might occur." end) end diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex @@ -34,7 +34,6 @@ defmodule Pleroma.Upload do """ alias Ecto.UUID - alias Pleroma.Config alias Pleroma.Maps alias Pleroma.Web.ActivityPub.Utils require Logger @@ -52,6 +51,7 @@ defmodule Pleroma.Upload do | {:size_limit, nil | non_neg_integer()} | {:uploader, module()} | {:filters, [module()]} + | {:actor, String.t()} @type t :: %__MODULE__{ id: String.t(), @@ -76,6 +76,8 @@ defmodule Pleroma.Upload do :path ] + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) + defp get_description(upload) do case {upload.description, Pleroma.Config.get([Pleroma.Upload, :default_description])} do {description, _} when is_binary(description) -> description @@ -85,7 +87,7 @@ defmodule Pleroma.Upload do end end - @spec store(source, options :: [option()]) :: {:ok, Map.t()} | {:error, any()} + @spec store(source, options :: [option()]) :: {:ok, map()} | {:error, any()} @doc "Store a file. If using a `Plug.Upload{}` as the source, be sure to use `Majic.Plug` to ensure its content_type and filename is correct." def store(upload, opts \\ []) do opts = get_opts(opts) @@ -174,7 +176,7 @@ defmodule Pleroma.Upload do defp prepare_upload(%{img: "data:image/" <> image_data}, opts) do parsed = Regex.named_captures(~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/, image_data) data = Base.decode64!(parsed["data"], ignore: :whitespace) - hash = Base.encode16(:crypto.hash(:sha256, data), lower: true) + hash = Base.encode16(:crypto.hash(:sha256, data), case: :upper) with :ok <- check_binary_size(data, opts.size_limit), tmp_path <- tempfile_for_image(data), @@ -244,18 +246,18 @@ defmodule Pleroma.Upload do defp url_from_spec(_upload, _base_url, {:url, url}), do: url def base_url do - uploader = Config.get([Pleroma.Upload, :uploader]) - upload_base_url = Config.get([Pleroma.Upload, :base_url]) - public_endpoint = Config.get([uploader, :public_endpoint]) + uploader = @config_impl.get([Pleroma.Upload, :uploader]) + upload_base_url = @config_impl.get([Pleroma.Upload, :base_url]) + public_endpoint = @config_impl.get([uploader, :public_endpoint]) case uploader do Pleroma.Uploaders.Local -> upload_base_url || Pleroma.Web.Endpoint.url() <> "/media/" Pleroma.Uploaders.S3 -> - bucket = Config.get([Pleroma.Uploaders.S3, :bucket]) - truncated_namespace = Config.get([Pleroma.Uploaders.S3, :truncated_namespace]) - namespace = Config.get([Pleroma.Uploaders.S3, :bucket_namespace]) + bucket = @config_impl.get([Pleroma.Uploaders.S3, :bucket]) + truncated_namespace = @config_impl.get([Pleroma.Uploaders.S3, :truncated_namespace]) + namespace = @config_impl.get([Pleroma.Uploaders.S3, :bucket_namespace]) bucket_with_namespace = cond do diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -8,27 +8,28 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do """ require Logger + alias Vix.Vips.Image + alias Vix.Vips.Operation + @behaviour Pleroma.Upload.Filter @spec filter(Pleroma.Upload.t()) :: {:ok, :filtered, Pleroma.Upload.t()} | {:ok, :noop} | {:error, String.t()} def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _} = upload) do try do - image = - file - |> Mogrify.open() - |> Mogrify.verbose() + {:ok, image} = Image.new_from_file(file) + {width, height} = {Image.width(image), Image.height(image)} upload = upload - |> Map.put(:width, image.width) - |> Map.put(:height, image.height) - |> Map.put(:blurhash, get_blurhash(file)) + |> Map.put(:width, width) + |> Map.put(:height, height) + |> Map.put(:blurhash, get_blurhash(image)) {:ok, :filtered, upload} rescue e in ErlangError -> - Logger.warn("#{__MODULE__}: #{inspect(e)}") + Logger.warning("#{__MODULE__}: #{inspect(e)}") {:ok, :noop} end end @@ -45,7 +46,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do {:ok, :filtered, upload} rescue e in ErlangError -> - Logger.warn("#{__MODULE__}: #{inspect(e)}") + Logger.warning("#{__MODULE__}: #{inspect(e)}") {:ok, :noop} end end @@ -53,7 +54,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do def filter(_), do: {:ok, :noop} defp get_blurhash(file) do - with {:ok, blurhash} <- :eblurhash.magick(file) do + with {:ok, blurhash} <- vips_blurhash(file) do blurhash else _ -> nil @@ -77,7 +78,28 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do %{width: width, height: height} else nil -> {:error, {:ffprobe, :command_not_found}} - {:error, _} = error -> error + error -> {:error, error} + end + end + + defp vips_blurhash(%Vix.Vips.Image{} = image) do + with {:ok, resized_image} <- Operation.thumbnail_image(image, 100), + {height, width} <- {Image.height(resized_image), Image.width(resized_image)}, + max <- max(height, width), + {x, y} <- {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} do + {:ok, rgb} = + if Image.has_alpha?(resized_image) do + # remove alpha channel + resized_image + |> Operation.extract_band!(0, n: 3) + |> Image.write_to_binary() + else + Image.write_to_binary(resized_image) + end + + Blurhash.encode(rgb, width, height, x, y) + else + _ -> nil end end end diff --git a/lib/pleroma/upload/filter/exiftool/read_description.ex b/lib/pleroma/upload/filter/exiftool/read_description.ex @@ -10,8 +10,6 @@ defmodule Pleroma.Upload.Filter.Exiftool.ReadDescription do """ @behaviour Pleroma.Upload.Filter - @spec filter(Pleroma.Upload.t()) :: {:ok, any()} | {:error, String.t()} - def filter(%Pleroma.Upload{description: description}) when is_binary(description), do: {:ok, :noop} diff --git a/lib/pleroma/uploaders/s3.ex b/lib/pleroma/uploaders/s3.ex @@ -6,7 +6,8 @@ defmodule Pleroma.Uploaders.S3 do @behaviour Pleroma.Uploaders.Uploader require Logger - alias Pleroma.Config + @ex_aws_impl Application.compile_env(:pleroma, [__MODULE__, :ex_aws_impl], ExAws) + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) # The file name is re-encoded with S3's constraints here to comply with previous # links with less strict filenames @@ -22,7 +23,7 @@ defmodule Pleroma.Uploaders.S3 do @impl true def put_file(%Pleroma.Upload{} = upload) do - config = Config.get([__MODULE__]) + config = @config_impl.get([__MODULE__]) bucket = Keyword.get(config, :bucket) streaming = Keyword.get(config, :streaming_enabled) @@ -56,7 +57,7 @@ defmodule Pleroma.Uploaders.S3 do ]) end - case ExAws.request(op) do + case @ex_aws_impl.request(op) do {:ok, _} -> {:ok, {:file, s3_name}} @@ -69,9 +70,9 @@ defmodule Pleroma.Uploaders.S3 do @impl true def delete_file(file) do [__MODULE__, :bucket] - |> Config.get() + |> @config_impl.get() |> ExAws.S3.delete_object(file) - |> ExAws.request() + |> @ex_aws_impl.request() |> case do {:ok, %{status_code: 204}} -> :ok error -> {:error, inspect(error)} @@ -83,3 +84,7 @@ defmodule Pleroma.Uploaders.S3 do String.replace(name, @regex, "-") end end + +defmodule Pleroma.Uploaders.S3.ExAwsAPI do + @callback request(op :: ExAws.Operation.t()) :: {:ok, ExAws.Operation.t()} | {:error, term()} +end diff --git a/lib/pleroma/uploaders/uploader.ex b/lib/pleroma/uploaders/uploader.ex @@ -5,8 +5,6 @@ defmodule Pleroma.Uploaders.Uploader do import Pleroma.Web.Gettext - @mix_env Mix.env() - @moduledoc """ Defines the contract to put and get an uploaded file to any backend. """ @@ -40,7 +38,7 @@ defmodule Pleroma.Uploaders.Uploader do @callback delete_file(file :: String.t()) :: :ok | {:error, String.t()} - @callback http_callback(Plug.Conn.t(), Map.t()) :: + @callback http_callback(Plug.Conn.t(), map()) :: {:ok, Plug.Conn.t()} | {:ok, Plug.Conn.t(), file_spec()} | {:error, Plug.Conn.t(), String.t()} @@ -75,10 +73,5 @@ defmodule Pleroma.Uploaders.Uploader do end end - defp callback_timeout do - case @mix_env do - :test -> 1_000 - _ -> 30_000 - end - end + defp callback_timeout, do: Application.get_env(:pleroma, __MODULE__)[:timeout] end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex @@ -8,6 +8,7 @@ defmodule Pleroma.User do import Ecto.Changeset import Ecto.Query import Ecto, only: [assoc: 2] + import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1] alias Ecto.Multi alias Pleroma.Activity @@ -39,6 +40,7 @@ defmodule Pleroma.User do alias Pleroma.Workers.BackgroundWorker require Logger + require Pleroma.Constants @type t :: %__MODULE__{} @type account_status :: @@ -579,7 +581,7 @@ defmodule Pleroma.User do |> validate_format(:nickname, local_nickname_regex()) |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) - |> validate_inclusion(:actor_type, ["Person", "Service"]) + |> validate_inclusion(:actor_type, Pleroma.Constants.allowed_user_actor_types()) |> put_fields() |> put_emoji() |> put_change_if_present(:bio, &{:ok, parse_bio(&1, struct)}) @@ -595,9 +597,23 @@ defmodule Pleroma.User do defp put_fields(changeset) do if raw_fields = get_change(changeset, :raw_fields) do + old_fields = changeset.data.raw_fields + raw_fields = raw_fields |> Enum.filter(fn %{"name" => n} -> n != "" end) + |> Enum.map(fn field -> + previous = + old_fields + |> Enum.find(fn %{"value" => value} -> field["value"] == value end) + + if previous && Map.has_key?(previous, "verified_at") do + field + |> Map.put("verified_at", previous["verified_at"]) + else + field + end + end) fields = raw_fields @@ -671,7 +687,7 @@ defmodule Pleroma.User do |> validate_inclusion(:actor_type, ["Person", "Service"]) end - @spec update_as_admin(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()} + @spec update_as_admin(User.t(), map()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def update_as_admin(user, params) do params = Map.put(params, "password_confirmation", params["password"]) changeset = update_as_admin_changeset(user, params) @@ -692,7 +708,7 @@ defmodule Pleroma.User do |> put_change(:password_reset_pending, false) end - @spec reset_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()} + @spec reset_password(User.t(), map()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def reset_password(%User{} = user, params) do reset_password(user, user, params) end @@ -1010,7 +1026,7 @@ defmodule Pleroma.User do def maybe_send_confirmation_email(_), do: {:ok, :noop} - @spec send_confirmation_email(Uset.t()) :: User.t() + @spec send_confirmation_email(User.t()) :: User.t() def send_confirmation_email(%User{} = user) do user |> Pleroma.Emails.UserEmail.account_confirmation_email() @@ -1047,7 +1063,8 @@ defmodule Pleroma.User do def needs_update?(_), do: true - @spec maybe_direct_follow(User.t(), User.t()) :: {:ok, User.t()} | {:error, String.t()} + @spec maybe_direct_follow(User.t(), User.t()) :: + {:ok, User.t(), User.t()} | {:error, String.t()} # "Locked" (self-locked) users demand explicit authorization of follow requests def maybe_direct_follow(%User{} = follower, %User{local: true, is_locked: true} = followed) do @@ -1198,6 +1215,10 @@ defmodule Pleroma.User do def update_and_set_cache(changeset) do with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do + if get_change(changeset, :raw_fields) do + BackgroundWorker.enqueue("verify_fields_links", %{"user_id" => user.id}) + end + set_cache(user) end end @@ -1383,6 +1404,40 @@ defmodule Pleroma.User do |> Repo.all() end + @spec get_familiar_followers_query(User.t(), User.t(), pos_integer() | nil) :: Ecto.Query.t() + def get_familiar_followers_query(%User{} = user, %User{} = current_user, nil) do + friends = + get_friends_query(current_user) + |> where([u], not u.hide_follows) + |> select([u], u.id) + + User.Query.build(%{is_active: true}) + |> where([u], u.id not in ^[user.id, current_user.id]) + |> join(:inner, [u], r in FollowingRelationship, + as: :followers_relationships, + on: r.following_id == ^user.id and r.follower_id == u.id + ) + |> where([followers_relationships: r], r.state == ^:follow_accept) + |> where([followers_relationships: r], r.follower_id in subquery(friends)) + end + + def get_familiar_followers_query(%User{} = user, %User{} = current_user, page) do + user + |> get_familiar_followers_query(current_user, nil) + |> User.Query.paginate(page, 20) + end + + @spec get_familiar_followers_query(User.t(), User.t()) :: Ecto.Query.t() + def get_familiar_followers_query(%User{} = user, %User{} = current_user), + do: get_familiar_followers_query(user, current_user, nil) + + @spec get_familiar_followers(User.t(), User.t(), pos_integer() | nil) :: {:ok, list(User.t())} + def get_familiar_followers(%User{} = user, %User{} = current_user, page \\ nil) do + user + |> get_familiar_followers_query(current_user, page) + |> Repo.all() + end + def increase_note_count(%User{} = user) do User |> where(id: ^user.id) @@ -1560,7 +1615,7 @@ defmodule Pleroma.User do unmute(muter, mutee) else {who, result} = error -> - Logger.warn( + Logger.warning( "User.unmute/2 failed. #{who}: #{result}, muter_id: #{muter_id}, mutee_id: #{mutee_id}" ) @@ -1782,14 +1837,17 @@ defmodule Pleroma.User do BackgroundWorker.enqueue("user_activation", %{"user_id" => user.id, "status" => status}) end - @spec set_activation([User.t()], boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} + @spec set_activation([User.t()], boolean()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def set_activation(users, status) when is_list(users) do Repo.transaction(fn -> - for user <- users, do: set_activation(user, status) + for user <- users do + {:ok, user} = set_activation(user, status) + user + end end) end - @spec set_activation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} + @spec set_activation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def set_activation(%User{} = user, status) do with {:ok, user} <- set_activation_status(user, status) do user @@ -1867,7 +1925,7 @@ defmodule Pleroma.User do |> update_and_set_cache() end - @spec purge_user_changeset(User.t()) :: Changeset.t() + @spec purge_user_changeset(User.t()) :: Ecto.Changeset.t() def purge_user_changeset(user) do # "Right to be forgotten" # https://gdpr.eu/right-to-be-forgotten/ @@ -1970,8 +2028,45 @@ defmodule Pleroma.User do maybe_delete_from_db(user) end + def perform(:verify_fields_links, user) do + profile_urls = [user.ap_id] + + fields = + user.raw_fields + |> Enum.map(&verify_field_link(&1, profile_urls)) + + changeset = + user + |> update_changeset(%{raw_fields: fields}) + + with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do + set_cache(user) + end + end + def perform(:set_activation_async, user, status), do: set_activation(user, status) + defp verify_field_link(field, profile_urls) do + verified_at = + with %{"value" => value} <- field, + {:verified_at, nil} <- {:verified_at, Map.get(field, "verified_at")}, + %{scheme: scheme, userinfo: nil, host: host} + when not_empty_string(host) and scheme in ["http", "https"] <- + URI.parse(value), + {:not_idn, true} <- {:not_idn, to_string(:idna.encode(host)) == host}, + "me" <- Pleroma.Web.RelMe.maybe_put_rel_me(value, profile_urls) do + CommonUtils.to_masto_date(NaiveDateTime.utc_now()) + else + {:verified_at, value} when not_empty_string(value) -> + value + + _ -> + nil + end + + Map.put(field, "verified_at", verified_at) + end + @spec external_users_query() :: Ecto.Query.t() def external_users_query do User.Query.build(%{ @@ -2136,7 +2231,7 @@ defmodule Pleroma.User do def public_key(_), do: {:error, "key not found"} def get_public_key_for_ap_id(ap_id) do - with {:ok, %User{} = user} <- get_or_fetch_by_ap_id(ap_id), + with %User{} = user <- get_cached_by_ap_id(ap_id), {:ok, public_key} <- public_key(user) do {:ok, public_key} else @@ -2252,7 +2347,7 @@ defmodule Pleroma.User do if String.contains?(user.nickname, "@") do user.nickname else - %{host: host} = URI.parse(user.ap_id) + host = Pleroma.Web.WebFinger.host() user.nickname <> "@" <> host end end @@ -2358,7 +2453,7 @@ defmodule Pleroma.User do updated_user end - @spec set_confirmation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} + @spec set_confirmation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def set_confirmation(%User{} = user, bool) do user |> confirmation_changeset(set_confirmation: bool) @@ -2402,9 +2497,9 @@ defmodule Pleroma.User do defp put_password_hash(changeset), do: changeset - def is_internal_user?(%User{nickname: nil}), do: true - def is_internal_user?(%User{local: true, nickname: "internal." <> _}), do: true - def is_internal_user?(_), do: false + def internal?(%User{nickname: nil}), do: true + def internal?(%User{local: true, nickname: "internal." <> _}), do: true + def internal?(_), do: false # A hack because user delete activities have a fake id for whatever reason # TODO: Get rid of this @@ -2536,7 +2631,7 @@ defmodule Pleroma.User do |> update_and_set_cache() end - @spec confirmation_changeset(User.t(), keyword()) :: Changeset.t() + @spec confirmation_changeset(User.t(), keyword()) :: Ecto.Changeset.t() def confirmation_changeset(user, set_confirmation: confirmed?) do params = if confirmed? do @@ -2554,9 +2649,9 @@ defmodule Pleroma.User do cast(user, params, [:is_confirmed, :confirmation_token]) end - @spec approval_changeset(User.t(), keyword()) :: Changeset.t() - def approval_changeset(user, set_approval: approved?) do - cast(user, %{is_approved: approved?}, [:is_approved]) + @spec approval_changeset(Ecto.Changeset.t(), keyword()) :: Ecto.Changeset.t() + def approval_changeset(changeset, set_approval: approved?) do + cast(changeset, %{is_approved: approved?}, [:is_approved]) end @spec add_pinned_object_id(User.t(), String.t()) :: {:ok, User.t()} | {:error, term()} @@ -2659,10 +2754,11 @@ defmodule Pleroma.User do # - display name def sanitize_html(%User{} = user, filter) do fields = - Enum.map(user.fields, fn %{"name" => name, "value" => value} -> + Enum.map(user.fields, fn %{"name" => name, "value" => value} = fields -> %{ "name" => name, - "value" => HTML.filter_tags(value, Pleroma.HTML.Scrubber.LinksOnly) + "value" => HTML.filter_tags(value, Pleroma.HTML.Scrubber.LinksOnly), + "verified_at" => Map.get(fields, "verified_at") } end) @@ -2681,6 +2777,8 @@ defmodule Pleroma.User do |> update_and_set_cache() end + def update_last_active_at(user), do: user + def active_user_count(days \\ 30) do active_after = Timex.shift(NaiveDateTime.utc_now(), days: -days) diff --git a/lib/pleroma/user/backup.ex b/lib/pleroma/user/backup.ex @@ -22,6 +22,8 @@ defmodule Pleroma.User.Backup do alias Pleroma.Web.ActivityPub.UserView alias Pleroma.Workers.BackupWorker + @type t :: %__MODULE__{} + schema "backups" do field(:content_type, :string) field(:file_name, :string) @@ -35,6 +37,8 @@ defmodule Pleroma.User.Backup do timestamps() end + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) + def create(user, admin_id \\ nil) do with :ok <- validate_limit(user, admin_id), {:ok, backup} <- user |> new() |> Repo.insert() do @@ -124,7 +128,10 @@ defmodule Pleroma.User.Backup do |> Repo.update() end - def process(%__MODULE__{} = backup) do + def process( + %__MODULE__{} = backup, + processor_module \\ __MODULE__.Processor + ) do set_state(backup, :running, 0) current_pid = self() @@ -132,7 +139,7 @@ defmodule Pleroma.User.Backup do task = Task.Supervisor.async_nolink( Pleroma.TaskSupervisor, - __MODULE__, + processor_module, :do_process, [backup, current_pid] ) @@ -140,25 +147,8 @@ defmodule Pleroma.User.Backup do wait_backup(backup, backup.processed_number, task) end - def do_process(backup, current_pid) do - with {:ok, zip_file} <- export(backup, current_pid), - {:ok, %{size: size}} <- File.stat(zip_file), - {:ok, _upload} <- upload(backup, zip_file) do - backup - |> cast( - %{ - file_size: size, - processed: true, - state: :complete - }, - [:file_size, :processed, :state] - ) - |> Repo.update() - end - end - defp wait_backup(backup, current_processed, task) do - wait_time = Pleroma.Config.get([__MODULE__, :process_wait_time]) + wait_time = @config_impl.get([__MODULE__, :process_wait_time]) receive do {:progress, new_processed} -> @@ -206,7 +196,15 @@ defmodule Pleroma.User.Backup do end end - @files ['actor.json', 'outbox.json', 'likes.json', 'bookmarks.json'] + @files [ + 'actor.json', + 'outbox.json', + 'likes.json', + 'bookmarks.json', + 'followers.json', + 'following.json' + ] + @spec export(Pleroma.User.Backup.t(), pid()) :: {:ok, String.t()} | :error def export(%__MODULE__{} = backup, caller_pid) do backup = Repo.preload(backup, :user) dir = backup_tempdir(backup) @@ -216,9 +214,13 @@ defmodule Pleroma.User.Backup do :ok <- statuses(dir, backup.user, caller_pid), :ok <- likes(dir, backup.user, caller_pid), :ok <- bookmarks(dir, backup.user, caller_pid), - {:ok, zip_path} <- :zip.create(String.to_charlist(dir <> ".zip"), @files, cwd: dir), + :ok <- followers(dir, backup.user, caller_pid), + :ok <- following(dir, backup.user, caller_pid), + {:ok, zip_path} <- :zip.create(backup.file_name, @files, cwd: dir), {:ok, _} <- File.rm_rf(dir) do - {:ok, to_string(zip_path)} + {:ok, zip_path} + else + _ -> :error end end @@ -305,7 +307,7 @@ defmodule Pleroma.User.Backup do acc + 1 else {:error, e} -> - Logger.warn( + Logger.warning( "Error processing backup item: #{inspect(e)}\n The item is: #{inspect(i)}" ) @@ -364,4 +366,48 @@ defmodule Pleroma.User.Backup do caller_pid ) end + + defp followers(dir, user, caller_pid) do + User.get_followers_query(user) + |> write(dir, "followers", fn a -> {:ok, a.ap_id} end, caller_pid) + end + + defp following(dir, user, caller_pid) do + User.get_friends_query(user) + |> write(dir, "following", fn a -> {:ok, a.ap_id} end, caller_pid) + end +end + +defmodule Pleroma.User.Backup.ProcessorAPI do + @callback do_process(%Pleroma.User.Backup{}, pid()) :: + {:ok, %Pleroma.User.Backup{}} | {:error, any()} +end + +defmodule Pleroma.User.Backup.Processor do + @behaviour Pleroma.User.Backup.ProcessorAPI + + alias Pleroma.Repo + alias Pleroma.User.Backup + + import Ecto.Changeset + + @impl true + def do_process(backup, current_pid) do + with {:ok, zip_file} <- Backup.export(backup, current_pid), + {:ok, %{size: size}} <- File.stat(zip_file), + {:ok, _upload} <- Backup.upload(backup, zip_file) do + backup + |> cast( + %{ + file_size: size, + processed: true, + state: :complete + }, + [:file_size, :processed, :state] + ) + |> Repo.update() + else + e -> {:error, e} + end + end end diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex @@ -22,7 +22,7 @@ defmodule Pleroma.User.Query do - pass non empty string - e.g. Pleroma.User.Query.build(%{email: "email@example.com"}) - *contains criteria* - - add field to @containns_criteria list + - add field to @contains_criteria list - pass values list - e.g. Pleroma.User.Query.build(%{ap_id: ["http://ap_id1", "http://ap_id2"]}) """ @@ -71,7 +71,7 @@ defmodule Pleroma.User.Query do @equal_criteria [:email] @contains_criteria [:ap_id, :nickname] - @spec build(Query.t(), criteria()) :: Query.t() + @spec build(Ecto.Query.t(), criteria()) :: Ecto.Query.t() def build(query \\ base_query(), criteria) do prepare_query(query, criteria) end diff --git a/lib/pleroma/user_invite_token.ex b/lib/pleroma/user_invite_token.ex @@ -64,7 +64,7 @@ defmodule Pleroma.UserInviteToken do end @spec update_invite(UserInviteToken.t(), map()) :: - {:ok, UserInviteToken.t()} | {:error, Changeset.t()} + {:ok, UserInviteToken.t()} | {:error, Ecto.Changeset.t()} def update_invite(invite, changes) do change(invite, changes) |> Repo.update() end diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex @@ -14,6 +14,8 @@ defmodule Pleroma.UserRelationship do alias Pleroma.User alias Pleroma.UserRelationship + @type t :: %__MODULE__{} + schema "user_relationships" do belongs_to(:source, User, type: FlakeId.Ecto.CompatType) belongs_to(:target, User, type: FlakeId.Ecto.CompatType) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -74,22 +74,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do defp check_remote_limit(_), do: true def increase_note_count_if_public(actor, object) do - if is_public?(object), do: User.increase_note_count(actor), else: {:ok, actor} + if public?(object), do: User.increase_note_count(actor), else: {:ok, actor} end def decrease_note_count_if_public(actor, object) do - if is_public?(object), do: User.decrease_note_count(actor), else: {:ok, actor} + if public?(object), do: User.decrease_note_count(actor), else: {:ok, actor} end def update_last_status_at_if_public(actor, object) do - if is_public?(object), do: User.update_last_status_at(actor), else: {:ok, actor} + if public?(object), do: User.update_last_status_at(actor), else: {:ok, actor} end defp increase_replies_count_if_reply(%{ "object" => %{"inReplyTo" => reply_ap_id} = object, "type" => "Create" }) do - if is_public?(object) do + if public?(object) do Object.increase_replies_count(reply_ap_id) end end @@ -100,7 +100,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do "object" => %{"quoteUrl" => quote_ap_id} = object, "type" => "Create" }) do - if is_public?(object) do + if public?(object) do Object.increase_quotes_count(quote_ap_id) end end @@ -147,9 +147,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do # Splice in the child object if we have one. activity = Maps.put_if_present(activity, :object, object) - ConcurrentLimiter.limit(Pleroma.Web.RichMedia.Helpers, fn -> - Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) - end) + Pleroma.Web.RichMedia.Card.get_by_activity(activity) # Add local posts to search index if local, do: Pleroma.Search.add_to_index(activity) @@ -177,7 +175,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do id: "pleroma:fakeid" } - Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) + Pleroma.Web.RichMedia.Card.get_by_activity(activity) {:ok, activity} {:remote_limit_pass, _} -> @@ -202,7 +200,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end def notify_and_stream(activity) do - Notification.create_notifications(activity) + {:ok, notifications} = Notification.create_notifications(activity) + Notification.send(notifications) original_activity = case activity do @@ -319,6 +318,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do {:ok, _actor} <- update_last_status_at_if_public(actor, activity), _ <- notify_and_stream(activity), :ok <- maybe_schedule_poll_notifications(activity), + :ok <- maybe_handle_group_posts(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -498,7 +498,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end @spec fetch_latest_direct_activity_id_for_context(String.t(), keyword() | map()) :: - FlakeId.Ecto.CompatType.t() | nil + Ecto.UUID.t() | nil def fetch_latest_direct_activity_id_for_context(context, opts \\ %{}) do context |> fetch_activities_for_context_query(Map.merge(%{skip_preload: true}, opts)) @@ -1260,6 +1260,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do defp restrict_quote_url(query, _), do: query + defp restrict_rule(query, %{rule_id: rule_id}) do + from( + activity in query, + where: fragment("(?)->'rules' \\? (?)", activity.data, ^rule_id) + ) + end + + defp restrict_rule(query, _), do: query + defp exclude_poll_votes(query, %{include_poll_votes: true}), do: query defp exclude_poll_votes(query, _) do @@ -1422,6 +1431,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do |> restrict_instance(opts) |> restrict_announce_object_actor(opts) |> restrict_filtered(opts) + |> restrict_rule(opts) |> restrict_quote_url(opts) |> maybe_restrict_deactivated_users(opts) |> exclude_poll_votes(opts) @@ -1697,9 +1707,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do Fetcher.fetch_and_contain_remote_object_from_id(first) do {:ok, false} else - {:error, {:ok, %{status: code}}} when code in [401, 403] -> {:ok, true} - {:error, _} = e -> e - e -> {:error, e} + {:error, _} -> {:ok, true} end end diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -273,12 +273,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do end def inbox(%{assigns: %{valid_signature: true}} = conn, %{"nickname" => nickname} = params) do - with %User{} = recipient <- User.get_cached_by_nickname(nickname), - {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(params["actor"]), + with %User{is_active: true} = recipient <- User.get_cached_by_nickname(nickname), + {:ok, %User{is_active: true} = actor} <- User.get_or_fetch_by_ap_id(params["actor"]), true <- Utils.recipient_in_message(recipient, actor, params), params <- Utils.maybe_splice_recipient(recipient.ap_id, params) do Federator.incoming_ap_doc(params) json(conn, "ok") + else + _ -> + conn + |> put_status(:bad_request) + |> json("Invalid request.") end end @@ -287,10 +292,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do json(conn, "ok") end - def inbox(%{assigns: %{valid_signature: false}} = conn, _params) do - conn - |> put_status(:bad_request) - |> json("Invalid HTTP Signature") + def inbox(%{assigns: %{valid_signature: false}, req_headers: req_headers} = conn, params) do + Federator.incoming_ap_doc(%{req_headers: req_headers, params: params}) + json(conn, "ok") end # POST /relay/inbox -or- POST /internal/fetch/inbox @@ -476,7 +480,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do |> json(message) e -> - Logger.warn(fn -> "AP C2S: #{inspect(e)}" end) + Logger.warning(fn -> "AP C2S: #{inspect(e)}" end) conn |> put_status(:bad_request) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do This module encodes our addressing policies and general shape of our objects. """ + alias Pleroma.Activity alias Pleroma.Emoji alias Pleroma.Object alias Pleroma.User @@ -131,7 +132,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do def emoji_react(actor, object, emoji) do with {:ok, data, meta} <- object_action(actor, object) do data = - if Emoji.is_unicode_emoji?(emoji) do + if Emoji.unicode?(emoji) do unicode_emoji_react(object, data, emoji) else custom_emoji_react(object, data, emoji) @@ -347,7 +348,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do actor.ap_id == Relay.ap_id() -> [actor.follower_address] - public? and Visibility.is_local_public?(object) -> + public? and Visibility.local_public?(object) -> [actor.follower_address, object.data["actor"], Utils.as_local_public()] public? -> @@ -375,7 +376,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do # Address the actor of the object, and our actor's follower collection if the post is public. to = - if Visibility.is_public?(object) do + if Visibility.public?(object) do [actor.follower_address, object.data["actor"]] else [object.data["actor"]] diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF do @@ -54,6 +54,8 @@ defmodule Pleroma.Web.ActivityPub.MRF do @required_description_keys [:key, :related_policy] def filter_one(policy, message) do + Code.ensure_loaded(policy) + should_plug_history? = if function_exported?(policy, :history_awareness, 0) do policy.history_awareness() @@ -137,7 +139,16 @@ defmodule Pleroma.Web.ActivityPub.MRF do @spec subdomains_regex([String.t()]) :: [Regex.t()] def subdomains_regex(domains) when is_list(domains) do - for domain <- domains, do: ~r(^#{String.replace(domain, "*.", "(.*\\.)*")}$)i + for domain <- domains do + try do + target = String.replace(domain, "*.", "(.*\\.)*") + ~r<^#{target}$>i + rescue + e -> + Logger.error("MRF: Invalid subdomain Regex: #{domain}") + reraise e, __STACKTRACE__ + end + end end @spec subdomain_match?([Regex.t()], String.t()) :: boolean() @@ -188,6 +199,8 @@ defmodule Pleroma.Web.ActivityPub.MRF do def config_descriptions(policies) do Enum.reduce(policies, @mrf_config_descriptions, fn policy, acc -> + Code.ensure_loaded(policy) + if function_exported?(policy, :config_description, 0) do description = @default_description @@ -199,7 +212,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do if Enum.all?(@required_description_keys, &Map.has_key?(description, &1)) do [description | acc] else - Logger.warn( + Logger.warning( "#{policy} config description doesn't have one or all required keys #{inspect(@required_description_keys)}" ) diff --git a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex @@ -56,8 +56,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do nick_score + name_score + actor_type_score end - defp determine_if_followbot(_), do: 0.0 - defp bot_allowed?(%{"object" => target}, bot_actor) do %User{} = user = normalize_by_ap_id(target) diff --git a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex @@ -19,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do try_follow(follower, message) else nil -> - Logger.warn( + Logger.warning( "#{__MODULE__} skipped because of missing `:mrf_follow_bot, :follower_nickname` configuration, the :follower_nickname account does not exist, or the account is not correctly configured as a bot." ) diff --git a/lib/pleroma/web/activity_pub/mrf/force_mention.ex b/lib/pleroma/web/activity_pub/mrf/force_mention.ex @@ -0,0 +1,59 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ForceMention do + require Pleroma.Constants + + alias Pleroma.Config + alias Pleroma.Object + alias Pleroma.User + + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + defp get_author(url) do + with %Object{data: %{"actor" => actor}} <- Object.normalize(url, fetch: false), + %User{ap_id: ap_id, nickname: nickname} <- User.get_cached_by_ap_id(actor) do + %{"type" => "Mention", "href" => ap_id, "name" => "@#{nickname}"} + else + _ -> nil + end + end + + defp prepend_author(tags, _, false), do: tags + + defp prepend_author(tags, nil, _), do: tags + + defp prepend_author(tags, url, _) do + actor = get_author(url) + + if not is_nil(actor) do + [actor | tags] + else + tags + end + end + + @impl true + def filter(%{"type" => "Create", "object" => %{"tag" => tag} = object} = activity) do + tag = + tag + |> prepend_author( + object["inReplyTo"], + Config.get([:mrf_force_mention, :mention_parent, true]) + ) + |> prepend_author( + object["quoteUrl"], + Config.get([:mrf_force_mention, :mention_quoted, true]) + ) + |> Enum.uniq() + + {:ok, put_in(activity["object"]["tag"], tag)} + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} +end diff --git a/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex b/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HashtagPolicy do alias Pleroma.Object @moduledoc """ - Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #) + Reject, TWKN-remove or Set-Sensitive messages with specific hashtags (without the leading #) Note: This MRF Policy is always enabled, if you want to disable it you have to set empty lists. """ @@ -84,7 +84,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HashtagPolicy do if hashtags != [] do with {:ok, message} <- check_reject(message, hashtags), {:ok, message} <- - (if "type" == "Create" do + (if type == "Create" do check_ftl_removal(message, hashtags) else {:ok, message} diff --git a/lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex b/lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex @@ -62,7 +62,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy do key: :mrf_inline_quote, related_policy: "Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy", label: "MRF Inline Quote Policy", - type: :group, description: "Force quote url to appear in post content.", children: [ %{ diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -10,15 +10,12 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do @moduledoc "Reject or Word-Replace messages with a keyword or regex" @behaviour Pleroma.Web.ActivityPub.MRF.Policy - defp string_matches?(string, _) when not is_binary(string) do - false - end defp string_matches?(string, pattern) when is_binary(pattern) do String.contains?(string, pattern) end - defp string_matches?(string, pattern) do + defp string_matches?(string, %Regex{} = pattern) do String.match?(string, pattern) end diff --git a/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex @@ -10,9 +10,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.NoEmptyPolicy do @impl true def filter(%{"actor" => actor} = object) do - with true <- is_local?(actor), - true <- is_eligible_type?(object), - true <- is_note?(object), + with true <- local?(actor), + true <- eligible_type?(object), + true <- note?(object), false <- has_attachment?(object), true <- only_mentions?(object) do {:reject, "[NoEmptyPolicy]"} @@ -24,7 +24,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.NoEmptyPolicy do def filter(object), do: {:ok, object} - defp is_local?(actor) do + defp local?(actor) do if actor |> String.starts_with?("#{Endpoint.url()}") do true else @@ -59,11 +59,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.NoEmptyPolicy do defp only_mentions?(_), do: false - defp is_note?(%{"object" => %{"type" => "Note"}}), do: true - defp is_note?(_), do: false + defp note?(%{"object" => %{"type" => "Note"}}), do: true + defp note?(_), do: false - defp is_eligible_type?(%{"type" => type}) when type in ["Create", "Update"], do: true - defp is_eligible_type?(_), do: false + defp eligible_type?(%{"type" => type}) when type in ["Create", "Update"], do: true + defp eligible_type?(_), do: false @impl true def describe, do: {:ok, %{}} diff --git a/lib/pleroma/web/activity_pub/mrf/policy.ex b/lib/pleroma/web/activity_pub/mrf/policy.ex @@ -3,8 +3,8 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.Policy do - @callback filter(Map.t()) :: {:ok | :reject, Map.t()} - @callback describe() :: {:ok | :error, Map.t()} + @callback filter(map()) :: {:ok | :reject, map()} + @callback describe() :: {:ok | :error, map()} @callback config_description() :: %{ optional(:children) => [map()], key: atom(), diff --git a/lib/pleroma/web/activity_pub/mrf/quote_to_link_tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/quote_to_link_tag_policy.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.QuoteToLinkTagPolicy do tags = object["tag"] || [] if Enum.any?(tags, fn tag -> - CommonFixes.is_object_link_tag(tag) and tag["href"] == quote_url + CommonFixes.object_link_tag?(tag) and tag["href"] == quote_url end) do object else diff --git a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex @@ -34,14 +34,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do |> Path.basename() |> Path.extname() - file_path = Path.join(emoji_dir_path, shortcode <> (extension || ".png")) + extension = if extension == "", do: ".png", else: extension + + shortcode = Path.basename(shortcode) + file_path = Path.join(emoji_dir_path, shortcode <> extension) case File.write(file_path, response.body) do :ok -> shortcode e -> - Logger.warn("MRF.StealEmojiPolicy: Failed to write to #{file_path}: #{inspect(e)}") + Logger.warning("MRF.StealEmojiPolicy: Failed to write to #{file_path}: #{inspect(e)}") nil end else @@ -53,7 +56,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do end else e -> - Logger.warn("MRF.StealEmojiPolicy: Failed to fetch #{url}: #{inspect(e)}") + Logger.warning("MRF.StealEmojiPolicy: Failed to fetch #{url}: #{inspect(e)}") nil end end @@ -76,6 +79,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do new_emojis = foreign_emojis |> Enum.reject(fn {shortcode, _url} -> shortcode in installed_emoji end) + |> Enum.reject(fn {shortcode, _url} -> String.contains?(shortcode, ["/", "\\"]) end) |> Enum.filter(fn {shortcode, _url} -> reject_emoji? = [:mrf_steal_emoji, :rejected_shortcodes] diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex @@ -173,6 +173,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do {:object_validation, e} -> e + + {:error, %Ecto.Changeset{} = e} -> + {:error, e} end end diff --git a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -82,7 +82,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do object when is_binary(object) <- get_field(cng, :object), %User{} = actor <- User.get_cached_by_ap_id(actor), %Object{} = object <- Object.get_cached_by_ap_id(object), - false <- Visibility.is_public?(object) do + false <- Visibility.public?(object) do same_actor = object.data["actor"] == actor.ap_id recipients = get_field(cng, :to) ++ get_field(cng, :cc) local_public = Utils.as_local_public() diff --git a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex @@ -12,13 +12,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do @primary_key false embedded_schema do field(:id, :string) - field(:type, :string) + field(:type, :string, default: "Link") field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:name, :string) field(:blurhash, :string) embeds_many :url, UrlObjectValidator, primary_key: false do - field(:type, :string) + field(:type, :string, default: "Link") field(:href, ObjectValidators.Uri) field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:width, :integer) diff --git a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex @@ -57,6 +57,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do |> Map.put("attachment", attachment) end + def fix_attachment(%{"attachment" => attachment} = data) when attachment == [] do + data + |> Map.drop(["attachment"]) + end + def fix_attachment(data), do: data def changeset(struct, data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do alias Pleroma.EctoType.ActivityPub.ObjectValidators + alias Pleroma.Maps alias Pleroma.Object alias Pleroma.Object.Containment alias Pleroma.User @@ -24,6 +25,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do end def fix_object_defaults(data) do + data = Maps.filter_empty_values(data) + context = Utils.maybe_create_context( data["context"] || data["conversation"] || data["inReplyTo"] || data["id"] @@ -99,7 +102,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do end def fix_quote_url(%{"tag" => [_ | _] = tags} = data) do - tag = Enum.find(tags, &is_object_link_tag/1) + tag = Enum.find(tags, &object_link_tag?/1) if not is_nil(tag) do data @@ -112,7 +115,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do def fix_quote_url(data), do: data # https://codeberg.org/fediverse/fep/src/branch/main/fep/e232/fep-e232.md - def is_object_link_tag(%{ + def object_link_tag?(%{ "type" => "Link", "mediaType" => media_type, "href" => href @@ -121,5 +124,5 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do true end - def is_object_link_tag(_), do: false + def object_link_tag?(_), do: false end diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -74,10 +74,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do new_emoji = Pleroma.Emoji.fully_qualify_emoji(emoji) cond do - Pleroma.Emoji.is_unicode_emoji?(emoji) -> + Pleroma.Emoji.unicode?(emoji) -> data - Pleroma.Emoji.is_unicode_emoji?(new_emoji) -> + Pleroma.Emoji.unicode?(new_emoji) -> data |> Map.put("content", new_emoji) true -> @@ -90,7 +90,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do defp validate_emoji(cng) do content = get_field(cng, :content) - if Emoji.is_unicode_emoji?(content) || Emoji.is_custom_emoji?(content) do + if Emoji.unicode?(content) || Emoji.custom?(content) do cng else cng @@ -101,7 +101,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do defp maybe_validate_tag_presence(cng) do content = get_field(cng, :content) - if Emoji.is_unicode_emoji?(content) do + if Emoji.unicode?(content) do cng else tag = get_field(cng, :tag) diff --git a/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex @@ -14,10 +14,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do embeds_one :replies, Replies, primary_key: false do field(:totalItems, :integer) - field(:type, :string) + field(:type, :string, default: "Collection") end - field(:type, :string) + field(:type, :string, default: "Note") end def changeset(struct, data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex @@ -29,6 +29,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do field(:closed, ObjectValidators.DateTime) field(:voters, {:array, ObjectValidators.ObjectID}, default: []) + field(:nonAnonymous, :boolean) embeds_many(:anyOf, QuestionOptionsValidator) embeds_many(:oneOf, QuestionOptionsValidator) end diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex @@ -62,7 +62,7 @@ defmodule Pleroma.Web.ActivityPub.Pipeline 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 Visibility.is_local_public?(activity) do + if !do_not_federate and local and not Visibility.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/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex @@ -13,13 +13,12 @@ defmodule Pleroma.Web.ActivityPub.Publisher do alias Pleroma.User alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Transmogrifier + alias Pleroma.Workers.PublisherWorker require Pleroma.Constants import Pleroma.Web.ActivityPub.Visibility - @behaviour Pleroma.Web.Federator.Publisher - require Logger @moduledoc """ @@ -27,9 +26,47 @@ defmodule Pleroma.Web.ActivityPub.Publisher do """ @doc """ + Enqueue publishing a single activity. + """ + @spec enqueue_one(map(), Keyword.t()) :: {:ok, %Oban.Job{}} + def enqueue_one(%{} = params, worker_args \\ []) do + PublisherWorker.enqueue( + "publish_one", + %{"params" => params}, + worker_args + ) + end + + @doc """ + Gathers a set of remote users given an IR envelope. + """ + def remote_users(%User{id: user_id}, %{data: %{"to" => to} = data}) do + cc = Map.get(data, "cc", []) + + bcc = + data + |> Map.get("bcc", []) + |> Enum.reduce([], fn ap_id, bcc -> + case Pleroma.List.get_by_ap_id(ap_id) do + %Pleroma.List{user_id: ^user_id} = list -> + {:ok, following} = Pleroma.List.get_following(list) + bcc ++ Enum.map(following, & &1.ap_id) + + _ -> + bcc + end + end) + + [to, cc, bcc] + |> Enum.concat() + |> Enum.map(&User.get_cached_by_ap_id/1) + |> Enum.filter(fn user -> user && !user.local end) + end + + @doc """ Determine if an activity can be represented by running it through Transmogrifier. """ - def is_representable?(%Activity{} = activity) do + def representable?(%Activity{} = activity) do with {:ok, _data} <- Transmogrifier.prepare_outgoing(activity.data) do true else @@ -80,9 +117,27 @@ defmodule Pleroma.Web.ActivityPub.Publisher do result else - {_post_result, response} -> + {_post_result, %{status: code} = response} = e -> + unless params[:unreachable_since], do: Instances.set_unreachable(inbox) + Logger.metadata(activity: id, inbox: inbox, status: code) + Logger.error("Publisher failed to inbox #{inbox} with status #{code}") + + case response do + %{status: 403} -> {:discard, :forbidden} + %{status: 404} -> {:discard, :not_found} + %{status: 410} -> {:discard, :not_found} + _ -> {:error, e} + end + + {:error, :pool_full} -> + Logger.debug("Publisher snoozing worker job due to full connection pool") + {:snooze, 30} + + e -> unless params[:unreachable_since], do: Instances.set_unreachable(inbox) - {:error, response} + Logger.metadata(activity: id, inbox: inbox) + Logger.error("Publisher failed to inbox #{inbox} #{inspect(e)}") + {:error, e} end end @@ -103,22 +158,21 @@ defmodule Pleroma.Web.ActivityPub.Publisher do end end - defp should_federate?(inbox, public) do - if public do - true - else - %{host: host} = URI.parse(inbox) + def should_federate?(nil, _), do: false + def should_federate?(_, true), do: true - quarantined_instances = - Config.get([:instance, :quarantined_instances], []) - |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() - |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() + def should_federate?(inbox, _) do + %{host: host} = URI.parse(inbox) - !Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) - end + quarantined_instances = + Config.get([:instance, :quarantined_instances], []) + |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() + |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() + + !Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) end - @spec recipients(User.t(), Activity.t()) :: list(User.t()) | [] + @spec recipients(User.t(), Activity.t()) :: [[User.t()]] defp recipients(actor, activity) do followers = if actor.follower_address in activity.recipients do @@ -138,7 +192,10 @@ defmodule Pleroma.Web.ActivityPub.Publisher do [] end - Pleroma.Web.Federator.Publisher.remote_users(actor, activity) ++ followers ++ fetchers + mentioned = remote_users(actor, activity) + non_mentioned = (followers ++ fetchers) -- mentioned + + [mentioned, non_mentioned] end defp get_cc_ap_ids(ap_id, recipients) do @@ -192,44 +249,52 @@ defmodule Pleroma.Web.ActivityPub.Publisher do def publish(%User{} = actor, %{data: %{"bcc" => bcc}} = activity) when is_list(bcc) and bcc != [] do - public = is_public?(activity) + public = public?(activity) {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) - recipients = recipients(actor, activity) + [priority_recipients, recipients] = recipients(actor, activity) inboxes = - recipients - |> Enum.map(fn actor -> actor.inbox end) - |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) - |> Instances.filter_reachable() + [priority_recipients, recipients] + |> Enum.map(fn recipients -> + recipients + |> Enum.map(fn %User{} = user -> + determine_inbox(activity, user) + end) + |> Enum.uniq() + |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) + |> Instances.filter_reachable() + end) Repo.checkout(fn -> - Enum.each(inboxes, fn {inbox, unreachable_since} -> - %User{ap_id: ap_id} = Enum.find(recipients, fn actor -> actor.inbox == inbox end) - - # Get all the recipients on the same host and add them to cc. Otherwise, a remote - # instance would only accept a first message for the first recipient and ignore the rest. - cc = get_cc_ap_ids(ap_id, recipients) - - json = - data - |> Map.put("cc", cc) - |> Jason.encode!() - - Pleroma.Web.Federator.Publisher.enqueue_one(__MODULE__, %{ - inbox: inbox, - json: json, - actor_id: actor.id, - id: activity.data["id"], - unreachable_since: unreachable_since - }) + Enum.each(inboxes, fn inboxes -> + Enum.each(inboxes, fn {inbox, unreachable_since} -> + %User{ap_id: ap_id} = Enum.find(recipients, fn actor -> actor.inbox == inbox end) + + # Get all the recipients on the same host and add them to cc. Otherwise, a remote + # instance would only accept a first message for the first recipient and ignore the rest. + cc = get_cc_ap_ids(ap_id, recipients) + + json = + data + |> Map.put("cc", cc) + |> Jason.encode!() + + __MODULE__.enqueue_one(%{ + inbox: inbox, + json: json, + actor_id: actor.id, + id: activity.data["id"], + unreachable_since: unreachable_since + }) + end) end) end) end # Publishes an activity to all relevant peers. def publish(%User{} = actor, %Activity{} = activity) do - public = is_public?(activity) + public = public?(activity) if public && Config.get([:instance, :allow_relay]) do Logger.debug(fn -> "Relaying #{activity.data["id"]} out" end) @@ -239,25 +304,38 @@ defmodule Pleroma.Web.ActivityPub.Publisher do {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) json = Jason.encode!(data) - recipients(actor, activity) - |> Enum.map(fn %User{} = user -> - determine_inbox(activity, user) - end) - |> Enum.uniq() - |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) - |> Instances.filter_reachable() - |> Enum.each(fn {inbox, unreachable_since} -> - Pleroma.Web.Federator.Publisher.enqueue_one( - __MODULE__, - %{ - inbox: inbox, - json: json, - actor_id: actor.id, - id: activity.data["id"], - unreachable_since: unreachable_since - } - ) + [priority_inboxes, inboxes] = + recipients(actor, activity) + |> Enum.map(fn recipients -> + recipients + |> Enum.map(fn %User{} = user -> + determine_inbox(activity, user) + end) + |> Enum.uniq() + |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) + end) + + inboxes = inboxes -- priority_inboxes + + [{priority_inboxes, 0}, {inboxes, 1}] + |> Enum.each(fn {inboxes, priority} -> + inboxes + |> Instances.filter_reachable() + |> Enum.each(fn {inbox, unreachable_since} -> + __MODULE__.enqueue_one( + %{ + inbox: inbox, + json: json, + actor_id: actor.id, + id: activity.data["id"], + unreachable_since: unreachable_since + }, + priority: priority + ) + end) end) + + :ok end def gather_webfinger_links(%User{} = user) do diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex @@ -58,7 +58,7 @@ defmodule Pleroma.Web.ActivityPub.Relay do @spec publish(any()) :: {:ok, Activity.t()} | {:error, any()} def publish(%Activity{data: %{"type" => "Create"}} = activity) do with %User{} = user <- get_actor(), - true <- Visibility.is_public?(activity) do + true <- Visibility.public?(activity) do CommonAPI.repeat(activity.id, user) else error -> format_error(error) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex @@ -21,7 +21,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.Web.Push alias Pleroma.Web.Streamer alias Pleroma.Workers.PollWorker @@ -125,7 +124,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do nil end - {:ok, notifications} = Notification.create_notifications(object, do_send: false) + {:ok, notifications} = Notification.create_notifications(object) meta = meta @@ -184,7 +183,11 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do liked_object = Object.get_by_ap_id(object.data["object"]) Utils.add_like_to_object(object, liked_object) - Notification.create_notifications(object) + {:ok, notifications} = Notification.create_notifications(object) + + meta = + meta + |> add_notifications(notifications) {:ok, object, meta} end @@ -202,7 +205,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do def handle(%{data: %{"type" => "Create"}} = activity, meta) do with {:ok, object, meta} <- handle_object_creation(meta[:object_data], activity, meta), %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do - {:ok, notifications} = Notification.create_notifications(activity, do_send: false) + {:ok, notifications} = Notification.create_notifications(activity) {:ok, _user} = ActivityPub.increase_note_count_if_public(user, object) {:ok, _user} = ActivityPub.update_last_status_at_if_public(user, object) @@ -227,12 +230,12 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do end end - ConcurrentLimiter.limit(Pleroma.Web.RichMedia.Helpers, fn -> - Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) - end) + Pleroma.Web.RichMedia.Card.get_by_activity(activity) Pleroma.Search.add_to_index(Map.put(activity, :object, object)) + Utils.maybe_handle_group_posts(activity) + meta = meta |> add_notifications(notifications) @@ -256,11 +259,13 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do Utils.add_announce_to_object(object, announced_object) - if !User.is_internal_user?(user) do - Notification.create_notifications(object) + {:ok, notifications} = Notification.create_notifications(object) - ap_streamer().stream_out(object) - end + if !User.internal?(user), do: ap_streamer().stream_out(object) + + meta = + meta + |> add_notifications(notifications) {:ok, object, meta} end @@ -281,7 +286,11 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do reacted_object = Object.get_by_ap_id(object.data["object"]) Utils.add_emoji_reaction_to_object(object, reacted_object) - Notification.create_notifications(object) + {:ok, notifications} = Notification.create_notifications(object) + + meta = + meta + |> add_notifications(notifications) {:ok, object, meta} end @@ -302,9 +311,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do result = case deleted_object do %Object{} -> - with {:ok, deleted_object, _activity} <- Object.delete(deleted_object), + with {_, {:ok, deleted_object, _activity}} <- {:object, Object.delete(deleted_object)}, {_, actor} when is_binary(actor) <- {:actor, deleted_object.data["actor"]}, - %User{} = user <- User.get_cached_by_ap_id(actor) do + {_, %User{} = user} <- {:user, User.get_cached_by_ap_id(actor)} do User.remove_pinned_object_id(user, deleted_object.data["id"]) {:ok, user} = ActivityPub.decrease_note_count_if_public(user, deleted_object) @@ -326,6 +335,17 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do {:actor, _} -> @logger.error("The object doesn't have an actor: #{inspect(deleted_object)}") :no_object_actor + + {:user, _} -> + @logger.error( + "The object's actor could not be resolved to a user: #{inspect(deleted_object)}" + ) + + :no_object_user + + {:object, _} -> + @logger.error("The object could not be deleted: #{inspect(deleted_object)}") + {:error, object} end %User{} -> @@ -567,17 +587,14 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do def handle_undoing(object), do: {:error, ["don't know how to handle", object]} - @spec delete_object(Object.t()) :: :ok | {:error, Ecto.Changeset.t()} + @spec delete_object(Activity.t()) :: :ok | {:error, Ecto.Changeset.t()} defp delete_object(object) do with {:ok, _} <- Repo.delete(object), do: :ok end defp send_notifications(meta) do Keyword.get(meta, :notifications, []) - |> Enum.each(fn notification -> - Streamer.stream(["user", "user:notification"], notification) - Push.send(notification) - end) + |> Notification.send() meta end diff --git a/lib/pleroma/web/activity_pub/side_effects/handling.ex b/lib/pleroma/web/activity_pub/side_effects/handling.ex @@ -4,5 +4,5 @@ defmodule Pleroma.Web.ActivityPub.SideEffects.Handling do @callback handle(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} - @callback handle_after_transaction(map()) :: map() + @callback handle_after_transaction(keyword()) :: keyword() end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -23,7 +23,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do import Ecto.Query - require Logger require Pleroma.Constants @doc """ @@ -155,8 +154,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> Map.put("context", replied_object.data["context"] || object["conversation"]) |> Map.drop(["conversation", "inReplyToAtomUri"]) else - e -> - Logger.warn("Couldn't fetch #{inspect(in_reply_to_id)}, error: #{inspect(e)}") + _ -> object end else @@ -181,8 +179,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do {:quoting?, _} -> object - e -> - Logger.warn("Couldn't fetch #{inspect(quote_url)}, error: #{inspect(e)}") + _ -> object end end @@ -782,7 +779,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> Object.normalize(fetch: false) data = - if Visibility.is_private?(object) && object.data["actor"] == ap_id do + if Visibility.private?(object) && object.data["actor"] == ap_id do data |> Map.put("object", object |> Map.get(:data) |> prepare_object) else data |> maybe_fix_object_url @@ -852,8 +849,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do relative_object do Map.put(data, "object", external_url) else - {:fetch, e} -> - Logger.error("Couldn't fetch #{object} #{inspect(e)}") + {:fetch, _} -> data _ -> diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do alias Ecto.UUID alias Pleroma.Activity alias Pleroma.Config + alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID alias Pleroma.Maps alias Pleroma.Notification alias Pleroma.Object @@ -166,7 +167,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do with true <- Config.get!([:instance, :federating]), true <- type != "Block" || outgoing_blocks, - false <- Visibility.is_local_public?(activity) do + false <- Visibility.local_public?(activity) do Pleroma.Web.Federator.publish(activity) end @@ -276,7 +277,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do object_actor = User.get_cached_by_ap_id(object_actor_id) to = - if Visibility.is_public?(object) do + if Visibility.public?(object) do [actor.follower_address, object.data["actor"]] else [object.data["actor"]] @@ -720,14 +721,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do #### Flag-related helpers @spec make_flag_data(map(), map()) :: map() - def make_flag_data(%{actor: actor, context: context, content: content} = params, additional) do + def make_flag_data( + %{actor: actor, context: context, content: content} = params, + additional + ) do %{ "type" => "Flag", "actor" => actor.ap_id, "content" => content, "object" => build_flag_object(params), "context" => context, - "state" => "open" + "state" => "open", + "rules" => Map.get(params, :rules, nil) } |> Map.merge(additional) end @@ -775,10 +780,9 @@ defmodule Pleroma.Web.ActivityPub.Utils do build_flag_object(object) nil -> - if %Object{} = object = Object.get_by_ap_id(id) do - build_flag_object(object) - else - %{"id" => id, "deleted" => true} + case Object.get_by_ap_id(id) do + %Object{} = object -> build_flag_object(object) + _ -> %{"id" => id, "deleted" => true} end end end @@ -852,9 +856,11 @@ defmodule Pleroma.Web.ActivityPub.Utils do [actor | reported_activities] = activity.data["object"] stripped_activities = - Enum.map(reported_activities, fn - act when is_map(act) -> act["id"] - act when is_binary(act) -> act + Enum.reduce(reported_activities, [], fn act, acc -> + case ObjectID.cast(act) do + {:ok, act} -> [act | acc] + _ -> acc + end end) new_data = put_in(activity.data, ["object"], [actor | stripped_activities]) @@ -932,4 +938,27 @@ defmodule Pleroma.Web.ActivityPub.Utils do |> where([a, object: o], fragment("(?)->>'type' = 'Answer'", o.data)) |> Repo.all() end + + def maybe_handle_group_posts(activity) do + poster = User.get_cached_by_ap_id(activity.actor) + + mentions = + activity.data["to"] + |> Enum.filter(&(&1 != activity.actor)) + + mentioned_local_groups = + User.get_all_by_ap_id(mentions) + |> Enum.filter(fn user -> + user.actor_type == "Group" and + user.local and + not User.blocks?(user, poster) + end) + + mentioned_local_groups + |> Enum.each(fn group -> + Pleroma.Web.CommonAPI.repeat(activity.id, group) + end) + + :ok + end end diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -46,6 +46,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do "following" => "#{user.ap_id}/following", "followers" => "#{user.ap_id}/followers", "inbox" => "#{user.ap_id}/inbox", + "outbox" => "#{user.ap_id}/outbox", "name" => "Pleroma", "summary" => "An internal service actor for this Pleroma instance. No user-serviceable parts inside.", @@ -66,8 +67,13 @@ defmodule Pleroma.Web.ActivityPub.UserView do def render("user.json", %{user: %User{nickname: nil} = user}), do: render("service.json", %{user: user}) - def render("user.json", %{user: %User{nickname: "internal." <> _} = user}), - do: render("service.json", %{user: user}) |> Map.put("preferredUsername", user.nickname) + def render("user.json", %{user: %User{nickname: "internal." <> _} = user}) do + render("service.json", %{user: user}) + |> Map.merge(%{ + "preferredUsername" => user.nickname, + "webfinger" => "acct:#{User.full_nickname(user)}" + }) + end def render("user.json", %{user: user}) do {:ok, _, public_key} = Keys.keys_from_pem(user.keys) @@ -120,7 +126,8 @@ defmodule Pleroma.Web.ActivityPub.UserView do "discoverable" => user.is_discoverable, "capabilities" => capabilities, "alsoKnownAs" => user.also_known_as, - "vcard:bday" => birthday + "vcard:bday" => birthday, + "webfinger" => "acct:#{User.full_nickname(user)}" } |> Map.merge(maybe_make_image(&User.avatar_url/2, "icon", user)) |> Map.merge(maybe_make_image(&User.banner_url/2, "image", user)) diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex @@ -11,28 +11,28 @@ defmodule Pleroma.Web.ActivityPub.Visibility do require Pleroma.Constants - @spec is_public?(Object.t() | Activity.t() | map()) :: boolean() - def is_public?(%Object{data: %{"type" => "Tombstone"}}), do: false - 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 + @spec public?(Object.t() | Activity.t() | map()) :: boolean() + def public?(%Object{data: %{"type" => "Tombstone"}}), do: false + def public?(%Object{data: data}), do: public?(data) + def public?(%Activity{data: %{"type" => "Move"}}), do: true + def public?(%Activity{data: data}), do: public?(data) + def public?(%{"directMessage" => true}), do: false + + def public?(data) do Utils.label_in_message?(Pleroma.Constants.as_public(), data) or Utils.label_in_message?(Utils.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 local_public?(%Object{data: data}), do: local_public?(data) + def local_public?(%Activity{data: data}), do: local_public?(data) - def is_local_public?(data) do + def local_public?(data) do Utils.label_in_message?(Utils.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), + def private?(activity) do + with false <- public?(activity), %User{follower_address: follower_address} <- User.get_cached_by_ap_id(activity.data["actor"]) do follower_address in activity.data["to"] @@ -41,20 +41,20 @@ defmodule Pleroma.Web.ActivityPub.Visibility do end end - def is_announceable?(activity, user, public \\ true) do - is_public?(activity) || - (!public && is_private?(activity) && activity.data["actor"] == user.ap_id) + def announceable?(activity, user, public \\ true) do + public?(activity) || + (!public && private?(activity) && activity.data["actor"] == user.ap_id) end - def is_direct?(%Activity{data: %{"directMessage" => true}}), do: true - def is_direct?(%Object{data: %{"directMessage" => true}}), do: true + def direct?(%Activity{data: %{"directMessage" => true}}), do: true + def direct?(%Object{data: %{"directMessage" => true}}), do: true - def is_direct?(activity) do - !is_public?(activity) && !is_private?(activity) + def direct?(activity) do + !public?(activity) && !private?(activity) end - def is_list?(%{data: %{"listMessage" => _}}), do: true - def is_list?(_), do: false + def list?(%{data: %{"listMessage" => _}}), do: true + def list?(_), do: false @spec visible_for_user?(Object.t() | Activity.t() | nil, User.t() | nil) :: boolean() def visible_for_user?(%Object{data: %{"type" => "Tombstone"}}, _), do: false @@ -77,7 +77,7 @@ defmodule Pleroma.Web.ActivityPub.Visibility do when module in [Activity, Object] do if restrict_unauthenticated_access?(message), do: false, - else: is_public?(message) and not is_local_public?(message) + else: public?(message) and not local_public?(message) end def visible_for_user?(%{__struct__: module} = message, user) @@ -86,8 +86,8 @@ defmodule Pleroma.Web.ActivityPub.Visibility do y = [message.data["actor"]] ++ message.data["to"] ++ (message.data["cc"] || []) user_is_local = user.local - federatable = not is_local_public?(message) - (is_public?(message) || Enum.any?(x, &(&1 in y))) and (user_is_local || federatable) + federatable = not local_public?(message) + (public?(message) || Enum.any?(x, &(&1 in y))) and (user_is_local || federatable) end def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do alias Pleroma.ConfigDB alias Pleroma.Web.Plugs.OAuthScopesPlug - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["admin:write"]} when action == :update) plug( @@ -76,7 +76,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do json(conn, translate_descriptions(descriptions)) end - def show(conn, %{only_db: true}) do + def show(%{private: %{open_api_spex: %{params: %{only_db: true}}}} = conn, _) do with :ok <- configurable_from_database() do configs = Pleroma.Repo.all(ConfigDB) @@ -128,7 +128,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do end end - def update(%{body_params: %{configs: configs}} = conn, _) do + def update(%{private: %{open_api_spex: %{body_params: %{configs: configs}}}} = conn, _) do with :ok <- configurable_from_database() do results = configs diff --git a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do alias Pleroma.Web.Plugs.InstanceStatic alias Pleroma.Web.Plugs.OAuthScopesPlug - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) action_fallback(Pleroma.Web.AdminAPI.FallbackController) @@ -18,7 +18,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do plug(OAuthScopesPlug, %{scopes: ["admin:read"]} when action == :show) plug(OAuthScopesPlug, %{scopes: ["admin:write"]} when action in [:update, :delete]) - def show(conn, %{name: document_name}) do + def show(%{private: %{open_api_spex: %{params: %{name: document_name}}}} = conn, _) do with {:ok, url} <- InstanceDocument.get(document_name), {:ok, content} <- File.read(InstanceStatic.file_path(url)) do conn @@ -27,13 +27,18 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do end end - def update(%{body_params: %{file: file}} = conn, %{name: document_name}) do + def update( + %{ + private: %{open_api_spex: %{body_params: %{file: file}, params: %{name: document_name}}} + } = conn, + _ + ) do with {:ok, url} <- InstanceDocument.put(document_name, file.path) do json(conn, %{"url" => url}) end end - def delete(conn, %{name: document_name}) do + def delete(%{private: %{open_api_spex: %{params: %{name: document_name}}}} = conn, _) do with :ok <- InstanceDocument.delete(document_name) do json(conn, %{}) end diff --git a/lib/pleroma/web/admin_api/controllers/invite_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_controller.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.AdminAPI.InviteController do require Logger - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["admin:read:invites"]} when action == :index) plug( @@ -33,14 +33,14 @@ defmodule Pleroma.Web.AdminAPI.InviteController do end @doc "Create an account registration invite token" - def create(%{body_params: params} = conn, _) do + def create(%{private: %{open_api_spex: %{body_params: params}}} = conn, _) do {:ok, invite} = UserInviteToken.create_invite(params) render(conn, "show.json", invite: invite) end @doc "Revokes invite by token" - def revoke(%{body_params: %{token: token}} = conn, _) do + def revoke(%{private: %{open_api_spex: %{body_params: %{token: token}}}} = conn, _) do with {:ok, invite} <- UserInviteToken.find_by_token(token), {:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do render(conn, "show.json", invite: updated_invite) @@ -51,7 +51,13 @@ defmodule Pleroma.Web.AdminAPI.InviteController do end @doc "Sends registration invite via email" - def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = conn, _) do + def email( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: %{email: email} = params}} + } = conn, + _ + ) do with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])}, {_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])}, {:ok, invite_token} <- UserInviteToken.create_invite(), diff --git a/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex b/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do @cachex Pleroma.Config.get([:cachex, :provider], Cachex) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( OAuthScopesPlug, @@ -27,7 +27,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do defdelegate open_api_operation(action), to: Spec.MediaProxyCacheOperation - def index(%{assigns: %{user: _}} = conn, params) do + def index(%{assigns: %{user: _}, private: %{open_api_spex: %{params: params}}} = conn, _) do entries = fetch_entries(params) urls = paginate_entries(entries, params.page, params.page_size) @@ -59,12 +59,19 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do Enum.slice(entries, offset, page_size) end - def delete(%{assigns: %{user: _}, body_params: %{urls: urls}} = conn, _) do + def delete( + %{assigns: %{user: _}, private: %{open_api_spex: %{body_params: %{urls: urls}}}} = conn, + _ + ) do MediaProxy.remove_from_banned_urls(urls) json(conn, %{}) end - def purge(%{assigns: %{user: _}, body_params: %{urls: urls, ban: ban}} = conn, _) do + def purge( + %{assigns: %{user: _}, private: %{open_api_spex: %{body_params: %{urls: urls, ban: ban}}}} = + conn, + _ + ) do MediaProxy.Invalidation.purge(urls) if ban do diff --git a/lib/pleroma/web/admin_api/controllers/relay_controller.ex b/lib/pleroma/web/admin_api/controllers/relay_controller.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.AdminAPI.RelayController do require Logger - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( OAuthScopesPlug, @@ -31,7 +31,13 @@ defmodule Pleroma.Web.AdminAPI.RelayController do end end - def follow(%{assigns: %{user: admin}, body_params: %{relay_url: target}} = conn, _) do + def follow( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{relay_url: target}}} + } = conn, + _ + ) do with {:ok, _message} <- Relay.follow(target) do ModerationLog.insert_log(%{action: "relay_follow", actor: admin, target: target}) @@ -44,7 +50,13 @@ defmodule Pleroma.Web.AdminAPI.RelayController do end end - def unfollow(%{assigns: %{user: admin}, body_params: %{relay_url: target} = params} = conn, _) do + def unfollow( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{relay_url: target} = params}} + } = conn, + _ + ) do with {:ok, _message} <- Relay.unfollow(target, %{force: params[:force]}) do ModerationLog.insert_log(%{action: "relay_unfollow", actor: admin, target: target}) diff --git a/lib/pleroma/web/admin_api/controllers/report_controller.ex b/lib/pleroma/web/admin_api/controllers/report_controller.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Web.AdminAPI.ReportController do require Logger - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["admin:read:reports"]} when action in [:index, :show]) plug( @@ -31,13 +31,13 @@ defmodule Pleroma.Web.AdminAPI.ReportController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ReportOperation - def index(conn, params) do + def index(%{private: %{open_api_spex: %{params: params}}} = conn, _) do reports = Utils.get_reports(params, params.page, params.page_size) render(conn, "index.json", reports: reports) end - def show(conn, %{id: id}) do + def show(%{private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with %Activity{} = report <- Activity.get_report(id) do render(conn, "show.json", Report.extract_report_info(report)) else @@ -45,7 +45,13 @@ defmodule Pleroma.Web.AdminAPI.ReportController do end end - def update(%{assigns: %{user: admin}, body_params: %{reports: reports}} = conn, _) do + def update( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{reports: reports}}} + } = conn, + _ + ) do result = Enum.map(reports, fn report -> case CommonAPI.update_report_state(report.id, report.state) do @@ -73,9 +79,13 @@ defmodule Pleroma.Web.AdminAPI.ReportController do end end - def notes_create(%{assigns: %{user: user}, body_params: %{content: content}} = conn, %{ - id: report_id - }) do + def notes_create( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: %{content: content}, params: %{id: report_id}}} + } = conn, + _ + ) do with {:ok, _} <- ReportNote.create(user.id, report_id, content), report <- Activity.get_by_id_with_user_actor(report_id) do ModerationLog.insert_log(%{ @@ -92,10 +102,20 @@ defmodule Pleroma.Web.AdminAPI.ReportController do end end - def notes_delete(%{assigns: %{user: user}} = conn, %{ - id: note_id, - report_id: report_id - }) do + def notes_delete( + %{ + assigns: %{user: user}, + private: %{ + open_api_spex: %{ + params: %{ + id: note_id, + report_id: report_id + } + } + } + } = conn, + _ + ) do with {:ok, note} <- ReportNote.destroy(note_id), report <- Activity.get_by_id_with_user_actor(report_id) do ModerationLog.insert_log(%{ diff --git a/lib/pleroma/web/admin_api/controllers/rule_controller.ex b/lib/pleroma/web/admin_api/controllers/rule_controller.ex @@ -0,0 +1,62 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.RuleController do + use Pleroma.Web, :controller + + alias Pleroma.Repo + alias Pleroma.Rule + alias Pleroma.Web.Plugs.OAuthScopesPlug + + import Pleroma.Web.ControllerHelper, + only: [ + json_response: 3 + ] + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + plug( + OAuthScopesPlug, + %{scopes: ["admin:write"]} + when action in [:create, :update, :delete] + ) + + plug(OAuthScopesPlug, %{scopes: ["admin:read"]} when action == :index) + + action_fallback(AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.RuleOperation + + def index(conn, _) do + rules = + Rule.query() + |> Repo.all() + + render(conn, "index.json", rules: rules) + end + + def create(%{body_params: params} = conn, _) do + rule = + params + |> Rule.create() + + render(conn, "show.json", rule: rule) + end + + def update(%{body_params: params} = conn, %{id: id}) do + rule = + params + |> Rule.update(id) + + render(conn, "show.json", rule: rule) + end + + def delete(conn, %{id: id}) do + with {:ok, _} <- Rule.delete(id) do + json(conn, %{}) + else + _ -> json_response(conn, :bad_request, "") + end + end +end diff --git a/lib/pleroma/web/admin_api/controllers/user_controller.ex b/lib/pleroma/web/admin_api/controllers/user_controller.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Web.AdminAPI.UserController do @users_page_size 50 - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( OAuthScopesPlug, @@ -51,13 +51,22 @@ defmodule Pleroma.Web.AdminAPI.UserController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.UserOperation - def delete(conn, %{nickname: nickname}) do + def delete(%{private: %{open_api_spex: %{params: %{nickname: nickname}}}} = conn, _) do conn - |> Map.put(:body_params, %{nicknames: [nickname]}) - |> delete(%{}) + |> do_deletes([nickname]) end - def delete(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def delete( + %{ + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do + conn + |> do_deletes(nicknames) + end + + defp do_deletes(%{assigns: %{user: admin}} = conn, nicknames) when is_list(nicknames) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) Enum.each(users, fn user -> @@ -77,9 +86,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do def follow( %{ assigns: %{user: admin}, - body_params: %{ - follower: follower_nick, - followed: followed_nick + private: %{ + open_api_spex: %{ + body_params: %{ + follower: follower_nick, + followed: followed_nick + } + } } } = conn, _ @@ -102,9 +115,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do def unfollow( %{ assigns: %{user: admin}, - body_params: %{ - follower: follower_nick, - followed: followed_nick + private: %{ + open_api_spex: %{ + body_params: %{ + follower: follower_nick, + followed: followed_nick + } + } } } = conn, _ @@ -124,7 +141,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do json(conn, "ok") end - def create(%{assigns: %{user: admin}, body_params: %{users: users}} = conn, _) do + def create( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{users: users}}} + } = conn, + _ + ) do changesets = users |> Enum.map(fn %{nickname: nickname, email: email, password: password} -> @@ -178,7 +201,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do end end - def show(%{assigns: %{user: admin}} = conn, %{nickname: nickname}) do + def show( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{params: %{nickname: nickname}}} + } = conn, + _ + ) do with %User{} = user <- User.get_cached_by_nickname_or_id(nickname, for: admin) do render(conn, "show.json", %{user: user}) else @@ -186,7 +215,11 @@ defmodule Pleroma.Web.AdminAPI.UserController do end end - def toggle_activation(%{assigns: %{user: admin}} = conn, %{nickname: nickname}) do + def toggle_activation( + %{assigns: %{user: admin}, private: %{open_api_spex: %{params: %{nickname: nickname}}}} = + conn, + _ + ) do user = User.get_cached_by_nickname(nickname) {:ok, updated_user} = User.set_activation(user, !user.is_active) @@ -202,7 +235,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do render(conn, "show.json", user: updated_user) end - def activate(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def activate( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) {:ok, updated_users} = User.set_activation(users, true) @@ -212,10 +251,16 @@ defmodule Pleroma.Web.AdminAPI.UserController do action: "activate" }) - render(conn, "index.json", users: Keyword.values(updated_users)) + render(conn, "index.json", users: updated_users) end - def deactivate(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def deactivate( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) {:ok, updated_users} = User.set_activation(users, false) @@ -225,10 +270,16 @@ defmodule Pleroma.Web.AdminAPI.UserController do action: "deactivate" }) - render(conn, "index.json", users: Keyword.values(updated_users)) + render(conn, "index.json", users: updated_users) end - def approve(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def approve( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) {:ok, updated_users} = User.approve(users) @@ -241,7 +292,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do render(conn, "index.json", users: updated_users) end - def suggest(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def suggest( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) {:ok, updated_users} = User.set_suggestion(users, true) @@ -254,7 +311,13 @@ defmodule Pleroma.Web.AdminAPI.UserController do render(conn, "index.json", users: updated_users) end - def unsuggest(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames}} = conn, _) do + def unsuggest( + %{ + assigns: %{user: admin}, + private: %{open_api_spex: %{body_params: %{nicknames: nicknames}}} + } = conn, + _ + ) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) {:ok, updated_users} = User.set_suggestion(users, false) @@ -267,7 +330,7 @@ defmodule Pleroma.Web.AdminAPI.UserController do render(conn, "index.json", users: updated_users) end - def index(conn, params) do + def index(%{private: %{open_api_spex: %{params: params}}} = conn, _) do {page, page_size} = page_params(params) filters = maybe_parse_filters(params[:filters]) diff --git a/lib/pleroma/web/admin_api/views/report_view.ex b/lib/pleroma/web/admin_api/views/report_view.ex @@ -6,9 +6,11 @@ defmodule Pleroma.Web.AdminAPI.ReportView do use Pleroma.Web, :view alias Pleroma.HTML + alias Pleroma.Rule alias Pleroma.User alias Pleroma.Web.AdminAPI alias Pleroma.Web.AdminAPI.Report + alias Pleroma.Web.AdminAPI.RuleView alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.StatusView @@ -46,7 +48,8 @@ defmodule Pleroma.Web.AdminAPI.ReportView do as: :activity }), state: report.data["state"], - notes: render(__MODULE__, "index_notes.json", %{notes: report.report_notes}) + notes: render(__MODULE__, "index_notes.json", %{notes: report.report_notes}), + rules: rules(Map.get(report.data, "rules", nil)) } end @@ -71,4 +74,16 @@ defmodule Pleroma.Web.AdminAPI.ReportView do created_at: Utils.to_masto_date(inserted_at) } end + + defp rules(nil) do + [] + end + + defp rules(rule_ids) do + rules = + rule_ids + |> Rule.get() + + render(RuleView, "index.json", rules: rules) + end end diff --git a/lib/pleroma/web/admin_api/views/rule_view.ex b/lib/pleroma/web/admin_api/views/rule_view.ex @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.RuleView do + use Pleroma.Web, :view + + require Pleroma.Constants + + def render("index.json", %{rules: rules} = _opts) do + render_many(rules, __MODULE__, "show.json") + end + + def render("show.json", %{rule: rule} = _opts) do + %{ + id: to_string(rule.id), + priority: rule.priority, + text: rule.text, + hint: rule.hint + } + end +end diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex @@ -43,7 +43,7 @@ defmodule Pleroma.Web.ApiSpec do - [Mastodon API documentation](https://docs.joinmastodon.org/client/intro/) - [Differences in Mastodon API responses from vanilla Mastodon](https://docs-develop.pleroma.social/backend/development/API/differences_in_mastoapi_responses/) - Please report such occurences on our [issue tracker](https://git.pleroma.social/pleroma/pleroma/-/issues). Feel free to submit API questions or proposals there too! + Please report such occurrences on our [issue tracker](https://git.pleroma.social/pleroma/pleroma/-/issues). Feel free to submit API questions or proposals there too! """, # Strip environment from the version version: Application.spec(:pleroma, :vsn) |> to_string() |> String.replace(~r/\+.*$/, ""), @@ -94,14 +94,15 @@ defmodule Pleroma.Web.ApiSpec do "tags" => [ "Chat administration", "Emoji pack administration", - "Frontend managment", + "Frontend management", "Instance configuration", "Instance documents", + "Instance rule managment", "Invites", "MediaProxy cache", - "OAuth application managment", + "OAuth application management", "Relays", - "Report managment", + "Report management", "Status administration", "User administration", "Announcement management" @@ -137,7 +138,8 @@ defmodule Pleroma.Web.ApiSpec do "Scheduled statuses", "Search", "Status actions", - "Media attachments" + "Media attachments", + "Bookmark folders" ] }, %{ diff --git a/lib/pleroma/web/api_spec/cast_and_validate.ex b/lib/pleroma/web/api_spec/cast_and_validate.ex @@ -27,10 +27,12 @@ defmodule Pleroma.Web.ApiSpec.CastAndValidate do @impl Plug - def call(conn, %{operation_id: operation_id, render_error: render_error}) do + def call(conn, %{operation_id: operation_id, render_error: render_error} = opts) do {spec, operation_lookup} = PutApiSpec.get_spec_and_operation_lookup(conn) operation = operation_lookup[operation_id] + cast_opts = opts |> Map.take([:replace_params]) |> Map.to_list() + content_type = case Conn.get_req_header(conn, "content-type") do [header_value | _] -> @@ -44,7 +46,7 @@ defmodule Pleroma.Web.ApiSpec.CastAndValidate do conn = Conn.put_private(conn, :operation_id, operation_id) - case cast_and_validate(spec, operation, conn, content_type, strict?()) do + case cast_and_validate(spec, operation, conn, content_type, strict?(), cast_opts) do {:ok, conn} -> conn @@ -94,11 +96,11 @@ defmodule Pleroma.Web.ApiSpec.CastAndValidate do def call(conn, opts), do: OpenApiSpex.Plug.CastAndValidate.call(conn, opts) - defp cast_and_validate(spec, operation, conn, content_type, true = _strict) do - OpenApiSpex.cast_and_validate(spec, operation, conn, content_type) + defp cast_and_validate(spec, operation, conn, content_type, true = _strict, cast_opts) do + OpenApiSpex.cast_and_validate(spec, operation, conn, content_type, cast_opts) end - defp cast_and_validate(spec, operation, conn, content_type, false = _strict) do + defp cast_and_validate(spec, operation, conn, content_type, false = _strict, cast_opts) do case OpenApiSpex.cast_and_validate(spec, operation, conn, content_type) do {:ok, conn} -> {:ok, conn} @@ -123,7 +125,7 @@ defmodule Pleroma.Web.ApiSpec.CastAndValidate do end) conn = %Conn{conn | query_params: query_params} - OpenApiSpex.cast_and_validate(spec, operation, conn, content_type) + OpenApiSpex.cast_and_validate(spec, operation, conn, content_type, cast_opts) end end diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex @@ -62,7 +62,7 @@ defmodule Pleroma.Web.ApiSpec.Helpers do Operation.parameter( :with_relationships, :query, - BooleanLike, + BooleanLike.schema(), "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**" ) end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.ActorType alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.BooleanLike + alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.List alias Pleroma.Web.ApiSpec.Schemas.Status alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @@ -122,22 +123,27 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do parameters: [ %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, - Operation.parameter(:pinned, :query, BooleanLike, "Include only pinned statuses"), + Operation.parameter( + :pinned, + :query, + BooleanLike.schema(), + "Include only pinned statuses" + ), Operation.parameter(:tagged, :query, :string, "With tag"), Operation.parameter( :only_media, :query, - BooleanLike, + BooleanLike.schema(), "Include only statuses with media attached" ), Operation.parameter( :with_muted, :query, - BooleanLike, + BooleanLike.schema(), "Include statuses from muted accounts." ), - Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), - Operation.parameter(:exclude_replies, :query, BooleanLike, "Exclude replies"), + Operation.parameter(:exclude_reblogs, :query, BooleanLike.schema(), "Exclude reblogs"), + Operation.parameter(:exclude_replies, :query, BooleanLike.schema(), "Exclude replies"), Operation.parameter( :exclude_visibilities, :query, @@ -147,7 +153,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do Operation.parameter( :with_muted, :query, - BooleanLike, + BooleanLike.schema(), "Include reactions from muted accounts." ) ] ++ pagination_params(), @@ -347,7 +353,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do summary: "Endorse", operationId: "AccountController.endorse", security: [%{"oAuth" => ["follow", "write:accounts"]}], - description: "Addds the given account to endorsed accounts list.", + description: "Adds the given account to endorsed accounts list.", parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], responses: %{ 200 => Operation.response("Relationship", "application/json", AccountRelationship), @@ -508,6 +514,48 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do } end + def familiar_followers_operation do + %Operation{ + tags: ["Retrieve account information"], + summary: "Followers that you follow", + operationId: "AccountController.familiar_followers", + description: + "Obtain a list of all accounts that follow a given account, filtered for accounts you follow.", + security: [%{"oAuth" => ["read:follows"]}], + parameters: [ + Operation.parameter( + :id, + :query, + %Schema{ + oneOf: [%Schema{type: :array, items: %Schema{type: :string}}, %Schema{type: :string}] + }, + "Account IDs", + example: "123" + ) + ], + responses: %{ + 200 => + Operation.response("Accounts", "application/json", %Schema{ + title: "ArrayOfAccounts", + type: :array, + items: %Schema{ + title: "Account", + type: :object, + properties: %{ + id: FlakeID, + accounts: %Schema{ + title: "ArrayOfAccounts", + type: :array, + items: Account, + example: [Account.schema().example] + } + } + } + }) + } + } + end + defp create_request do %Schema{ title: "AccountCreateRequest", diff --git a/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.FrontendOperation do def index_operation do %Operation{ - tags: ["Frontend managment"], + tags: ["Frontend management"], summary: "Retrieve a list of available frontends", operationId: "AdminAPI.FrontendController.index", security: [%{"oAuth" => ["admin:read"]}], @@ -29,7 +29,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.FrontendOperation do def install_operation do %Operation{ - tags: ["Frontend managment"], + tags: ["Frontend management"], summary: "Install a frontend", operationId: "AdminAPI.FrontendController.install", security: [%{"oAuth" => ["admin:read"]}], diff --git a/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex b/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do def index_operation do %Operation{ summary: "Retrieve a list of OAuth applications", - tags: ["OAuth application managment"], + tags: ["OAuth application management"], operationId: "AdminAPI.OAuthAppController.index", security: [%{"oAuth" => ["admin:write"]}], parameters: [ @@ -69,7 +69,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do def create_operation do %Operation{ - tags: ["OAuth application managment"], + tags: ["OAuth application management"], summary: "Create an OAuth application", operationId: "AdminAPI.OAuthAppController.create", requestBody: request_body("Parameters", create_request()), @@ -84,7 +84,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do def update_operation do %Operation{ - tags: ["OAuth application managment"], + tags: ["OAuth application management"], summary: "Update OAuth application", operationId: "AdminAPI.OAuthAppController.update", parameters: [id_param() | admin_api_params()], @@ -102,7 +102,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do def delete_operation do %Operation{ - tags: ["OAuth application managment"], + tags: ["OAuth application management"], summary: "Delete OAuth application", operationId: "AdminAPI.OAuthAppController.delete", parameters: [id_param() | admin_api_params()], diff --git a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex @@ -19,7 +19,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do def index_operation do %Operation{ - tags: ["Report managment"], + tags: ["Report management"], summary: "Retrieve a list of reports", operationId: "AdminAPI.ReportController.index", security: [%{"oAuth" => ["admin:read:reports"]}], @@ -31,6 +31,12 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do "Filter by report state" ), Operation.parameter( + :rule_id, + :query, + %Schema{type: :string}, + "Filter by selected rule id" + ), + Operation.parameter( :limit, :query, %Schema{type: :integer}, @@ -69,7 +75,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do def show_operation do %Operation{ - tags: ["Report managment"], + tags: ["Report management"], summary: "Retrieve a report", operationId: "AdminAPI.ReportController.show", parameters: [id_param() | admin_api_params()], @@ -83,7 +89,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do def update_operation do %Operation{ - tags: ["Report managment"], + tags: ["Report management"], summary: "Change state of specified reports", operationId: "AdminAPI.ReportController.update", security: [%{"oAuth" => ["admin:write:reports"]}], @@ -99,7 +105,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do def notes_create_operation do %Operation{ - tags: ["Report managment"], + tags: ["Report management"], summary: "Add a note to the report", operationId: "AdminAPI.ReportController.notes_create", parameters: [id_param() | admin_api_params()], @@ -120,7 +126,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do def notes_delete_operation do %Operation{ - tags: ["Report managment"], + tags: ["Report management"], summary: "Delete note attached to the report", operationId: "AdminAPI.ReportController.notes_delete", parameters: [ @@ -141,7 +147,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do end def id_param do - Operation.parameter(:id, :path, FlakeID, "Report ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Report ID", example: "9umDrYheeY451cQnEe", required: true ) @@ -169,6 +175,17 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do inserted_at: %Schema{type: :string, format: :"date-time"} } } + }, + rules: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + id: %Schema{type: :string}, + text: %Schema{type: :string}, + hint: %Schema{type: :string, nullable: true} + } + } } } } diff --git a/lib/pleroma/web/api_spec/operations/admin/rule_operation.ex b/lib/pleroma/web/api_spec/operations/admin/rule_operation.ex @@ -0,0 +1,115 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.RuleOperation 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: ["Instance rule managment"], + summary: "Retrieve list of instance rules", + operationId: "AdminAPI.RuleController.index", + security: [%{"oAuth" => ["admin:read"]}], + responses: %{ + 200 => + Operation.response("Response", "application/json", %Schema{ + type: :array, + items: rule() + }), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def create_operation do + %Operation{ + tags: ["Instance rule managment"], + summary: "Create new rule", + operationId: "AdminAPI.RuleController.create", + security: [%{"oAuth" => ["admin:write"]}], + parameters: admin_api_params(), + requestBody: request_body("Parameters", create_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", rule()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Instance rule managment"], + summary: "Modify existing rule", + operationId: "AdminAPI.RuleController.update", + security: [%{"oAuth" => ["admin:write"]}], + parameters: [Operation.parameter(:id, :path, :string, "Rule ID")], + requestBody: request_body("Parameters", update_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", rule()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Instance rule managment"], + summary: "Delete rule", + operationId: "AdminAPI.RuleController.delete", + parameters: [Operation.parameter(:id, :path, :string, "Rule ID")], + security: [%{"oAuth" => ["admin:write"]}], + responses: %{ + 200 => empty_object_response(), + 404 => Operation.response("Not Found", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + defp create_request do + %Schema{ + type: :object, + required: [:text], + properties: %{ + priority: %Schema{type: :integer}, + text: %Schema{type: :string}, + hint: %Schema{type: :string} + } + } + end + + defp update_request do + %Schema{ + type: :object, + properties: %{ + priority: %Schema{type: :integer}, + text: %Schema{type: :string}, + hint: %Schema{type: :string} + } + } + end + + defp rule do + %Schema{ + type: :object, + properties: %{ + id: %Schema{type: :string}, + priority: %Schema{type: :integer}, + text: %Schema{type: :string}, + hint: %Schema{type: :string, nullable: true} + } + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -137,7 +137,12 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do "Deprecated due to no support for pagination. Using [/api/v2/pleroma/chats](#operation/ChatController.index2) instead is recommended.", operationId: "ChatController.index", parameters: [ - Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users") + Operation.parameter( + :with_muted, + :query, + BooleanLike.schema(), + "Include chats from muted users" + ) ], responses: %{ 200 => Operation.response("The chats of the user", "application/json", chats_response()) @@ -156,7 +161,12 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do summary: "Retrieve list of chats", operationId: "ChatController.index2", parameters: [ - Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users") + Operation.parameter( + :with_muted, + :query, + BooleanLike.schema(), + "Include chats from muted users" + ) | pagination_params() ], responses: %{ diff --git a/lib/pleroma/web/api_spec/operations/directory_operation.ex b/lib/pleroma/web/api_spec/operations/directory_operation.ex @@ -29,7 +29,7 @@ defmodule Pleroma.Web.ApiSpec.DirectoryOperation do "Order by recent activity or account creation", required: nil ), - Operation.parameter(:local, :query, BooleanLike, "Include local users only") + Operation.parameter(:local, :query, BooleanLike.schema(), "Include local users only") ] ++ pagination_params(), responses: %{ 200 => diff --git a/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex b/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex @@ -21,7 +21,7 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do summary: "Get an object of emoji to account mappings with accounts that reacted to the post", parameters: [ - Operation.parameter(:id, :path, FlakeID, "Status ID", required: true), + Operation.parameter(:id, :path, FlakeID.schema(), "Status ID", required: true), Operation.parameter(:emoji, :path, :string, "Filter by a single unicode emoji", required: nil ), @@ -45,7 +45,7 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do tags: ["Emoji reactions"], summary: "React to a post with a unicode emoji", parameters: [ - Operation.parameter(:id, :path, FlakeID, "Status ID", required: true), + Operation.parameter(:id, :path, FlakeID.schema(), "Status ID", required: true), Operation.parameter(:emoji, :path, :string, "A single character unicode emoji", required: true ) @@ -64,7 +64,7 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do tags: ["Emoji reactions"], summary: "Remove a reaction to a post with a unicode emoji", parameters: [ - Operation.parameter(:id, :path, FlakeID, "Status ID", required: true), + Operation.parameter(:id, :path, FlakeID.schema(), "Status ID", required: true), Operation.parameter(:emoji, :path, :string, "A single character unicode emoji", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -23,6 +23,18 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do } end + def show2_operation do + %Operation{ + tags: ["Instance misc"], + summary: "Retrieve instance information", + description: "Information about the server", + operationId: "InstanceController.show2", + responses: %{ + 200 => Operation.response("Instance", "application/json", instance2()) + } + } + end + def peers_operation do %Operation{ tags: ["Instance misc"], @@ -34,10 +46,30 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do } end + def rules_operation do + %Operation{ + tags: ["Instance misc"], + summary: "Retrieve list of instance rules", + operationId: "InstanceController.rules", + responses: %{ + 200 => Operation.response("Array of domains", "application/json", array_of_rules()) + } + } + end + defp instance do %Schema{ type: :object, properties: %{ + accounts: %Schema{ + type: :object, + properties: %{ + max_featured_tags: %Schema{ + type: :integer, + description: "The maximum number of featured tags allowed for each account." + } + } + }, uri: %Schema{type: :string, description: "The domain name of the instance"}, title: %Schema{type: :string, description: "The title of the website"}, description: %Schema{ @@ -89,7 +121,7 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do languages: %Schema{ type: :array, items: %Schema{type: :string}, - description: "Primary langauges of the website and its staff" + description: "Primary languages of the website and its staff" }, registrations: %Schema{type: :boolean, description: "Whether registrations are enabled"}, # Extra (not present in Mastodon): @@ -160,7 +192,186 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do "urls" => %{ "streaming_api" => "wss://lain.com" }, - "version" => "2.7.2 (compatible; Pleroma 2.0.50-536-g25eec6d7-develop)" + "version" => "2.7.2 (compatible; Pleroma 2.0.50-536-g25eec6d7-develop)", + "rules" => array_of_rules() + } + } + end + + defp instance2 do + %Schema{ + type: :object, + properties: %{ + domain: %Schema{type: :string, description: "The domain name of the instance"}, + title: %Schema{type: :string, description: "The title of the website"}, + version: %Schema{ + type: :string, + description: "The version of Pleroma installed on the instance" + }, + source_url: %Schema{ + type: :string, + description: "The version of Pleroma installed on the instance" + }, + description: %Schema{ + type: :string, + description: "Admin-defined description of the Pleroma site" + }, + usage: %Schema{ + type: :object, + description: "Instance usage statistics", + properties: %{ + users: %Schema{ + type: :object, + description: "User count statistics", + properties: %{ + active_month: %Schema{ + type: :integer, + description: "Monthly active users" + } + } + } + } + }, + email: %Schema{ + type: :string, + description: "An email that may be contacted for any inquiries", + format: :email + }, + urls: %Schema{ + type: :object, + description: "URLs of interest for clients apps", + properties: %{} + }, + stats: %Schema{ + type: :object, + description: "Statistics about how much information the instance contains", + properties: %{ + user_count: %Schema{ + type: :integer, + description: "Users registered on this instance" + }, + status_count: %Schema{ + type: :integer, + description: "Statuses authored by users on instance" + }, + domain_count: %Schema{ + type: :integer, + description: "Domains federated with this instance" + } + } + }, + thumbnail: %Schema{ + type: :object, + properties: %{ + url: %Schema{ + type: :string, + description: "Banner image for the website", + nullable: true + } + } + }, + languages: %Schema{ + type: :array, + items: %Schema{type: :string}, + description: "Primary languages of the website and its staff" + }, + registrations: %Schema{ + type: :object, + description: "Registrations-related configuration", + properties: %{ + enabled: %Schema{ + type: :boolean, + description: "Whether registrations are enabled" + }, + approval_required: %Schema{ + type: :boolean, + description: "Whether users need to be manually approved by admin" + } + } + }, + configuration: %Schema{ + type: :object, + description: "Instance configuration", + properties: %{ + accounts: %Schema{ + type: :object, + properties: %{ + max_featured_tags: %Schema{ + type: :integer, + description: "The maximum number of featured tags allowed for each account." + }, + max_pinned_statuses: %Schema{ + type: :integer, + description: "The maximum number of pinned statuses for each account." + } + } + }, + urls: %Schema{ + type: :object, + properties: %{ + streaming: %Schema{ + type: :string, + description: "Websockets address for push streaming" + } + } + }, + statuses: %Schema{ + type: :object, + description: "A map with poll limits for local statuses", + properties: %{ + characters_reserved_per_url: %Schema{ + type: :integer, + description: + "Each URL in a status will be assumed to be exactly this many characters." + }, + max_characters: %Schema{ + type: :integer, + description: "Posts character limit (CW/Subject included in the counter)" + }, + max_media_attachments: %Schema{ + type: :integer, + description: "Media attachment limit" + } + } + }, + media_attachments: %Schema{ + type: :object, + description: "A map with poll limits for media attachments", + properties: %{ + image_size_limit: %Schema{ + type: :integer, + description: "File size limit of uploaded images" + }, + video_size_limit: %Schema{ + type: :integer, + description: "File size limit of uploaded videos" + } + } + }, + polls: %Schema{ + type: :object, + description: "A map with poll limits for local polls", + properties: %{ + max_options: %Schema{ + type: :integer, + description: "Maximum number of options." + }, + max_characters_per_option: %Schema{ + type: :integer, + description: "Maximum number of characters per option." + }, + min_expiration: %Schema{ + type: :integer, + description: "Minimum expiration time (in seconds)." + }, + max_expiration: %Schema{ + type: :integer, + description: "Maximum expiration time (in seconds)." + } + } + } + } + } } } end @@ -172,4 +383,18 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do example: ["pleroma.site", "lain.com", "bikeshed.party"] } end + + defp array_of_rules do + %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + id: %Schema{type: :string}, + text: %Schema{type: :string}, + hint: %Schema{type: :string} + } + } + } + end end diff --git a/lib/pleroma/web/api_spec/operations/notification_operation.ex b/lib/pleroma/web/api_spec/operations/notification_operation.ex @@ -62,7 +62,7 @@ defmodule Pleroma.Web.ApiSpec.NotificationOperation do Operation.parameter( :with_muted, :query, - BooleanLike, + BooleanLike.schema(), "Include the notifications from muted users" ) ] ++ pagination_params(), diff --git a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -142,7 +142,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do end defp id_param do - Operation.parameter(:id, :path, FlakeID, "Account ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Account ID", example: "9umDrYheeY451cQnEe", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/pleroma_bookmark_folder_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_bookmark_folder_operation.ex @@ -0,0 +1,125 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.PleromaBookmarkFolderOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.BookmarkFolder + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + import Pleroma.Web.ApiSpec.Helpers + + @spec open_api_operation(any()) :: any() + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Bookmark folders"], + summary: "All bookmark folders", + security: [%{"oAuth" => ["read:bookmarks"]}], + operationId: "PleromaAPI.BookmarkFolderController.index", + responses: %{ + 200 => + Operation.response("Array of Bookmark Folders", "application/json", %Schema{ + type: :array, + items: BookmarkFolder + }) + } + } + end + + def create_operation do + %Operation{ + tags: ["Bookmark folders"], + summary: "Create a bookmark folder", + security: [%{"oAuth" => ["write:bookmarks"]}], + operationId: "PleromaAPI.BookmarkFolderController.create", + requestBody: request_body("Parameters", create_request(), required: true), + responses: %{ + 200 => Operation.response("Bookmark Folder", "application/json", BookmarkFolder), + 422 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Bookmark folders"], + summary: "Update a bookmark folder", + security: [%{"oAuth" => ["write:bookmarks"]}], + operationId: "PleromaAPI.BookmarkFolderController.update", + parameters: [id_param()], + requestBody: request_body("Parameters", update_request(), required: true), + responses: %{ + 200 => Operation.response("Bookmark Folder", "application/json", BookmarkFolder), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError), + 422 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Bookmark folders"], + summary: "Delete a bookmark folder", + security: [%{"oAuth" => ["write:bookmarks"]}], + operationId: "PleromaAPI.BookmarkFolderController.delete", + parameters: [id_param()], + responses: %{ + 200 => Operation.response("Bookmark Folder", "application/json", BookmarkFolder), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp create_request do + %Schema{ + title: "BookmarkFolderCreateRequest", + type: :object, + properties: %{ + name: %Schema{ + type: :string, + description: "Folder name" + }, + emoji: %Schema{ + type: :string, + nullable: true, + description: "Folder emoji" + } + } + } + end + + defp update_request do + %Schema{ + title: "BookmarkFolderUpdateRequest", + type: :object, + properties: %{ + name: %Schema{ + type: :string, + nullable: true, + description: "Folder name" + }, + emoji: %Schema{ + type: :string, + nullable: true, + description: "Folder emoji" + } + } + } + end + + def id_param do + Operation.parameter(:id, :path, FlakeID.schema(), "Bookmark Folder ID", + example: "9umDrYheeY451cQnEe", + required: true + ) + end +end diff --git a/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex @@ -5,7 +5,6 @@ defmodule Pleroma.Web.ApiSpec.PleromaNotificationOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.NotificationOperation alias Pleroma.Web.ApiSpec.Schemas.ApiError import Pleroma.Web.ApiSpec.Helpers @@ -35,12 +34,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaNotificationOperation do Operation.response( "A Notification or array of Notifications", "application/json", - %Schema{ - anyOf: [ - %Schema{type: :array, items: NotificationOperation.notification()}, - NotificationOperation.notification() - ] - } + %Schema{type: :string} ), 400 => Operation.response("Bad Request", "application/json", ApiError) } diff --git a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex @@ -23,7 +23,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do security: [%{"oAuth" => ["write"]}], operationId: "PleromaAPI.ScrobbleController.create", deprecated: true, - requestBody: request_body("Parameters", create_request(), requried: true), + requestBody: request_body("Parameters", create_request(), required: true), responses: %{ 200 => Operation.response("Scrobble", "application/json", scrobble()) } @@ -59,6 +59,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, length: %Schema{type: :integer, description: "The length of the media playing"}, + externalLink: %Schema{type: :string, description: "A URL referencing the media playing"}, visibility: %Schema{ allOf: [VisibilityScope], default: "public", @@ -69,7 +70,8 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "title" => "Some Title", "artist" => "Some Artist", "album" => "Some Album", - "length" => 180_000 + "length" => 180_000, + "externalLink" => "https://www.last.fm/music/Some+Artist/_/Some+Title" } } end @@ -83,6 +85,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do title: %Schema{type: :string, description: "The title of the media playing"}, album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, + externalLink: %Schema{type: :string, description: "A URL referencing the media playing"}, length: %Schema{ type: :integer, description: "The length of the media playing", @@ -97,6 +100,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "artist" => "Some Artist", "album" => "Some Album", "length" => 180_000, + "externalLink" => "https://www.last.fm/music/Some+Artist/_/Some+Title", "created_at" => "2019-09-28T12:40:45.000Z" } } diff --git a/lib/pleroma/web/api_spec/operations/pleroma_status_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_status_operation.ex @@ -37,7 +37,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaStatusOperation do end def id_param do - Operation.parameter(:id, :path, FlakeID, "Status ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Status ID", example: "9umDrYheeY451cQnEe", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/poll_operation.ex b/lib/pleroma/web/api_spec/operations/poll_operation.ex @@ -47,7 +47,7 @@ defmodule Pleroma.Web.ApiSpec.PollOperation do end defp id_param do - Operation.parameter(:id, :path, FlakeID, "Poll ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Poll ID", example: "123", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/report_operation.ex b/lib/pleroma/web/api_spec/operations/report_operation.ex @@ -53,6 +53,12 @@ defmodule Pleroma.Web.ApiSpec.ReportOperation do default: false, description: "If the account is remote, should the report be forwarded to the remote admin?" + }, + rule_ids: %Schema{ + type: :array, + nullable: true, + items: %Schema{type: :string}, + description: "Array of rules" } }, required: [:account_id], @@ -60,7 +66,8 @@ defmodule Pleroma.Web.ApiSpec.ReportOperation do "account_id" => "123", "status_ids" => ["1337"], "comment" => "bad status!", - "forward" => "false" + "forward" => "false", + "rule_ids" => ["3"] } } end diff --git a/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex b/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex @@ -88,7 +88,7 @@ defmodule Pleroma.Web.ApiSpec.ScheduledActivityOperation do end defp id_param do - Operation.parameter(:id, :path, FlakeID, "Poll ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Poll ID", example: "123", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/search_operation.ex b/lib/pleroma/web/api_spec/operations/search_operation.ex @@ -70,7 +70,7 @@ defmodule Pleroma.Web.ApiSpec.SearchOperation do Operation.parameter( :account_id, :query, - FlakeID, + FlakeID.schema(), "If provided, statuses returned will be authored only by this account" ), Operation.parameter( @@ -116,7 +116,7 @@ defmodule Pleroma.Web.ApiSpec.SearchOperation do Operation.parameter( :account_id, :query, - FlakeID, + FlakeID.schema(), "If provided, statuses returned will be authored only by this account" ), Operation.parameter( diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -39,7 +39,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do Operation.parameter( :with_muted, :query, - BooleanLike, + BooleanLike.schema(), "Include reactions from muted acccounts." ) ], @@ -82,7 +82,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do Operation.parameter( :with_muted, :query, - BooleanLike, + BooleanLike.schema(), "Include reactions from muted acccounts." ) ], @@ -256,6 +256,18 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do description: "Privately bookmark a status", operationId: "StatusController.bookmark", parameters: [id_param()], + requestBody: + request_body("Parameters", %Schema{ + title: "StatusUpdateRequest", + type: :object, + properties: %{ + folder_id: %Schema{ + nullable: true, + allOf: [FlakeID], + description: "ID of bookmarks folder, if any" + } + } + }), responses: %{ 200 => status_response() } @@ -430,7 +442,15 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do summary: "Bookmarked statuses", description: "Statuses the user has bookmarked", operationId: "StatusController.bookmarks", - parameters: pagination_params(), + parameters: [ + Operation.parameter( + :folder_id, + :query, + FlakeID.schema(), + "If provided, only display bookmarks from given folder" + ) + | pagination_params() + ], security: [%{"oAuth" => ["read:bookmarks"]}], responses: %{ 200 => Operation.response("Array of Statuses", "application/json", array_of_statuses()) @@ -534,7 +554,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do format: :"date-time", nullable: true, description: - "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future." + "ISO 8601 Datetime at which to schedule a status. Providing this parameter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future." }, language: %Schema{ type: :string, @@ -546,7 +566,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do allOf: [BooleanLike], nullable: true, description: - "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" + "If set to `true` the post won't be actually posted, but the status entity would still be rendered back. This could be useful for previewing rich text/custom emoji, for example" }, content_type: %Schema{ type: :string, @@ -685,7 +705,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do end def id_param do - Operation.parameter(:id, :path, FlakeID, "Status ID", + Operation.parameter(:id, :path, FlakeID.schema(), "Status ID", example: "9umDrYheeY451cQnEe", required: true ) diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -176,7 +176,12 @@ defmodule Pleroma.Web.ApiSpec.TimelineOperation do end defp with_muted_param do - Operation.parameter(:with_muted, :query, BooleanLike, "Include activities by muted users") + Operation.parameter( + :with_muted, + :query, + BooleanLike.schema(), + "Include activities by muted users" + ) end defp exclude_visibilities_param do diff --git a/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex b/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex @@ -87,7 +87,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do defp change_password_request do %Schema{ title: "ChangePasswordRequest", - description: "POST body for changing the account's passowrd", + description: "POST body for changing the account's password", type: :object, required: [:password, :new_password, :new_password_confirmation], properties: %{ @@ -136,23 +136,23 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do } end - def update_notificaton_settings_operation do + def update_notification_settings_operation do %Operation{ tags: ["Settings"], summary: "Update Notification Settings", security: [%{"oAuth" => ["write:accounts"]}], - operationId: "UtilController.update_notificaton_settings", + operationId: "UtilController.update_notification_settings", parameters: [ Operation.parameter( :block_from_strangers, :query, - BooleanLike, + BooleanLike.schema(), "blocks notifications from accounts you do not follow" ), Operation.parameter( :hide_notification_contents, :query, - BooleanLike, + BooleanLike.schema(), "removes the contents of a message from the push notification" ) ], diff --git a/lib/pleroma/web/api_spec/schemas/attachment.ex b/lib/pleroma/web/api_spec/schemas/attachment.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Attachment do title: "Attachment", description: "Represents a file or media attachment that can be added to a status.", type: :object, - requried: [:id, :url, :preview_url], + required: [:id, :url, :preview_url], properties: %{ id: %Schema{type: :string, description: "The ID of the attachment in the database."}, url: %Schema{ diff --git a/lib/pleroma/web/api_spec/schemas/bookmark_folder.ex b/lib/pleroma/web/api_spec/schemas/bookmark_folder.ex @@ -0,0 +1,26 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.BookmarkFolder do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "BookmarkFolder", + description: "Response schema for a bookmark folder", + type: :object, + properties: %{ + id: FlakeID, + name: %Schema{type: :string, description: "Folder name"}, + emoji: %Schema{type: :string, description: "Folder emoji", nullable: true} + }, + example: %{ + "id" => "9toJCu5YZW7O7gfvH6", + "name" => "Read later", + "emoji" => nil + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -56,6 +56,15 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do } }, description: "Possible answers for the poll." + }, + pleroma: %Schema{ + type: :object, + properties: %{ + non_anonymous: %Schema{ + type: :boolean, + description: "Can voters be publicly identified?" + } + } } }, example: %{ @@ -79,7 +88,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do votes_count: 4 } ], - emojis: [] + emojis: [], + pleroma: %{ + non_anonymous: false + } } }) end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex @@ -58,6 +58,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do format: :uri, description: "Preview thumbnail" }, + image_description: %Schema{ + type: :string, + description: "Alternate text that describes what is in the thumbnail" + }, title: %Schema{type: :string, description: "Title of linked resource"}, description: %Schema{type: :string, description: "Description of preview"} } diff --git a/lib/pleroma/web/auth/authenticator.ex b/lib/pleroma/web/auth/authenticator.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.Auth.Authenticator do @callback get_user(Plug.Conn.t()) :: {:ok, user :: struct()} | {:error, any()} @callback create_from_registration(Plug.Conn.t(), registration :: struct()) :: - {:ok, User.t()} | {:error, any()} + {:ok, Pleroma.User.t()} | {:error, any()} @callback get_registration(Plug.Conn.t()) :: {:ok, registration :: struct()} | {:error, any()} @callback handle_error(Plug.Conn.t(), any()) :: any() @callback auth_template() :: String.t() | nil diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.Formatter alias Pleroma.ModerationLog alias Pleroma.Object + alias Pleroma.Rule alias Pleroma.ThreadMute alias Pleroma.User alias Pleroma.UserRelationship @@ -372,7 +373,7 @@ defmodule Pleroma.Web.CommonAPI do do: visibility in ~w(public unlisted) def public_announce?(object, _) do - Visibility.is_public?(object) + Visibility.public?(object) end def get_visibility(_, _, %Participation{}), do: {"direct", "direct"} @@ -500,12 +501,12 @@ defmodule Pleroma.Web.CommonAPI do end defp activity_is_public(activity) do - with false <- Visibility.is_public?(activity) do + with false <- Visibility.public?(activity) do {:error, :visibility_error} end end - @spec unpin(String.t(), User.t()) :: {:ok, User.t()} | {:error, term()} + @spec unpin(String.t(), User.t()) :: {:ok, Activity.t()} | {:error, term()} def unpin(id, user) do with %Activity{} = activity <- create_activity_by_id(id), {:ok, unpin_data, _} <- Builder.unpin(user, activity.object), @@ -550,7 +551,7 @@ defmodule Pleroma.Web.CommonAPI do remove_mute(user, activity) else {what, result} = error -> - Logger.warn( + Logger.warning( "CommonAPI.remove_mute/2 failed. #{what}: #{result}, user_id: #{user_id}, activity_id: #{activity_id}" ) @@ -568,14 +569,16 @@ defmodule Pleroma.Web.CommonAPI do def report(user, data) do with {:ok, account} <- get_reported_account(data.account_id), {:ok, {content_html, _, _}} <- make_report_content_html(data[:comment]), - {:ok, statuses} <- get_report_statuses(account, data) do + {:ok, statuses} <- get_report_statuses(account, data), + rules <- get_report_rules(Map.get(data, :rule_ids, nil)) do ActivityPub.flag(%{ context: Utils.generate_context_id(), actor: user, account: account, statuses: statuses, content: content_html, - forward: Map.get(data, :forward, false) + forward: Map.get(data, :forward, false), + rules: rules }) end end @@ -587,6 +590,15 @@ defmodule Pleroma.Web.CommonAPI do end end + defp get_report_rules(nil) do + nil + end + + defp get_report_rules(rule_ids) do + rule_ids + |> Enum.filter(&Rule.exists?/1) + end + def update_report_state(activity_ids, state) when is_list(activity_ids) do case Utils.update_report_state(activity_ids, state) do :ok -> {:ok, activity_ids} diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex @@ -14,6 +14,8 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do import Pleroma.Web.Gettext import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1] + @type t :: %__MODULE__{} + defstruct valid?: true, errors: [], user: nil, @@ -83,7 +85,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do defp listen_object(draft) do object = draft.params - |> Map.take([:album, :artist, :title, :length]) + |> Map.take([:album, :artist, :title, :length, :externalLink]) |> Map.new(fn {key, value} -> {to_string(key), value} end) |> Map.put("type", "Audio") |> Map.put("to", draft.to) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex @@ -109,7 +109,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do def get_to_and_cc(%{visibility: "direct"} = draft) do # If the OP is a DM already, add the implicit actor. - if draft.in_reply_to && Visibility.is_direct?(draft.in_reply_to) do + if draft.in_reply_to && Visibility.direct?(draft.in_reply_to) do {Enum.uniq([draft.in_reply_to.data["actor"] | draft.mentions]), []} else {draft.mentions, []} @@ -321,13 +321,13 @@ defmodule Pleroma.Web.CommonAPI.Utils do format_asctime(date) else _e -> - Logger.warn("Date #{date} in wrong format, must be ISO 8601") + Logger.warning("Date #{date} in wrong format, must be ISO 8601") "" end end def date_to_asctime(date) do - Logger.warn("Date #{date} in wrong format, must be ISO 8601") + Logger.warning("Date #{date} in wrong format, must be ISO 8601") "" end diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex @@ -20,7 +20,7 @@ defmodule Pleroma.Web.ControllerHelper do |> json(json) end - @spec fetch_integer_param(map(), String.t(), integer() | nil) :: integer() | nil + @spec fetch_integer_param(map(), String.t() | atom(), integer() | nil) :: integer() | nil def fetch_integer_param(params, name, default \\ nil) do params |> Map.get(name, default) @@ -53,10 +53,15 @@ defmodule Pleroma.Web.ControllerHelper do end end + # TODO: Only fetch the params from open_api_spex when everything is converted @id_keys Pagination.page_keys() -- ["limit", "order"] defp build_pagination_fields(conn, min_id, max_id, extra_params) do params = - conn.params + if Map.has_key?(conn.private, :open_api_spex) do + get_in(conn, [Access.key(:private), Access.key(:open_api_spex), Access.key(:params)]) + else + conn.params + end |> Map.drop(Map.keys(conn.path_params) |> Enum.map(&String.to_existing_atom/1)) |> Map.merge(extra_params) |> Map.drop(@id_keys) @@ -85,18 +90,15 @@ defmodule Pleroma.Web.ControllerHelper do end end - def assign_account_by_id(conn, _) do - case Pleroma.User.get_cached_by_id(conn.params.id) do + def assign_account_by_id(%{private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do + case Pleroma.User.get_cached_by_id(id) do %Pleroma.User{} = account -> assign(conn, :account, account) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() end end def try_render(conn, target, params) when is_binary(target) do - case render(conn, target, params) do - nil -> render_error(conn, :not_implemented, "Can't display this activity") - res -> res - end + render(conn, target, params) end def try_render(conn, _, _) do diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex @@ -11,12 +11,10 @@ defmodule Pleroma.Web.EmbedController do alias Pleroma.Web.ActivityPub.Visibility - plug(:put_layout, :embed) - def show(conn, %{"id" => id}) do with %Activity{local: true} = activity <- Activity.get_by_id_with_object(id), - true <- Visibility.is_public?(activity.object) do + true <- Visibility.public?(activity.object) do {:ok, author} = User.get_or_fetch(activity.object.data["actor"]) conn diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex @@ -9,6 +9,16 @@ defmodule Pleroma.Web.Endpoint do alias Pleroma.Config + socket("/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, + longpoll: false, + websocket: [ + path: "/", + compress: false, + error_handler: {Pleroma.Web.MastodonAPI.WebsocketHandler, :handle_error, []}, + fullsweep_after: 20 + ] + ) + socket("/socket", Pleroma.Web.UserSocket, websocket: [ path: "/websocket", @@ -18,7 +28,8 @@ defmodule Pleroma.Web.Endpoint do ], timeout: 60_000, transport_log: false, - compress: false + compress: false, + fullsweep_after: 20 ], longpoll: false ) @@ -32,7 +43,8 @@ defmodule Pleroma.Web.Endpoint do plug(Pleroma.Web.Plugs.HTTPSecurityPlug) plug(Pleroma.Web.Plugs.UploadedMedia) - @static_cache_control "public, no-cache" + @static_cache_control "public, max-age=1209600" + @static_cache_disabled "public, no-cache" # InstanceStatic needs to be before Plug.Static to be able to override shipped-static files # If you're adding new paths to `only:` you'll need to configure them in InstanceStatic as well @@ -43,22 +55,32 @@ defmodule Pleroma.Web.Endpoint do from: :pleroma, only: ["emoji", "images"], gzip: true, - cache_control_for_etags: "public, max-age=1209600", + cache_control_for_etags: @static_cache_control, headers: %{ - "cache-control" => "public, max-age=1209600" + "cache-control" => @static_cache_control } ) plug(Pleroma.Web.Plugs.InstanceStatic, at: "/", gzip: true, - cache_control_for_etags: @static_cache_control, + cache_control_for_etags: @static_cache_disabled, headers: %{ - "cache-control" => @static_cache_control + "cache-control" => @static_cache_disabled + } + ) + + plug(Pleroma.Web.Plugs.FrontendStatic, + at: "/", + frontend_type: :primary, + only: ["index.html"], + gzip: true, + cache_control_for_etags: @static_cache_disabled, + headers: %{ + "cache-control" => @static_cache_disabled } ) - # Careful! No `only` restriction here, as we don't know what frontends contain. plug(Pleroma.Web.Plugs.FrontendStatic, at: "/", frontend_type: :primary, @@ -75,9 +97,9 @@ defmodule Pleroma.Web.Endpoint do at: "/pleroma/admin", frontend_type: :admin, gzip: true, - cache_control_for_etags: @static_cache_control, + cache_control_for_etags: @static_cache_disabled, headers: %{ - "cache-control" => @static_cache_control + "cache-control" => @static_cache_disabled } ) @@ -92,9 +114,9 @@ defmodule Pleroma.Web.Endpoint do only: Pleroma.Constants.static_only_files(), # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength gzip: true, - cache_control_for_etags: @static_cache_control, + cache_control_for_etags: @static_cache_disabled, headers: %{ - "cache-control" => @static_cache_control + "cache-control" => @static_cache_disabled } ) @@ -151,47 +173,6 @@ defmodule Pleroma.Web.Endpoint do plug(Pleroma.Web.Plugs.RemoteIp) - defmodule Instrumenter do - use Prometheus.PhoenixInstrumenter - end - - defmodule PipelineInstrumenter do - use Prometheus.PlugPipelineInstrumenter - end - - 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(MetricsExporterCaller) - plug(Pleroma.Web.Router) @doc """ diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex @@ -17,10 +17,28 @@ defmodule Pleroma.Web.Fallback.RedirectController do |> json(%{error: "Not implemented"}) end + def add_generated_metadata(page_content, extra \\ "") do + title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>" + favicon = "<link rel='icon' href='#{Pleroma.Config.get([:instance, :favicon])}'>" + manifest = "<link rel='manifest' href='/manifest.json'>" + + page_content + |> String.replace( + "<!--server-generated-meta-->", + title <> favicon <> manifest <> extra + ) + end + def redirector(conn, _params, code \\ 200) do + {:ok, index_content} = File.read(index_file_path()) + + response = + index_content + |> add_generated_metadata() + conn |> put_resp_content_type("text/html") - |> send_file(code, index_file_path()) + |> send_resp(code, response) end def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do @@ -34,14 +52,12 @@ defmodule Pleroma.Web.Fallback.RedirectController do def redirector_with_meta(conn, params) do {:ok, index_content} = File.read(index_file_path()) - tags = build_tags(conn, params) preloads = preload_data(conn, params) - title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>" response = index_content - |> String.replace("<!--server-generated-meta-->", tags <> preloads <> title) + |> add_generated_metadata(tags <> preloads) conn |> put_resp_content_type("text/html") @@ -55,11 +71,10 @@ defmodule Pleroma.Web.Fallback.RedirectController 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])}</title>" response = index_content - |> String.replace("<!--server-generated-meta-->", preloads <> title) + |> add_generated_metadata(preloads) conn |> put_resp_content_type("text/html") diff --git a/lib/pleroma/web/federator.ex b/lib/pleroma/web/federator.ex @@ -6,9 +6,9 @@ defmodule Pleroma.Web.Federator do alias Pleroma.Activity alias Pleroma.Object.Containment alias Pleroma.User + alias Pleroma.Web.ActivityPub.Publisher alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.Web.Federator.Publisher alias Pleroma.Workers.PublisherWorker alias Pleroma.Workers.ReceiverWorker @@ -35,6 +35,17 @@ defmodule Pleroma.Web.Federator do end # Client API + def incoming_ap_doc(%{params: params, req_headers: req_headers}) do + ReceiverWorker.enqueue( + "incoming_ap_doc", + %{"req_headers" => req_headers, "params" => params, "timeout" => :timer.seconds(20)}, + priority: 2 + ) + end + + def incoming_ap_doc(%{"type" => "Delete"} = params) do + ReceiverWorker.enqueue("incoming_ap_doc", %{"params" => params}, priority: 3) + end def incoming_ap_doc(params) do ReceiverWorker.enqueue("incoming_ap_doc", %{"params" => params}) @@ -57,10 +68,8 @@ defmodule Pleroma.Web.Federator do # Job Worker Callbacks - @spec perform(atom(), module(), any()) :: {:ok, any()} | {:error, any()} - def perform(:publish_one, module, params) do - apply(module, :publish_one, [params]) - end + @spec perform(atom(), any()) :: {:ok, any()} | {:error, any()} + def perform(:publish_one, params), do: Publisher.publish_one(params) def perform(:publish, activity) do Logger.debug(fn -> "Running publish for #{activity.data["id"]}" end) diff --git a/lib/pleroma/web/federator/publisher.ex b/lib/pleroma/web/federator/publisher.ex @@ -1,109 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Federator.Publisher do - alias Pleroma.Activity - alias Pleroma.Config - alias Pleroma.User - alias Pleroma.Workers.PublisherWorker - - require Logger - - @moduledoc """ - Defines the contract used by federation implementations to publish messages to - their peers. - """ - - @doc """ - Determine whether an activity can be relayed using the federation module. - """ - @callback is_representable?(Pleroma.Activity.t()) :: boolean() - - @doc """ - Relays an activity to a specified peer, determined by the parameters. The - parameters used are controlled by the federation module. - """ - @callback publish_one(Map.t()) :: {:ok, Map.t()} | {:error, any()} - - @doc """ - Enqueue publishing a single activity. - """ - @spec enqueue_one(module(), Map.t()) :: :ok - def enqueue_one(module, %{} = params) do - PublisherWorker.enqueue( - "publish_one", - %{"module" => to_string(module), "params" => params} - ) - end - - @doc """ - Relays an activity to all specified peers. - """ - @callback publish(User.t(), Activity.t()) :: :ok | {:error, any()} - - @spec publish(User.t(), Activity.t()) :: :ok - def publish(%User{} = user, %Activity{} = activity) do - Config.get([:instance, :federation_publisher_modules]) - |> Enum.each(fn module -> - if module.is_representable?(activity) do - Logger.debug("Publishing #{activity.data["id"]} using #{inspect(module)}") - module.publish(user, activity) - end - end) - - :ok - end - - @doc """ - Gathers links used by an outgoing federation module for WebFinger output. - """ - @callback gather_webfinger_links(User.t()) :: list() - - @spec gather_webfinger_links(User.t()) :: list() - def gather_webfinger_links(%User{} = user) do - Config.get([:instance, :federation_publisher_modules]) - |> Enum.reduce([], fn module, links -> - links ++ module.gather_webfinger_links(user) - end) - end - - @doc """ - Gathers nodeinfo protocol names supported by the federation module. - """ - @callback gather_nodeinfo_protocol_names() :: list() - - @spec gather_nodeinfo_protocol_names() :: list() - def gather_nodeinfo_protocol_names do - Config.get([:instance, :federation_publisher_modules]) - |> Enum.reduce([], fn module, links -> - links ++ module.gather_nodeinfo_protocol_names() - end) - end - - @doc """ - Gathers a set of remote users given an IR envelope. - """ - def remote_users(%User{id: user_id}, %{data: %{"to" => to} = data}) do - cc = Map.get(data, "cc", []) - - bcc = - data - |> Map.get("bcc", []) - |> Enum.reduce([], fn ap_id, bcc -> - case Pleroma.List.get_by_ap_id(ap_id) do - %Pleroma.List{user_id: ^user_id} = list -> - {:ok, following} = Pleroma.List.get_following(list) - bcc ++ Enum.map(following, & &1.ap_id) - - _ -> - bcc - end - end) - - [to, cc, bcc] - |> Enum.concat() - |> Enum.map(&User.get_cached_by_ap_id/1) - |> Enum.filter(fn user -> user && !user.local end) - end -end diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex @@ -132,7 +132,7 @@ defmodule Pleroma.Web.Feed.FeedView do |> safe_to_string() end - @spec to_rfc3339(String.t() | NativeDateTime.t()) :: String.t() + @spec to_rfc3339(String.t() | NaiveDateTime.t()) :: String.t() def to_rfc3339(date) when is_binary(date) do date |> Timex.parse!("{ISO:Extended}") @@ -145,7 +145,7 @@ defmodule Pleroma.Web.Feed.FeedView do |> Timex.format!("{RFC3339}") end - @spec to_rfc2822(String.t() | DateTime.t() | NativeDateTime.t()) :: String.t() + @spec to_rfc2822(String.t() | DateTime.t() | NaiveDateTime.t()) :: String.t() def to_rfc2822(datestr) when is_binary(datestr) do datestr |> Timex.parse!("{ISO:Extended}") diff --git a/lib/pleroma/web/gettext.ex b/lib/pleroma/web/gettext.ex @@ -85,12 +85,12 @@ defmodule Pleroma.Web.Gettext do Process.get({Pleroma.Web.Gettext, :locales}, []) end - def is_locale_list(locales) do + def locale_list?(locales) do Enum.all?(locales, &is_binary/1) end def put_locales(locales) do - if is_locale_list(locales) do + if locale_list?(locales) do Process.put({Pleroma.Web.Gettext, :locales}, Enum.uniq(locales)) Gettext.put_locale(Enum.at(locales, 0, Gettext.get_locale())) :ok diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -30,7 +30,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.Web.Utils.Params - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(:skip_auth when action in [:create, :lookup]) @@ -72,7 +72,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do %{scopes: ["follow", "write:blocks"]} when action in [:block, :unblock] ) - plug(OAuthScopesPlug, %{scopes: ["read:follows"]} when action == :relationships) + plug( + OAuthScopesPlug, + %{scopes: ["read:follows"]} when action in [:relationships, :familiar_followers] + ) plug( OAuthScopesPlug, @@ -92,7 +95,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( RateLimiter, - [name: :relation_id_action, params: [:id, :uri]] when action in @relationship_actions + [name: :relation_id_action, params: ["id", "uri"]] when action in @relationship_actions ) plug(RateLimiter, [name: :relations_actions] when action in @relationship_actions) @@ -104,7 +107,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AccountOperation @doc "POST /api/v1/accounts" - def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do + def create( + %{assigns: %{app: app}, private: %{open_api_spex: %{body_params: params}}} = conn, + _params + ) do with :ok <- validate_email_param(params), :ok <- TwitterAPI.validate_captcha(app, params), {:ok, user} <- TwitterAPI.register_user(params), @@ -168,7 +174,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "PATCH /api/v1/accounts/update_credentials" - def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _params) do + def update_credentials( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: params}}} = conn, + _params + ) do params = params |> Enum.filter(fn {_, value} -> not is_nil(value) end) @@ -235,7 +244,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do # So we first build the normal local changeset, then apply it to the # user data, but don't persist it. With this, we generate the object # data for our update activity. We feed this and the changeset as meta - # inforation into the pipeline, where they will be properly updated and + # information into the pipeline, where they will be properly updated and # federated. with changeset <- User.update_changeset(user, user_params), {:ok, unpersisted_user} <- Ecto.Changeset.apply_action(changeset, :update), @@ -289,7 +298,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "GET /api/v1/accounts/relationships" - def relationships(%{assigns: %{user: user}} = conn, %{id: id}) do + def relationships( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do targets = User.get_all_by_ids(List.wrap(id)) render(conn, "relationships.json", user: user, targets: targets) @@ -299,7 +311,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do def relationships(%{assigns: %{user: _user}} = conn, _), do: json(conn, []) @doc "GET /api/v1/accounts/:id" - def show(%{assigns: %{user: for_user}} = conn, %{id: nickname_or_id} = params) do + def show( + %{ + assigns: %{user: for_user}, + private: %{open_api_spex: %{params: %{id: nickname_or_id} = params}} + } = conn, + _params + ) do with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id, for: for_user), :visible <- User.visible_for(user, for_user) do render(conn, "show.json", @@ -313,7 +331,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "GET /api/v1/accounts/:id/statuses" - def statuses(%{assigns: %{user: reading_user}} = conn, params) do + def statuses( + %{assigns: %{user: reading_user}, private: %{open_api_spex: %{params: params}}} = conn, + _params + ) do with %User{} = user <- User.get_cached_by_nickname_or_id(params.id, for: reading_user), :visible <- User.visible_for(user, reading_user) do params = @@ -348,7 +369,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "GET /api/v1/accounts/:id/followers" - def followers(%{assigns: %{user: for_user, account: user}} = conn, params) do + def followers( + %{assigns: %{user: for_user, account: user}, private: %{open_api_spex: %{params: params}}} = + conn, + _params + ) do params = params |> Enum.map(fn {key, value} -> {to_string(key), value} end) @@ -373,7 +398,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "GET /api/v1/accounts/:id/following" - def following(%{assigns: %{user: for_user, account: user}} = conn, params) do + def following( + %{assigns: %{user: for_user, account: user}, private: %{open_api_spex: %{params: params}}} = + conn, + _params + ) do params = params |> Enum.map(fn {key, value} -> {to_string(key), value} end) @@ -411,7 +440,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do {:error, "Can not follow yourself"} end - def follow(%{body_params: params, assigns: %{user: follower, account: followed}} = conn, _) do + def follow( + %{ + assigns: %{user: follower, account: followed}, + private: %{open_api_spex: %{body_params: params}} + } = conn, + _ + ) do with {:ok, follower} <- MastodonAPI.follow(follower, followed, params) do render(conn, "relationship.json", user: follower, target: followed) else @@ -431,7 +466,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "POST /api/v1/accounts/:id/mute" - def mute(%{assigns: %{user: muter, account: muted}, body_params: params} = conn, _params) do + def mute( + %{ + assigns: %{user: muter, account: muted}, + private: %{open_api_spex: %{body_params: params}} + } = conn, + _params + ) do params = params |> Map.put_new(:duration, Map.get(params, :expires_in, 0)) @@ -472,7 +513,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do @doc "POST /api/v1/accounts/:id/note" def note( - %{assigns: %{user: noter, account: target}, body_params: %{comment: comment}} = conn, + %{ + assigns: %{user: noter, account: target}, + private: %{open_api_spex: %{body_params: %{comment: comment}}} + } = conn, _params ) do with {:ok, _user_note} <- UserNote.create(noter, target, comment) do @@ -513,7 +557,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "POST /api/v1/follows" - def follow_by_uri(%{body_params: %{uri: uri}} = conn, _) do + def follow_by_uri(%{private: %{open_api_spex: %{body_params: %{uri: uri}}}} = conn, _) do case User.get_cached_by_nickname(uri) do %User{} = user -> conn @@ -561,7 +605,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end @doc "GET /api/v1/accounts/lookup" - def lookup(conn, %{acct: nickname} = _params) do + def lookup(%{private: %{open_api_spex: %{params: %{acct: nickname}}}} = conn, _params) do with %User{} = user <- User.get_by_nickname(nickname) do render(conn, "show.json", user: user, @@ -588,6 +632,35 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do ) end + @doc "GET /api/v1/accounts/familiar_followers" + def familiar_followers( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _id + ) do + users = + User.get_all_by_ids(List.wrap(id)) + |> Enum.map(&%{id: &1.id, accounts: get_familiar_followers(&1, user)}) + + conn + |> render("familiar_followers.json", + for: user, + users: users, + as: :user + ) + end + + defp get_familiar_followers(%{id: id} = user, %{id: id}) do + User.get_familiar_followers(user, user) + end + + defp get_familiar_followers(%{hide_followers: true}, _current_user) do + [] + end + + defp get_familiar_followers(user, current_user) do + User.get_familiar_followers(user, current_user) + end + @doc "GET /api/v1/identity_proofs" def identity_proofs(conn, params), do: MastodonAPIController.empty_array(conn, params) end diff --git a/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex b/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex @@ -15,7 +15,7 @@ defmodule Pleroma.Web.MastodonAPI.DirectoryController do plug(Pleroma.Web.ApiSpec.CastAndValidate) - plug(:skip_auth when action == "index") + plug(:skip_auth when action == :index) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.DirectoryOperation diff --git a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockController do alias Pleroma.User alias Pleroma.Web.Plugs.OAuthScopesPlug - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.DomainBlockOperation plug( @@ -27,23 +27,31 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockController do end @doc "POST /api/v1/domain_blocks" - def create(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, _params) do + def create( + %{assigns: %{user: blocker}, private: %{open_api_spex: %{body_params: %{domain: domain}}}} = + conn, + _params + ) do User.block_domain(blocker, domain) json(conn, %{}) end - def create(%{assigns: %{user: blocker}} = conn, %{domain: domain}) do + def create(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do User.block_domain(blocker, domain) json(conn, %{}) end @doc "DELETE /api/v1/domain_blocks" - def delete(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, _params) do + def delete( + %{assigns: %{user: blocker}, private: %{open_api_spex: %{body_params: %{domain: domain}}}} = + conn, + _params + ) do User.unblock_domain(blocker, domain) json(conn, %{}) end - def delete(%{assigns: %{user: blocker}} = conn, %{domain: domain}) do + def delete(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do User.unblock_domain(blocker, domain) json(conn, %{}) end diff --git a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do alias Pleroma.Web.CommonAPI alias Pleroma.Web.Plugs.OAuthScopesPlug - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(:assign_follower when action != :index) action_fallback(:errors) @@ -44,7 +44,7 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do end end - defp assign_follower(%{params: %{id: id}} = conn, _) do + defp assign_follower(%{private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do case User.get_cached_by_id(id) do %User{} = follower -> assign(conn, :follower, follower) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() diff --git a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do plug(Pleroma.Web.ApiSpec.CastAndValidate) - plug(:skip_auth when action in [:show, :peers]) + plug(:skip_auth when action in [:show, :show2, :peers]) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.InstanceOperation @@ -16,8 +16,18 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do render(conn, "show.json") end + @doc "GET /api/v2/instance" + def show2(conn, _params) do + render(conn, "show2.json") + end + @doc "GET /api/v1/instance/peers" def peers(conn, _params) do json(conn, Pleroma.Stats.get_peers()) end + + @doc "GET /api/v1/instance/rules" + def rules(conn, _params) do + render(conn, "rules.json") + end end diff --git a/lib/pleroma/web/mastodon_api/controllers/list_controller.ex b/lib/pleroma/web/mastodon_api/controllers/list_controller.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.MastodonAPI.ListController do @oauth_read_actions [:index, :show, :list_accounts] - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(:list_by_id_and_user when action not in [:index, :create]) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action in @oauth_read_actions) plug(OAuthScopesPlug, %{scopes: ["write:lists"]} when action not in @oauth_read_actions) @@ -21,25 +21,33 @@ defmodule Pleroma.Web.MastodonAPI.ListController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ListOperation # GET /api/v1/lists - def index(%{assigns: %{user: user}} = conn, opts) do - lists = Pleroma.List.for_user(user, opts) + def index(%{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, _) do + lists = Pleroma.List.for_user(user, params) render(conn, "index.json", lists: lists) end # POST /api/v1/lists - def create(%{assigns: %{user: user}, body_params: %{title: title}} = conn, _) do + def create( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: %{title: title}}}} = + conn, + _ + ) do with {:ok, %Pleroma.List{} = list} <- Pleroma.List.create(title, user) do render(conn, "show.json", list: list) end end - # GET /api/v1/lists/:id + # GET /api/v1/lists/:idOB def show(%{assigns: %{list: list}} = conn, _) do render(conn, "show.json", list: list) end # PUT /api/v1/lists/:id - def update(%{assigns: %{list: list}, body_params: %{title: title}} = conn, _) do + def update( + %{assigns: %{list: list}, private: %{open_api_spex: %{body_params: %{title: title}}}} = + conn, + _ + ) do with {:ok, list} <- Pleroma.List.rename(list, title) do render(conn, "show.json", list: list) end @@ -62,7 +70,13 @@ defmodule Pleroma.Web.MastodonAPI.ListController do end # POST /api/v1/lists/:id/accounts - def add_to_list(%{assigns: %{list: list}, body_params: %{account_ids: account_ids}} = conn, _) do + def add_to_list( + %{ + assigns: %{list: list}, + private: %{open_api_spex: %{body_params: %{account_ids: account_ids}}} + } = conn, + _ + ) do Enum.each(account_ids, fn account_id -> with %User{} = followed <- User.get_cached_by_id(account_id) do Pleroma.List.follow(list, followed) @@ -74,9 +88,22 @@ defmodule Pleroma.Web.MastodonAPI.ListController do # DELETE /api/v1/lists/:id/accounts def remove_from_list( - %{assigns: %{list: list}, params: %{account_ids: account_ids}} = conn, + %{ + private: %{open_api_spex: %{params: %{account_ids: account_ids}}} + } = conn, _ ) do + do_remove_from_list(conn, account_ids) + end + + def remove_from_list( + %{private: %{open_api_spex: %{body_params: %{account_ids: account_ids}}}} = conn, + _ + ) do + do_remove_from_list(conn, account_ids) + end + + defp do_remove_from_list(%{assigns: %{list: list}} = conn, account_ids) do Enum.each(account_ids, fn account_id -> with %User{} = followed <- User.get_cached_by_id(account_id) do Pleroma.List.unfollow(list, followed) @@ -86,11 +113,10 @@ defmodule Pleroma.Web.MastodonAPI.ListController do json(conn, %{}) end - def remove_from_list(%{body_params: params} = conn, _) do - remove_from_list(%{conn | params: params}, %{}) - end - - defp list_by_id_and_user(%{assigns: %{user: user}, params: %{id: id}} = conn, _) do + defp list_by_id_and_user( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do case Pleroma.List.get(id, user) do %Pleroma.List{} = list -> assign(conn, :list, list) nil -> conn |> render_error(:not_found, "List not found") |> halt() diff --git a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) plug(Majic.Plug, [pool: Pleroma.MajicPool] when action in [:create, :create2]) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["read:media"]} when action == :show) plug(OAuthScopesPlug, %{scopes: ["write:media"]} when action != :show) @@ -20,7 +20,11 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.MediaOperation @doc "POST /api/v1/media" - def create(%{assigns: %{user: user}, body_params: %{file: file} = data} = conn, _) do + def create( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: %{file: file} = data}}} = + conn, + _ + ) do with {:ok, object} <- ActivityPub.upload( file, @@ -36,7 +40,11 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do def create(_conn, _data), do: {:error, :bad_request} @doc "POST /api/v2/media" - def create2(%{assigns: %{user: user}, body_params: %{file: file} = data} = conn, _) do + def create2( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: %{file: file} = data}}} = + conn, + _ + ) do with {:ok, object} <- ActivityPub.upload( file, @@ -54,7 +62,15 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do def create2(_conn, _data), do: {:error, :bad_request} @doc "PUT /api/v1/media/:id" - def update(%{assigns: %{user: user}, body_params: %{description: description}} = conn, %{id: id}) do + def update( + %{ + assigns: %{user: user}, + private: %{ + open_api_spex: %{body_params: %{description: description}, params: %{id: id}} + } + } = conn, + _ + ) do with %Object{} = object <- Object.get_by_id(id), :ok <- Object.authorize_access(object, user), {:ok, %Object{data: data}} <- Object.update_data(object, %{"name" => description}) do @@ -67,7 +83,7 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do def update(conn, data), do: show(conn, data) @doc "GET /api/v1/media/:id" - def show(%{assigns: %{user: user}} = conn, %{id: id}) do + def show(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with %Object{data: data, id: object_id} = object <- Object.get_by_id(id), :ok <- Object.authorize_access(object, user) do attachment_data = Map.put(data, "id", object_id) diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do @oauth_read_actions [:show, :index] - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( OAuthScopesPlug, @@ -24,8 +24,20 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.NotificationOperation + @default_notification_types ~w{ + mention + follow + follow_request + reblog + favourite + move + pleroma:emoji_reaction + poll + update + } + # GET /api/v1/notifications - def index(conn, %{account_id: account_id} = params) do + def index(%{private: %{open_api_spex: %{params: %{account_id: account_id} = params}}} = conn, _) do case Pleroma.User.get_cached_by_id(account_id) do %{ap_id: account_ap_id} -> params = @@ -33,7 +45,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do |> Map.delete(:account_id) |> Map.put(:account_ap_id, account_ap_id) - index(conn, params) + do_get_notifications(conn, params) _ -> conn @@ -42,18 +54,11 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do end end - @default_notification_types ~w{ - mention - follow - follow_request - reblog - favourite - move - pleroma:emoji_reaction - poll - update - } - def index(%{assigns: %{user: user}} = conn, params) do + def index(%{private: %{open_api_spex: %{params: params}}} = conn, _) do + do_get_notifications(conn, params) + end + + defp do_get_notifications(%{assigns: %{user: user}} = conn, params) do params = Map.new(params, fn {k, v} -> {to_string(k), v} end) |> Map.put_new("types", Map.get(params, :include_types, @default_notification_types)) @@ -69,7 +74,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do end # GET /api/v1/notifications/:id - def show(%{assigns: %{user: user}} = conn, %{id: id}) do + def show(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with {:ok, notification} <- Notification.get(user, id) do render(conn, "show.json", notification: notification, for: user) else @@ -88,8 +93,20 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do # POST /api/v1/notifications/:id/dismiss - def dismiss(%{assigns: %{user: user}} = conn, %{id: id} = _params) do - with {:ok, _notif} <- Notification.dismiss(user, id) do + def dismiss(%{private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do + do_dismiss(conn, id) + end + + # POST /api/v1/notifications/dismiss (deprecated) + def dismiss_via_body( + %{private: %{open_api_spex: %{body_params: %{id: id}}}} = conn, + _ + ) do + do_dismiss(conn, id) + end + + defp do_dismiss(%{assigns: %{user: user}} = conn, notification_id) do + with {:ok, _notif} <- Notification.dismiss(user, notification_id) do json(conn, %{}) else {:error, reason} -> @@ -99,13 +116,11 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do end end - # POST /api/v1/notifications/dismiss (deprecated) - def dismiss_via_body(%{body_params: params} = conn, _) do - dismiss(conn, params) - end - # DELETE /api/v1/notifications/destroy_multiple - def destroy_multiple(%{assigns: %{user: user}} = conn, %{ids: ids} = _params) do + def destroy_multiple( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{ids: ids}}}} = conn, + _ + ) do Notification.destroy_multiple(user, ids) json(conn, %{}) end diff --git a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex @@ -15,7 +15,7 @@ defmodule Pleroma.Web.MastodonAPI.PollController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( OAuthScopesPlug, @@ -29,7 +29,7 @@ defmodule Pleroma.Web.MastodonAPI.PollController do @cachex Pleroma.Config.get([:cachex, :provider], Cachex) @doc "GET /api/v1/polls/:id" - def show(%{assigns: %{user: user}} = conn, %{id: id}) do + def show(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with %Object{} = object <- Object.get_by_id_and_maybe_refetch(id, interval: 60), %Activity{} = activity <- Activity.get_create_by_object_ap_id(object.data["id"]), true <- Visibility.visible_for_user?(activity, user) do @@ -41,7 +41,13 @@ defmodule Pleroma.Web.MastodonAPI.PollController do end @doc "POST /api/v1/polls/:id/votes" - def vote(%{assigns: %{user: user}, body_params: %{choices: choices}} = conn, %{id: id}) do + def vote( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: %{choices: choices}, params: %{id: id}}} + } = conn, + _ + ) do with %Object{data: %{"type" => "Question"}} = object <- Object.get_by_id(id), %Activity{} = activity <- Activity.get_create_by_object_ap_id(object.data["id"]), true <- Visibility.visible_for_user?(activity, user), diff --git a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do @oauth_read_actions [:show, :index] - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in @oauth_read_actions) plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action not in @oauth_read_actions) plug(:assign_scheduled_activity when action != :index) @@ -23,7 +23,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ScheduledActivityOperation @doc "GET /api/v1/scheduled_statuses" - def index(%{assigns: %{user: user}} = conn, params) do + def index(%{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, _) do params = Map.new(params, fn {key, value} -> {to_string(key), value} end) with scheduled_activities <- MastodonAPI.get_scheduled_activities(user, params) do @@ -39,7 +39,13 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do end @doc "PUT /api/v1/scheduled_statuses/:id" - def update(%{assigns: %{scheduled_activity: scheduled_activity}, body_params: params} = conn, _) do + def update( + %{ + assigns: %{scheduled_activity: scheduled_activity}, + private: %{open_api_spex: %{body_params: params}} + } = conn, + _ + ) do with {:ok, scheduled_activity} <- ScheduledActivity.update(scheduled_activity, params) do render(conn, "show.json", scheduled_activity: scheduled_activity) end @@ -52,7 +58,10 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do end end - defp assign_scheduled_activity(%{assigns: %{user: user}, params: %{id: id}} = conn, _) do + defp assign_scheduled_activity( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do case ScheduledActivity.get(user, id) do %ScheduledActivity{} = activity -> assign(conn, :scheduled_activity, activity) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do @search_limit 40 - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) # Note: Mastodon doesn't allow unauthenticated access (requires read:accounts / read:search) plug(OAuthScopesPlug, %{scopes: ["read:search"], fallback: :proceed_unauthenticated}) @@ -29,7 +29,11 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.SearchOperation - def account_search(%{assigns: %{user: user}} = conn, %{q: query} = params) do + def account_search( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{q: query} = params}}} = + conn, + _ + ) do accounts = User.search(query, search_options(params, user)) conn @@ -44,7 +48,12 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do def search2(conn, params), do: do_search(:v2, conn, params) def search(conn, params), do: do_search(:v1, conn, params) - defp do_search(version, %{assigns: %{user: user}} = conn, %{q: query} = params) do + defp do_search( + version, + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{q: query} = params}}} = + conn, + _ + ) do query = String.trim(query) options = search_options(params, user) timeout = Keyword.get(Repo.config(), :timeout, 15_000) @@ -147,7 +156,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do tags end - Pleroma.Pagination.paginate(tags, options) + Pleroma.Pagination.paginate_list(tags, options) end defp add_joined_tag(tags) do diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -12,6 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do alias Pleroma.Activity alias Pleroma.Bookmark + alias Pleroma.BookmarkFolder alias Pleroma.Object alias Pleroma.Repo alias Pleroma.ScheduledActivity @@ -25,7 +26,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do alias Pleroma.Web.Plugs.OAuthScopesPlug alias Pleroma.Web.Plugs.RateLimiter - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(:skip_public_check when action in [:index, :show]) @@ -37,7 +38,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do when action in [ :index, :show, - :card, :context, :show_history, :show_source @@ -110,7 +110,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do `ids` query param is required """ - def index(%{assigns: %{user: user}} = conn, %{ids: ids} = params) do + def index( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{ids: ids} = params}}} = + conn, + _ + ) do limit = 100 activities = @@ -134,7 +138,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do def create( %{ assigns: %{user: user}, - body_params: %{status: _, scheduled_at: scheduled_at} = params + private: %{ + open_api_spex: %{body_params: %{status: _, scheduled_at: scheduled_at} = params} + } } = conn, _ ) @@ -156,7 +162,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do else {:far_enough, _} -> params = Map.drop(params, [:scheduled_at]) - create(%Plug.Conn{conn | body_params: params}, %{}) + + put_in( + conn, + [Access.key(:private), Access.key(:open_api_spex), Access.key(:body_params)], + params + ) + |> do_create error -> error @@ -164,7 +176,35 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end # Creates a regular status - def create(%{assigns: %{user: user}, body_params: %{status: _} = params} = conn, _) do + def create( + %{ + private: %{open_api_spex: %{body_params: %{status: _}}} + } = conn, + _ + ) do + do_create(conn) + end + + def create( + %{ + assigns: %{user: _user}, + private: %{open_api_spex: %{body_params: %{media_ids: _} = params}} + } = conn, + _ + ) do + params = Map.put(params, :status, "") + + put_in( + conn, + [Access.key(:private), Access.key(:open_api_spex), Access.key(:body_params)], + params + ) + |> do_create + end + + defp do_create( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: params}}} = conn + ) do params = Map.put(params, :in_reply_to_status_id, params[:in_reply_to_id]) |> put_application(conn) @@ -189,13 +229,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end end - def create(%{assigns: %{user: _user}, body_params: %{media_ids: _} = params} = conn, _) do - params = Map.put(params, :status, "") - create(%Plug.Conn{conn | body_params: params}, %{}) - end - @doc "GET /api/v1/statuses/:id/history" - def show_history(%{assigns: assigns} = conn, %{id: id} = params) do + def show_history( + %{assigns: assigns, private: %{open_api_spex: %{params: %{id: id} = params}}} = conn, + _ + ) do with user = assigns[:user], %Activity{} = activity <- Activity.get_by_id_with_object(id), true <- Visibility.visible_for_user?(activity, user) do @@ -211,7 +249,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/statuses/:id/source" - def show_source(%{assigns: assigns} = conn, %{id: id} = _params) do + def show_source(%{assigns: assigns, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with user = assigns[:user], %Activity{} = activity <- Activity.get_by_id_with_object(id), true <- Visibility.visible_for_user?(activity, user) do @@ -225,7 +263,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "PUT /api/v1/statuses/:id" - def update(%{assigns: %{user: user}, body_params: body_params} = conn, %{id: id} = params) do + def update( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: body_params, params: %{id: id} = params}} + } = conn, + _ + ) do with {_, %Activity{}} = {_, activity} <- {:activity, Activity.get_by_id_with_object(id)}, {_, true} <- {:visible, Visibility.visible_for_user?(activity, user)}, {_, true} <- {:is_create, activity.data["type"] == "Create"}, @@ -248,7 +292,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/statuses/:id" - def show(%{assigns: %{user: user}} = conn, %{id: id} = params) do + def show( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id} = params}}} = + conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id_with_object(id), true <- Visibility.visible_for_user?(activity, user) do try_render(conn, "show.json", @@ -263,7 +311,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "DELETE /api/v1/statuses/:id" - def delete(%{assigns: %{user: user}} = conn, %{id: id}) do + def delete(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with %Activity{} = activity <- Activity.get_by_id_with_object(id), {:ok, %Activity{}} <- CommonAPI.delete(id, user) do try_render(conn, "show.json", @@ -278,7 +326,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/reblog" - def reblog(%{assigns: %{user: user}, body_params: params} = conn, %{id: ap_id_or_id}) do + def reblog( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: params, params: %{id: ap_id_or_id}}} + } = conn, + _ + ) do with {:ok, announce} <- CommonAPI.repeat(ap_id_or_id, user, params), %Activity{} = announce <- Activity.normalize(announce.data) do try_render(conn, "show.json", %{activity: announce, for: user, as: :activity}) @@ -286,7 +340,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/unreblog" - def unreblog(%{assigns: %{user: user}} = conn, %{id: activity_id}) do + def unreblog( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: activity_id}}}} = + conn, + _ + ) do with {:ok, _unannounce} <- CommonAPI.unrepeat(activity_id, user), %Activity{} = activity <- Activity.get_by_id(activity_id) do try_render(conn, "show.json", %{activity: activity, for: user, as: :activity}) @@ -294,7 +352,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/favourite" - def favourite(%{assigns: %{user: user}} = conn, %{id: activity_id}) do + def favourite( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: activity_id}}}} = + conn, + _ + ) do with {:ok, _fav} <- CommonAPI.favorite(user, activity_id), %Activity{} = activity <- Activity.get_by_id(activity_id) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) @@ -302,7 +364,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/unfavourite" - def unfavourite(%{assigns: %{user: user}} = conn, %{id: activity_id}) do + def unfavourite( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: activity_id}}}} = + conn, + _ + ) do with {:ok, _unfav} <- CommonAPI.unfavorite(activity_id, user), %Activity{} = activity <- Activity.get_by_id(activity_id) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) @@ -310,7 +376,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/pin" - def pin(%{assigns: %{user: user}} = conn, %{id: ap_id_or_id}) do + def pin( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: ap_id_or_id}}}} = + conn, + _ + ) do with {:ok, activity} <- CommonAPI.pin(ap_id_or_id, user) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) else @@ -329,24 +399,43 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/unpin" - def unpin(%{assigns: %{user: user}} = conn, %{id: ap_id_or_id}) do + def unpin( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: ap_id_or_id}}}} = + conn, + _ + ) do with {:ok, activity} <- CommonAPI.unpin(ap_id_or_id, user) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) end end @doc "POST /api/v1/statuses/:id/bookmark" - def bookmark(%{assigns: %{user: user}} = conn, %{id: id}) do + def bookmark( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: body_params, params: %{id: id}}} + } = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id_with_object(id), %User{} = user <- User.get_cached_by_nickname(user.nickname), true <- Visibility.visible_for_user?(activity, user), - {:ok, _bookmark} <- Bookmark.create(user.id, activity.id) do + folder_id <- Map.get(body_params, :folder_id, nil), + folder_id <- + if(folder_id && BookmarkFolder.belongs_to_user?(folder_id, user.id), + do: folder_id, + else: nil + ), + {:ok, _bookmark} <- Bookmark.create(user.id, activity.id, folder_id) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) end end @doc "POST /api/v1/statuses/:id/unbookmark" - def unbookmark(%{assigns: %{user: user}} = conn, %{id: id}) do + def unbookmark( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id_with_object(id), %User{} = user <- User.get_cached_by_nickname(user.nickname), true <- Visibility.visible_for_user?(activity, user), @@ -356,7 +445,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/mute" - def mute_conversation(%{assigns: %{user: user}, body_params: params} = conn, %{id: id}) do + def mute_conversation( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: params, params: %{id: id}}} + } = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id(id), {:ok, activity} <- CommonAPI.add_mute(user, activity, params) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) @@ -364,27 +459,24 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "POST /api/v1/statuses/:id/unmute" - def unmute_conversation(%{assigns: %{user: user}} = conn, %{id: id}) do + def unmute_conversation( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{params: %{id: id}}} + } = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id(id), {:ok, activity} <- CommonAPI.remove_mute(user, activity) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) end end - @doc "GET /api/v1/statuses/:id/card" - @deprecated "https://github.com/tootsuite/mastodon/pull/11213" - def card(%{assigns: %{user: user}} = conn, %{id: status_id}) do - with %Activity{} = activity <- Activity.get_by_id(status_id), - true <- Visibility.visible_for_user?(activity, user) do - data = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - render(conn, "card.json", data) - else - _ -> render_error(conn, :not_found, "Record not found") - end - end - @doc "GET /api/v1/statuses/:id/favourited_by" - def favourited_by(%{assigns: %{user: user}} = conn, %{id: id}) do + def favourited_by( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do with true <- Pleroma.Config.get([:instance, :show_reactions]), %Activity{} = activity <- Activity.get_by_id_with_object(id), {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)}, @@ -405,7 +497,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/statuses/:id/reblogged_by" - def reblogged_by(%{assigns: %{user: user}} = conn, %{id: id}) do + def reblogged_by( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id_with_object(id), {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)}, %Object{data: %{"announcements" => announces, "id" => ap_id}} <- @@ -437,7 +532,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/statuses/:id/context" - def context(%{assigns: %{user: user}} = conn, %{id: id}) do + def context( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do with %Activity{} = activity <- Activity.get_by_id(id) do activities = ActivityPub.fetch_activities_for_context(activity.data["context"], %{ @@ -451,7 +549,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/favourites" - def favourites(%{assigns: %{user: %User{} = user}} = conn, params) do + def favourites( + %{assigns: %{user: %User{} = user}, private: %{open_api_spex: %{params: params}}} = conn, + _ + ) do activities = ActivityPub.fetch_favourites(user, params) conn @@ -464,12 +565,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do end @doc "GET /api/v1/bookmarks" - def bookmarks(%{assigns: %{user: user}} = conn, params) do + def bookmarks(%{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, _) do user = User.get_cached_by_id(user.id) + folder_id = Map.get(params, :folder_id) bookmarks = user.id - |> Bookmark.for_user_query() + |> Bookmark.for_user_query(folder_id) |> Pleroma.Pagination.fetch_paginated(params) activities = diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AccountView do @@ -193,7 +193,28 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do render_many(targets, AccountView, "relationship.json", render_opts) end + def render("familiar_followers.json", %{users: users} = opts) do + opts = + opts + |> Map.merge(%{as: :user}) + |> Map.delete(:users) + + users + |> render_many(AccountView, "familiar_followers.json", opts) + end + + def render("familiar_followers.json", %{user: %{id: id, accounts: accounts}} = opts) do + accounts = + accounts + |> render_many(AccountView, "show.json", opts) + |> Enum.filter(&Enum.any?/1) + + %{id: id, accounts: accounts} + end + defp do_render("show.json", %{user: user} = opts) do + self = opts[:for] == user + user = User.sanitize_html(user, User.html_filter_policy(opts[:for])) display_name = user.name || user.nickname @@ -203,16 +224,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do header_static = User.banner_url(user) |> MediaProxy.preview_url(static: true) following_count = - if !user.hide_follows_count or !user.hide_follows or opts[:for] == user, + if !user.hide_follows_count or !user.hide_follows or self, do: user.following_count, else: 0 followers_count = - if !user.hide_followers_count or !user.hide_followers or opts[:for] == user, + if !user.hide_followers_count or !user.hide_followers or self, do: user.follower_count, else: 0 - bot = user.actor_type == "Service" + bot = bot?(user) emojis = Enum.map(user.emoji, fn {shortcode, raw_url} -> @@ -249,6 +270,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do nil end + last_status_at = + user.last_status_at && + user.last_status_at |> NaiveDateTime.to_date() |> Date.to_iso8601() + %{ id: to_string(user.id), username: username_from_nickname(user.nickname), @@ -277,7 +302,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do actor_type: user.actor_type } }, - last_status_at: user.last_status_at, + last_status_at: last_status_at, # Pleroma extensions # Note: it's insecure to output :email but fully-qualified nickname may serve as safe stub @@ -464,4 +489,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do defp image_url(%{"url" => [%{"href" => href} | _]}), do: href defp image_url(_), do: nil + + defp bot?(user) do + # Because older and/or Mastodon clients may not recognize a Group actor properly, + # and currently the group actor can only boost things, we should let these clients + # think groups are bots. + # See https://git.pleroma.social/pleroma/pleroma-meta/-/issues/14 + user.actor_type == "Service" || user.actor_type == "Group" + end end diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -13,12 +13,11 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do def render("show.json", _) do instance = Config.get(:instance) - %{ - uri: Pleroma.Web.Endpoint.url(), - title: Keyword.get(instance, :name), + common_information(instance) + |> Map.merge(%{ + uri: Pleroma.Web.WebFinger.host(), description: Keyword.get(instance, :description), short_description: Keyword.get(instance, :short_description), - version: "#{@mastodon_api_level} (compatible; #{Pleroma.Application.named_version()})", email: Keyword.get(instance, :email), urls: %{ streaming_api: Pleroma.Web.Endpoint.websocket_url() @@ -27,9 +26,10 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do thumbnail: URI.merge(Pleroma.Web.Endpoint.url(), Keyword.get(instance, :instance_thumbnail)) |> to_string, - languages: Keyword.get(instance, :languages, ["en"]), registrations: Keyword.get(instance, :registrations_open), approval_required: Keyword.get(instance, :account_approval_required), + contact_account: contact_account(Keyword.get(instance, :contact_username)), + configuration: configuration(), # Extra (not present in Mastodon): max_toot_chars: Keyword.get(instance, :limit), max_media_attachments: Keyword.get(instance, :max_media_attachments), @@ -41,19 +41,61 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do background_image: Pleroma.Web.Endpoint.url() <> Keyword.get(instance, :background_image), shout_limit: Config.get([:shout, :limit]), description_limit: Keyword.get(instance, :description_limit), - pleroma: %{ - metadata: %{ - account_activation_required: Keyword.get(instance, :account_activation_required), - features: features(), - federation: federation(), - fields_limits: fields_limits(), - post_formats: Config.get([:instance, :allowed_post_formats]), - birthday_required: Config.get([:instance, :birthday_required]), - birthday_min_age: Config.get([:instance, :birthday_min_age]) - }, - stats: %{mau: Pleroma.User.active_user_count()}, - vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) - } + chat_limit: Keyword.get(instance, :chat_limit), + pleroma: pleroma_configuration(instance) + }) + end + + def render("show2.json", _) do + instance = Config.get(:instance) + + common_information(instance) + |> Map.merge(%{ + domain: Pleroma.Web.WebFinger.host(), + source_url: Pleroma.Application.repository(), + description: Keyword.get(instance, :short_description), + usage: %{users: %{active_month: Pleroma.User.active_user_count()}}, + thumbnail: %{ + url: + URI.merge(Pleroma.Web.Endpoint.url(), Keyword.get(instance, :instance_thumbnail)) + |> to_string + }, + configuration: configuration2(), + registrations: %{ + enabled: Keyword.get(instance, :registrations_open), + approval_required: Keyword.get(instance, :account_approval_required), + message: nil, + url: nil + }, + contact: %{ + email: Keyword.get(instance, :email), + account: contact_account(Keyword.get(instance, :contact_username)) + }, + # Extra (not present in Mastodon): + pleroma: pleroma_configuration2(instance) + }) + end + + def render("rules.json", _) do + Pleroma.Rule.query() + |> Pleroma.Repo.all() + |> render_many(__MODULE__, "rule.json", as: :rule) + end + + def render("rule.json", %{rule: rule}) do + %{ + id: to_string(rule.id), + text: rule.text, + hint: rule.hint || "" + } + end + + defp common_information(instance) do + %{ + languages: Keyword.get(instance, :languages, ["en"]), + rules: render(__MODULE__, "rules.json"), + title: Keyword.get(instance, :name), + version: "#{@mastodon_api_level} (compatible; #{Pleroma.Application.named_version()})" } end @@ -101,7 +143,9 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do if Config.get([:instance, :profile_directory]) do "profile_directory" end, - "pleroma:get:main/ostatus" + "pleroma:get:main/ostatus", + "pleroma:group_actors", + "pleroma:bookmark_folders" ] |> Enum.filter(& &1) end @@ -133,7 +177,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do |> Map.put(:enabled, Config.get([:instance, :federating])) end - def fields_limits do + defp fields_limits do %{ max_fields: Config.get([:instance, :max_account_fields]), max_remote_fields: Config.get([:instance, :max_remote_account_fields]), @@ -141,4 +185,94 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do value_length: Config.get([:instance, :account_field_value_length]) } end + + defp contact_account(nil), do: nil + + defp contact_account("@" <> username) do + contact_account(username) + end + + defp contact_account(username) do + user = Pleroma.User.get_cached_by_nickname(username) + + if user do + Pleroma.Web.MastodonAPI.AccountView.render("show.json", %{user: user, for: nil}) + else + nil + end + end + + defp configuration do + %{ + accounts: %{ + max_featured_tags: 0 + }, + statuses: %{ + max_characters: Config.get([:instance, :limit]), + max_media_attachments: Config.get([:instance, :max_media_attachments]) + }, + media_attachments: %{ + image_size_limit: Config.get([:instance, :upload_limit]), + video_size_limit: Config.get([:instance, :upload_limit]), + supported_mime_types: ["application/octet-stream"] + }, + polls: %{ + max_options: Config.get([:instance, :poll_limits, :max_options]), + max_characters_per_option: Config.get([:instance, :poll_limits, :max_option_chars]), + min_expiration: Config.get([:instance, :poll_limits, :min_expiration]), + max_expiration: Config.get([:instance, :poll_limits, :max_expiration]) + } + } + end + + defp configuration2 do + configuration() + |> put_in([:accounts, :max_pinned_statuses], Config.get([:instance, :max_pinned_statuses], 0)) + |> put_in([:statuses, :characters_reserved_per_url], 0) + |> Map.merge(%{ + urls: %{ + streaming: Pleroma.Web.Endpoint.websocket_url(), + status: Config.get([:instance, :status_page]) + }, + vapid: %{ + public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) + } + }) + end + + defp pleroma_configuration(instance) do + %{ + metadata: %{ + account_activation_required: Keyword.get(instance, :account_activation_required), + features: features(), + federation: federation(), + fields_limits: fields_limits(), + post_formats: Config.get([:instance, :allowed_post_formats]), + birthday_required: Config.get([:instance, :birthday_required]), + birthday_min_age: Config.get([:instance, :birthday_min_age]) + }, + stats: %{mau: Pleroma.User.active_user_count()}, + vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) + } + end + + defp pleroma_configuration2(instance) do + configuration = pleroma_configuration(instance) + + configuration + |> Map.merge(%{ + metadata: + configuration.metadata + |> Map.merge(%{ + avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit), + background_upload_limit: Keyword.get(instance, :background_upload_limit), + banner_upload_limit: Keyword.get(instance, :banner_upload_limit), + background_image: + Pleroma.Web.Endpoint.url() <> Keyword.get(instance, :background_image), + chat_limit: Keyword.get(instance, :chat_limit), + description_limit: Keyword.get(instance, :description_limit), + shout_limit: Config.get([:shout, :limit]) + }) + }) + end end diff --git a/lib/pleroma/web/mastodon_api/views/poll_view.ex b/lib/pleroma/web/mastodon_api/views/poll_view.ex @@ -21,7 +21,10 @@ defmodule Pleroma.Web.MastodonAPI.PollView do votes_count: votes_count, voters_count: voters_count(object), options: options, - emojis: Pleroma.Web.MastodonAPI.StatusView.build_emojis(object.data["emoji"]) + emojis: Pleroma.Web.MastodonAPI.StatusView.build_emojis(object.data["emoji"]), + pleroma: %{ + non_anonymous: object.data["nonAnonymous"] || false + } } if params[:for] do diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy alias Pleroma.Web.PleromaAPI.EmojiReactionController + alias Pleroma.Web.RichMedia.Card import Pleroma.Web.ActivityPub.Visibility, only: [get_visibility: 1, visible_for_user?: 2] @@ -29,9 +30,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do # pagination is restricted to 40 activities at a time defp fetch_rich_media_for_activities(activities) do Enum.each(activities, fn activity -> - spawn(fn -> - Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - end) + spawn(fn -> Card.get_by_activity(activity) end) end) end @@ -113,9 +112,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list activities = Enum.filter(opts.activities, & &1) - # Start fetching rich media before doing anything else, so that later calls to get the cards - # only block for timeout in the worst case, as opposed to - # length(activities_with_links) * timeout + # Start prefetching rich media before doing anything else fetch_rich_media_for_activities(activities) replied_to_activities = get_replied_to_activities(activities) quoted_activities = get_quoted_activities(activities) @@ -184,7 +181,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do favorited = opts[:for] && opts[:for].ap_id in (object.data["likes"] || []) - bookmarked = Activity.get_bookmark(reblogged_parent_activity, opts[:for]) != nil + bookmark = Activity.get_bookmark(reblogged_parent_activity, opts[:for]) + + bookmark_folder = + if bookmark != nil do + bookmark.folder_id + else + nil + end mentions = activity.recipients @@ -213,7 +217,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do favourites_count: 0, reblogged: reblogged?(reblogged_parent_activity, opts[:for]), favourited: present?(favorited), - bookmarked: present?(bookmarked), + bookmarked: present?(bookmark), muted: false, pinned: pinned?, sensitive: false, @@ -227,7 +231,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do emojis: [], pleroma: %{ local: activity.local, - pinned_at: pinned_at + pinned_at: pinned_at, + bookmark_folder: bookmark_folder } } end @@ -264,7 +269,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do favorited = opts[:for] && opts[:for].ap_id in (object.data["likes"] || []) - bookmarked = Activity.get_bookmark(activity, opts[:for]) != nil + bookmark = Activity.get_bookmark(activity, opts[:for]) + + bookmark_folder = + if bookmark != nil do + bookmark.folder_id + else + nil + end client_posted_this_activity = opts[:for] && user.id == opts[:for].id @@ -349,7 +361,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do summary = object.data["summary"] || "" - card = render("card.json", Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)) + card = + case Card.get_by_activity(activity) do + %Card{} = result -> render("card.json", result) + _ -> nil + end url = if user.local do @@ -418,7 +434,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do favourites_count: like_count, reblogged: reblogged?(activity, opts[:for]), favourited: present?(favorited), - bookmarked: present?(bookmarked), + bookmarked: present?(bookmark), muted: muted, pinned: pinned?, sensitive: sensitive, @@ -448,7 +464,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do emoji_reactions: emoji_reactions, parent_visible: visible_for_user?(reply_to, opts[:for]), pinned_at: pinned_at, - quotes_count: object.data["quotesCount"] || 0 + quotes_count: object.data["quotesCount"] || 0, + bookmark_folder: bookmark_folder } } end @@ -551,37 +568,30 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do } end - def render("card.json", %{rich_media: rich_media, page_url: page_url}) do - page_url_data = URI.parse(page_url) - - page_url_data = - if is_binary(rich_media["url"]) do - URI.merge(page_url_data, URI.parse(rich_media["url"])) - else - page_url_data - end + def render("card.json", %Card{fields: rich_media}) do + page_url_data = URI.parse(rich_media["url"]) page_url = page_url_data |> to_string - image_url_data = - if is_binary(rich_media["image"]) do - URI.parse(rich_media["image"]) - else - nil - end - - image_url = build_image_url(image_url_data, page_url_data) + image_url = proxied_url(rich_media["image"], page_url_data) + audio_url = proxied_url(rich_media["audio"], page_url_data) + video_url = proxied_url(rich_media["video"], page_url_data) %{ type: "link", provider_name: page_url_data.host, provider_url: page_url_data.scheme <> "://" <> page_url_data.host, url: page_url, - image: image_url |> MediaProxy.url(), + image: image_url, + image_description: rich_media["image:alt"] || "", title: rich_media["title"] || "", description: rich_media["description"] || "", pleroma: %{ - opengraph: rich_media + opengraph: + rich_media + |> Maps.put_if_present("image", image_url) + |> Maps.put_if_present("audio", audio_url) + |> Maps.put_if_present("video", video_url) } } end @@ -797,8 +807,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do URI.merge(page_url_data, image_url_data) |> to_string end - defp build_image_url(_, _), do: nil - defp get_source_text(%{"content" => content} = _source) do content end @@ -818,4 +826,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do defp get_source_content_type(_source) do Utils.get_content_type(nil) end + + defp proxied_url(url, page_url_data) do + if is_binary(url) do + build_image_url(URI.parse(url), page_url_data) |> MediaProxy.url() + else + nil + end + end end diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -11,28 +11,21 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do alias Pleroma.Web.Streamer alias Pleroma.Web.StreamerView - @behaviour :cowboy_websocket + @behaviour Phoenix.Socket.Transport # Client ping period. @tick :timer.seconds(30) - # Cowboy timeout period. - @timeout :timer.seconds(60) - # Hibernate every X messages - @hibernate_every 100 - - def init(%{qs: qs} = req, state) do - with params <- Enum.into(:cow_qs.parse_qs(qs), %{}), - sec_websocket <- :cowboy_req.header("sec-websocket-protocol", req, nil), - access_token <- Map.get(params, "access_token"), - {:ok, user, oauth_token} <- authenticate_request(access_token, sec_websocket), - {:ok, topic} <- Streamer.get_topic(params["stream"], user, oauth_token, params) do - req = - if sec_websocket do - :cowboy_req.set_resp_header("sec-websocket-protocol", sec_websocket, req) - else - req - end + @impl Phoenix.Socket.Transport + def child_spec(_opts), do: :ignore + + # This only prepares the connection and is not in the process yet + @impl Phoenix.Socket.Transport + def connect(%{params: params} = transport_info) do + with access_token <- Map.get(params, "access_token"), + {:ok, user, oauth_token} <- authenticate_request(access_token), + {:ok, topic} <- + Streamer.get_topic(params["stream"], user, oauth_token, params) do topics = if topic do [topic] @@ -40,41 +33,40 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do [] end - {:cowboy_websocket, req, - %{user: user, topics: topics, oauth_token: oauth_token, count: 0, timer: nil}, - %{idle_timeout: @timeout}} + state = %{ + user: user, + topics: topics, + oauth_token: oauth_token, + count: 0, + timer: nil + } + + {:ok, state} else {:error, :bad_topic} -> - Logger.debug("#{__MODULE__} bad topic #{inspect(req)}") - req = :cowboy_req.reply(404, req) - {:ok, req, state} + Logger.debug("#{__MODULE__} bad topic #{inspect(transport_info)}") + + {:error, :bad_topic} {:error, :unauthorized} -> - Logger.debug("#{__MODULE__} authentication error: #{inspect(req)}") - req = :cowboy_req.reply(401, req) - {:ok, req, state} + Logger.debug("#{__MODULE__} authentication error: #{inspect(transport_info)}") + {:error, :unauthorized} end end - def websocket_init(state) do - Logger.debug( - "#{__MODULE__} accepted websocket connection for user #{(state.user || %{id: "anonymous"}).id}, topics #{state.topics}" - ) - + # All subscriptions/links and messages cannot be created + # until the processed is launched with init/1 + @impl Phoenix.Socket.Transport + def init(state) do Enum.each(state.topics, fn topic -> Streamer.add_socket(topic, state.oauth_token) end) - {:ok, %{state | timer: timer()}} - end - # Client's Pong frame. - def websocket_handle(:pong, state) do - if state.timer, do: Process.cancel_timer(state.timer) - {:ok, %{state | timer: timer()}} - end + Process.send_after(self(), :ping, @tick) - # We only receive pings for now - def websocket_handle(:ping, state), do: {:ok, state} + {:ok, state} + end - def websocket_handle({:text, text}, state) do + @impl Phoenix.Socket.Transport + def handle_in({text, [opcode: :text]}, state) do with {:ok, %{} = event} <- Jason.decode(text) do handle_client_event(event, state) else @@ -84,50 +76,47 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do end end - def websocket_handle(frame, state) do + def handle_in(frame, state) do Logger.error("#{__MODULE__} received frame: #{inspect(frame)}") {:ok, state} end - def websocket_info({:render_with_user, view, template, item, topic}, state) do + @impl Phoenix.Socket.Transport + def handle_info({:render_with_user, view, template, item, topic}, state) do user = %User{} = User.get_cached_by_ap_id(state.user.ap_id) unless Streamer.filtered_by_user?(user, item) do - websocket_info({:text, view.render(template, item, user, topic)}, %{state | user: user}) + message = view.render(template, item, user, topic) + {:push, {:text, message}, %{state | user: user}} else {:ok, state} end end - def websocket_info({:text, message}, state) do - # If the websocket processed X messages, force an hibernate/GC. - # We don't hibernate at every message to balance CPU usage/latency with RAM usage. - if state.count > @hibernate_every do - {:reply, {:text, message}, %{state | count: 0}, :hibernate} - else - {:reply, {:text, message}, %{state | count: state.count + 1}} - end + def handle_info({:text, text}, state) do + {:push, {:text, text}, state} end - # Ping tick. We don't re-queue a timer there, it is instead queued when :pong is received. - # As we hibernate there, reset the count to 0. - # If the client misses :pong, Cowboy will automatically timeout the connection after - # `@idle_timeout`. - def websocket_info(:tick, state) do - {:reply, :ping, %{state | timer: nil, count: 0}, :hibernate} + def handle_info(:ping, state) do + Process.send_after(self(), :ping, @tick) + + {:push, {:ping, ""}, state} end - def websocket_info(:close, state) do - {:stop, state} + def handle_info(:close, state) do + {:stop, {:closed, 'connection closed by server'}, state} end - # State can be `[]` only in case we terminate before switching to websocket, - # we already log errors for these cases in `init/1`, so just do nothing here - def terminate(_reason, _req, []), do: :ok + def handle_info(msg, state) do + Logger.debug("#{__MODULE__} received info: #{inspect(msg)}") - def terminate(reason, _req, state) do + {:ok, state} + end + + @impl Phoenix.Socket.Transport + def terminate(reason, state) do Logger.debug( - "#{__MODULE__} terminating websocket connection for user #{(state.user || %{id: "anonymous"}).id}, topics #{state.topics || "?"}: #{inspect(reason)}" + "#{__MODULE__} terminating websocket connection for user #{(state.user || %{id: "anonymous"}).id}, topics #{state.topics || "?"}: #{inspect(reason)})" ) Enum.each(state.topics, fn topic -> Streamer.remove_socket(topic) end) @@ -135,16 +124,13 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do end # Public streams without authentication. - defp authenticate_request(nil, nil) do + defp authenticate_request(nil) do {:ok, nil, nil} end # Authenticated streams. - defp authenticate_request(access_token, sec_websocket) do - token = access_token || sec_websocket - - with true <- is_bitstring(token), - oauth_token = %Token{user_id: user_id} <- Repo.get_by(Token, token: token), + defp authenticate_request(access_token) do + with oauth_token = %Token{user_id: user_id} <- Repo.get_by(Token, token: access_token), user = %User{} <- User.get_cached_by_id(user_id) do {:ok, user, oauth_token} else @@ -152,36 +138,32 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do end end - defp timer do - Process.send_after(self(), :tick, @tick) - end - defp handle_client_event(%{"type" => "subscribe", "stream" => _topic} = params, state) do with {_, {:ok, topic}} <- {:topic, Streamer.get_topic(params["stream"], state.user, state.oauth_token, params)}, {_, false} <- {:subscribed, topic in state.topics} do Streamer.add_socket(topic, state.oauth_token) - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{type: "subscribe", result: "success"})} - ], %{state | topics: [topic | state.topics]}} + message = + StreamerView.render("pleroma_respond.json", %{type: "subscribe", result: "success"}) + + {:reply, :ok, {:text, message}, %{state | topics: [topic | state.topics]}} else {:subscribed, true} -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{type: "subscribe", result: "ignored"})} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{type: "subscribe", result: "ignored"}) + + {:reply, :error, {:text, message}, state} {:topic, {:error, error}} -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{ - type: "subscribe", - result: "error", - error: error - })} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{ + type: "subscribe", + result: "error", + error: error + }) + + {:reply, :error, {:text, message}, state} end end @@ -191,26 +173,26 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do {_, true} <- {:subscribed, topic in state.topics} do Streamer.remove_socket(topic) - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{type: "unsubscribe", result: "success"})} - ], %{state | topics: List.delete(state.topics, topic)}} + message = + StreamerView.render("pleroma_respond.json", %{type: "unsubscribe", result: "success"}) + + {:reply, :ok, {:text, message}, %{state | topics: List.delete(state.topics, topic)}} else {:subscribed, false} -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{type: "unsubscribe", result: "ignored"})} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{type: "unsubscribe", result: "ignored"}) + + {:reply, :error, {:text, message}, state} {:topic, {:error, error}} -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{ - type: "unsubscribe", - result: "error", - error: error - })} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{ + type: "unsubscribe", + result: "error", + error: error + }) + + {:reply, :error, {:text, message}, state} end end @@ -219,39 +201,47 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do state ) do with {:auth, nil, nil} <- {:auth, state.user, state.oauth_token}, - {:ok, user, oauth_token} <- authenticate_request(access_token, nil) do - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{ - type: "pleroma:authenticate", - result: "success" - })} - ], %{state | user: user, oauth_token: oauth_token}} + {:ok, user, oauth_token} <- authenticate_request(access_token) do + message = + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma:authenticate", + result: "success" + }) + + {:reply, :ok, {:text, message}, %{state | user: user, oauth_token: oauth_token}} else {:auth, _, _} -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{ - type: "pleroma:authenticate", - result: "error", - error: :already_authenticated - })} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma:authenticate", + result: "error", + error: :already_authenticated + }) + + {:reply, :error, {:text, message}, state} _ -> - {[ - {:text, - StreamerView.render("pleroma_respond.json", %{ - type: "pleroma:authenticate", - result: "error", - error: :unauthorized - })} - ], state} + message = + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma:authenticate", + result: "error", + error: :unauthorized + }) + + {:reply, :error, {:text, message}, state} end end defp handle_client_event(params, state) do Logger.error("#{__MODULE__} received unknown event: #{inspect(params)}") - {[], state} + {:ok, state} + end + + def handle_error(conn, :unauthorized) do + Plug.Conn.send_resp(conn, 401, "Unauthorized") + end + + def handle_error(conn, _reason) do + Plug.Conn.send_resp(conn, 404, "Not Found") end end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -56,7 +56,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do media_proxy_url = MediaProxy.url(url) with {:ok, %{status: status} = head_response} when status in 200..299 <- - Pleroma.HTTP.request("HEAD", media_proxy_url, [], [], pool: :media) do + Pleroma.HTTP.request(:head, media_proxy_url, "", [], pool: :media) do content_type = Tesla.get_header(head_response, "content-type") content_length = Tesla.get_header(head_response, "content-length") content_length = content_length && String.to_integer(content_length) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.Nodeinfo.Nodeinfo do alias Pleroma.Config alias Pleroma.Stats alias Pleroma.User - alias Pleroma.Web.Federator.Publisher + alias Pleroma.Web.ActivityPub.Publisher alias Pleroma.Web.MastodonAPI.InstanceView # returns a nodeinfo 2.0 map, since 2.1 just adds a repository field diff --git a/lib/pleroma/web/o_auth/authorization.ex b/lib/pleroma/web/o_auth/authorization.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Web.OAuth.Authorization do end @spec create_authorization(App.t(), User.t() | %{}, [String.t()] | nil) :: - {:ok, Authorization.t()} | {:error, Changeset.t()} + {:ok, Authorization.t()} | {:error, Ecto.Changeset.t()} def create_authorization(%App{} = app, %User{} = user, scopes \\ nil) do %{ scopes: scopes || app.scopes, @@ -39,7 +39,7 @@ defmodule Pleroma.Web.OAuth.Authorization do |> Repo.insert() end - @spec create_changeset(map()) :: Changeset.t() + @spec create_changeset(map()) :: Ecto.Changeset.t() def create_changeset(attrs \\ %{}) do %Authorization{} |> cast(attrs, [:user_id, :app_id, :scopes, :valid_until]) @@ -58,7 +58,7 @@ defmodule Pleroma.Web.OAuth.Authorization do put_change(changeset, :valid_until, NaiveDateTime.add(NaiveDateTime.utc_now(), lifespan)) end - @spec use_changeset(Authtorizatiton.t(), map()) :: Changeset.t() + @spec use_changeset(Authorization.t(), map()) :: Ecto.Changeset.t() def use_changeset(%Authorization{} = auth, params) do auth |> cast(params, [:used]) @@ -66,7 +66,7 @@ defmodule Pleroma.Web.OAuth.Authorization do end @spec use_token(Authorization.t()) :: - {:ok, Authorization.t()} | {:error, Changeset.t()} | {:error, String.t()} + {:ok, Authorization.t()} | {:error, Ecto.Changeset.t()} | {:error, String.t()} def use_token(%Authorization{used: false, valid_until: valid_until} = auth) do if NaiveDateTime.diff(NaiveDateTime.utc_now(), valid_until) < 0 do Repo.update(use_changeset(auth, %{used: true})) diff --git a/lib/pleroma/web/o_auth/o_auth_controller.ex b/lib/pleroma/web/o_auth/o_auth_controller.ex @@ -310,7 +310,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do after_token_exchange(conn, %{token: token}) else _error -> - handle_token_exchange_error(conn, :invalid_credentails) + handle_token_exchange_error(conn, :invalid_credentials) end end @@ -610,13 +610,8 @@ defmodule Pleroma.Web.OAuth.OAuthController do end end - @spec validate_scopes(App.t(), map() | list()) :: + @spec validate_scopes(App.t(), list()) :: {:ok, list()} | {:error, :missing_scopes | :unsupported_scopes} - defp validate_scopes(%App{} = app, params) when is_map(params) do - requested_scopes = Scopes.fetch_scopes(params, app.scopes) - validate_scopes(app, requested_scopes) - end - defp validate_scopes(%App{} = app, requested_scopes) when is_list(requested_scopes) do Scopes.validate(requested_scopes, app.scopes) end diff --git a/lib/pleroma/web/o_auth/token.ex b/lib/pleroma/web/o_auth/token.ex @@ -56,7 +56,8 @@ defmodule Pleroma.Web.OAuth.Token do |> Repo.find_resource() end - @spec exchange_token(App.t(), Authorization.t()) :: {:ok, Token.t()} | {:error, Changeset.t()} + @spec exchange_token(App.t(), Authorization.t()) :: + {:ok, Token.t()} | {:error, Ecto.Changeset.t()} def exchange_token(app, auth) do with {:ok, auth} <- Authorization.use_token(auth), true <- auth.app_id == app.id do @@ -95,7 +96,7 @@ defmodule Pleroma.Web.OAuth.Token do |> validate_required([:valid_until]) end - @spec create(App.t(), User.t(), map()) :: {:ok, Token} | {:error, Changeset.t()} + @spec create(App.t(), User.t(), map()) :: {:ok, Token} | {:error, Ecto.Changeset.t()} def create(%App{} = app, %User{} = user, attrs \\ %{}) do with {:ok, token} <- do_create(app, user, attrs) do if Pleroma.Config.get([:oauth2, :clean_expired_tokens]) do @@ -137,9 +138,9 @@ defmodule Pleroma.Web.OAuth.Token do |> Repo.all() end - def is_expired?(%__MODULE__{valid_until: valid_until}) do + def expired?(%__MODULE__{valid_until: valid_until}) do NaiveDateTime.diff(NaiveDateTime.utc_now(), valid_until) > 0 end - def is_expired?(_), do: false + def expired?(_), do: false end diff --git a/lib/pleroma/web/o_auth/token/query.ex b/lib/pleroma/web/o_auth/token/query.ex @@ -9,10 +9,10 @@ defmodule Pleroma.Web.OAuth.Token.Query do import Ecto.Query, only: [from: 2] - @type query :: Ecto.Queryable.t() | Token.t() - alias Pleroma.Web.OAuth.Token + @type query :: Ecto.Queryable.t() | Token.t() + @spec get_by_refresh_token(query, String.t()) :: query def get_by_refresh_token(query \\ Token, refresh_token) do from(q in query, where: q.refresh_token == ^refresh_token) diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex @@ -37,7 +37,7 @@ defmodule Pleroma.Web.OStatus.OStatusController 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 + {_, true} <- {:public?, Visibility.public?(activity)} do redirect(conn, to: "/notice/#{activity.id}") else reason when reason in [{:public?, false}, {:activity, nil}] -> @@ -56,7 +56,7 @@ defmodule Pleroma.Web.OStatus.OStatusController 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 + {_, true} <- {:public?, Visibility.public?(activity)} do redirect(conn, to: "/notice/#{activity.id}") else reason when reason in [{:public?, false}, {:activity, nil}] -> @@ -69,7 +69,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do def notice(%{assigns: %{format: format}} = conn, %{"id" => id}) do with {_, %Activity{} = activity} <- {:activity, Activity.get_by_id_with_object(id)}, - {_, true} <- {:public?, Visibility.is_public?(activity)}, + {_, true} <- {:public?, Visibility.public?(activity)}, %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do cond do format in ["json", "activity+json"] -> @@ -106,13 +106,12 @@ defmodule Pleroma.Web.OStatus.OStatusController do # Returns an HTML embedded <audio> or <video> player suitable for embed iframes. 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 <- Visibility.public?(activity), {_, true} <- {:visible?, Visibility.visible_for_user?(activity, _reading_user = nil)}, %Object{} = object <- Object.normalize(activity, fetch: false), %{data: %{"attachment" => [%{"url" => [url | _]} | _]}} <- object, true <- String.starts_with?(url["mediaType"], ["audio", "video"]) do conn - |> put_layout(:metadata_player) |> put_resp_header("x-frame-options", "ALLOW") |> put_resp_header( "content-security-policy", diff --git a/lib/pleroma/web/pleroma_api/controllers/bookmark_folder_controller.ex b/lib/pleroma/web/pleroma_api/controllers/bookmark_folder_controller.ex @@ -0,0 +1,68 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.BookmarkFolderController do + use Pleroma.Web, :controller + + alias Pleroma.BookmarkFolder + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + # Note: scope not present in Mastodon: read:bookmarks + plug(OAuthScopesPlug, %{scopes: ["read:bookmarks"]} when action == :index) + + # Note: scope not present in Mastodon: write:bookmarks + plug( + OAuthScopesPlug, + %{scopes: ["write:bookmarks"]} when action in [:create, :update, :delete] + ) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaBookmarkFolderOperation + + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + + def index(%{assigns: %{user: user}} = conn, _params) do + with folders <- BookmarkFolder.for_user(user.id) do + conn + |> render("index.json", %{folders: folders, as: :folder}) + end + end + + def create( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: params}}} = conn, + _ + ) do + with {:ok, folder} <- BookmarkFolder.create(user.id, params[:name], params[:emoji]) do + render(conn, "show.json", folder: folder) + end + end + + def update( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: params, params: %{id: id}}} + } = conn, + _ + ) do + with true <- BookmarkFolder.belongs_to_user?(id, user.id), + {:ok, folder} <- BookmarkFolder.update(id, params[:name], params[:emoji]) do + render(conn, "show.json", folder: folder) + else + false -> {:error, :forbidden} + end + end + + def delete( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, + _ + ) do + with true <- BookmarkFolder.belongs_to_user?(id, user.id), + {:ok, folder} <- BookmarkFolder.delete(id) do + render(conn, "show.json", folder: folder) + else + false -> {:error, :forbidden} + end + end +end diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -38,14 +38,24 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do %{scopes: ["read:chats"]} when action in [:messages, :index, :index2, :show] ) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ChatOperation - def delete_message(%{assigns: %{user: %{id: user_id} = user}} = conn, %{ - message_id: message_id, - id: chat_id - }) do + def delete_message( + %{ + assigns: %{user: %{id: user_id} = user}, + private: %{ + open_api_spex: %{ + params: %{ + message_id: message_id, + id: chat_id + } + } + } + } = conn, + _ + ) do with %MessageReference{} = cm_ref <- MessageReference.get_by_id(message_id), ^chat_id <- to_string(cm_ref.chat_id), @@ -72,11 +82,14 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do defp remove_or_delete(cm_ref, _), do: MessageReference.delete(cm_ref) def post_chat_message( - %{body_params: params, assigns: %{user: user}} = conn, - %{id: id} + %{ + private: %{open_api_spex: %{body_params: params, params: %{id: id}}}, + assigns: %{user: user} + } = conn, + _ ) do with {:ok, chat} <- Chat.get_by_user_and_id(user, id), - %User{} = recipient <- User.get_cached_by_ap_id(chat.recipient), + {_, %User{} = recipient} <- {:user, User.get_cached_by_ap_id(chat.recipient)}, {:ok, activity} <- CommonAPI.post_chat_message(user, recipient, params[:content], media_id: params[:media_id], @@ -97,12 +110,20 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do conn |> put_status(:bad_request) |> json(%{error: message}) + + {:user, nil} -> + conn + |> put_status(:bad_request) + |> json(%{error: "Recipient does not exist"}) end end def mark_message_as_read( - %{assigns: %{user: %{id: user_id}}} = conn, - %{id: chat_id, message_id: message_id} + %{ + assigns: %{user: %{id: user_id}}, + private: %{open_api_spex: %{params: %{id: chat_id, message_id: message_id}}} + } = conn, + _ ) do with %MessageReference{} = cm_ref <- MessageReference.get_by_id(message_id), ^chat_id <- to_string(cm_ref.chat_id), @@ -115,8 +136,16 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do end def mark_as_read( - %{body_params: %{last_read_id: last_read_id}, assigns: %{user: user}} = conn, - %{id: id} + %{ + assigns: %{user: user}, + private: %{ + open_api_spex: %{ + body_params: %{last_read_id: last_read_id}, + params: %{id: id} + } + } + } = conn, + _ ) do with {:ok, chat} <- Chat.get_by_user_and_id(user, id), {_n, _} <- MessageReference.set_all_seen_for_chat(chat, last_read_id) do @@ -124,7 +153,13 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do end end - def messages(%{assigns: %{user: user}} = conn, %{id: id} = params) do + def messages( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{params: %{id: id} = params}} + } = conn, + _ + ) do with {:ok, chat} <- Chat.get_by_user_and_id(user, id) do chat_message_refs = chat @@ -138,7 +173,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do end end - def index(%{assigns: %{user: user}} = conn, params) do + def index(%{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, _) do chats = index_query(user, params) |> Repo.all() @@ -146,7 +181,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do render(conn, "index.json", chats: chats) end - def index2(%{assigns: %{user: user}} = conn, params) do + def index2(%{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, _) do chats = index_query(user, params) |> Pagination.fetch_paginated(params) @@ -166,14 +201,14 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do |> where([c], c.recipient not in ^exclude_users) end - def create(%{assigns: %{user: user}} = conn, %{id: id}) do + def create(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with %User{ap_id: recipient} <- User.get_cached_by_id(id), {:ok, %Chat{} = chat} <- Chat.get_or_create(user.id, recipient) do render(conn, "show.json", chat: chat) end end - def show(%{assigns: %{user: user}} = conn, %{id: id}) do + def show(%{assigns: %{user: user}, private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do with {:ok, chat} <- Chat.get_by_user_and_id(user, id) do render(conn, "show.json", chat: chat) end diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileController do alias Pleroma.Emoji.Pack alias Pleroma.Web.ApiSpec - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( Pleroma.Web.Plugs.OAuthScopesPlug, @@ -22,7 +22,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileController do defdelegate open_api_operation(action), to: ApiSpec.PleromaEmojiFileOperation - def create(%{body_params: params} = conn, %{name: pack_name}) do + def create( + %{private: %{open_api_spex: %{body_params: params, params: %{name: pack_name}}}} = conn, + _ + ) do filename = params[:filename] || get_filename(params[:file]) shortcode = params[:shortcode] || Path.basename(filename, Path.extname(filename)) @@ -49,7 +52,17 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileController do end end - def update(%{body_params: %{shortcode: shortcode} = params} = conn, %{name: pack_name}) do + def update( + %{ + private: %{ + open_api_spex: %{ + body_params: %{shortcode: shortcode} = params, + params: %{name: pack_name} + } + } + } = conn, + _ + ) do new_shortcode = params[:new_shortcode] new_filename = params[:new_filename] force = params[:force] @@ -80,7 +93,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileController do end end - def delete(conn, %{name: pack_name, shortcode: shortcode}) do + def delete( + %{private: %{open_api_spex: %{params: %{name: pack_name, shortcode: shortcode}}}} = conn, + _ + ) do with {:ok, pack} <- Pack.load_pack(pack_name), {:ok, pack} <- Pack.delete_file(pack, shortcode) do json(conn, pack.files) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do alias Pleroma.Emoji.Pack - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( Pleroma.Web.Plugs.OAuthScopesPlug, @@ -26,7 +26,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaEmojiPackOperation - def remote(conn, params) do + def remote(%{private: %{open_api_spex: %{params: params}}} = conn, _) do with {:ok, packs} <- Pack.list_remote(url: params.url, page_size: params.page_size, page: params.page) do json(conn, packs) @@ -38,7 +38,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def index(conn, params) do + def index(%{private: %{open_api_spex: %{params: params}}} = conn, _) do emoji_path = [:instance, :static_dir] |> Pleroma.Config.get!() @@ -61,7 +61,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def show(conn, %{name: name, page: page, page_size: page_size}) do + def show( + %{private: %{open_api_spex: %{params: %{name: name, page: page, page_size: page_size}}}} = + conn, + _ + ) do name = String.trim(name) with {:ok, pack} <- Pack.show(name: name, page: page, page_size: page_size) do @@ -90,7 +94,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def archive(conn, %{name: name}) do + def archive(%{private: %{open_api_spex: %{params: %{name: name}}}} = conn, _) do with {:ok, archive} <- Pack.get_archive(name) do send_download(conn, {:binary, archive}, filename: "#{name}.zip") else @@ -109,7 +113,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def download(%{body_params: %{url: url, name: name} = params} = conn, _) do + def download( + %{private: %{open_api_spex: %{body_params: %{url: url, name: name} = params}}} = conn, + _ + ) do with {:ok, _pack} <- Pack.download(name, url, params[:as]) do json(conn, "ok") else @@ -130,7 +137,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def create(conn, %{name: name}) do + def create(%{private: %{open_api_spex: %{params: %{name: name}}}} = conn, _) do name = String.trim(name) with {:ok, _pack} <- Pack.create(name) do @@ -159,7 +166,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def delete(conn, %{name: name}) do + def delete(%{private: %{open_api_spex: %{params: %{name: name}}}} = conn, _) do name = String.trim(name) with {:ok, deleted} when deleted != [] <- Pack.delete(name) do @@ -184,7 +191,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do end end - def update(%{body_params: %{metadata: metadata}} = conn, %{name: name}) do + def update( + %{private: %{open_api_spex: %{body_params: %{metadata: metadata}, params: %{name: name}}}} = + conn, + _ + ) do with {:ok, pack} <- Pack.update_metadata(name, metadata) do json(conn, pack.pack) else diff --git a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex @@ -10,7 +10,7 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do alias Pleroma.Web.Plugs.OAuthScopesPlug plug(Majic.Plug, [pool: Pleroma.MajicPool] when action in [:update]) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug(OAuthScopesPlug, %{scopes: ["read:accounts"]} when action == :show) plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action != :show) @@ -22,9 +22,13 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do end @doc "PUT /api/v1/pleroma/mascot" - def update(%{assigns: %{user: user}, body_params: %{file: file}} = conn, _) do + def update( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: %{file: file}}}} = + conn, + _ + ) do with {:content_type, "image" <> _} <- {:content_type, file.content_type}, - {:ok, object} <- ActivityPub.upload(file, actor: User.ap_id(user)) do + {_, {:ok, object}} <- {:upload, ActivityPub.upload(file, actor: User.ap_id(user))} do attachment = render_attachment(object) {:ok, _user} = User.mascot_update(user, attachment) @@ -32,6 +36,9 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do else {:content_type, _} -> render_error(conn, :unsupported_media_type, "mascots can only be images") + + {:upload, {:error, _}} -> + render_error(conn, :error, "error uploading file") end end diff --git a/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex b/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.PleromaAPI.NotificationController do alias Pleroma.Notification - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) plug( Pleroma.Web.Plugs.OAuthScopesPlug, @@ -16,9 +16,16 @@ defmodule Pleroma.Web.PleromaAPI.NotificationController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaNotificationOperation - def mark_as_read(%{assigns: %{user: user}, body_params: %{id: notification_id}} = conn, _) do - with {:ok, notification} <- Notification.read_one(user, notification_id) do - render(conn, "show.json", notification: notification, for: user) + def mark_as_read( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: %{id: notification_id}}} + } = conn, + _ + ) do + with {:ok, _} <- Notification.read_one(user, notification_id) do + conn + |> json("ok") else {:error, message} -> conn @@ -27,12 +34,19 @@ defmodule Pleroma.Web.PleromaAPI.NotificationController do end end - def mark_as_read(%{assigns: %{user: user}, body_params: %{max_id: max_id}} = conn, _) do - notifications = - user - |> Notification.set_read_up_to(max_id) - |> Enum.take(80) - - render(conn, "index.json", notifications: notifications, for: user) + def mark_as_read( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: %{max_id: max_id}}}} = + conn, + _ + ) do + with {:ok, _} <- Notification.set_read_up_to(user, max_id) do + conn + |> json("ok") + else + {:error, message} -> + conn + |> put_status(:bad_request) + |> json(%{"error" => message}) + end end end diff --git a/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex b/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex @@ -15,14 +15,21 @@ defmodule Pleroma.Web.PleromaAPI.UserImportController do plug(OAuthScopesPlug, %{scopes: ["follow", "write:blocks"]} when action == :blocks) plug(OAuthScopesPlug, %{scopes: ["follow", "write:mutes"]} when action == :mutes) - plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false) defdelegate open_api_operation(action), to: ApiSpec.UserImportOperation - def follow(%{body_params: %{list: %Plug.Upload{path: path}}} = conn, _) do - follow(%Plug.Conn{conn | body_params: %{list: File.read!(path)}}, %{}) + def follow( + %{private: %{open_api_spex: %{body_params: %{list: %Plug.Upload{path: path}}}}} = conn, + _ + ) do + list = File.read!(path) + do_follow(conn, list) end - def follow(%{assigns: %{user: follower}, body_params: %{list: list}} = conn, _) do + def follow(%{private: %{open_api_spex: %{body_params: %{list: list}}}} = conn, _), + do: do_follow(conn, list) + + def do_follow(%{assigns: %{user: follower}} = conn, list) do identifiers = list |> String.split("\n") @@ -35,20 +42,34 @@ defmodule Pleroma.Web.PleromaAPI.UserImportController do json(conn, "job started") end - def blocks(%{body_params: %{list: %Plug.Upload{path: path}}} = conn, _) do - blocks(%Plug.Conn{conn | body_params: %{list: File.read!(path)}}, %{}) + def blocks( + %{private: %{open_api_spex: %{body_params: %{list: %Plug.Upload{path: path}}}}} = conn, + _ + ) do + list = File.read!(path) + do_block(conn, list) end - def blocks(%{assigns: %{user: blocker}, body_params: %{list: list}} = conn, _) do + def blocks(%{private: %{open_api_spex: %{body_params: %{list: list}}}} = conn, _), + do: do_block(conn, list) + + defp do_block(%{assigns: %{user: blocker}} = conn, list) do User.Import.blocks_import(blocker, prepare_user_identifiers(list)) json(conn, "job started") end - def mutes(%{body_params: %{list: %Plug.Upload{path: path}}} = conn, _) do - mutes(%Plug.Conn{conn | body_params: %{list: File.read!(path)}}, %{}) + def mutes( + %{private: %{open_api_spex: %{body_params: %{list: %Plug.Upload{path: path}}}}} = conn, + _ + ) do + list = File.read!(path) + do_mute(conn, list) end - def mutes(%{assigns: %{user: user}, body_params: %{list: list}} = conn, _) do + def mutes(%{private: %{open_api_spex: %{body_params: %{list: list}}}} = conn, _), + do: do_mute(conn, list) + + defp do_mute(%{assigns: %{user: user}} = conn, list) do User.Import.mutes_import(user, prepare_user_identifiers(list)) json(conn, "job started") end diff --git a/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex b/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex @@ -0,0 +1,42 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.BookmarkFolderView do + use Pleroma.Web, :view + + alias Pleroma.BookmarkFolder + alias Pleroma.Emoji + alias Pleroma.Web.Endpoint + + def render("show.json", %{folder: %BookmarkFolder{} = folder}) do + %{ + id: folder.id |> to_string(), + name: folder.name, + emoji: folder.emoji, + emoji_url: get_emoji_url(folder.emoji) + } + end + + def render("index.json", %{folders: folders} = opts) do + render_many(folders, __MODULE__, "show.json", Map.delete(opts, :folders)) + end + + defp get_emoji_url(nil) do + nil + end + + defp get_emoji_url(emoji) do + if Emoji.unicode?(emoji) do + nil + else + emoji = Emoji.get(emoji) + + if emoji != nil do + Endpoint.url() |> URI.merge(emoji.file) |> to_string() + else + nil + end + end + end +end diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do alias Pleroma.User alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.StatusView + alias Pleroma.Web.RichMedia.Card @cachex Pleroma.Config.get([:cachex, :provider], Cachex) @@ -23,6 +24,12 @@ defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do } } ) do + card = + case Card.get_by_object(object) do + %Card{} = card_data -> StatusView.render("card.json", card_data) + _ -> nil + end + %{ id: id |> to_string(), content: chat_message["content"], @@ -34,11 +41,7 @@ defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do chat_message["attachment"] && StatusView.render("attachment.json", attachment: chat_message["attachment"]), unread: unread, - card: - StatusView.render( - "card.json", - Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object) - ) + card: card } |> put_idempotency_key() end diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex @@ -27,6 +27,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleView do title: object.data["title"] |> HTML.strip_tags(), artist: object.data["artist"] |> HTML.strip_tags(), album: object.data["album"] |> HTML.strip_tags(), + externalLink: object.data["externalLink"], length: object.data["length"] } end diff --git a/lib/pleroma/web/plugs/cache.ex b/lib/pleroma/web/plugs/cache.ex @@ -20,7 +20,7 @@ defmodule Pleroma.Web.Plugs.Cache do - `ttl`: An expiration time (time-to-live). This value should be in milliseconds or `nil` to disable expiration. Defaults to `nil`. - `query_params`: Take URL query string into account (`true`), ignore it (`false`) or limit to specific params only (list). Defaults to `true`. - - `tracking_fun`: A function that is called on successfull responses, no matter if the request is cached or not. It should accept a conn as the first argument and the value assigned to `tracking_fun_data` as the second. + - `tracking_fun`: A function that is called on successful responses, no matter if the request is cached or not. It should accept a conn as the first argument and the value assigned to `tracking_fun_data` as the second. Additionally, you can overwrite the TTL inside a controller action by assigning `cache_ttl` to the connection struct: diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex @@ -201,7 +201,7 @@ defmodule Pleroma.Web.Plugs.HTTPSecurityPlug do def warn_if_disabled do unless Config.get([:http_security, :enabled]) do - Logger.warn(" + Logger.warning(" .i;;;;i. iYcviii;vXY: .YXi .i1c. diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex @@ -23,14 +23,14 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do def call(conn, _) do with {:ok, token_str} <- fetch_token_str(conn) do with {:ok, user, user_token} <- fetch_user_and_token(token_str), - false <- Token.is_expired?(user_token) do + false <- Token.expired?(user_token) do conn |> assign(:token, user_token) |> assign(:user, user) else _ -> with {:ok, app, app_token} <- fetch_app_and_token(token_str), - false <- Token.is_expired?(app_token) do + false <- Token.expired?(app_token) do conn |> assign(:token, app_token) |> assign(:app, app) diff --git a/lib/pleroma/web/plugs/rate_limiter.ex b/lib/pleroma/web/plugs/rate_limiter.ex @@ -89,7 +89,7 @@ defmodule Pleroma.Web.Plugs.RateLimiter do end defp handle_disabled(conn) do - Logger.warn( + Logger.warning( "Rate limiter disabled due to forwarded IP not being found. Please ensure your reverse proxy is providing the X-Forwarded-For header or disable the RemoteIP plug/rate limiter." ) diff --git a/lib/pleroma/web/plugs/rate_limiter/supervisor.ex b/lib/pleroma/web/plugs/rate_limiter/supervisor.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.Plugs.RateLimiter.Supervisor do Pleroma.Web.Plugs.RateLimiter.LimiterSupervisor ] - opts = [strategy: :one_for_one, name: Pleroma.Web.Streamer.Supervisor] + opts = [strategy: :one_for_one] Supervisor.init(children, opts) end end diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex @@ -105,7 +105,7 @@ defmodule Pleroma.Web.Plugs.UploadedMedia do end defp get_media(conn, unknown, _, _) do - Logger.error("#{__MODULE__}: Unknown get startegy: #{inspect(unknown)}") + Logger.error("#{__MODULE__}: Unknown get strategy: #{inspect(unknown)}") conn |> send_resp(:internal_server_error, dgettext("errors", "Internal Error")) diff --git a/lib/pleroma/web/push.ex b/lib/pleroma/web/push.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.Push do def init do unless enabled() do - Logger.warn(""" + Logger.warning(""" VAPID key pair is not found. If you wish to enabled web push, please run mix web_push.gen.keypair diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex @@ -57,7 +57,7 @@ defmodule Pleroma.Web.Push.Impl do end def perform(_) do - Logger.warn("Unknown notification type") + Logger.warning("Unknown notification type") {:error, :unknown_type} end diff --git a/lib/pleroma/web/rich_media/backfill.ex b/lib/pleroma/web/rich_media/backfill.ex @@ -0,0 +1,101 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.RichMedia.Backfill do + alias Pleroma.Web.RichMedia.Card + alias Pleroma.Web.RichMedia.Parser + alias Pleroma.Web.RichMedia.Parser.TTL + alias Pleroma.Workers.RichMediaExpirationWorker + + require Logger + + @backfiller Pleroma.Config.get([__MODULE__, :provider], Pleroma.Web.RichMedia.Backfill.Task) + @cachex Pleroma.Config.get([:cachex, :provider], Cachex) + @max_attempts 3 + @retry 5_000 + + def start(%{url: url} = args) when is_binary(url) do + url_hash = Card.url_to_hash(url) + + args = + args + |> Map.put(:attempt, 1) + |> Map.put(:url_hash, url_hash) + + @backfiller.run(args) + end + + def run(%{url: url, url_hash: url_hash, attempt: attempt} = args) + when attempt <= @max_attempts do + case Parser.parse(url) do + {:ok, fields} -> + {:ok, card} = Card.create(url, fields) + + maybe_schedule_expiration(url, fields) + + if Map.has_key?(args, :activity_id) do + stream_update(args) + end + + warm_cache(url_hash, card) + + {:error, {:invalid_metadata, fields}} -> + Logger.debug("Rich media incomplete or invalid metadata for #{url}: #{inspect(fields)}") + negative_cache(url_hash) + + {:error, :body_too_large} -> + Logger.error("Rich media error for #{url}: :body_too_large") + negative_cache(url_hash) + + {:error, {:content_type, type}} -> + Logger.debug("Rich media error for #{url}: :content_type is #{type}") + negative_cache(url_hash) + + e -> + Logger.debug("Rich media error for #{url}: #{inspect(e)}") + + :timer.sleep(@retry * attempt) + + run(%{args | attempt: attempt + 1}) + end + end + + def run(%{url: url, url_hash: url_hash}) do + Logger.debug("Rich media failure for #{url}") + + negative_cache(url_hash, :timer.minutes(15)) + end + + defp maybe_schedule_expiration(url, fields) do + case TTL.process(fields, url) do + {:ok, ttl} when is_number(ttl) -> + timestamp = DateTime.from_unix!(ttl) + + RichMediaExpirationWorker.new(%{"url" => url}, scheduled_at: timestamp) + |> Oban.insert() + + _ -> + :ok + end + end + + defp stream_update(%{activity_id: activity_id}) do + Pleroma.Activity.get_by_id(activity_id) + |> Pleroma.Activity.normalize() + |> Pleroma.Web.ActivityPub.ActivityPub.stream_out() + end + + defp warm_cache(key, val), do: @cachex.put(:rich_media_cache, key, val) + defp negative_cache(key, ttl \\ nil), do: @cachex.put(:rich_media_cache, key, nil, ttl: ttl) +end + +defmodule Pleroma.Web.RichMedia.Backfill.Task do + alias Pleroma.Web.RichMedia.Backfill + + def run(args) do + Task.Supervisor.start_child(Pleroma.TaskSupervisor, Backfill, :run, [args], + name: {:global, {:rich_media, args.url_hash}} + ) + end +end diff --git a/lib/pleroma/web/rich_media/card.ex b/lib/pleroma/web/rich_media/card.ex @@ -0,0 +1,157 @@ +defmodule Pleroma.Web.RichMedia.Card do + use Ecto.Schema + import Ecto.Changeset + import Ecto.Query + + alias Pleroma.Activity + alias Pleroma.HTML + alias Pleroma.Object + alias Pleroma.Repo + alias Pleroma.Web.RichMedia.Backfill + alias Pleroma.Web.RichMedia.Parser + + @cachex Pleroma.Config.get([:cachex, :provider], Cachex) + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) + + @type t :: %__MODULE__{} + + schema "rich_media_card" do + field(:url_hash, :binary) + field(:fields, :map) + + timestamps() + end + + @doc false + def changeset(card, attrs) do + card + |> cast(attrs, [:url_hash, :fields]) + |> validate_required([:url_hash, :fields]) + |> unique_constraint(:url_hash) + end + + @spec create(String.t(), map()) :: {:ok, t()} + def create(url, fields) do + url_hash = url_to_hash(url) + + fields = Map.put_new(fields, "url", url) + + %__MODULE__{} + |> changeset(%{url_hash: url_hash, fields: fields}) + |> Repo.insert(on_conflict: {:replace, [:fields]}, conflict_target: :url_hash) + end + + @spec delete(String.t()) :: {:ok, Ecto.Schema.t()} | {:error, Ecto.Changeset.t()} | :ok + def delete(url) do + url_hash = url_to_hash(url) + @cachex.del(:rich_media_cache, url_hash) + + case get_by_url(url) do + %__MODULE__{} = card -> Repo.delete(card) + nil -> :ok + end + end + + @spec get_by_url(String.t() | nil) :: t() | nil | :error + def get_by_url(url) when is_binary(url) do + if @config_impl.get([:rich_media, :enabled]) do + url_hash = url_to_hash(url) + + @cachex.fetch!(:rich_media_cache, url_hash, fn _ -> + result = + __MODULE__ + |> where(url_hash: ^url_hash) + |> Repo.one() + + case result do + %__MODULE__{} = card -> {:commit, card} + _ -> {:ignore, nil} + end + end) + else + :error + end + end + + def get_by_url(nil), do: nil + + @spec get_or_backfill_by_url(String.t(), map()) :: t() | nil + def get_or_backfill_by_url(url, backfill_opts \\ %{}) do + case get_by_url(url) do + %__MODULE__{} = card -> + card + + nil -> + backfill_opts = Map.put(backfill_opts, :url, url) + + Backfill.start(backfill_opts) + + nil + + :error -> + nil + end + end + + @spec get_by_object(Object.t()) :: t() | nil | :error + def get_by_object(object) do + case HTML.extract_first_external_url_from_object(object) do + nil -> nil + url -> get_or_backfill_by_url(url) + end + end + + @spec get_by_activity(Activity.t()) :: t() | nil | :error + # Fake/Draft activity + def get_by_activity(%Activity{id: "pleroma:fakeid"} = activity) do + with %Object{} = object <- Object.normalize(activity, fetch: false), + url when not is_nil(url) <- HTML.extract_first_external_url_from_object(object) do + case get_by_url(url) do + # Cache hit + %__MODULE__{} = card -> + card + + # Cache miss, but fetch for rendering the Draft + _ -> + with {:ok, fields} <- Parser.parse(url), + {:ok, card} <- create(url, fields) do + card + else + _ -> nil + end + end + else + _ -> + nil + end + end + + def get_by_activity(activity) do + with %Object{} = object <- Object.normalize(activity, fetch: false), + {_, nil} <- {:cached, get_cached_url(object, activity.id)} do + nil + else + {:cached, url} -> + get_or_backfill_by_url(url, %{activity_id: activity.id}) + + _ -> + :error + end + end + + @spec url_to_hash(String.t()) :: String.t() + def url_to_hash(url) do + :crypto.hash(:sha256, url) |> Base.encode16(case: :lower) + end + + defp get_cached_url(object, activity_id) do + key = "URL|#{activity_id}" + + @cachex.fetch!(:scrubber_cache, key, fn _ -> + url = HTML.extract_first_external_url_from_object(object) + Activity.HTML.add_cache_key_for(activity_id, key) + + {:commit, url} + end) + end +end diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex @@ -3,86 +3,13 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Helpers do - alias Pleroma.Activity alias Pleroma.Config - alias Pleroma.HTML - alias Pleroma.Object - alias Pleroma.Web.RichMedia.Parser - - @options [ - pool: :media, - max_body: 2_000_000, - recv_timeout: 2_000 - ] - - @spec validate_page_url(URI.t() | binary()) :: :ok | :error - defp validate_page_url(page_url) when is_binary(page_url) do - validate_tld = Config.get([Pleroma.Formatter, :validate_tld]) - - page_url - |> Linkify.Parser.url?(validate_tld: validate_tld) - |> parse_uri(page_url) - end - - defp validate_page_url(%URI{host: host, scheme: "https", authority: authority}) - when is_binary(authority) do - cond do - host in Config.get([:rich_media, :ignore_hosts], []) -> - :error - - get_tld(host) in Config.get([:rich_media, :ignore_tld], []) -> - :error - - true -> - :ok - end - end - - defp validate_page_url(_), do: :error - - defp parse_uri(true, url) do - url - |> URI.parse() - |> validate_page_url - end - - defp parse_uri(_, _), do: :error - - defp get_tld(host) do - host - |> String.split(".") - |> Enum.reverse() - |> hd - end - - def fetch_data_for_object(object) do - with true <- Config.get([:rich_media, :enabled]), - {:ok, page_url} <- - HTML.extract_first_external_url_from_object(object), - :ok <- validate_page_url(page_url), - {:ok, rich_media} <- Parser.parse(page_url) do - %{page_url: page_url, rich_media: rich_media} - else - _ -> %{} - end - end - - def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do - with true <- Config.get([:rich_media, :enabled]), - %Object{} = object <- Object.normalize(activity, fetch: false) do - fetch_data_for_object(object) - else - _ -> %{} - end - end - - def fetch_data_for_activity(_), do: %{} def rich_media_get(url) do headers = [{"user-agent", Pleroma.Application.user_agent() <> "; Bot"}] head_check = - case Pleroma.HTTP.head(url, headers, @options) do + case Pleroma.HTTP.head(url, headers, http_options()) do # If the HEAD request didn't reach the server for whatever reason, # we assume the GET that comes right after won't either {:error, _} = e -> @@ -97,7 +24,7 @@ defmodule Pleroma.Web.RichMedia.Helpers do :ok end - with :ok <- head_check, do: Pleroma.HTTP.get(url, headers, @options) + with :ok <- head_check, do: Pleroma.HTTP.get(url, headers, http_options()) end defp check_content_type(headers) do @@ -113,12 +40,13 @@ defmodule Pleroma.Web.RichMedia.Helpers do end end - @max_body @options[:max_body] defp check_content_length(headers) do + max_body = Keyword.get(http_options(), :max_body) + case List.keyfind(headers, "content-length", 0) do {_, maybe_content_length} -> case Integer.parse(maybe_content_length) do - {content_length, ""} when content_length <= @max_body -> :ok + {content_length, ""} when content_length <= max_body -> :ok {_, ""} -> {:error, :body_too_large} _ -> :ok end @@ -127,4 +55,11 @@ defmodule Pleroma.Web.RichMedia.Helpers do :ok end end + + defp http_options do + [ + pool: :media, + max_body: Config.get([:rich_media, :max_body], 5_000_000) + ] + end end diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex @@ -5,137 +5,28 @@ defmodule Pleroma.Web.RichMedia.Parser do require Logger - @cachex Pleroma.Config.get([:cachex, :provider], Cachex) + @config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config) defp parsers do Pleroma.Config.get([:rich_media, :parsers]) end - def parse(nil), do: {:error, "No URL provided"} - - if Pleroma.Config.get(:env) == :test do - @spec parse(String.t()) :: {:ok, map()} | {:error, any()} - def parse(url), do: parse_url(url) - else - @spec parse(String.t()) :: {:ok, map()} | {:error, any()} - def parse(url) do - with {:ok, data} <- get_cached_or_parse(url), - {:ok, _} <- set_ttl_based_on_image(data, url) do - {:ok, data} - end - end - - defp get_cached_or_parse(url) do - case @cachex.fetch(:rich_media_cache, url, fn -> - case parse_url(url) do - {:ok, _} = res -> - {:commit, res} - - {:error, reason} = e -> - # Unfortunately we have to log errors here, instead of doing that - # along with ttl setting at the bottom. Otherwise we can get log spam - # if more than one process was waiting for the rich media card - # while it was generated. Ideally we would set ttl here as well, - # so we don't override it number_of_waiters_on_generation - # times, but one, obviously, can't set ttl for not-yet-created entry - # and Cachex doesn't support returning ttl from the fetch callback. - log_error(url, reason) - {:commit, e} - end - end) do - {action, res} when action in [:commit, :ok] -> - case res do - {:ok, _data} = res -> - res - - {:error, reason} = e -> - if action == :commit, do: set_error_ttl(url, reason) - e - end - - {:error, e} -> - {:error, {:cachex_error, e}} - end - end - - defp set_error_ttl(_url, :body_too_large), do: :ok - defp set_error_ttl(_url, {:content_type, _}), do: :ok - - # The TTL is not set for the errors above, since they are unlikely to change - # with time - - defp set_error_ttl(url, _reason) do - ttl = Pleroma.Config.get([:rich_media, :failure_backoff], 60_000) - @cachex.expire(:rich_media_cache, url, ttl) - :ok - end - - defp log_error(url, {:invalid_metadata, data}) do - Logger.debug(fn -> "Incomplete or invalid metadata for #{url}: #{inspect(data)}" end) - end - - defp log_error(url, reason) do - Logger.warn(fn -> "Rich media error for #{url}: #{inspect(reason)}" end) - end - end - - @doc """ - Set the rich media cache based on the expiration time of image. - - Adopt behaviour `Pleroma.Web.RichMedia.Parser.TTL` - - ## Example - - defmodule MyModule do - @behaviour Pleroma.Web.RichMedia.Parser.TTL - def ttl(data, url) do - image_url = Map.get(data, :image) - # do some parsing in the url and get the ttl of the image - # and return ttl is unix time - parse_ttl_from_url(image_url) - end - end + def parse(nil), do: nil - Define the module in the config - - config :pleroma, :rich_media, - ttl_setters: [MyModule] - """ - @spec set_ttl_based_on_image(map(), String.t()) :: - {:ok, Integer.t() | :noop} | {:error, :no_key} - def set_ttl_based_on_image(data, url) do - case get_ttl_from_image(data, url) do - {:ok, ttl} when is_number(ttl) -> - ttl = ttl * 1000 - - case @cachex.expire_at(:rich_media_cache, url, ttl) do - {:ok, true} -> {:ok, ttl} - {:ok, false} -> {:error, :no_key} - end - - _ -> - {:ok, :noop} + @spec parse(String.t()) :: {:ok, map()} | {:error, any()} + def parse(url) do + with :ok <- validate_page_url(url), + {:ok, data} <- parse_url(url) do + data = Map.put(data, "url", url) + {:ok, data} end end - defp get_ttl_from_image(data, url) do - [:rich_media, :ttl_setters] - |> Pleroma.Config.get() - |> Enum.reduce({:ok, nil}, fn - module, {:ok, _ttl} -> - module.ttl(data, url) - - _, error -> - error - end) - end - - def parse_url(url) do + defp parse_url(url) do with {:ok, %Tesla.Env{body: html}} <- Pleroma.Web.RichMedia.Helpers.rich_media_get(url), {:ok, html} <- Floki.parse_document(html) do html |> maybe_parse() - |> Map.put("url", url) |> clean_parsed_data() |> check_parsed_data() end @@ -166,4 +57,46 @@ defmodule Pleroma.Web.RichMedia.Parser do end) |> Map.new() end + + @spec validate_page_url(URI.t() | binary()) :: :ok | :error + defp validate_page_url(page_url) when is_binary(page_url) do + validate_tld = @config_impl.get([Pleroma.Formatter, :validate_tld]) + + page_url + |> Linkify.Parser.url?(validate_tld: validate_tld) + |> parse_uri(page_url) + end + + defp validate_page_url(%URI{host: host, scheme: "https"}) do + cond do + Linkify.Parser.ip?(host) -> + :error + + host in @config_impl.get([:rich_media, :ignore_hosts], []) -> + :error + + get_tld(host) in @config_impl.get([:rich_media, :ignore_tld], []) -> + :error + + true -> + :ok + end + end + + defp validate_page_url(_), do: :error + + defp parse_uri(true, url) do + url + |> URI.parse() + |> validate_page_url + end + + defp parse_uri(_, _), do: :error + + defp get_tld(host) do + host + |> String.split(".") + |> Enum.reverse() + |> hd + end end diff --git a/lib/pleroma/web/rich_media/parser/ttl.ex b/lib/pleroma/web/rich_media/parser/ttl.ex @@ -3,5 +3,18 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser.TTL do - @callback ttl(Map.t(), String.t()) :: Integer.t() | nil + @callback ttl(map(), String.t()) :: integer() | nil + + @spec process(map(), String.t()) :: {:ok, integer() | nil} + def process(data, url) do + [:rich_media, :ttl_setters] + |> Pleroma.Config.get() + |> Enum.reduce_while({:ok, nil}, fn + module, acc -> + case module.ttl(data, url) do + ttl when is_number(ttl) -> {:halt, {:ok, ttl}} + _ -> {:cont, acc} + end + end) + end end diff --git a/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex b/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex @@ -7,25 +7,26 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do @impl true def ttl(data, _url) do - image = Map.get(data, :image) + image = Map.get(data, "image") - if is_aws_signed_url(image) do + if aws_signed_url?(image) do image |> parse_query_params() |> format_query_params() |> get_expiration_timestamp() else - {:error, "Not aws signed url #{inspect(image)}"} + nil end end - defp is_aws_signed_url(image) when is_binary(image) and image != "" do + defp aws_signed_url?(image) when is_binary(image) and image != "" do %URI{host: host, query: query} = URI.parse(image) - String.contains?(host, "amazonaws.com") and String.contains?(query, "X-Amz-Expires") + is_binary(host) and String.contains?(host, "amazonaws.com") and + String.contains?(query, "X-Amz-Expires") end - defp is_aws_signed_url(_), do: nil + defp aws_signed_url?(_), do: nil defp parse_query_params(image) do %URI{query: query} = URI.parse(image) @@ -45,6 +46,6 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do |> Map.get("X-Amz-Date") |> Timex.parse("{ISO:Basic:Z}") - {:ok, Timex.to_unix(date) + String.to_integer(Map.get(params, "X-Amz-Expires"))} + Timex.to_unix(date) + String.to_integer(Map.get(params, "X-Amz-Expires")) end end diff --git a/lib/pleroma/web/rich_media/parser/ttl/opengraph.ex b/lib/pleroma/web/rich_media/parser/ttl/opengraph.ex @@ -0,0 +1,20 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.RichMedia.Parser.TTL.Opengraph do + @behaviour Pleroma.Web.RichMedia.Parser.TTL + + @impl true + def ttl(%{"ttl" => ttl_string}, _url) when is_binary(ttl_string) do + try do + ttl = String.to_integer(ttl_string) + now = DateTime.utc_now() |> DateTime.to_unix() + now + ttl + rescue + _ -> nil + end + end + + def ttl(_, _), do: nil +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex @@ -182,7 +182,7 @@ defmodule Pleroma.Web.Router do end pipeline :well_known do - plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"]) + plug(:accepts, ["json", "jrd", "jrd+json", "xml", "xrd+xml"]) end pipeline :config do @@ -292,6 +292,11 @@ defmodule Pleroma.Web.Router do post("/frontends/install", FrontendController, :install) post("/backups", AdminAPIController, :create_backup) + + get("/rules", RuleController, :index) + post("/rules", RuleController, :create) + patch("/rules/:id", RuleController, :update) + delete("/rules/:id", RuleController, :delete) end # AdminAPI: admins and mods (staff) can perform these actions (if privileged by role) @@ -471,6 +476,8 @@ defmodule Pleroma.Web.Router do get("/main/ostatus", UtilController, :show_subscribe_form) get("/ostatus_subscribe", RemoteFollowController, :follow) post("/ostatus_subscribe", RemoteFollowController, :do_follow) + + get("/authorize_interaction", RemoteFollowController, :authorize_interaction) end scope "/api/pleroma", Pleroma.Web.TwitterAPI do @@ -479,7 +486,7 @@ defmodule Pleroma.Web.Router do post("/change_email", UtilController, :change_email) post("/change_password", UtilController, :change_password) post("/delete_account", UtilController, :delete_account) - put("/notification_settings", UtilController, :update_notificaton_settings) + put("/notification_settings", UtilController, :update_notification_settings) post("/disable_account", UtilController, :disable_account) post("/move_account", UtilController, :move_account) @@ -578,6 +585,11 @@ defmodule Pleroma.Web.Router do get("/backups", BackupController, :index) post("/backups", BackupController, :create) + + get("/bookmark_folders", BookmarkFolderController, :index) + post("/bookmark_folders", BookmarkFolderController, :create) + patch("/bookmark_folders/:id", BookmarkFolderController, :update) + delete("/bookmark_folders/:id", BookmarkFolderController, :delete) end scope [] do @@ -626,6 +638,7 @@ defmodule Pleroma.Web.Router do patch("/accounts/update_credentials", AccountController, :update_credentials) get("/accounts/relationships", AccountController, :relationships) + get("/accounts/familiar_followers", AccountController, :familiar_followers) get("/accounts/:id/lists", AccountController, :lists) get("/accounts/:id/identity_proofs", AccountController, :identity_proofs) get("/endorsements", AccountController, :endorsements) @@ -757,11 +770,11 @@ defmodule Pleroma.Web.Router do get("/instance", InstanceController, :show) get("/instance/peers", InstanceController, :peers) + get("/instance/rules", InstanceController, :rules) get("/statuses", StatusController, :index) get("/statuses/:id", StatusController, :show) get("/statuses/:id/context", StatusController, :context) - get("/statuses/:id/card", StatusController, :card) get("/statuses/:id/favourited_by", StatusController, :favourited_by) get("/statuses/:id/reblogged_by", StatusController, :reblogged_by) get("/statuses/:id/history", StatusController, :show_history) @@ -781,11 +794,14 @@ defmodule Pleroma.Web.Router do scope "/api/v2", Pleroma.Web.MastodonAPI do pipe_through(:api) + get("/search", SearchController, :search2) post("/media", MediaController, :create2) get("/suggestions", SuggestionController, :index2) + + get("/instance", InstanceController, :show2) end scope "/api", Pleroma.Web do diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex @@ -13,7 +13,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do alias Pleroma.Web.Metadata alias Pleroma.Web.Router.Helpers - plug(:put_layout, :static_fe) plug(:assign_id) @page_keys ["max_id", "min_id", "limit", "since_id", "order"] @@ -22,7 +21,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do 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 <- Visibility.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 url = Helpers.url(conn) <> conn.request_path diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex @@ -20,7 +20,6 @@ defmodule Pleroma.Web.Streamer do alias Pleroma.Web.Plugs.OAuthScopesPlug alias Pleroma.Web.StreamerView - @mix_env Mix.env() @registry Pleroma.Web.StreamerRegistry def registry, do: @registry @@ -34,7 +33,7 @@ defmodule Pleroma.Web.Streamer do stream :: String.t(), User.t() | nil, Token.t() | nil, - Map.t() | nil + map() | nil ) :: {:ok, topic :: String.t()} | {:error, :bad_topic} | {:error, :unauthorized} def get_topic_and_add_socket(stream, user, oauth_token, params \\ %{}) do @@ -60,7 +59,7 @@ defmodule Pleroma.Web.Streamer do end @doc "Expand and authorizes a stream" - @spec get_topic(stream :: String.t() | nil, User.t() | nil, Token.t() | nil, Map.t()) :: + @spec get_topic(stream :: String.t() | nil, User.t() | nil, Token.t() | nil, map()) :: {:ok, topic :: String.t() | nil} | {:error, :bad_topic} def get_topic(stream, user, oauth_token, params \\ %{}) @@ -246,7 +245,7 @@ defmodule Pleroma.Web.Streamer do defp do_stream("list", item) do # filter the recipient list if the activity is not public, see #270. recipient_lists = - case Visibility.is_public?(item) do + case Visibility.public?(item) do true -> Pleroma.List.get_lists_from_activity(item) @@ -396,25 +395,20 @@ defmodule Pleroma.Web.Streamer do end end - # In test environement, only return true if the registry is started. - # In benchmark environment, returns false. - # In any other environment, always returns true. - cond do - @mix_env == :test -> - def should_env_send? do - case Process.whereis(@registry) do - nil -> - false + # In dev/prod the streamer registry is expected to be started, so return true + # In test it is possible to have the registry started for a test so it will check + # In benchmark it will never find the process alive and return false + def should_env_send? do + if Application.get_env(:pleroma, Pleroma.Application)[:streamer_registry] do + true + else + case Process.whereis(@registry) do + nil -> + false - pid -> - Process.alive?(pid) - end + pid -> + Process.alive?(pid) end - - @mix_env == :benchmark -> - def should_env_send?, do: false - - true -> - def should_env_send?, do: true + end end end diff --git a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex @@ -13,7 +13,7 @@ <div class="account-header__avatar" style="background-image: url('<%= Pleroma.User.avatar_url(@user) %>')"></div> <div class="account-header__meta"> <div class="account-header__display-name"><%= @user.name %></div> - <div class="account-header__nickname">@<%= @user.nickname %>@<%= Pleroma.User.get_host(@user) %></div> + <div class="account-header__nickname">@<%= Pleroma.User.full_nickname(@user.nickname) %></div> </div> </div> <% end %> diff --git a/lib/pleroma/web/twitter_api/controllers/password_controller.ex b/lib/pleroma/web/twitter_api/controllers/password_controller.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordController do @moduledoc """ - The module containts functions for reset password. + The module contains functions for password reset. """ use Pleroma.Web, :controller diff --git a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex b/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex @@ -29,7 +29,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do # GET /ostatus_subscribe # def follow(%{assigns: %{user: user}} = conn, %{"acct" => acct}) do - case is_status?(acct) do + case status?(acct) do true -> follow_status(conn, user, acct) _ -> follow_account(conn, user, acct) end @@ -57,7 +57,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do defp follow_template(%User{} = _user), do: "follow.html" defp follow_template(_), do: "follow_login.html" - defp is_status?(acct) do + defp status?(acct) do case Fetcher.fetch_and_contain_remote_object_from_id(acct) do {:ok, %{"type" => type}} when type in @status_types -> true @@ -121,6 +121,13 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do render(conn, "followed.html", %{error: "Insufficient permissions: follow | write:follows."}) end + # GET /authorize_interaction + # + def authorize_interaction(conn, %{"uri" => uri}) do + conn + |> redirect(to: Routes.remote_follow_path(conn, :follow, %{acct: uri})) + end + defp handle_follow_error(conn, {:mfa_token, followee, _} = _) do render(conn, "follow_login.html", %{error: "Wrong username or password", followee: followee}) end diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -18,7 +18,8 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do alias Pleroma.Web.WebFinger plug( - Pleroma.Web.ApiSpec.CastAndValidate + Pleroma.Web.ApiSpec.CastAndValidate, + [replace_params: false] when action != :remote_subscribe and action != :show_subscribe_form ) @@ -35,7 +36,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do :change_email, :change_password, :delete_account, - :update_notificaton_settings, + :update_notification_settings, :disable_account, :move_account, :add_alias, @@ -150,7 +151,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def remote_interaction(%{body_params: %{ap_id: ap_id, profile: profile}} = conn, _params) do + def remote_interaction( + %{private: %{open_api_spex: %{body_params: %{ap_id: ap_id, profile: profile}}}} = conn, + _params + ) do with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile) do conn |> json(%{url: String.replace(template, "{uri}", ap_id)}) @@ -181,13 +185,16 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do json(conn, emoji) end - def update_notificaton_settings(%{assigns: %{user: user}} = conn, params) do + def update_notification_settings(%{assigns: %{user: user}} = conn, params) do with {:ok, _} <- User.update_notification_settings(user, params) do json(conn, %{status: "success"}) end end - def change_password(%{assigns: %{user: user}, body_params: body_params} = conn, %{}) do + def change_password( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: body_params}}} = conn, + _ + ) do case CommonAPI.Utils.confirm_current_password(user, body_params.password) do {:ok, user} -> with {:ok, _user} <- @@ -210,7 +217,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def change_email(%{assigns: %{user: user}, body_params: body_params} = conn, %{}) do + def change_email( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: body_params}}} = conn, + _ + ) do case CommonAPI.Utils.confirm_current_password(user, body_params.password) do {:ok, user} -> with {:ok, _user} <- User.change_email(user, body_params.email) do @@ -229,7 +239,13 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def delete_account(%{assigns: %{user: user}, body_params: body_params} = conn, params) do + def delete_account( + %{ + assigns: %{user: user}, + private: %{open_api_spex: %{body_params: body_params, params: params}} + } = conn, + _ + ) do # This endpoint can accept a query param or JSON body for backwards-compatibility. # Submitting a JSON body is recommended, so passwords don't end up in server logs. password = body_params[:password] || params[:password] || "" @@ -244,7 +260,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def disable_account(%{assigns: %{user: user}} = conn, params) do + def disable_account( + %{assigns: %{user: user}, private: %{open_api_spex: %{params: params}}} = conn, + _ + ) do case CommonAPI.Utils.confirm_current_password(user, params[:password]) do {:ok, user} -> User.set_activation_async(user, false) @@ -255,7 +274,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def move_account(%{assigns: %{user: user}, body_params: body_params} = conn, %{}) do + def move_account( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: body_params}}} = conn, + _ + ) do case CommonAPI.Utils.confirm_current_password(user, body_params.password) do {:ok, user} -> with {:ok, target_user} <- find_or_fetch_user_by_nickname(body_params.target_account), @@ -276,7 +298,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def add_alias(%{assigns: %{user: user}, body_params: body_params} = conn, _) do + def add_alias( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: body_params}}} = conn, + _ + ) do with {:ok, alias_user} <- find_user_by_nickname(body_params.alias), {:ok, _user} <- user |> User.add_alias(alias_user) do json(conn, %{status: "success"}) @@ -291,7 +316,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def delete_alias(%{assigns: %{user: user}, body_params: body_params} = conn, _) do + def delete_alias( + %{assigns: %{user: user}, private: %{open_api_spex: %{body_params: body_params}}} = conn, + _ + ) do with {:ok, alias_user} <- find_user_by_nickname(body_params.alias), {:ok, _user} <- user |> User.delete_alias(alias_user) do json(conn, %{status: "success"}) @@ -306,7 +334,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do end end - def list_aliases(%{assigns: %{user: user}} = conn, %{}) do + def list_aliases(%{assigns: %{user: user}} = conn, _) do alias_nicks = user |> User.alias_users() @@ -319,7 +347,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do user = User.get_cached_by_nickname(nickname) if user == nil do - {:not_found, nil} + {:error, :not_found} else {:ok, user} end diff --git a/lib/pleroma/web/web_finger.ex b/lib/pleroma/web/web_finger.ex @@ -5,8 +5,8 @@ defmodule Pleroma.Web.WebFinger do alias Pleroma.HTTP alias Pleroma.User + alias Pleroma.Web.ActivityPub.Publisher alias Pleroma.Web.Endpoint - alias Pleroma.Web.Federator.Publisher alias Pleroma.Web.XML alias Pleroma.XmlBuilder require Jason @@ -70,7 +70,7 @@ defmodule Pleroma.Web.WebFinger do def represent_user(user, "JSON") do %{ - "subject" => "acct:#{user.nickname}@#{domain()}", + "subject" => "acct:#{user.nickname}@#{host()}", "aliases" => gather_aliases(user), "links" => gather_links(user) } @@ -90,13 +90,13 @@ defmodule Pleroma.Web.WebFinger do :XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"}, [ - {:Subject, "acct:#{user.nickname}@#{domain()}"} + {:Subject, "acct:#{user.nickname}@#{host()}"} ] ++ aliases ++ links } |> XmlBuilder.to_doc() end - defp domain do + def host do Pleroma.Config.get([__MODULE__, :domain]) || Pleroma.Web.Endpoint.host() end @@ -163,7 +163,7 @@ defmodule Pleroma.Web.WebFinger do get_template_from_xml(body) else error -> - Logger.warn("Can't find LRDD template in #{inspect(meta_url)}: #{inspect(error)}") + Logger.warning("Can't find LRDD template in #{inspect(meta_url)}: #{inspect(error)}") {:error, :lrdd_not_found} end end diff --git a/lib/pleroma/web/web_finger/web_finger_controller.ex b/lib/pleroma/web/web_finger/web_finger_controller.ex @@ -30,7 +30,7 @@ defmodule Pleroma.Web.WebFinger.WebFingerController do end def webfinger(%{assigns: %{format: format}} = conn, %{"resource" => resource}) - when format in ["json", "jrd+json"] do + when format in ["jrd", "json", "jrd+json"] do with {:ok, response} <- WebFinger.webfinger(resource, "JSON") do json(conn, response) else diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Workers.BackgroundWorker do def perform(%Job{args: %{"op" => op, "user_id" => user_id, "identifiers" => identifiers}}) when op in ["blocks_import", "follow_import", "mutes_import"] do user = User.get_cached_by_id(user_id) - {:ok, User.Import.perform(String.to_atom(op), user, identifiers)} + {:ok, User.Import.perform(String.to_existing_atom(op), user, identifiers)} end def perform(%Job{ @@ -40,6 +40,11 @@ defmodule Pleroma.Workers.BackgroundWorker do Pleroma.FollowingRelationship.move_following(origin, target) end + def perform(%Job{args: %{"op" => "verify_fields_links", "user_id" => user_id}}) do + user = User.get_by_id(user_id) + User.perform(:verify_fields_links, user) + end + def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do Instance.perform(:delete_instance, host) end diff --git a/lib/pleroma/workers/publisher_worker.ex b/lib/pleroma/workers/publisher_worker.ex @@ -18,9 +18,9 @@ defmodule Pleroma.Workers.PublisherWorker do Federator.perform(:publish, activity) end - def perform(%Job{args: %{"op" => "publish_one", "module" => module_name, "params" => params}}) do + def perform(%Job{args: %{"op" => "publish_one", "params" => params}}) do params = Map.new(params, fn {k, v} -> {String.to_atom(k), v} end) - Federator.perform(:publish_one, String.to_atom(module_name), params) + Federator.perform(:publish_one, params) end @impl Oban.Worker diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex @@ -3,24 +3,57 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.ReceiverWorker do + alias Pleroma.Signature + alias Pleroma.User alias Pleroma.Web.Federator use Pleroma.Workers.WorkerHelper, queue: "federator_incoming" @impl Oban.Worker + + def perform(%Job{ + args: %{"op" => "incoming_ap_doc", "req_headers" => req_headers, "params" => params} + }) do + # Oban's serialization converts our tuple headers to lists. + # Revert it for the signature validation. + req_headers = Enum.into(req_headers, [], &List.to_tuple(&1)) + + conn_data = %{params: params, req_headers: req_headers} + + with {:ok, %User{} = _actor} <- User.get_or_fetch_by_ap_id(conn_data.params["actor"]), + {:ok, _public_key} <- Signature.refetch_public_key(conn_data), + {:signature, true} <- {:signature, HTTPSignatures.validate_conn(conn_data)}, + {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do + {:ok, res} + else + e -> process_errors(e) + end + end + def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do with {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do {:ok, res} else + e -> process_errors(e) + end + end + + @impl Oban.Worker + def timeout(%_{args: %{"timeout" => timeout}}), do: timeout + + def timeout(_job), do: :timer.seconds(5) + + defp process_errors(errors) do + case errors do {:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed} {:error, :already_present} -> {:cancel, :already_present} {:error, {:validate_object, reason}} -> {:cancel, reason} {:error, {:error, {:validate, reason}}} -> {:cancel, reason} {:error, {:reject, reason}} -> {:cancel, reason} - e -> e + {:signature, false} -> {:cancel, :invalid_signature} + {:error, {:error, reason = "Object has been deleted"}} -> {:cancel, reason} + {:error, _} = e -> e + e -> {:error, e} end end - - @impl Oban.Worker - def timeout(_job), do: :timer.seconds(5) end diff --git a/lib/pleroma/workers/remote_fetcher_worker.ex b/lib/pleroma/workers/remote_fetcher_worker.ex @@ -9,7 +9,25 @@ defmodule Pleroma.Workers.RemoteFetcherWorker do @impl Oban.Worker def perform(%Job{args: %{"op" => "fetch_remote", "id" => id} = args}) do - {:ok, _object} = Fetcher.fetch_object_from_id(id, depth: args["depth"]) + case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do + {:ok, _object} -> + :ok + + {:error, :forbidden} -> + {:discard, :forbidden} + + {:error, :not_found} -> + {:discard, :not_found} + + {:error, :allowed_depth} -> + {:discard, :allowed_depth} + + {:error, _} = e -> + e + + e -> + {:error, e} + end end @impl Oban.Worker diff --git a/lib/pleroma/workers/rich_media_expiration_worker.ex b/lib/pleroma/workers/rich_media_expiration_worker.ex @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.RichMediaExpirationWorker do + alias Pleroma.Web.RichMedia.Card + + use Oban.Worker, + queue: :rich_media_expiration + + @impl Oban.Worker + def perform(%Job{args: %{"url" => url} = _args}) do + Card.delete(url) + end +end diff --git a/mix.exs b/mix.exs @@ -4,12 +4,13 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.6.50"), + version: version("2.6.52"), elixir: "~> 1.11", elixirc_paths: elixirc_paths(Mix.env()), compilers: Mix.compilers(), elixirc_options: [warnings_as_errors: warnings_as_errors()], xref: [exclude: [:eldap]], + dialyzer: [plt_add_apps: [:mix, :eldap]], start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps(), @@ -136,13 +137,13 @@ defmodule Pleroma.Mixfile do {:calendar, "~> 1.0"}, {:cachex, "~> 3.2"}, {:poison, "~> 3.0", override: true}, - {:tesla, "~> 1.4.0", override: true}, + {:tesla, "~> 1.8.0"}, {:castore, "~> 0.1"}, {:cowlib, "~> 2.9", override: true}, {:gun, "~> 2.0.0-rc.1", override: true}, - {:finch, "~> 0.10.0"}, + {:finch, "~> 0.15"}, {:jason, "~> 1.2"}, - {:mogrify, "~> 0.9.1"}, + {:mogrify, "~> 0.8.0"}, {:ex_aws, "~> 2.1.6"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.7.2"}, @@ -156,25 +157,14 @@ defmodule Pleroma.Mixfile do {:phoenix_swoosh, "~> 1.1"}, {:gen_smtp, "~> 0.13"}, {:ex_syslogger, "~> 1.4"}, - {:floki, "~> 0.27"}, + {:floki, "~> 0.35"}, {:timex, "~> 3.6"}, {:ueberauth, "~> 0.4"}, {:linkify, "~> 0.5.3"}, - {:http_signatures, "~> 0.1.1"}, + {:http_signatures, "~> 0.1.2"}, {:telemetry, "~> 1.0.0", override: true}, {:poolboy, "~> 1.5"}, - {:prometheus, "~> 4.6"}, - {:prometheus_ex, - git: "https://github.com/lanodan/prometheus.ex.git", - branch: "fix/elixir-1.14", - 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"}, + {:prom_ex, "~> 1.9"}, {:recon, "~> 2.5"}, {:joken, "~> 2.0"}, {:pot, "~> 1.0"}, @@ -190,11 +180,15 @@ defmodule Pleroma.Mixfile do ref: "90f6ce7672f70f56708792a98d98bd05176c9176"}, {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, - {:eblurhash, - git: "https://github.com/zotonic/eblurhash.git", - ref: "bc37ceb426ef021ee9927fb249bb93f7059194ab"}, {:open_api_spex, "~> 3.16"}, {:ecto_psql_extras, "~> 0.6"}, + {:vix, "~> 0.26.0"}, + {:elixir_make, "~> 0.7.7", override: true}, + {:blurhash, "~> 0.1.0", hex: :rinpatch_blurhash}, + {:exile, + git: "https://github.com/akash-akya/exile.git", + ref: "be87c33b02a7c3c5d22d2ece01fbd462355b28ef"}, + {:bandit, "~> 1.2"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, @@ -205,7 +199,8 @@ defmodule Pleroma.Mixfile do {:hackney, "~> 1.18.0", override: true}, {:mox, "~> 1.0", only: :test}, {:websockex, "~> 0.4.3", only: :test}, - {:benchee, "~> 1.0", only: :benchmark} + {:benchee, "~> 1.0", only: :benchmark}, + {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false} ] ++ oauth_deps() end diff --git a/mix.lock b/mix.lock @@ -1,17 +1,20 @@ %{ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, + "bandit": {:hex, :bandit, "1.2.1", "aa485b4ac175065b8e0fb5864ddd5dd7b50d52336b36f61c82f484c3718b3d15", [:mix], [{:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "27393e590a407f1b7d51c5fee4737f139fe224a30449ce25061eac70f763896b"}, "base62": {:hex, :base62, "1.2.2", "85c6627eb609317b70f555294045895ffaaeb1758666ab9ef9ca38865b11e629", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "d41336bda8eaa5be197f1e4592400513ee60518e5b9f4dcf38f4b4dae6f377bb"}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, - "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, - "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, + "benchee": {:hex, :benchee, "1.3.0", "f64e3b64ad3563fa9838146ddefb2d2f94cf5b473bdfd63f5ca4d0657bf96694", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "34f4294068c11b2bd2ebf2c59aac9c7da26ffa0068afdf3419f1b176e16c5f81"}, + "blurhash": {:hex, :rinpatch_blurhash, "0.1.0", "01a888b0f5f1f382ab52e4396f01831cbe8486ea5828604c90f4dac533d39a4b", [:mix], [{:mogrify, "~> 0.8.0", [hex: :mogrify, repo: "hexpm", optional: true]}], "hexpm", "19911a5dcbb0acb9710169a72f702bce6cb048822b12de566ccd82b2cc42b907"}, + "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "90f6ce7672f70f56708792a98d98bd05176c9176", [ref: "90f6ce7672f70f56708792a98d98bd05176c9176"]}, "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, - "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, + "cc_precompiler": {:hex, :cc_precompiler, "0.1.9", "e8d3364f310da6ce6463c3dd20cf90ae7bbecbf6c5203b98bf9b48035592649b", [:mix], [{:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "9dcab3d0f3038621f1601f13539e7a9ee99843862e66ad62827b0c42b2f58a54"}, + "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, - "comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, + "comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"}, "concurrent_limiter": {:hex, :concurrent_limiter, "0.1.1", "43ae1dc23edda1ab03dd66febc739c4ff710d047bb4d735754909f9a474ae01c", [:mix], [{:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "53968ff238c0fbb4d7ed76ddb1af0be6f3b2f77909f6796e249e737c505a16eb"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cors_plug": {:hex, :cors_plug, "2.0.3", "316f806d10316e6d10f09473f19052d20ba0a0ce2a1d910ddf57d663dac402ae", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ee4ae1418e6ce117fc42c2ba3e6cbdca4e95ecd2fe59a05ec6884ca16d469aea"}, @@ -19,91 +22,95 @@ "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, - "credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"}, + "credo": {:hex, :credo, "1.7.3", "05bb11eaf2f2b8db370ecaa6a6bda2ec49b2acd5e0418bc106b73b07128c0436", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "35ea675a094c934c22fb1dca3696f3c31f2728ae6ef5a53b5d648c11180a4535"}, "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, + "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, "earmark": {:hex, :earmark, "1.4.22", "ea3e45c6359446dc308be0a64ce82a03260d973de7d0625a762e6d352ff57958", [:mix], [{:earmark_parser, "~> 1.4.23", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "1caf5145665a42fd76d5317286b0c171861fb1c04f86ab103dde76868814fdfb"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, "eblurhash": {:git, "https://github.com/zotonic/eblurhash.git", "bc37ceb426ef021ee9927fb249bb93f7059194ab", [ref: "bc37ceb426ef021ee9927fb249bb93f7059194ab"]}, - "ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"}, + "ecto": {:hex, :ecto, "3.11.1", "4b4972b717e7ca83d30121b12998f5fcdc62ba0ed4f20fd390f16f3270d85c3e", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebd3d3772cd0dfcd8d772659e41ed527c28b2a8bde4b00fe03e0463da0f1983b"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, - "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.14", "7a20cfe913b0476542b43870e67386461258734896035e3f284039fd18bd4c4c", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "22f5f98592dd597db9416fcef00effae0787669fdcb6faf447e982b553798e98"}, - "ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"}, + "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.15", "0fc29dbae0e444a29bd6abeee4cf3c4c037e692a272478a234a1cc765077dbb1", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "b6127f3a5c6fc3d84895e4768cc7c199f22b48b67d6c99b13fbf4a374e73f039"}, + "ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, - "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, + "elixir_make": {:hex, :elixir_make, "0.7.8", "505026f266552ee5aabca0b9f9c229cbb496c689537c9f922f3eb5431157efc7", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "7a71945b913d37ea89b06966e1342c85cfe549b15e6d6d081e8081c493062c07"}, + "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "esbuild": {:hex, :esbuild, "0.5.0", "d5bb08ff049d7880ee3609ed5c4b864bd2f46445ea40b16b4acead724fb4c4a3", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "f183a0b332d963c4cfaf585477695ea59eef9a6f2204fdd0efa00e099694ffe5"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, - "ex_aws_s3": {:hex, :ex_aws_s3, "2.4.0", "ce8decb6b523381812798396bc0e3aaa62282e1b40520125d1f4eff4abdff0f4", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "85dda6e27754d94582869d39cba3241d9ea60b6aa4167f9c88e309dc687e56bb"}, + "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.3", "422468e5c3e1a4da5298e66c3468b465cfd354b842e512cb1f6fbbe4e2f5bdaf", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "4f09dd372cc386550e484808c5ac5027766c8d0cd8271ccc578b82ee6ef4f3b8"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"}, + "ex_doc": {:hex, :ex_doc, "0.31.1", "8a2355ac42b1cc7b2379da9e40243f2670143721dd50748bf6c3b1184dae2089", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3178c3a407c557d8343479e1ff117a96fd31bafe52a039079593fb0524ef61b0"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, - "expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"}, - "fast_html": {:hex, :fast_html, "2.0.5", "c61760340606c1077ff1f196f17834056cb1dd3d5cb92a9f2cabf28bc6221c3c", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "605f4f4829443c14127694ebabb681778712ceecb4470ec32aa31012330e6506"}, + "exile": {:git, "https://github.com/akash-akya/exile.git", "be87c33b02a7c3c5d22d2ece01fbd462355b28ef", [ref: "be87c33b02a7c3c5d22d2ece01fbd462355b28ef"]}, + "expo": {:hex, :expo, "0.5.1", "249e826a897cac48f591deba863b26c16682b43711dd15ee86b92f25eafd96d9", [:mix], [], "hexpm", "68a4233b0658a3d12ee00d27d37d856b1ba48607e7ce20fd376958d0ba6ce92b"}, + "fast_html": {:hex, :fast_html, "2.2.0", "6c5ef1be087a4ed613b0379c13f815c4d11742b36b67bb52cee7859847c84520", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "064c4f23b4a6168f9187dac8984b056f2c531bb0787f559fd6a8b34b38aefbae"}, "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, - "finch": {:hex, :finch, "0.10.2", "9ad27d68270d879f73f26604bb2e573d40f29bf0e907064a9a337f90a16a0312", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dd8b11b282072cec2ef30852283949c248bd5d2820c88d8acc89402b81db7550"}, + "finch": {:hex, :finch, "0.18.0", "944ac7d34d0bd2ac8998f79f7a811b21d87d911e77a786bc5810adb75632ada4", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "69f5045b042e531e53edc2574f15e25e735b522c37e2ddb766e15b979e03aa65"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"}, + "floki": {:hex, :floki, "0.35.2", "87f8c75ed8654b9635b311774308b2760b47e9a579dabf2e4d5f1e1d42c39e0b", [:mix], [], "hexpm", "6b05289a8e9eac475f644f09c2e4ba7e19201fd002b89c28c1293e7bd16773d9"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gettext": {:hex, :gettext, "0.22.2", "6bfca374de34ecc913a28ba391ca184d88d77810a3e427afa8454a71a51341ac", [:mix], [{:expo, "~> 0.4.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "8a2d389673aea82d7eae387e6a2ccc12660610080ae7beb19452cfdc1ec30f60"}, + "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"}, "gun": {:hex, :gun, "2.0.1", "160a9a5394800fcba41bc7e6d421295cf9a7894c2252c0678244948e3336ad73", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "a10bc8d6096b9502205022334f719cc9a08d9adcfbfc0dbee9ef31b56274a20b"}, - "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, + "hackney": {:hex, :hackney, "1.18.2", "d7ff544ddae5e1cb49e9cf7fa4e356d7f41b283989a1c304bfc47a8cc1cf966f", [:rebar3], [{:certifi, "~>2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "af94d5c9f97857db257090a4a10e5426ecb6f4918aa5cc666798566ae14b65fd"}, "hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, - "http_signatures": {:hex, :http_signatures, "0.1.1", "ca7ebc1b61542b163644c8c3b1f0e0f41037d35f2395940d3c6c7deceab41fd8", [:mix], [], "hexpm", "cc3b8a007322cc7b624c0c15eec49ee58ac977254ff529a3c482f681465942a3"}, + "http_signatures": {:hex, :http_signatures, "0.1.2", "ed1cc7043abcf5bb4f30d68fb7bad9d618ec1a45c4ff6c023664e78b67d9c406", [:mix], [], "hexpm", "f08aa9ac121829dae109d608d83c84b940ef2f183ae50f2dd1e9a8bc619d8be7"}, "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, - "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, + "inet_cidr": {:hex, :inet_cidr, "1.0.8", "d26bb7bdbdf21ae401ead2092bf2bb4bf57fe44a62f5eaa5025280720ace8a40", [:mix], [], "hexpm", "d5b26da66603bb56c933c65214c72152f0de9a6ea53618b56d63302a68f6a90e"}, "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"}, "joken": {:hex, :joken, "2.6.0", "b9dd9b6d52e3e6fcb6c65e151ad38bf4bc286382b5b6f97079c47ade6b1bcc6a", [:mix], [{:jose, "~> 1.11.5", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5a95b05a71cd0b54abd35378aeb1d487a23a52c324fa7efdffc512b655b5aaa7"}, - "jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"}, - "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, + "jose": {:hex, :jose, "1.11.6", "613fda82552128aa6fb804682e3a616f4bc15565a048dabd05b1ebd5827ed965", [:mix, :rebar3], [], "hexpm", "6275cb75504f9c1e60eeacb771adfeee4905a9e182103aa59b53fed651ff9738"}, + "jumper": {:hex, :jumper, "1.0.2", "68cdcd84472a00ac596b4e6459a41b3062d4427cbd4f1e8c8793c5b54f1406a7", [:mix], [], "hexpm", "9b7782409021e01ab3c08270e26f36eb62976a38c1aa64b2eaf6348422f165e1"}, "linkify": {:hex, :linkify, "0.5.3", "5f8143d8f61f5ff08d3aeeff47ef6509492b4948d8f08007fbf66e4d2246a7f2", [:mix], [], "hexpm", "3ef35a1377d47c25506e07c1c005ea9d38d700699d92ee92825f024434258177"}, "majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"}, "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, - "makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"}, + "makeup_erlang": {:hex, :makeup_erlang, "0.1.3", "d684f4bac8690e70b06eb52dad65d26de2eefa44cd19d64a8095e1417df7c8fd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "b78dc853d2e670ff6390b605d807263bf606da3c82be37f9d7f68635bd886fc9"}, "meck": {:hex, :meck, "0.9.2", "85ccbab053f1db86c7ca240e9fc718170ee5bda03810a6292b5306bf31bae5f5", [:rebar3], [], "hexpm", "81344f561357dc40a8344afa53767c32669153355b626ea9fcbc8da6b3045826"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, + "mint": {:hex, :mint, "1.5.2", "4805e059f96028948870d23d7783613b7e6b0e2fb4e98d720383852a760067fd", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "d77d9e9ce4eb35941907f1d3df38d8f750c357865353e21d335bdcdf6d892a02"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.8", "7046a306b71db2488ef54395eeb74df0a7f335a7caca4a3d3875d1fc81c884dd", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "7fa82364c97617d79bb7d15571193fc0c4fe5afd0c932cef09426b3ee6fe2022"}, - "mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"}, - "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, - "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, + "mogrify": {:hex, :mogrify, "0.8.0", "3506f3ca3f7b95a155f3b4ef803b5db176f5a0633723e3fe85e0d6399e3b11c8", [:mix], [], "hexpm", "2278d245f07056ea3b586e98801e933695147066fa4cf563f552c1b4f0ff8ad9"}, + "mox": {:hex, :mox, "1.1.0", "0f5e399649ce9ab7602f72e718305c0f9cdc351190f72844599545e4996af73c", [:mix], [], "hexpm", "d44474c50be02d5b72131070281a5d3895c0e7a95c780e90bc0cfe712f633a13"}, + "nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "2.13.6", "a0cb1bce3bd393770512231fb5a3695fa19fd3af10d7575bf73f837aee7abf43", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c1c5eb16f377b3cbbf2ea14be24d20e3d91285af9d1ac86260b7c2af5464887"}, - "open_api_spex": {:hex, :open_api_spex, "3.17.3", "ada8e352eb786050dd639db2439d3316e92f3798eb2abd051f55bb9af825b37e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "165db21a85ca83cffc8e7c8890f35b354eddda8255de7404a2848ed652b9f0fe"}, - "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, + "octo_fetch": {:hex, :octo_fetch, "0.4.0", "074b5ecbc08be10b05b27e9db08bc20a3060142769436242702931c418695b19", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "cf8be6f40cd519d7000bb4e84adcf661c32e59369ca2827c4e20042eda7a7fc6"}, + "open_api_spex": {:hex, :open_api_spex, "3.18.2", "8c855e83bfe8bf81603d919d6e892541eafece3720f34d1700b58024dadde247", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0 or ~> 4.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "aa3e6dcfc0ad6a02596b2172662da21c9dd848dac145ea9e603f54e3d81b8d2b"}, + "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, "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.7.10", "02189140a61b2ce85bb633a9b6fd02dff705a5f1596869547aeb2b2b95edd729", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "cf784932e010fd736d656d7fead6a584a4498efefe5b8227e9f383bf15bb79d0"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.2", "b21bd01fdeffcfe2fab49e4942aa938b6d3e89e93a480d4aee58085560a0bc0d", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "70242edd4601d50b69273b057ecf7b684644c19ee750989fd555625ae4ce8f5d"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.3", "86e9878f833829c3f66da03d75254c155d91d72a201eb56ae83482328dc7ca93", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d36c401206f3011fefd63d04e8ef626ec8791975d9d107f9a0817d426f61ac07"}, "phoenix_html": {:hex, :phoenix_html, "3.3.3", "380b8fb45912b5638d2f1d925a3771b4516b9a78587249cabe394e0a5d579dc9", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "923ebe6fec6e2e3b3e569dfbdc6560de932cd54b000ada0208b5f45024bdd76c"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.19.5", "6e730595e8e9b8c5da230a814e557768828fd8dfeeb90377d2d8dbb52d4ec00a", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b2eaa0dd3cfb9bd7fb949b88217df9f25aed915e986a28ad5c8a0d054e7ca9d3"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, - "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.0", "a544d83fde4a767efb78f45404a74c9e37b2a9c5ea3339692e65a6966731f935", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e88d117251e89a16b92222415a6d87b99a96747ddf674fc5c7631de734811dba"}, - "phoenix_template": {:hex, :phoenix_template, "1.0.3", "32de561eefcefa951aead30a1f94f1b5f0379bc9e340bb5c667f65f1edfa4326", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "16f4b6588a4152f3cc057b9d0c0ba7e82ee23afa65543da535313ad8d25d8e2c"}, + "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.1", "b74ccaa8046fbc388a62134360ee7d9742d5a8ae74063f34eb050279de7a99e1", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "4000eeba3f9d7d1a6bf56d2bd56733d5cadf41a7f0d8ffe5bb67e7d667e204a2"}, + "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.3", "4d32c4817fce933693741deeb99ef1392619f942633dde834a5163124813aad3", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "cd34049af41be2c627df99cd4eaa71fc52a328c0c3d8e7d4aa28f880c30e7f64"}, - "plug": {:hex, :plug, "1.15.1", "b7efd81c1a1286f13efb3f769de343236bd8b7d23b4a9f40d3002fc39ad8f74c", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "459497bd94d041d98d948054ec6c0b76feacd28eec38b219ca04c0de13c79d30"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, + "plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.6.2", "753611b23b29231fb916b0cdd96028084b12aff57bfd7b71781bd04b1dbeb5c9", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "951ed2433df22f4c97b85fdb145d4cee561f36b74854d64c06d896d7cd2921a7"}, "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"}, "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"}, - "postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"}, + "postgrex": {:hex, :postgrex, "0.17.4", "5777781f80f53b7c431a001c8dad83ee167bcebcf3a793e3906efff680ab62b3", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "6458f7d5b70652bc81c3ea759f91736c16a31be000f306d3c64bcdfe9a18b3cc"}, "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, - "prom_ex": {:hex, :prom_ex, "1.7.1", "39331ee3fe6f9a8587d8208bf9274a253bb80281700e127dd18786cda5e08c37", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.10.2", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5.1", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.1", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "4c978872b88a929833925a0f4d0561824804c671fdd04581e765509ed0a6ed08"}, + "prom_ex": {:hex, :prom_ex, "1.9.0", "63e6dda6c05cdeec1f26c48443dcc38ffd2118b3665ae8d2bd0e5b79f2aea03e", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.15", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.3", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5 or ~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "01f3d4f69ec93068219e686cc65e58a29c42bea5429a8ff4e2121f19db178ee6"}, "prometheus": {:hex, :prometheus, "4.10.0", "792adbf0130ff61b5fa8826f013772af24b6e57b984445c8d602c8a0355704a1", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "2a99bb6dce85e238c7236fde6b0064f9834dc420ddbd962aac4ea2a3c3d59384"}, "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": {:git, "https://github.com/lanodan/prometheus.ex.git", "31f7fbe4b71b79ba27efc2a5085746c4011ceb8f", [branch: "fix/elixir-1.14"]}, @@ -112,26 +119,30 @@ "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"}, "quantile_estimator": {:hex, :quantile_estimator, "0.2.1", "ef50a361f11b5f26b5f16d0696e46a9e4661756492c981f7b2229ef42ff1cd15", [:rebar3], [], "hexpm", "282a8a323ca2a845c9e6f787d166348f776c1d4a41ede63046d72d422e3da946"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "recon": {:hex, :recon, "2.5.3", "739107b9050ea683c30e96de050bc59248fd27ec147696f79a8797ff9fa17153", [:mix, :rebar3], [], "hexpm", "6c6683f46fd4a1dfd98404b9f78dcabc7fcd8826613a89dcb984727a8c3099d7"}, + "recon": {:hex, :recon, "2.5.4", "05dd52a119ee4059fa9daa1ab7ce81bc7a8161a2f12e9d42e9d551ffd2ba901c", [:mix, :rebar3], [], "hexpm", "e9ab01ac7fc8572e41eb59385efeb3fb0ff5bf02103816535bacaedf327d0263"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, + "rustler": {:hex, :rustler, "0.30.0", "cefc49922132b072853fa9b0ca4dc2ffcb452f68fb73b779042b02d545e097fb", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "9ef1abb6a7dda35c47cfc649e6a5a61663af6cf842a55814a554a84607dee389"}, "sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, - "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, + "sweet_xml": {:hex, :sweet_xml, "0.7.4", "a8b7e1ce7ecd775c7e8a65d501bc2cd933bff3a9c41ab763f5105688ef485d08", [:mix], [], "hexpm", "e7c4b0bdbf460c928234951def54fe87edf1a170f6896675443279e2dbeba167"}, "swoosh": {:hex, :swoosh, "1.10.3", "32f1531ee3fe4e82da8175c597bf3692938f8152eb981e0cbf57107b6c5924c1", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8b7167d93047bac6e1a1c367bf7d899cf2e4fea0592ee04a70673548ef6091b9"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, - "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, + "table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"}, "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, - "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, - "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.0.2", "c98b1c580de637bfeac00db41b9fb91fb4c3548ee3d512a8ed7299172312eaf3", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "48351a0d56f80e38c997b44232b1043e0a081670d16766eee920e6254175b730"}, + "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"}, + "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.2.0", "b583c3f18508f5c5561b674d16cf5d9afd2ea3c04505b7d92baaeac93c1b8260", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "9cba950e1c4733468efbe3f821841f34ac05d28e7af7798622f88ecdbbe63ea3"}, "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, - "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"}, + "tesla": {:hex, :tesla, "1.8.0", "d511a4f5c5e42538d97eef7c40ec4f3e44effdc5068206f42ed859e09e51d1fd", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, ">= 1.0.0", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.2", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "10501f360cd926a309501287470372af1a6e1cbed0f43949203a4c13300bc79f"}, + "thousand_island": {:hex, :thousand_island, "1.3.2", "bc27f9afba6e1a676dd36507d42e429935a142cf5ee69b8e3f90bff1383943cd", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0e085b93012cd1057b378fce40cbfbf381ff6d957a382bfdd5eca1a98eec2535"}, "timex": {:hex, :timex, "3.7.7", "3ed093cae596a410759104d878ad7b38e78b7c2151c6190340835515d4a46b8a", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "0ec4b09f25fe311321f9fc04144a7e3affe48eb29481d7a5583849b6c4dfa0a7"}, + "toml": {:hex, :toml, "0.7.0", "fbcd773caa937d0c7a02c301a1feea25612720ac3fa1ccb8bfd9d30d822911de", [:mix], [], "hexpm", "0690246a2478c1defd100b0c9b89b4ea280a22be9a7b313a8a058a2408a2fa70"}, "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.5", "69f1ee029a49afa04ad77801febaf69385f3d3e3d1e4b56b9469025677b89a28", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "55519aa2a99e5d2095c1e61cc74c9be69688f8ab75c27da724eb8279ff402a5a"}, - "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, + "ueberauth": {:hex, :ueberauth, "0.10.7", "5a31cbe11e7ce5c7484d745dc9e1f11948e89662f8510d03c616de03df581ebd", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "0bccf73e2ffd6337971340832947ba232877aa8122dba4c95be9f729c8987377"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, - "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, + "unsafe": {:hex, :unsafe, "1.0.2", "23c6be12f6c1605364801f4b47007c0c159497d0446ad378b5cf05f1855c0581", [:mix], [], "hexpm", "b485231683c3ab01a9cd44cb4a79f152c6f3bb87358439c6f68791b85c2df675"}, + "vix": {:hex, :vix, "0.26.0", "027f10b6969b759318be84bd0bd8c88af877445e4e41cf96a0460392cea5399c", [:make, :mix], [{:castore, "~> 1.0 or ~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.2 or ~> 0.1.4", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.8 or ~> 0.7.3", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "71b0a79ae7f199cacfc8e679b0e4ba25ee47dc02e182c5b9097efb29fbe14efd"}, "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"}, diff --git a/priv/gettext/ja/LC_MESSAGES/errors.po b/priv/gettext/ja/LC_MESSAGES/errors.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-18 09:07+0000\n" -"PO-Revision-Date: 2021-09-19 09:45+0000\n" -"Last-Translator: Ryo Ueno <r.ueno.nfive@gmail.com>\n" +"PO-Revision-Date: 2024-02-16 11:49+0000\n" +"Last-Translator: SyoBoN <syobon@syobon.net>\n" "Language-Team: Japanese <https://translate.pleroma.social/projects/pleroma/" -"pleroma/ja/>\n" +"pleroma-backend-domain-errors/ja/>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.6.2\n" +"X-Generator: Weblate 4.13.1\n" ## This file is a PO Template file. ## @@ -25,11 +25,11 @@ msgstr "" ## effect: edit them in PO (`.po`) files instead. ## From Ecto.Changeset.cast/4 msgid "can't be blank" -msgstr "" +msgstr "空にすることはできません" ## From Ecto.Changeset.unique_constraint/3 msgid "has already been taken" -msgstr "" +msgstr "すでに使用されています" ## From Ecto.Changeset.put_change/3 msgid "is invalid" @@ -37,7 +37,7 @@ msgstr "" ## From Ecto.Changeset.validate_format/3 msgid "has invalid format" -msgstr "" +msgstr "書式が正しくありません" ## From Ecto.Changeset.validate_subset/3 msgid "has an invalid entry" @@ -45,7 +45,7 @@ msgstr "" ## From Ecto.Changeset.validate_exclusion/3 msgid "is reserved" -msgstr "" +msgstr "予約されています" ## From Ecto.Changeset.validate_confirmation/3 msgid "does not match confirmation" @@ -61,23 +61,23 @@ msgstr "" ## From Ecto.Changeset.validate_length/3 msgid "should be %{count} character(s)" msgid_plural "should be %{count} character(s)" -msgstr[0] "" +msgstr[0] "%{count}文字である必要があります" msgid "should have %{count} item(s)" msgid_plural "should have %{count} item(s)" -msgstr[0] "" +msgstr[0] "%{count}個の要素を含む必要があります" msgid "should be at least %{count} character(s)" msgid_plural "should be at least %{count} character(s)" -msgstr[0] "" +msgstr[0] "%{count}文字以上である必要があります" msgid "should have at least %{count} item(s)" msgid_plural "should have at least %{count} item(s)" -msgstr[0] "" +msgstr[0] "%{count}個以上の要素を含む必要があります" msgid "should be at most %{count} character(s)" msgid_plural "should be at most %{count} character(s)" -msgstr[0] "" +msgstr[0] "%{count}文字以下である必要があります" msgid "should have at most %{count} item(s)" msgid_plural "should have at most %{count} item(s)" @@ -102,7 +102,7 @@ msgstr "%{number}でなければなりません" #: lib/pleroma/web/common_api/common_api.ex:505 #, elixir-format msgid "Account not found" -msgstr "アカウントがありません" +msgstr "アカウントが見つかりません" #: lib/pleroma/web/common_api/common_api.ex:339 #, elixir-format @@ -226,7 +226,7 @@ msgstr "" #: lib/pleroma/web/common_api/utils.ex:414 #, elixir-format msgid "Invalid password." -msgstr "" +msgstr "パスワードが間違っています。" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:220 #, elixir-format @@ -236,7 +236,7 @@ msgstr "" #: lib/pleroma/web/twitter_api/twitter_api.ex:109 #, elixir-format msgid "Kocaptcha service unavailable" -msgstr "" +msgstr "Kocaptchaが利用できません" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:112 #, elixir-format @@ -259,12 +259,12 @@ msgstr "" #: lib/pleroma/web/feed/user_controller.ex:71 lib/pleroma/web/ostatus/ostatus_controller.ex:143 #, elixir-format msgid "Not found" -msgstr "" +msgstr "見つかりません" #: lib/pleroma/web/common_api/common_api.ex:331 #, elixir-format msgid "Poll's author can't vote" -msgstr "" +msgstr "作成者は投票できません" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 @@ -284,17 +284,17 @@ msgstr "" #: lib/pleroma/web/common_api/activity_draft.ex:107 #, elixir-format msgid "The message visibility must be direct" -msgstr "" +msgstr "公開範囲は「ダイレクト」でなければいけません" #: lib/pleroma/web/common_api/utils.ex:573 #, elixir-format msgid "The status is over the character limit" -msgstr "" +msgstr "文字数制限を超過しています" #: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31 #, elixir-format msgid "This resource requires authentication." -msgstr "" +msgstr "認証が必要です。" #: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 #, elixir-format @@ -304,7 +304,7 @@ msgstr "" #: lib/pleroma/web/common_api/common_api.ex:356 #, elixir-format msgid "Too many choices" -msgstr "" +msgstr "選択肢が多すぎます" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:443 #, elixir-format @@ -320,7 +320,7 @@ msgstr "" #: lib/pleroma/web/oauth/oauth_controller.ex:308 #, elixir-format msgid "Your account is currently disabled" -msgstr "" +msgstr "あなたのアカウントは無効化されています" #: lib/pleroma/web/oauth/oauth_controller.ex:183 #: lib/pleroma/web/oauth/oauth_controller.ex:331 @@ -331,23 +331,23 @@ msgstr "" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:390 #, elixir-format msgid "can't read inbox of %{nickname} as %{as_nickname}" -msgstr "" +msgstr "%{nickname}のinboxを%{as_nickname}として閲覧することはできません" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:473 #, elixir-format msgid "can't update outbox of %{nickname} as %{as_nickname}" -msgstr "" +msgstr "%{nickname}のoutboxを%{as_nickname}として更新することはできません" #: lib/pleroma/web/common_api/common_api.ex:471 #, elixir-format msgid "conversation is already muted" -msgstr "" +msgstr "この会話はミュート済みです" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:314 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:492 #, elixir-format msgid "error" -msgstr "" +msgstr "エラー" #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:32 #, elixir-format @@ -357,7 +357,7 @@ msgstr "" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:62 #, elixir-format msgid "not found" -msgstr "" +msgstr "見つかりません" #: lib/pleroma/web/oauth/oauth_controller.ex:394 #, elixir-format @@ -382,28 +382,28 @@ msgstr "" #: lib/pleroma/web/oauth/oauth_controller.ex:410 #, elixir-format msgid "Failed to authenticate: %{message}." -msgstr "" +msgstr "認証に失敗しました: %{message}。" #: lib/pleroma/web/oauth/oauth_controller.ex:441 #, elixir-format msgid "Failed to set up user account." -msgstr "" +msgstr "ユーザーアカウントの設定に失敗しました。" #: lib/pleroma/plugs/oauth_scopes_plug.ex:38 #, elixir-format msgid "Insufficient permissions: %{permissions}." -msgstr "" +msgstr "%{permissions}の権限が必要です。" #: lib/pleroma/plugs/uploaded_media.ex:104 #, elixir-format msgid "Internal Error" -msgstr "" +msgstr "内部エラー" #: lib/pleroma/web/oauth/fallback_controller.ex:22 #: lib/pleroma/web/oauth/fallback_controller.ex:29 #, elixir-format msgid "Invalid Username/Password" -msgstr "" +msgstr "ユーザー名/パスワードが間違っています" #: lib/pleroma/web/twitter_api/twitter_api.ex:118 #, elixir-format @@ -423,7 +423,7 @@ msgstr "" #: lib/pleroma/web/oauth/fallback_controller.ex:14 #, elixir-format msgid "Unknown error, please check the details and try again." -msgstr "" +msgstr "不明なエラーです。詳細を確認し、再度試行してください。" #: lib/pleroma/web/oauth/oauth_controller.ex:119 #: lib/pleroma/web/oauth/oauth_controller.ex:158 @@ -449,17 +449,17 @@ msgstr "" #: lib/pleroma/web/twitter_api/twitter_api.ex:103 #, elixir-format msgid "CAPTCHA Error" -msgstr "" +msgstr "CAPTCHAエラー" #: lib/pleroma/web/common_api/common_api.ex:290 #, elixir-format msgid "Could not add reaction emoji" -msgstr "" +msgstr "リアクションを追加できません" #: lib/pleroma/web/common_api/common_api.ex:301 #, elixir-format msgid "Could not remove reaction emoji" -msgstr "" +msgstr "リアクションを解除できません" #: lib/pleroma/web/twitter_api/twitter_api.ex:129 #, elixir-format @@ -469,7 +469,7 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92 #, elixir-format msgid "List not found" -msgstr "" +msgstr "リストが見つかりません" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:123 #, elixir-format @@ -480,7 +480,7 @@ msgstr "" #: lib/pleroma/web/oauth/oauth_controller.ex:321 #, elixir-format msgid "Password reset is required" -msgstr "" +msgstr "パスワードのリセットが必要です" #: lib/pleroma/tests/auth_test_controller.ex:9 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 @@ -522,7 +522,7 @@ msgstr "" #: lib/pleroma/plugs/ensure_authenticated_plug.ex:28 #, elixir-format msgid "Two-factor authentication enabled, you must use a access token." -msgstr "" +msgstr "二段階認証が有効になっています。アクセストークンが必要です。" #: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:210 #, elixir-format @@ -552,7 +552,7 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 #, elixir-format msgid "Web push subscription is disabled on this Pleroma instance" -msgstr "" +msgstr "このPleromaインスタンスではプッシュ通知が利用できません" #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:451 #, elixir-format @@ -562,19 +562,19 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:126 #, elixir-format msgid "authorization required for timeline view" -msgstr "" +msgstr "タイムラインを閲覧するには認証が必要です" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 #, elixir-format msgid "Access denied" -msgstr "" +msgstr "アクセスが拒否されました" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:282 #, elixir-format msgid "This API requires an authenticated user" -msgstr "" +msgstr "このAPIを利用するには認証が必要です" #: lib/pleroma/plugs/user_is_admin_plug.ex:21 #, elixir-format msgid "User is not an admin." -msgstr "" +msgstr "ユーザーは管理者ではありません。" diff --git a/priv/repo/migrations/20180516144508_add_trigram_extension.exs b/priv/repo/migrations/20180516144508_add_trigram_extension.exs @@ -7,13 +7,13 @@ defmodule Pleroma.Repo.Migrations.AddTrigramExtension do require Logger def up do - Logger.warn("ATTENTION ATTENTION ATTENTION\n") + Logger.warning("ATTENTION ATTENTION ATTENTION\n") - Logger.warn( + Logger.warning( "This will try to create the pg_trgm extension on your database. If your database user does NOT have the necessary rights, you will have to do it manually and re-run the migrations.\nYou can probably do this by running the following:\n" ) - Logger.warn( + Logger.warning( "sudo -u postgres psql pleroma_dev -c \"create extension if not exists pg_trgm\"\n" ) diff --git a/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs b/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs @@ -26,7 +26,7 @@ defmodule Pleroma.Repo.Migrations.AddFollowingAddressFromSourceData do |> Pleroma.Repo.update() user -> - Logger.warn("User #{user.id} / #{user.nickname} does not seem to have source_data") + Logger.warning("User #{user.id} / #{user.nickname} does not seem to have source_data") end) end end diff --git a/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs b/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs @@ -63,7 +63,7 @@ defmodule Pleroma.Repo.Migrations.DataMigrationPopulateUserRelationships do ON CONFLICT (source_id, relationship_type, target_id) DO NOTHING """) else - _ -> Logger.warn("Unresolved #{field} reference: (#{source_uuid}, #{target_id})") + _ -> Logger.warning("Unresolved #{field} reference: (#{source_uuid}, #{target_id})") end end end diff --git a/priv/repo/migrations/20200811143147_ap_id_not_null.exs b/priv/repo/migrations/20200811143147_ap_id_not_null.exs @@ -8,7 +8,7 @@ defmodule Pleroma.Repo.Migrations.ApIdNotNull do require Logger def up do - Logger.warn( + Logger.warning( "If this migration fails please open an issue at https://git.pleroma.social/pleroma/pleroma/-/issues/new \n" ) diff --git a/priv/repo/migrations/20220203224011_create_rules.exs b/priv/repo/migrations/20220203224011_create_rules.exs @@ -0,0 +1,12 @@ +defmodule Pleroma.Repo.Migrations.CreateRules do + use Ecto.Migration + + def change do + create_if_not_exists table(:rules) do + add(:priority, :integer, default: 0, null: false) + add(:text, :text, null: false) + + timestamps() + end + end +end diff --git a/priv/repo/migrations/20220527134341_add_quote_url_index_to_objects.exs b/priv/repo/migrations/20220527134341_add_quote_url_index_to_objects.exs @@ -4,8 +4,14 @@ defmodule Pleroma.Repo.Migrations.AddQuoteUrlIndexToObjects do use Ecto.Migration + @disable_ddl_transaction true def change do - create_if_not_exists(index(:objects, ["(data->'quoteUrl')"], name: :objects_quote_url)) + create_if_not_exists( + index(:objects, ["(data->'quoteUrl')"], + name: :objects_quote_url, + concurrently: true + ) + ) end end diff --git a/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs b/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs @@ -2,12 +2,20 @@ # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only +defmodule User do + use Ecto.Schema + + schema "users" do + field(:keys, :string) + field(:local, :boolean, default: true) + end +end + defmodule Pleroma.Repo.Migrations.GenerateUnsetUserKeys do use Ecto.Migration import Ecto.Query alias Pleroma.Keys alias Pleroma.Repo - alias Pleroma.User def change do query = diff --git a/priv/repo/migrations/20240207035927_create_rich_media_card.exs b/priv/repo/migrations/20240207035927_create_rich_media_card.exs @@ -0,0 +1,14 @@ +defmodule Pleroma.Repo.Migrations.CreateRichMediaCard do + use Ecto.Migration + + def change do + create table(:rich_media_card) do + add(:url_hash, :bytea) + add(:fields, :map) + + timestamps() + end + + create(unique_index(:rich_media_card, [:url_hash])) + end +end diff --git a/priv/repo/migrations/20240223165000_create_bookmark_folders.exs b/priv/repo/migrations/20240223165000_create_bookmark_folders.exs @@ -0,0 +1,27 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.CreateBookmarkFolders do + use Ecto.Migration + + def change do + create_if_not_exists table(:bookmark_folders, primary_key: false) do + add(:id, :uuid, primary_key: true) + add(:name, :string, null: false) + add(:emoji, :string) + add(:user_id, references(:users, type: :uuid, on_delete: :delete_all)) + + timestamps() + end + + alter table(:bookmarks) do + add_if_not_exists( + :folder_id, + references(:bookmark_folders, type: :uuid, on_delete: :nilify_all) + ) + end + + create_if_not_exists(unique_index(:bookmark_folders, [:user_id, :name])) + end +end diff --git a/priv/repo/migrations/20240406000000_add_hint_to_rules.exs b/priv/repo/migrations/20240406000000_add_hint_to_rules.exs @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddHintToRules do + use Ecto.Migration + + def change do + alter table(:rules) do + add_if_not_exists(:hint, :text) + end + end +end diff --git a/priv/static/index.html b/priv/static/index.html @@ -1 +1 @@ -<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><script defer=defer src=/static/js/3733.7060d1e6bca813125a0c.js></script><script defer=defer src=/static/js/app.7c4b412b26221a7c8572.js></script><link href=/static/css/app.c18a2c80794a1b699a61.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><div id=modal></div><div id=popovers></body></html> -\ No newline at end of file +<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><link rel=icon type=image/png href=/favicon.png><!--server-generated-meta--><script defer=defer src=/static/js/3733.7060d1e6bca813125a0c.js></script><script defer=defer src=/static/js/app.d42ab31e1d50a3265a82.js></script><link href=/static/css/app.a7f63ee9107a77599942.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><div id=modal></div><div id=popovers></body></html> +\ No newline at end of file diff --git a/priv/static/schemas/litepub-0.1.jsonld b/priv/static/schemas/litepub-0.1.jsonld @@ -2,6 +2,7 @@ "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", + "https://purl.archive.org/socialweb/webfinger", { "Emoji": "toot:Emoji", "Hashtag": "as:Hashtag", @@ -40,7 +41,9 @@ "@type": "@id" }, "vcard": "http://www.w3.org/2006/vcard/ns#", - "formerRepresentations": "litepub:formerRepresentations" + "formerRepresentations": "litepub:formerRepresentations", + "sm": "http://smithereen.software/ns#", + "nonAnonymous": "sm:nonAnonymous" } ] } diff --git a/priv/static/static/css/8859.d26a3b0841a7beb8fd4a.css b/priv/static/static/css/8859.d26a3b0841a7beb8fd4a.css @@ -0,0 +1,2 @@ +.ModifiedIndicator{display:inline-block;position:relative}.modified-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.ProfileSettingIndicator{display:inline-block;position:relative}.profilesetting-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.DraftButtons{display:inline-block;position:relative}.DraftButtons .button-default{margin-left:.5em}.draft-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.AttachmentSetting .attachment{display:block;height:15em;margin-bottom:.5em;width:100%}.AttachmentSetting .attachment-input{display:flex;flex-direction:column;margin-left:1em;width:20em}.AttachmentSetting.-compact .attachment-input{align-items:flex-end;flex-direction:row}.AttachmentSetting.-compact .attachment{align-self:center;display:block;flex:0;height:4em;margin-bottom:0;min-width:4em;order:0}.AttachmentSetting.-compact .control-field{margin-left:.5em;min-width:12em;order:1}.AttachmentSetting.-compact .control-upload{min-width:12em;order:2;padding:0 .5em}.AttachmentSetting .controls{margin-bottom:.5em}.AttachmentSetting .controls button,.AttachmentSetting .controls input{width:100%}.frontends-tab .cards-list{padding:0}.frontends-tab .relative{position:relative}.frontends-tab .overlay{background:var(--bg);bottom:0;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:2}.frontends-tab dd{word-wrap:nowrap;max-width:10em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div,.settings_tab-switcher .setting-item>label{display:block;margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child,.settings_tab-switcher .setting-item>label:last-child{margin-bottom:0}.settings_tab-switcher .setting-item .select-multiple{display:flex}.settings_tab-switcher .setting-item .select-multiple .option-list{margin:0;padding-left:.5em}.settings_tab-switcher .setting-item:last-child{border-bottom:none;margin-bottom:1em;padding-bottom:0}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{height:100px;max-width:100%;width:100%}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable svg{color:var(--cRed,red);color:red} +/*# sourceMappingURL=8859.d26a3b0841a7beb8fd4a.css.map*/ +\ No newline at end of file diff --git a/priv/static/static/css/8859.d26a3b0841a7beb8fd4a.css.map b/priv/static/static/css/8859.d26a3b0841a7beb8fd4a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/8859.d26a3b0841a7beb8fd4a.css","mappings":"AACA,mBACE,qBACA,kBAGF,kBACE,gBACA,eACA,kBCRF,yBACE,qBACA,kBAGF,wBACE,gBACA,eACA,kBCRF,cACE,qBACA,kBAEA,8BACE,iBAIJ,eACE,gBACA,eACA,kBCXA,+BACE,cAEA,YACA,mBAFA,UAEA,CAGF,qCAEE,aACA,sBAFA,gBAGA,WAIA,8CAEE,qBADA,kBACA,CAGF,wCAME,kBAHA,cAFA,OAIA,WAEA,eAAc,CAHd,cAFA,OAKA,CAGF,2CAGE,iBADA,eADA,OAEA,CAGF,4CAEE,eADA,QAEA,eAIJ,6BACE,mBAEA,uEAEE,WCjDJ,2BACE,UAGF,yBACE,kBAGF,wBAEE,qBAKA,SACA,OAHA,WAJA,kBAQA,OAAM,CAHN,MAFA,SAKA,CAGF,kBAEE,iBAGA,eADA,kBAHA,uBAEA,kBAEA,CCxBJ,uBACE,YAEA,qCACE,0CACA,qBACA,qBAEA,oFAEE,cACA,mBAEA,0GACE,gBAIJ,sDACE,aAEA,mEACE,SACA,kBAIJ,gDACE,mBAEA,kBADA,gBACA,CAGF,4CACE,eAGF,8CAGE,aADA,eADA,UAEA,CAGF,wGAEE,sBACA,SCnCW","sources":["webpack://pleroma_fe/./src/components/settings_modal/helpers/modified_indicator.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/profile_setting_indicator.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/draft_buttons.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.scss","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.scss","webpack://pleroma_fe/./src/_variables.scss"],"sourcesContent":["\n.ModifiedIndicator {\n display: inline-block;\n position: relative;\n}\n\n.modified-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.ProfileSettingIndicator {\n display: inline-block;\n position: relative;\n}\n\n.profilesetting-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.DraftButtons {\n display: inline-block;\n position: relative;\n\n .button-default {\n margin-left: 0.5em;\n }\n}\n\n.draft-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.AttachmentSetting {\n .attachment {\n display: block;\n width: 100%;\n height: 15em;\n margin-bottom: 0.5em;\n }\n\n .attachment-input {\n margin-left: 1em;\n display: flex;\n flex-direction: column;\n width: 20em;\n }\n\n &.-compact {\n .attachment-input {\n flex-direction: row;\n align-items: flex-end;\n }\n\n .attachment {\n flex: 0;\n order: 0;\n display: block;\n min-width: 4em;\n height: 4em;\n align-self: center;\n margin-bottom: 0;\n }\n\n .control-field {\n order: 1;\n min-width: 12em;\n margin-left: 0.5em;\n }\n\n .control-upload {\n order: 2;\n min-width: 12em;\n padding: 0 0.5em;\n }\n }\n\n .controls {\n margin-bottom: 0.5em;\n\n input,\n button {\n width: 100%;\n }\n }\n}\n",".frontends-tab {\n .cards-list {\n padding: 0;\n }\n\n .relative {\n position: relative;\n }\n\n .overlay {\n position: absolute;\n background: var(--bg);\n // fix buttons showing through\n z-index: 2;\n opacity: 0.9;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n dd {\n text-overflow: ellipsis;\n word-wrap: nowrap;\n white-space: nowrap;\n overflow-x: hidden;\n max-width: 10em;\n }\n}\n","@import \"src/variables\";\n\n.settings_tab-switcher {\n height: 100%;\n\n .setting-item {\n border-bottom: 2px solid var(--fg, $fallback--fg);\n margin: 1em 1em 1.4em;\n padding-bottom: 1.4em;\n\n > div,\n > label {\n display: block;\n margin-bottom: 0.5em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .select-multiple {\n display: flex;\n\n .option-list {\n margin: 0;\n padding-left: 0.5em;\n }\n }\n\n &:last-child {\n border-bottom: none;\n padding-bottom: 0;\n margin-bottom: 1em;\n }\n\n select {\n min-width: 10em;\n }\n\n textarea {\n width: 100%;\n max-width: 100%;\n height: 100px;\n }\n\n .unavailable,\n .unavailable svg {\n color: var(--cRed, $fallback--cRed);\n color: $fallback--cRed;\n }\n }\n}\n","$main-color: #f58d2c;\n$main-background: white;\n$darkened-background: whitesmoke;\n\n$fallback--bg: #121a24;\n$fallback--fg: #182230;\n$fallback--faint: rgb(185 185 186 / 50%);\n$fallback--text: #b9b9ba;\n$fallback--link: #d8a070;\n$fallback--icon: #666;\n$fallback--lightBg: rgb(21 30 42);\n$fallback--lightText: #b9b9ba;\n$fallback--border: #222;\n$fallback--cRed: #f00;\n$fallback--cBlue: #0095ff;\n$fallback--cGreen: #0fa00f;\n$fallback--cOrange: orange;\n\n$fallback--alertError: rgb(211 16 20 / 50%);\n$fallback--alertWarning: rgb(111 111 20 / 50%);\n\n$fallback--panelRadius: 10px;\n$fallback--checkboxRadius: 2px;\n$fallback--btnRadius: 4px;\n$fallback--inputRadius: 4px;\n$fallback--tooltipRadius: 5px;\n$fallback--avatarRadius: 4px;\n$fallback--avatarAltRadius: 10px;\n$fallback--attachmentRadius: 10px;\n$fallback--chatMessageRadius: 10px;\n\n$fallback--buttonShadow: 0 0 2px 0 rgb(0 0 0 / 100%),\n 0 1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 -1px 0 0 rgb(0 0 0 / 20%) inset;\n\n$status-margin: 0.75em;\n"],"names":[],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/static/css/9801.cfe503d4c949ae0c3813.css b/priv/static/static/css/9801.cfe503d4c949ae0c3813.css @@ -1,2 +0,0 @@ -.ModifiedIndicator{display:inline-block;position:relative}.modified-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.ProfileSettingIndicator{display:inline-block;position:relative}.profilesetting-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.DraftButtons{display:inline-block;position:relative}.DraftButtons .button-default{margin-left:.5em}.draft-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.AttachmentSetting .attachment{display:block;height:15em;margin-bottom:.5em;width:100%}.AttachmentSetting .attachment-input{display:flex;flex-direction:column;margin-left:1em;width:20em}.AttachmentSetting .controls{margin-bottom:.5em}.AttachmentSetting .controls button,.AttachmentSetting .controls input{width:100%}.frontends-tab .cards-list{padding:0}.frontends-tab dd{word-wrap:nowrap;max-width:10em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div,.settings_tab-switcher .setting-item>label{display:block;margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child,.settings_tab-switcher .setting-item>label:last-child{margin-bottom:0}.settings_tab-switcher .setting-item .select-multiple{display:flex}.settings_tab-switcher .setting-item .select-multiple .option-list{margin:0;padding-left:.5em}.settings_tab-switcher .setting-item:last-child{border-bottom:none;margin-bottom:1em;padding-bottom:0}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{height:100px;max-width:100%;width:100%}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable svg{color:var(--cRed,red);color:red} -/*# sourceMappingURL=9801.cfe503d4c949ae0c3813.css.map*/ -\ No newline at end of file diff --git a/priv/static/static/css/9801.cfe503d4c949ae0c3813.css.map b/priv/static/static/css/9801.cfe503d4c949ae0c3813.css.map @@ -1 +0,0 @@ -{"version":3,"file":"static/css/9801.cfe503d4c949ae0c3813.css","mappings":"AACA,mBACE,qBACA,kBAGF,kBACE,gBACA,eACA,kBCRF,yBACE,qBACA,kBAGF,wBACE,gBACA,eACA,kBCRF,cACE,qBACA,kBAEA,8BACE,iBAIJ,eACE,gBACA,eACA,kBCXA,+BACE,cAEA,YACA,mBAFA,UAEA,CAGF,qCAEE,aACA,sBAFA,gBAGA,WAGF,6BACE,mBAEA,uEAEE,WCpBJ,2BACE,UAGF,kBAEE,iBAGA,eADA,kBAHA,uBAEA,kBAEA,CCRJ,uBACE,YAEA,qCACE,0CACA,qBACA,qBAEA,oFAEE,cACA,mBAEA,0GACE,gBAIJ,sDACE,aAEA,mEACE,SACA,kBAIJ,gDACE,mBAEA,kBADA,gBACA,CAGF,4CACE,eAGF,8CAGE,aADA,eADA,UAEA,CAGF,wGAEE,sBACA,SCnCW","sources":["webpack://pleroma_fe/./src/components/settings_modal/helpers/modified_indicator.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/profile_setting_indicator.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/draft_buttons.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.scss","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.scss","webpack://pleroma_fe/./src/_variables.scss"],"sourcesContent":["\n.ModifiedIndicator {\n display: inline-block;\n position: relative;\n}\n\n.modified-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.ProfileSettingIndicator {\n display: inline-block;\n position: relative;\n}\n\n.profilesetting-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.DraftButtons {\n display: inline-block;\n position: relative;\n\n .button-default {\n margin-left: 0.5em;\n }\n}\n\n.draft-tooltip {\n margin: 0.5em 1em;\n min-width: 10em;\n text-align: center;\n}\n","\n.AttachmentSetting {\n .attachment {\n display: block;\n width: 100%;\n height: 15em;\n margin-bottom: 0.5em;\n }\n\n .attachment-input {\n margin-left: 1em;\n display: flex;\n flex-direction: column;\n width: 20em;\n }\n\n .controls {\n margin-bottom: 0.5em;\n\n input,\n button {\n width: 100%;\n }\n }\n}\n",".frontends-tab {\n .cards-list {\n padding: 0;\n }\n\n dd {\n text-overflow: ellipsis;\n word-wrap: nowrap;\n white-space: nowrap;\n overflow-x: hidden;\n max-width: 10em;\n }\n}\n","@import \"src/variables\";\n\n.settings_tab-switcher {\n height: 100%;\n\n .setting-item {\n border-bottom: 2px solid var(--fg, $fallback--fg);\n margin: 1em 1em 1.4em;\n padding-bottom: 1.4em;\n\n > div,\n > label {\n display: block;\n margin-bottom: 0.5em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .select-multiple {\n display: flex;\n\n .option-list {\n margin: 0;\n padding-left: 0.5em;\n }\n }\n\n &:last-child {\n border-bottom: none;\n padding-bottom: 0;\n margin-bottom: 1em;\n }\n\n select {\n min-width: 10em;\n }\n\n textarea {\n width: 100%;\n max-width: 100%;\n height: 100px;\n }\n\n .unavailable,\n .unavailable svg {\n color: var(--cRed, $fallback--cRed);\n color: $fallback--cRed;\n }\n }\n}\n","$main-color: #f58d2c;\n$main-background: white;\n$darkened-background: whitesmoke;\n\n$fallback--bg: #121a24;\n$fallback--fg: #182230;\n$fallback--faint: rgb(185 185 186 / 50%);\n$fallback--text: #b9b9ba;\n$fallback--link: #d8a070;\n$fallback--icon: #666;\n$fallback--lightBg: rgb(21 30 42);\n$fallback--lightText: #b9b9ba;\n$fallback--border: #222;\n$fallback--cRed: #f00;\n$fallback--cBlue: #0095ff;\n$fallback--cGreen: #0fa00f;\n$fallback--cOrange: orange;\n\n$fallback--alertError: rgb(211 16 20 / 50%);\n$fallback--alertWarning: rgb(111 111 20 / 50%);\n\n$fallback--panelRadius: 10px;\n$fallback--checkboxRadius: 2px;\n$fallback--btnRadius: 4px;\n$fallback--inputRadius: 4px;\n$fallback--tooltipRadius: 5px;\n$fallback--avatarRadius: 4px;\n$fallback--avatarAltRadius: 10px;\n$fallback--attachmentRadius: 10px;\n$fallback--chatMessageRadius: 10px;\n\n$fallback--buttonShadow: 0 0 2px 0 rgb(0 0 0 / 100%),\n 0 1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 -1px 0 0 rgb(0 0 0 / 20%) inset;\n\n$status-margin: 0.75em;\n"],"names":[],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/css/app.a7f63ee9107a77599942.css b/priv/static/static/css/app.a7f63ee9107a77599942.css @@ -0,0 +1,2 @@ +.modal-view{align-items:center;animation-duration:.2s;animation-name:modal-background-fadein;bottom:0;display:flex;justify-content:center;left:0;opacity:0;overflow:auto;pointer-events:none;position:fixed;right:0;top:0;z-index:var(--ZI_modals)}.modal-view>*{pointer-events:auto}.modal-view.modal-background{background-color:rgba(0,0,0,.5);pointer-events:auto}.modal-view.open{opacity:1}@keyframes modal-background-fadein{0%{background-color:transparent}to{background-color:rgba(0,0,0,.5)}}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:-webkit-box;display:-ms-flexbox;display:flex}.vue-recycle-scroller__slot{-webkit-box-flex:1;-ms-flex:auto 0 0px;flex:auto 0 0}.vue-recycle-scroller__item-wrapper{-webkit-box-flex:1;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1;flex:1;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{left:0;position:absolute;top:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-b329ee4c],.resize-observer[data-v-b329ee4c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.login-form{display:flex;flex-direction:column;padding:.6em}.login-form .btn{min-height:2em;width:10em}.login-form .register{flex:1 1}.login-form .login-bottom{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-top:1em}.login-form .form-group{display:flex;flex-direction:column;line-height:24px;padding:.3em .5em .6em}.login-form .form-bottom{display:flex;height:32px;padding:.5em}.login-form .form-bottom button{width:10em}.login-form .form-bottom p{display:flex;margin:.35em;padding:.35em}.login-form .error{animation-duration:.4s;animation-name:shakeError;animation-timing-function:ease-in-out;text-align:center}.media-upload .hidden-input-file{display:none}label.media-upload{cursor:pointer}.ScopeSelector .scope{cursor:pointer;display:inline-block;min-height:1.3em;min-width:1.3em;text-align:center}.ScopeSelector .scope.selected svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.checkbox{display:inline-block;min-height:1.2em;position:relative}.checkbox-indicator{padding-left:1.2em;position:relative}.checkbox-indicator:before{background-color:#182230;background-color:var(--input,#182230);border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"✓";display:block;font-size:1.1em;height:1.1em;line-height:1.1em;overflow:hidden;position:absolute;right:0;text-align:center;top:0;transition:color .2s;vertical-align:top;width:1.1em}.checkbox.disabled .checkbox-indicator:before,.checkbox.disabled .label{opacity:.5}.checkbox.disabled .label{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.checkbox input[type=checkbox]:checked+.checkbox-indicator:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.checkbox input[type=checkbox]:indeterminate+.checkbox-indicator:before{color:#b9b9ba;color:var(--inputText,#b9b9ba);content:"–"}.checkbox.indeterminate-fix input[type=checkbox]+.checkbox-indicator:before{content:"–"}.checkbox>span{margin-left:.5em}.popover-trigger-button{display:inline-block}.popover{box-shadow:2px 2px 3px rgba(0,0,0,.5);box-shadow:var(--popupShadow);max-width:calc(100vw - 20px);min-width:0;position:fixed;z-index:var(--ZI_popover_override,var(--ZI_popovers))}.popover-default{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--postLink:var(--popoverPostLink,$fallback--link);--postFaintLink:var(--popoverPostFaintLink,$fallback--link);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);border-radius:4px;border-radius:var(--btnRadius,4px);color:#b9b9ba;color:var(--popoverText,#b9b9ba)}.popover-default:after{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.dropdown-menu{display:block;font-size:1em;list-style:none;max-width:100vw;padding:.5rem 0;text-align:left;white-space:nowrap;z-index:var(--ZI_popover_override,var(--ZI_popovers))}.dropdown-menu .dropdown-divider{border-top:1px solid #222;border-top:1px solid var(--border,#222);height:0;margin:.5rem 0;overflow:hidden}.dropdown-menu .dropdown-item{--btnText:var(--popoverText,$fallback--text);background-color:transparent;border:none;border-radius:0;box-shadow:none;box-sizing:border-box;clear:both;display:block;font-weight:400;height:100%;line-height:21px;overflow:hidden;padding:.5em .75em;text-align:inherit;white-space:nowrap;width:100%}.dropdown-menu .dropdown-item-icon svg{color:var(--menuPopoverIcon,#666);margin-right:.75rem;width:22px}.dropdown-menu .dropdown-item.-has-submenu .chevron-icon{margin-left:2rem;margin-right:.25rem}.dropdown-menu .dropdown-item:active,.dropdown-menu .dropdown-item:hover{--btnText:var(--selectedMenuPopoverText,$fallback--link);--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);box-shadow:none}.dropdown-menu .dropdown-item:active svg,.dropdown-menu .dropdown-item:hover svg{--icon:var(--selectedMenuPopoverIcon,$fallback--icon);color:var(--selectedMenuPopoverIcon,#666)}.dropdown-menu .dropdown-item .menu-checkbox{background-color:#182230;background-color:var(--input,#182230);border-radius:0;box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);display:inline-block;line-height:22px;margin-right:.75em;max-height:22px;max-width:22px;min-height:22px;min-width:22px;text-align:center;vertical-align:middle}.dropdown-menu .dropdown-item .menu-checkbox.menu-checkbox-checked:after{content:"✓";font-size:1.25em}.dropdown-menu .dropdown-item .menu-checkbox.-radio{border-radius:9999px}.dropdown-menu .dropdown-item .menu-checkbox.-radio.menu-checkbox-checked:after{content:"•";font-size:2em}.dropdown-menu .button-default.dropdown-item,.dropdown-menu .button-default.dropdown-item i[class*=icon-]{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.dropdown-menu .button-default.dropdown-item:active{background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#d8a070;color:var(--selectedMenuPopoverText,#d8a070)}.dropdown-menu .button-default.dropdown-item:disabled{color:#b9b9ba;color:var(--btnDisabledText,#b9b9ba)}.dropdown-menu .button-default.dropdown-item.toggled{color:#b9b9ba;color:var(--btnToggledText,#b9b9ba)}.still-image{align-items:center;display:inline-flex;line-height:0;overflow:hidden;position:relative}.still-image canvas{bottom:0;left:0;position:absolute;right:0;top:0;visibility:var(--_still-image-canvas-visibility,visible)}.still-image canvas,.still-image img{height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.still-image.animated:before{zoom:var(--_still_image-label-scale,1);background:hsla(0,0%,50%,.5);border-radius:5px;border-radius:var(--tooltipRadius,5px);color:#fff;content:"gif";display:block;font-size:.7em;left:.5em;line-height:1;padding:2px 4px;position:absolute;top:.5em;visibility:var(--_still-image-label-visibility,visible);z-index:2}.still-image.animated:hover canvas{display:none}.still-image.animated:hover:before{visibility:var(--_still-image-label-visibility,hidden)}.still-image.animated img{visibility:var(--_still-image-img-visibility,hidden)}.still-image.animated:hover img{visibility:visible}.emoji-picker{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);color:#d8a070;color:var(--popoverText,#d8a070);display:flex;flex-direction:column;max-width:calc(100vw - 20px);width:25em}.emoji-picker-header-image{align-items:center;display:inline-flex;height:32px;justify-content:center;max-height:32px;max-width:32px;width:32px}.emoji-picker-header-image .still-image{height:100%;max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain;width:100%}.emoji-picker .keep-open,.emoji-picker .too-many-emoji{line-height:normal;padding:7px}.emoji-picker .too-many-emoji{display:flex;flex-direction:column}.emoji-picker .keep-open-label{display:flex;padding:0 7px}.emoji-picker .heading{display:flex;padding:10px 7px 5px}.emoji-picker .content{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.emoji-picker .emoji-tabs{display:flex;flex-flow:row nowrap;flex-grow:1;overflow-x:auto}.emoji-picker .additional-tabs{border-left:1px solid #666;border-left-color:var(--icon,#666);display:flex;flex:0 0 auto;padding-left:7px}.emoji-picker .additional-tabs,.emoji-picker .emoji-tabs{align-content:center;display:flex;flex-basis:auto}.emoji-picker .additional-tabs-item,.emoji-picker .emoji-tabs-item{align-items:center;cursor:pointer;display:flex;font-size:1.85em;height:32px;max-height:32px;max-width:32px;padding:0 7px;width:32px}.emoji-picker .additional-tabs-item.disabled,.emoji-picker .emoji-tabs-item.disabled{opacity:.5;pointer-events:none}.emoji-picker .additional-tabs-item.active,.emoji-picker .emoji-tabs-item.active{border-bottom:4px solid}.emoji-picker .additional-tabs-item.active svg,.emoji-picker .emoji-tabs-item.active svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.emoji-picker .sticker-picker{flex:1 1 auto}.emoji-picker .emoji-content,.emoji-picker .stickers-content{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.emoji-picker .emoji-content.hidden,.emoji-picker .stickers-content.hidden{opacity:0;pointer-events:none;position:absolute}.emoji-picker .emoji-search{flex:0 0 auto;padding:5px}.emoji-picker .emoji-search input{width:100%}.emoji-picker .emoji-groups{flex:1 1 1px;height:100%;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;min-height:200px;overflow:auto;position:relative;transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.emoji-picker .emoji-groups.scrolled-top{-webkit-mask-size:100% 20px,100% 0,auto;mask-size:100% 20px,100% 0,auto}.emoji-picker .emoji-groups.scrolled-bottom{-webkit-mask-size:100% 0,100% 20px,auto;mask-size:100% 0,100% 20px,auto}.emoji-picker .emoji-group{align-items:center;display:flex;flex-wrap:wrap;justify-content:left;padding-left:5px}.emoji-picker .emoji-group-title{font-size:.85em;margin:0;width:100%}.emoji-picker .emoji-group-title.disabled{display:none}.emoji-picker .emoji-item{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;height:32px;justify-content:center;line-height:32px;margin:4px;width:32px}.emoji-picker .emoji-item .emoji-picker-emoji.-custom{max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain}.emoji-picker .emoji-item .emoji-picker-emoji.-unicode{font-size:24px;overflow:hidden}.emoji-input{display:flex;flex-direction:column;position:relative}.emoji-input .emoji-picker-icon{cursor:pointer;font-size:1.3em;line-height:24px;margin:.2em .25em;position:absolute;right:0;top:0}.emoji-input .emoji-picker-icon:hover i{color:#b9b9ba;color:var(--text,#b9b9ba)}.emoji-input .emoji-picker-panel{margin-top:2px;position:absolute;z-index:20}.emoji-input .emoji-picker-panel.hide{display:none}.emoji-input input,.emoji-input textarea{flex:1 0 auto}.emoji-input.with-picker input{padding-right:30px}.emoji-input .hidden-overlay{bottom:0;color:red;left:0;opacity:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0}.emoji-input .hidden-overlay .caret{border:1px solid red;margin-right:calc(-1ch - 1px);width:0}.autocomplete-panel{position:absolute}.autocomplete-item{border-bottom:1px solid rgba(0,0,0,.4);cursor:pointer;display:flex;height:32px;padding:.2em .4em}.autocomplete-item .image{font-size:32px;height:32px;line-height:32px;margin-right:4px;text-align:center;width:32px}.autocomplete-item .image img{height:32px;-o-object-fit:contain;object-fit:contain;width:32px}.autocomplete-item .label{display:flex;flex-direction:column;justify-content:center;margin:0 .1em 0 .2em}.autocomplete-item .label .displayText{line-height:1.5}.autocomplete-item .label .detailText{font-size:9px;line-height:9px}.autocomplete-item.highlighted{--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#182230;background-color:var(--selectedMenuPopover,#182230);color:var(--selectedMenuPopoverText,#b9b9ba)}label.Select{padding:0}label.Select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:#b9b9ba;color:var(--inputText,--text,#b9b9ba);font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:1em;height:2em;line-height:16px;margin:0;padding:0 2em 0 .2em;width:100%;z-index:1}label.Select .select-down-icon{bottom:0;color:#b9b9ba;color:var(--inputText,#b9b9ba);height:100%;line-height:2;pointer-events:none;position:absolute;right:5px;top:0;width:.875em;z-index:0}.poll-form{display:flex;flex-direction:column;padding:0 .5em .5em}.poll-form .add-option{align-self:flex-start;padding-left:.1em;padding-top:.25em}.poll-form .poll-option{align-items:baseline;display:flex;justify-content:space-between;margin-bottom:.25em}.poll-form .input-container{width:100%}.poll-form .input-container input{padding-right:2.5em;width:100%}.poll-form .delete-option{margin-left:-1.5em;width:1.5em;z-index:1}.poll-form .poll-type-expiry{display:flex;margin-top:.5em;width:100%}.poll-form .poll-type{flex:1 1 60%;margin-right:.75em}.poll-form .poll-type .poll-type-select{padding-right:.75em}.poll-form .poll-expiry{display:flex}.poll-form .poll-expiry .expiry-amount{text-align:right;width:3em}.Flash{display:inline-block;position:relative}.Flash,.Flash .placeholder,.Flash .player{height:100%;width:100%}.Flash .placeholder{align-items:center;background:var(--bg);color:var(--link);display:flex;justify-content:center}.Flash .hider{top:0}.Flash .label{word-wrap:normal;flex:1 1 0;line-height:1.2;text-align:center;white-space:normal}.Flash .hidden{display:none;visibility:"hidden"}.Attachment{align-self:flex-start;border:1px solid #222;border-color:var(--border,#222);border-radius:10px;border-radius:var(--attachmentRadius,10px);display:inline-flex;flex-direction:column;height:100%;line-height:0;position:relative}.Attachment .attachment-wrapper{flex:1 1 auto;height:100%;overflow:hidden;position:relative}.Attachment .description-container{display:flex;flex:0 1 0;padding-top:.5em;z-index:1}.Attachment .description-container p{flex:1;line-height:1.5;margin:0;overflow:hidden;padding:.5em;text-align:center;text-overflow:ellipsis;white-space:nowrap}.Attachment .description-container.-static{background:var(--popover);bottom:0;box-shadow:var(--popupShadow);left:0;padding-top:0;position:absolute;right:0}.Attachment .description-field{flex:1;min-width:0}.Attachment .audio-container,.Attachment .flash-container,.Attachment .image-container,.Attachment .oembed-container,.Attachment .placeholder-container,.Attachment .video-container{display:flex;height:100%;justify-content:center;width:100%}.Attachment .image-container .image{height:100%;width:100%}.Attachment .flash-container .flash,.Attachment .flash-container video,.Attachment .video-container .flash,.Attachment .video-container video{align-self:center;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.Attachment .audio-container{align-items:flex-end;display:flex}.Attachment .audio-container audio{height:100%;width:100%}.Attachment .placeholder-container{align-items:center;display:flex;flex-direction:column;justify-content:center;padding-top:.5em}.Attachment .play-icon{color:hsla(0,0%,100%,.75);font-size:64px;left:calc(50% - 32px);position:absolute;text-shadow:0 0 2px rgba(0,0,0,.4);top:calc(50% - 32px)}.Attachment .play-icon:before{margin:0}.Attachment .attachment-buttons{display:flex;margin-right:.5em;margin-top:.5em;position:absolute;right:0;top:0;z-index:1}.Attachment .attachment-buttons .attachment-button{background:hsla(0,0%,90%,.7);border-radius:5px;border-radius:var(--tooltipRadius,5px);font-size:1.25em;height:2em;margin-left:.5em;padding:0;text-align:center;width:2em}.Attachment .attachment-buttons .attachment-button .svg-inline--fa{color:rgba(0,0,0,.6)}.Attachment .attachment-buttons .attachment-button:hover .svg-inline--fa{color:rgba(0,0,0,.9)}.Attachment.-contain-fit canvas,.Attachment.-contain-fit img{-o-object-fit:contain;object-fit:contain}.Attachment.-cover-fit canvas,.Attachment.-cover-fit img{-o-object-fit:cover;object-fit:cover}.Attachment .oembed-container{display:flex;flex:1 0 100%;line-height:1.2em;margin-right:15px;width:100%}.Attachment .oembed-container img{width:100%}.Attachment .oembed-container .image{flex:1}.Attachment .oembed-container .image img{border:0;border-radius:5px;height:100%;-o-object-fit:cover;object-fit:cover}.Attachment .oembed-container .text{flex:2;margin:8px;word-break:break-all}.Attachment .oembed-container .text h1{font-size:1rem;margin:0}.Attachment.-size-small .play-icon{zoom:.5;opacity:.7}.Attachment.-size-small .attachment-buttons{zoom:.7;opacity:.5}.Attachment.-editable{padding:.5em}.Attachment.-editable .attachment-buttons,.Attachment.-editable .description-container{margin:0}.Attachment.-placeholder{color:#d8a070;color:var(--postLink,#d8a070);display:inline-block;height:auto;line-height:1.5;overflow:hidden;white-space:nowrap}.Attachment.-placeholder:not(.-editable){border:none}.Attachment.-placeholder.-editable{align-items:baseline;display:flex;flex-direction:row}.Attachment.-placeholder.-editable .attachment-buttons,.Attachment.-placeholder.-editable .description-container{margin:0;padding:0;position:relative}.Attachment.-placeholder.-editable .description-container{flex:1;padding-left:.5em}.Attachment.-placeholder.-editable .attachment-buttons{align-self:center;order:99}.Attachment.-placeholder a{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis}.Attachment.-placeholder svg{color:inherit}.Attachment.-loading{cursor:progress}.Attachment.-compact .placeholder-container{padding-bottom:.5em}.Gallery .gallery-rows{display:flex;flex-direction:column}.Gallery .gallery-row{flex-grow:1;height:0;position:relative;width:100%}.Gallery .gallery-row .gallery-row-inner{align-content:stretch;bottom:0;display:flex;flex-flow:row wrap;left:0;position:absolute;right:0;top:0}.Gallery .gallery-row .gallery-row-inner .gallery-item{box-sizing:border-box;flex-grow:1;height:100%;margin:0 .5em 0 0;min-width:2em}.Gallery .gallery-row .gallery-row-inner .gallery-item:last-child{margin:0}.Gallery .gallery-row .gallery-row-inner.-grid{grid-gap:.5em;display:grid;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));height:auto;position:relative;width:100%}.Gallery .gallery-row .gallery-row-inner.-grid .gallery-item{height:200px;margin:0}.Gallery .gallery-row.-grid,.Gallery .gallery-row.-minimal{height:auto}.Gallery .gallery-row.-grid .gallery-row-inner,.Gallery .gallery-row.-minimal .gallery-row-inner{position:relative}.Gallery .gallery-row:not(:first-child){margin-top:.5em}.Gallery.-long .gallery-rows{-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;max-height:25em;overflow:hidden}.Gallery .many-attachments-text{line-height:2;text-align:center}.Gallery .many-attachments-buttons{display:flex}.Gallery .many-attachments-button{display:flex;flex:1;justify-content:center;line-height:2}.Gallery .many-attachments-button button{padding:0 2em}.Avatar{--_avatarShadowBox:var(--avatarStatusShadow);--_avatarShadowFilter:var(--avatarStatusShadowFilter);--_avatarShadowInset:var(--avatarStatusShadowInset);--_still-image-label-visibility:hidden;display:inline-block;height:48px;position:relative;width:48px}.Avatar.-compact{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:32px;width:32px}.Avatar .avatar{border-radius:4px;border-radius:var(--avatarRadius,4px);box-shadow:var(--_avatarShadowBox);height:100%;width:100%}.Avatar .avatar.-better-shadow{box-shadow:var(--_avatarShadowInset);filter:var(--_avatarShadowFilter)}.Avatar .avatar.-animated:before{display:none}.Avatar .avatar.-compact{border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.Avatar .avatar.-placeholder{background-color:#182230;background-color:var(--fg,#182230)}.Avatar img{height:100%;width:100%}.Avatar .bot-indicator{background:hsla(0,0%,50%,.5);border-radius:var(--tooltipRadius);bottom:0;color:#fff;margin:-.2em;padding:.2em;position:absolute;right:0}.MentionLink{color:var(--link);display:inline;position:relative;white-space:normal;word-break:normal}.MentionLink .new,.MentionLink .original{border-radius:2px;display:inline}.MentionLink .mention-avatar{border-radius:var(--avatarAltRadius,10px);height:1.5em;margin-right:.2em;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1.5em}.MentionLink .full{word-wrap:normal;display:inline-block;height:100%;left:0;margin-top:.25em;opacity:0;padding:.5em;pointer-events:none;position:absolute;top:100%;transition:opacity .2s ease;-webkit-user-select:all;-moz-user-select:all;user-select:all;white-space:nowrap;z-index:1}.MentionLink .short.-with-tooltip,.MentionLink .you{-webkit-user-select:none;-moz-user-select:none;user-select:none}.MentionLink .full,.MentionLink .short{white-space:nowrap}.MentionLink .shortName{white-space:normal}.MentionLink .new.-you .shortName{font-weight:600}.MentionLink .new.-has-selection{background-color:var(--alertNeutral,#182230);color:var(--alertNeutralText,#b9b9ba)}.MentionLink .new .at{color:var(--link);display:inline-block;line-height:1;margin:0;opacity:.8;padding:0 .1em;vertical-align:-25%}.MentionLink .new.-striped .shortName{background-image:repeating-linear-gradient(135deg,var(--____highlight-tintColor),var(--____highlight-tintColor) 5px,var(--____highlight-tintColor2) 5px,var(--____highlight-tintColor2) 10px)}.MentionLink .new.-solid .shortName{background-image:linear-gradient(var(--____highlight-tintColor2),var(--____highlight-tintColor2))}.MentionLink .new.-side .shortName{box-shadow:0 -5px 3px -4px inset var(--____highlight-solidColor)}.MentionLink .serverName.-faded{color:var(--faintLink,#d8a070)}.mention-link-popover{max-height:20rem;max-width:70ch;overflow:hidden}.MentionsLine{word-break:break-all}.MentionsLine .mention-link:not(:first-child):before{content:" "}.MentionsLine .showMoreLess{color:var(--link);margin-left:.5em;white-space:normal}.HashtagLink{color:var(--link);display:inline-block;position:relative;white-space:normal}.RichContent blockquote{border-left:.2em solid var(--faint,hsla(240,1%,73%,.5));font-style:italic;margin:.2em 0 .2em .2em;padding-left:1em}.RichContent pre{overflow:auto}.RichContent code,.RichContent kbd,.RichContent pre,.RichContent samp,.RichContent var{font-family:var(--postCodeFont,monospace)}.RichContent p{margin:0 0 1em}.RichContent p:last-child{margin:0}.RichContent h1{font-size:1.1em;line-height:1.2em;margin:1.4em 0}.RichContent h2{font-size:1.1em;margin:1em 0}.RichContent h3{font-size:1em;margin:1.2em 0}.RichContent h4{margin:1.1em 0}.RichContent .emoji,.RichContent .img{display:inline-block}.RichContent .emoji{height:var(--emoji-size,32px);width:var(--emoji-size,32px)}.RichContent .img,.RichContent video{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.poll .votes{display:flex;flex-direction:column;margin:0 0 .5em}.poll .poll-option{margin:.75em .5em}.poll .option-result{color:#b9b9ba;color:var(--lightText,#b9b9ba);display:flex;flex-direction:row;height:100%;position:relative}.poll .option-result-label{align-items:center;display:flex;padding:.1em .25em;word-break:break-word;z-index:1}.poll .result-percentage{flex-shrink:0;width:3.5em}.poll .result-fill{background-color:#151e2a;background-color:var(--poll,#151e2a);border-radius:10px;border-radius:var(--panelRadius,10px);color:#b9b9ba;color:var(--pollText,#b9b9ba);height:100%;left:0;position:absolute;top:0;transition:width .5s}.poll .option-vote{align-items:center;display:flex}.poll input{width:3.5em}.poll .footer{align-items:center;display:flex}.poll.loading *{cursor:progress}.poll .poll-vote-button{margin-right:.5em;padding:0 .5em}.poll .poll-checkbox{display:none}.StatusBody{display:flex;flex-direction:column}.StatusBody .emoji{--_still_image-label-scale:0.5}.StatusBody .attachments{margin-top:.5em}.StatusBody .summary,.StatusBody .text{word-wrap:break-word;font-family:var(--postFont,sans-serif);line-height:var(--post-line-height);overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.StatusBody .summary{display:block;font-style:italic;padding-bottom:.5em}.StatusBody .text.-single-line{height:1.4em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.StatusBody .summary-wrapper{border-color:var(--border,#222);border-style:solid;border-width:0 0 1px;flex-grow:0;margin-bottom:.5em}.StatusBody .summary-wrapper.-tall{position:relative}.StatusBody .summary-wrapper.-tall .summary{max-height:2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.StatusBody .text-wrapper{display:flex;flex-flow:column nowrap}.StatusBody .text-wrapper.-tall-status{height:220px;overflow-x:hidden;overflow-y:hidden;position:relative;z-index:1}.StatusBody .text-wrapper.-tall-status .media-body{-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;min-height:0}.StatusBody .cw-status-hider,.StatusBody .status-unhider,.StatusBody .tall-status-hider,.StatusBody .tall-subject-hider{display:inline-block;text-align:center;width:100%;word-break:break-all}.StatusBody .tall-status-hider{height:70px;line-height:110px;margin-top:150px;position:absolute;z-index:2}.StatusBody .tall-subject-hider{padding-bottom:.5em}.StatusBody .cw-status-hider,.StatusBody .status-unhider{word-break:break-all}.StatusBody .cw-status-hider svg,.StatusBody .status-unhider svg{color:inherit}.StatusBody .greentext{color:#0fa00f;color:var(--postGreentext,#0fa00f)}.StatusBody .cyantext{color:var(--postCyantext,#0095ff)}.StatusBody.-compact{--emoji-size:16px;align-items:top;flex-direction:row}.StatusBody.-compact .attachments,.StatusBody.-compact .body{max-height:3.25em}.StatusBody.-compact .body{flex:5 1 auto;mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-image:linear-gradient(180deg,#fff 2em,transparent 3em);mask-image:linear-gradient(180deg,#fff 2em,transparent 3em);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-repeat:repeat-x,repeat;mask-repeat:repeat-x,repeat;-webkit-mask-size:auto 3.5em,auto auto;mask-size:auto 3.5em,auto auto;min-width:5em;overflow:hidden;white-space:normal}.StatusBody.-compact .attachments{flex:1 1 0;height:100%;margin-left:.5em;margin-top:0;min-width:5em}.StatusBody.-compact .summary-wrapper{border:none;display:inline-block;line-height:inherit;margin:0}.StatusBody.-compact .summary-wrapper .summary:after{content:": "}.StatusBody.-compact .text-wrapper{display:inline-block}.link-preview-card{border:1px solid #222;border-color:var(--border,#222);border-radius:10px;border-radius:var(--attachmentRadius,10px);color:#b9b9ba;color:var(--text,#b9b9ba);cursor:pointer;display:flex;flex-direction:row;margin-top:.5em;overflow:hidden}.link-preview-card .card-image{flex-shrink:0;max-width:25%;width:120px}.link-preview-card .card-image img{border-radius:10px;border-radius:var(--attachmentRadius,10px);height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.link-preview-card .card-content{display:flex;flex-direction:column;margin:.5em;max-height:100%}.link-preview-card .card-host{font-size:.85em}.link-preview-card .card-description{line-height:1.2em;margin:.5em 0 0;max-height:calc(3.6em - 1px);overflow:hidden;text-overflow:ellipsis;word-break:break-word}.link-preview-card .nsfw-alert{margin:2em 0}.StatusContent{flex:1;min-width:0}.post-status-form{position:relative}.post-status-form .attachments{margin-bottom:.5em}.post-status-form .form-bottom{display:flex;height:2.5em;justify-content:space-between;padding:.5em}.post-status-form .form-bottom button{width:10em}.post-status-form .form-bottom p{display:flex;margin:.35em;padding:.35em}.post-status-form .form-bottom-left{display:flex;flex:1;margin-right:7px;max-width:10em;padding-right:7px}.post-status-form .preview-heading{display:flex;padding-left:.5em}.post-status-form .preview-toggle{cursor:pointer;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.post-status-form .preview-toggle:hover{text-decoration:underline}.post-status-form .preview-toggle i,.post-status-form .preview-toggle svg{font-size:.8em;margin-left:.2em;transform:rotate(90deg)}.post-status-form .preview-container{margin-bottom:1em}.post-status-form .preview-error{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));font-style:italic}.post-status-form .preview-status{border:1px solid #222;border:1px solid var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);margin:0;padding:.5em}.post-status-form .reply-or-quote-selector{margin-bottom:.5em}.post-status-form .text-format .only-format{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.post-status-form .visibility-tray{align-items:baseline;display:flex;justify-content:space-between;padding-top:5px}.post-status-form .visibility-notice.edit-warning>:first-child{margin-top:0}.post-status-form .visibility-notice.edit-warning>:last-child{margin-bottom:0}.post-status-form .media-upload-icon{justify-content:left;order:1}.post-status-form .emoji-icon{justify-content:center;order:2}.post-status-form .poll-icon{justify-content:right;order:3}.post-status-form .emoji-icon,.post-status-form .media-upload-icon,.post-status-form .poll-icon{align-items:center;display:flex;flex:1;font-size:1.85em;line-height:1.1;padding:0 .1em}.post-status-form .emoji-icon.selected i,.post-status-form .emoji-icon.selected label,.post-status-form .emoji-icon.selected svg,.post-status-form .emoji-icon:hover i,.post-status-form .emoji-icon:hover label,.post-status-form .emoji-icon:hover svg,.post-status-form .media-upload-icon.selected i,.post-status-form .media-upload-icon.selected label,.post-status-form .media-upload-icon.selected svg,.post-status-form .media-upload-icon:hover i,.post-status-form .media-upload-icon:hover label,.post-status-form .media-upload-icon:hover svg,.post-status-form .poll-icon.selected i,.post-status-form .poll-icon.selected label,.post-status-form .poll-icon.selected svg,.post-status-form .poll-icon:hover i,.post-status-form .poll-icon:hover label,.post-status-form .poll-icon:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.post-status-form .emoji-icon.disabled i,.post-status-form .emoji-icon.disabled svg,.post-status-form .media-upload-icon.disabled i,.post-status-form .media-upload-icon.disabled svg,.post-status-form .poll-icon.disabled i,.post-status-form .poll-icon.disabled svg{color:#666;color:var(--btnDisabledText,#666);cursor:not-allowed}.post-status-form .emoji-icon.disabled i:hover,.post-status-form .emoji-icon.disabled svg:hover,.post-status-form .media-upload-icon.disabled i:hover,.post-status-form .media-upload-icon.disabled svg:hover,.post-status-form .poll-icon.disabled i:hover,.post-status-form .poll-icon.disabled svg:hover{color:#666;color:var(--btnDisabledText,#666)}.post-status-form .error{text-align:center}.post-status-form .media-upload-wrapper{margin-bottom:.5em;margin-right:.2em;width:18em}.post-status-form .media-upload-wrapper img,.post-status-form .media-upload-wrapper video{max-height:10em;-o-object-fit:contain;object-fit:contain}.post-status-form .media-upload-wrapper .video{max-height:10em}.post-status-form .media-upload-wrapper input{flex:1;width:100%}.post-status-form .status-input-wrapper{display:flex;flex-direction:column;position:relative;width:100%}.post-status-form .btn[disabled]{cursor:not-allowed}.post-status-form form{display:flex;flex-direction:column;margin:.6em;position:relative}.post-status-form .form-group{display:flex;flex-direction:column;line-height:1.85;padding:.25em .5em .5em}.post-status-form .form-post-body{box-sizing:content-box;height:calc(var(--post-line-height)*1em);min-height:calc(var(--post-line-height)*1em);overflow:hidden;padding-bottom:calc(var(--_padding) + var(--post-line-height)*1em);resize:none;transition:min-height .2s .1s}.post-status-form .form-post-body.scrollable-form{overflow-y:auto}.post-status-form .main-input{position:relative}.post-status-form .character-counter{bottom:0;margin:0 .5em;padding:0;position:absolute;right:0}.post-status-form .character-counter.error{color:red;color:var(--cRed,red)}@keyframes fade-in{0%{opacity:0}to{opacity:.6}}@keyframes fade-out{0%{opacity:.6}to{opacity:0}}.post-status-form .drop-indicator{align-items:center;background-color:#121a24;background-color:var(--bg,#121a24);border:2px dashed #b9b9ba;border:2px dashed var(--text,#b9b9ba);border-radius:5px;border-radius:var(--tooltipRadius,5px);color:#b9b9ba;color:var(--text,#b9b9ba);display:flex;font-size:5em;height:100%;justify-content:center;opacity:.6;position:absolute;width:100%}.remote-follow{max-width:220px}.remote-follow .remote-button{min-height:2em;width:100%}.dark-overlay:before{background:rgba(27,31,35,.5);bottom:0;content:" ";left:0;right:0;z-index:2000}.dark-overlay:before,.dialog-modal.panel{cursor:default;display:block;position:fixed;top:0}.dialog-modal.panel{background-color:#121a24;background-color:var(--bg,#121a24);left:50%;margin:15vh auto;max-height:80vh;max-width:90vw;transform:translateX(-50%);z-index:2001}.dialog-modal.panel .dialog-modal-heading .title{text-align:center}.dialog-modal.panel .dialog-modal-content{background-color:#121a24;background-color:var(--bg,#121a24);margin:0;padding:1rem;white-space:normal}.dialog-modal.panel .dialog-modal-footer{background-color:#121a24;background-color:var(--bg,#121a24);border-top:1px solid #222;border-top:1px solid var(--border,#222);display:flex;justify-content:flex-end;margin:0;padding:.5em}.dialog-modal.panel .dialog-modal-footer button{margin-left:.5rem;width:auto}.moderation-tools-popover{height:100%}.moderation-tools-popover .trigger{display:flex!important;height:100%}.moderation-tools-button i,.moderation-tools-button svg{font-size:.8em}.AccountActions .ellipsis-button{margin:-.5em 0;padding:.5em 0;text-align:center;width:2.5em}.AccountActions .ellipsis-button:not(:hover) .icon{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-note{display:flex;flex-direction:column}.user-note .heading{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-bottom:.75em}.user-note .heading .btn{min-width:95px}.user-note .heading .buttons{display:flex;flex-direction:row;justify-content:right}.user-note .heading .buttons .btn{margin-left:.5em}.user-note .note-text{align-self:stretch}.user-note .note-text.-blank{color:var(--faint,hsla(240,1%,73%,.5));font-style:italic}.user-card{position:relative;z-index:1}.user-card:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.user-card .panel-heading{align-items:stretch;background:transparent;box-shadow:none;flex-direction:column;padding:.5em 0;position:relative;text-align:center}.user-card .panel-body{word-wrap:break-word;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;position:relative}.user-card .background-image{background-color:var(--profileBg);background-size:cover;border-bottom-left-radius:calc(var(--__roundnessBottom, --panelRadius) - 1px);border-bottom-right-radius:calc(var(--__roundnessBottom, --panelRadius) - 1px);border-top-left-radius:calc(var(--__roundnessTop, --panelRadius) - 1px);border-top-right-radius:calc(var(--__roundnessTop, --panelRadius) - 1px);bottom:0;left:0;-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 60%;mask-size:100% 60%;position:absolute;right:0;top:0;z-index:-2}.user-card .background-image.hide-bio{-webkit-mask-size:100% 40px;mask-size:100% 40px}.user-card-bio{display:block;line-height:1.3;margin:0;padding:1em;text-align:center}.user-card-bio a{color:#d8a070;color:var(--postLink,#d8a070)}.user-card-bio img{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.user-card.-rounded-t{--__roundnessTop:var(--panelRadius);--__roundnessBottom:0;border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px);border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px)}.user-card.-rounded{--__roundnessTop:var(--panelRadius);--__roundnessBottom:var(--panelRadius);border-radius:10px;border-radius:var(--panelRadius,10px)}.user-card.-popover{--__roundnessTop:var(--tooltipRadius);--__roundnessBottom:var(--tooltipRadius);border-radius:5px;border-radius:var(--tooltipRadius,5px)}.user-card.-bordered{border:1px solid #222;border-color:var(--border,#222)}.user-info{padding:0 26px}.user-info,.user-info a{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-info a:hover{color:var(--icon)}.user-info .container{align-items:flex-start;display:flex;max-height:56px;min-width:0;padding:16px 0 6px}.user-info .container>*{min-width:0}.user-info .container>a{display:flex;vertical-align:middle}.user-info .container .Avatar{--_avatarShadowBox:var(--avatarShadow);--_avatarShadowFilter:var(--avatarShadowFilter);--_avatarShadowInset:var(--avatarShadowInset);height:56px;-o-object-fit:cover;object-fit:cover;width:56px}.user-info-avatar{cursor:pointer;position:relative}.user-info-avatar.-overlay{align-items:center;background-color:rgba(0,0,0,.3);border-radius:4px;border-radius:var(--avatarRadius,4px);bottom:0;display:flex;justify-content:center;left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease}.user-info-avatar.-overlay svg{color:#fff}.user-info-avatar:hover .user-info-avatar.-overlay{opacity:1}.user-info .edit-profile-button,.user-info .external-link-button{cursor:pointer;margin:-.5em 0;padding:.5em 0;text-align:center;width:2.5em}.user-info .edit-profile-button:not(:hover) .icon,.user-info .external-link-button:not(:hover) .icon{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-info .bottom-line{align-items:baseline;font-size:1.1em;font-weight:light}.user-info .bottom-line .lock-icon{margin-left:.5em}.user-info .bottom-line .user-screen-name{flex:0 1 auto;min-width:1px;overflow:hidden;text-overflow:ellipsis}.user-info .bottom-line .dailyAvg{color:#b9b9ba;color:var(--text,#b9b9ba);flex:0 0 auto;font-size:.7em;margin-left:1em;min-width:1px}.user-info .bottom-line .user-role{background-color:#182230;background-color:var(--alertNeutral,#182230);color:#b9b9ba;color:var(--alertNeutralText,#b9b9ba);flex:none}.user-info .user-summary{--emoji-size:1.7em;display:block;flex:1 1 0;line-height:2em;margin-left:.6em;text-align:left;text-overflow:ellipsis;white-space:nowrap;z-index:1}.user-info .user-summary .bottom-line,.user-info .user-summary .top-line{display:flex}.user-info .user-name{flex:1 1 auto;font-size:1.1em;margin-right:1em;overflow:hidden;text-overflow:ellipsis}.user-info .user-meta{align-items:baseline;display:flex;flex-wrap:wrap;line-height:22px;margin-bottom:.15em}.user-info .user-meta .following{flex:1 0 auto;margin:0 0 .25em;text-align:left}.user-info .user-meta .highlighter{align-self:start;display:flex;flex:0 1 auto;flex-wrap:wrap;margin-right:-.5em}.user-info .user-meta .highlighter .userHighlightCl{flex:1 0 auto;padding:2px 10px}.user-info .user-meta .highlighter .userHighlightSel{flex:1 0 auto;padding-bottom:0;padding-top:0}.user-info .user-meta .highlighter .userHighlightText{flex:1 0 auto;width:70px}.user-info .user-meta .highlighter .userHighlightCl,.user-info .user-meta .highlighter .userHighlightSel,.user-info .user-meta .highlighter .userHighlightText{margin-bottom:.25em;margin-right:.5em;vertical-align:top}.user-info .user-interactions{display:flex;flex-flow:row wrap;margin-right:-.75em;position:relative}.user-info .user-interactions>*{margin:0 .75em .6em 0;min-width:95px;white-space:nowrap}.user-info .user-interactions button{margin:0}.user-info .user-note{margin:0 .75em .6em 0}.sidebar .edit-profile-button{display:none}.user-counts{color:#b9b9ba;color:var(--lightText,#b9b9ba);display:flex;flex-wrap:wrap;justify-content:space-between;line-height:16px;padding:.5em 1.5em 0;text-align:center}.user-count{flex:1 0 auto;margin:0 .5em;padding:.5em 0}.user-count h5{font-size:1em;font-weight:bolder;margin:0 0 .25em}.user-count a{text-decoration:none}.mute-expiry{display:flex;flex-direction:row}.user-panel .signed-in{overflow:visible;z-index:10}.NavigationEntry{align-items:baseline;box-sizing:border-box;color:#d8a070;color:var(--link,#d8a070);display:flex;height:3.5em;line-height:3.5em;padding:0 1em;width:100%}.NavigationEntry .timelines-chevron{margin-right:0}.NavigationEntry .main-link{flex:1}.NavigationEntry .menu-icon{margin-right:.8em}.NavigationEntry .extra-button{text-align:center;width:3em}.NavigationEntry .extra-button:last-child{margin-right:-.8em}.NavigationEntry:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#d8a070;color:var(--selectedMenuText,#d8a070)}.NavigationEntry:hover .menu-icon{--icon:var(--text,$fallback--icon)}.NavigationEntry.-active{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba);font-weight:bolder}.NavigationEntry.-active .menu-icon{--icon:var(--text,$fallback--icon)}.NavigationEntry.-active:hover{text-decoration:underline}.NavigationPins{display:flex;flex-wrap:wrap;height:100%;overflow:hidden}.NavigationPins .alert-dot{background-color:red;background-color:var(--badgeNotification,red);border-radius:100%;height:.5em;position:absolute;right:calc(50% - .75em);top:calc(50% - .5em);width:.5em}.NavigationPins .pinned-item{box-sizing:border-box;flex:1 0 3em;height:100%;min-width:2em;overflow:visible;position:relative;text-align:center}.NavigationPins .pinned-item .iconLetter,.NavigationPins .pinned-item .svg-inline--fa{margin:0}.NavigationPins .pinned-item.router-link-active{border-bottom:4px solid;color:#b9b9ba;color:var(--panelText,#b9b9ba)}.NavigationPins .pinned-item.router-link-active .iconLetter,.NavigationPins .pinned-item.router-link-active .svg-inline--fa{color:inherit}.NavPanel .panel{box-shadow:var(--panelShadow);overflow:hidden}.NavPanel ul{list-style:none;margin:0;padding:0}.NavPanel li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);position:relative}.NavPanel>li:first-child .menu-item{border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px);border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px)}.NavPanel>li:last-child .menu-item{border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px);border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px)}.NavPanel li:last-child{border:none}.NavPanel .navigation-chevron{margin-right:.8em}.NavPanel .navigation-chevron,.NavPanel .timelines-chevron{font-size:1.1em;margin-left:.8em}.NavPanel .timelines-background{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0 0 0 .6em}.NavPanel .timelines{background-color:#121a24;background-color:var(--bg,#121a24)}.NavPanel .nav-panel-heading{--panel-heading-height-padding:0px}.features-panel li{line-height:24px}.who-to-follow *{vertical-align:middle}.who-to-follow img{height:32px;width:32px}.who-to-follow{margin:0;padding:0 1em}.who-to-follow-items{margin:1em 0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.who-to-follow-more{margin:1em 0;padding:0;text-align:center}.floating-shout{bottom:.5em;max-width:25em;position:fixed;z-index:var(--ZI_popovers)}.floating-shout.-left{left:.5em}.floating-shout:not(.-left){right:.5em}.shout-panel .shout-heading{cursor:pointer}.shout-panel .shout-heading .icon{color:#b9b9ba;color:var(--panelText,#b9b9ba);margin-right:.5em}.shout-panel .shout-heading .title{align-items:center;display:flex;justify-content:space-between}.shout-panel .shout-window{max-height:20em;overflow-x:hidden;overflow-y:auto}.shout-panel .shout-window-container{height:100%}.shout-panel .shout-message{display:flex;padding:.2em .5em}.shout-panel .shout-avatar img{border-radius:4px;border-radius:var(--avatarRadius,4px);height:24px;margin-right:.5em;margin-top:.25em;width:24px}.shout-panel .shout-input{display:flex}.shout-panel .shout-input textarea{flex:1;margin:.6em;min-height:3.5em;resize:none}.shout-panel .shout-panel .title{display:flex;justify-content:space-between}@keyframes media-fadein{0%{opacity:0}to{opacity:1}}.media-modal-view .modal-image-container{max-height:100%;max-width:100%;overflow:hidden}.media-modal-view .modal-image-container,.media-modal-view .modal-image-container-inner{align-items:center;display:flex;flex-direction:column;flex-grow:1;height:100%;justify-content:center;width:100%}.media-modal-view .counter,.media-modal-view .description{color:#fff;margin-top:1em;padding:.2em 2em;text-shadow:0 0 10px #000,0 0 10px #000}.media-modal-view .description{flex:0 0 auto;max-height:9.5em;max-width:500px;min-height:1em;overflow-y:auto;word-break:break-all}.media-modal-view .modal-image{animation:media-fadein .1s cubic-bezier(.7,0,1,.6);image-orientation:from-image;max-height:100%;max-width:100%}.media-modal-view .modal-image.loading{opacity:.5}.media-modal-view .loading-spinner{align-items:center;display:flex;height:100%;justify-content:center;pointer-events:none;position:absolute;width:100%}.media-modal-view .loading-spinner svg{color:#fff}.media-modal-view .modal-view-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;box-shadow:none;cursor:pointer;height:3em;opacity:0;overflow:visible;padding:0;transition:opacity 333ms cubic-bezier(.4,0,.22,1);width:3em}.media-modal-view .modal-view-button .button-icon{background-color:rgba(0,0,0,.3);color:#fff;font-size:1rem;height:3em;line-height:3em;position:absolute;text-align:center;width:3em}.media-modal-view .modal-view-button-arrow{display:block;height:3em;margin-top:1.5em;position:absolute;top:50%;width:3em}.media-modal-view .modal-view-button-arrow .arrow-icon{background-color:rgba(0,0,0,.3);color:#fff;line-height:3em;position:absolute;text-align:center;top:0}.media-modal-view .modal-view-button-arrow--prev{left:0}.media-modal-view .modal-view-button-arrow--prev .arrow-icon{left:.5em}.media-modal-view .modal-view-button-arrow--next{right:0}.media-modal-view .modal-view-button-arrow--next .arrow-icon{right:.5em}.media-modal-view .modal-view-button-hide{position:absolute;right:0;top:0}.media-modal-view .modal-view-button-hide .button-icon{right:.5em;top:.5em}.modal-view.media-modal-view{flex-direction:column;overflow:hidden;z-index:var(--ZI_media_modal)}.modal-view.media-modal-view .modal-view-button-arrow,.modal-view.media-modal-view .modal-view-button-hide{opacity:.75}.modal-view.media-modal-view .modal-view-button-arrow:focus,.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:focus,.modal-view.media-modal-view .modal-view-button-hide:hover{box-shadow:none;outline:none}.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:hover{opacity:1}.side-drawer-container{align-items:stretch;display:flex;height:100%;left:0;position:fixed;top:0;transition-duration:0s;transition-property:transform;width:100%;z-index:var(--ZI_navbar)}.side-drawer-container-open{transform:translate(0)}.side-drawer-container-closed{transform:translate(-100%);transition-delay:.35s}.side-drawer-darken{background-color:rgba(0,0,0,.5);height:100vh;left:0;position:fixed;top:0;transition:.35s;transition-property:background-color;width:100vw;z-index:-1}.side-drawer-darken-closed{background-color:transparent}.side-drawer-click-outside{flex:1 1 100%}.side-drawer{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);color:#d8a070;color:var(--popoverText,#d8a070);flex:0 0 80%;margin:0 0 0 -100px;max-width:20em;overflow-x:hidden;padding:0 0 1em 100px;transition:.35s;transition-property:transform;transition-timing-function:cubic-bezier(0,1,.5,1);width:80%}.side-drawer .badge{margin-left:10px}.side-drawer-logo-wrapper{align-items:center;display:flex;padding:.85em}.side-drawer-logo-wrapper img{flex:none;height:50px;margin-right:.85em}.side-drawer-logo-wrapper span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-drawer-click-outside-closed{flex:0 0 0}.side-drawer-closed{transform:translate(-100%)}.side-drawer-heading{align-items:stretch;background:transparent;display:flex;flex-direction:column;margin:0;padding:0}.side-drawer ul{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);list-style:none;margin:0;padding:0}.side-drawer ul:last-child{border:0}.side-drawer li{padding:0}.side-drawer li a,.side-drawer li button{box-sizing:border-box;display:block;height:3em;line-height:3em;padding:0 .7em}.side-drawer li a:hover,.side-drawer li button:hover{--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#b9b9ba;color:var(--selectedMenuPopoverText,#b9b9ba)}.MobilePostButton.button-default{align-items:center;background-color:#182230;background-color:var(--btn,#182230);border-radius:100%;bottom:1.5em;box-shadow:0 2px 2px rgba(0,0,0,.3),0 4px 6px rgba(0,0,0,.3);display:flex;height:5em;justify-content:center;position:fixed;right:1.5em;transition:transform .35s;transition-timing-function:cubic-bezier(0,1,.5,1);width:5em;z-index:10}.MobilePostButton.hidden{transform:translateY(150%)}.MobilePostButton svg{color:#b9b9ba;color:var(--text,#b9b9ba);font-size:1.5em}@media (min-width:801px){.new-status-button:not(.always-show){display:none}}.ReplyButton{display:flex}.ReplyButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.ReplyButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ReplyButton .interactive.-active .svg-inline--fa,.ReplyButton .interactive:hover .svg-inline--fa{color:#0095ff;color:var(--cBlue,#0095ff)}.ReplyButton .interactive .focus-marker{visibility:hidden}.ReplyButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ReplyButton .interactive:focus .focus-marker,.ReplyButton .interactive:hover .focus-marker{visibility:visible}.ReplyButton .interactive:focus-visible .focus-marker{visibility:visible}.FavoriteButton{display:flex}.FavoriteButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.FavoriteButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.FavoriteButton .interactive .svg-inline--fa{animation-duration:.6s}.FavoriteButton .interactive.-favorited .svg-inline--fa,.FavoriteButton .interactive:hover .svg-inline--fa{color:orange;color:var(--cOrange,orange)}.FavoriteButton .interactive .focus-marker{visibility:hidden}.FavoriteButton .interactive .active-marker{visibility:visible}.FavoriteButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.FavoriteButton .interactive:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.FavoriteButton .interactive:focus .focus-marker,.FavoriteButton .interactive:hover .focus-marker{visibility:visible}.FavoriteButton .interactive:focus .active-marker,.FavoriteButton .interactive:hover .active-marker{visibility:hidden}.FavoriteButton .interactive:focus-visible .focus-marker{visibility:visible}.FavoriteButton .interactive:focus-visible .active-marker{visibility:hidden}.ReactButton .reaction-picker-filter{display:flex;padding:.5em}.ReactButton .reaction-picker-filter input{flex:1}.ReactButton .reaction-picker-divider{background-color:var(--border,#222);height:1px;margin:.5em;width:100%}.ReactButton .reaction-picker{align-content:flex-start;display:flex;flex-wrap:wrap;font-size:1.5em;height:9em;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;overflow-y:scroll;padding:.5em;text-align:center;transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:10em}.ReactButton .reaction-picker .emoji-button{align-content:center;cursor:pointer;flex-basis:20%;line-height:1.5}.ReactButton .reaction-picker .emoji-button:hover{transform:scale(1.25)}.ReactButton .popover-trigger{margin:-10px;padding:10px}.ReactButton .popover-trigger:hover .svg-inline--fa{color:#b9b9ba;color:var(--text,#b9b9ba)}.ReactButton .popover-trigger .focus-marker{visibility:hidden}.ReactButton .popover-trigger:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ReactButton .popover-trigger:focus .focus-marker,.ReactButton .popover-trigger:hover .focus-marker{visibility:visible}.ReactButton .popover-trigger:focus-visible .focus-marker{visibility:visible}.RetweetButton{display:flex}.RetweetButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.RetweetButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.RetweetButton .interactive .svg-inline--fa{animation-duration:.6s}.RetweetButton .interactive.-repeated .svg-inline--fa,.RetweetButton .interactive:hover .svg-inline--fa{color:#0fa00f;color:var(--cGreen,#0fa00f)}.RetweetButton .interactive .focus-marker{visibility:hidden}.RetweetButton .interactive .active-marker{visibility:visible}.RetweetButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.RetweetButton .interactive:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.RetweetButton .interactive:focus .focus-marker,.RetweetButton .interactive:hover .focus-marker{visibility:visible}.RetweetButton .interactive:focus .active-marker,.RetweetButton .interactive:hover .active-marker{visibility:hidden}.RetweetButton .interactive:focus-visible .focus-marker{visibility:visible}.RetweetButton .interactive:focus-visible .active-marker{visibility:hidden}.ExtraButtons .popover-trigger{margin:-10px;padding:10px;position:static}.ExtraButtons .popover-trigger:hover .svg-inline--fa{color:#b9b9ba;color:var(--text,#b9b9ba)}.ExtraButtons .popover-trigger-button{width:auto}.ExtraButtons .popover-trigger-button .focus-marker{visibility:hidden}.ExtraButtons .popover-trigger-button:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ExtraButtons .popover-trigger-button:focus .focus-marker,.ExtraButtons .popover-trigger-button:hover .focus-marker{visibility:visible}.ExtraButtons .popover-trigger-button:focus-visible .focus-marker{visibility:visible}.avatars{display:flex;flex-wrap:wrap;height:24px;margin:0;padding:0}.avatars .avatars-item{margin:0 0 5px 5px}.avatars .avatars-item:first-child{padding-left:5px}.avatars .avatars-item .avatar-small{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:24px;width:24px}.status-popover.popover{border-color:#222;border-color:var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);border-style:solid;border-width:1px;font-size:1rem;max-width:95%;min-width:15em}.status-popover.popover .Status.Status{border:none}.status-popover.popover .status-preview-no-content{padding:1em;text-align:center}.status-popover.popover .status-preview-no-content i{font-size:2em}.user-list-popover{--emoji-size:16px;padding:.5em}.user-list-popover .user-list-row{display:flex;flex-direction:row;padding:.25em}.user-list-popover .user-list-row .user-list-names{display:flex;flex-direction:column;margin-left:.5em;min-width:5em}.user-list-popover .user-list-row .user-list-names img{height:1em;width:1em}.user-list-popover .user-list-row .user-list-screen-name{font-size:.65em}.EmojiReactions{--emoji-size:calc(1.25em*var(--emojiReactionsScale, 1));display:flex;flex-wrap:wrap;margin-top:.25em}.EmojiReactions .emoji-reaction-container{align-items:stretch;display:flex;margin-right:.5em;margin-top:.5em}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover{padding:0}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button{align-items:center;background-color:var(--btn);border-bottom-left-radius:0;border-top-left-radius:0;box-sizing:border-box;color:#b9b9ba;color:var(--btnText,#b9b9ba);display:inline-flex;height:100%;justify-content:center;margin:0;min-width:2em}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button.-picked-reaction{border:1px solid var(--accent,#d8a070);margin-right:-1px}.EmojiReactions .emoji-reaction{align-items:center;border-bottom-right-radius:0;border-top-right-radius:0;box-sizing:border-box;display:flex;justify-content:center;margin:0;padding-left:.5em}.EmojiReactions .emoji-reaction .reaction-emoji{align-items:center;display:flex;height:var(--emoji-size);justify-content:center;line-height:var(--emoji-size);margin-right:.25em;width:var(--emoji-size)}.EmojiReactions .emoji-reaction .reaction-emoji-content{font-size:calc(var(--emoji-size)*.8);height:auto;line-height:inherit;margin:0;max-height:100%;max-width:100%;overflow:hidden;width:auto}.EmojiReactions .emoji-reaction:focus{outline:none}.EmojiReactions .emoji-reaction .svg-inline--fa{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.EmojiReactions .emoji-reaction.-picked-reaction{border:1px solid var(--accent,#d8a070);margin-left:-1px;margin-right:-1px}.EmojiReactions .emoji-reaction.-picked-reaction .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus .svg-inline--fa,.EmojiReactions .emoji-reaction:hover .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction:focus .focus-marker,.EmojiReactions .emoji-reaction:hover .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus .active-marker,.EmojiReactions .emoji-reaction:hover .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus-visible .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction:focus-visible .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus-visible .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction-expand{align-items:center;display:flex;justify-content:center;margin-right:.5em;margin-top:.5em;padding:0 .5em}.EmojiReactions .emoji-reaction-expand:hover{text-decoration:underline}.Status{word-wrap:break-word;min-width:0;white-space:normal;word-break:break-word}.Status:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Status.-focused{--lightText:var(--selectedPostLightText,$fallback--light);--faint:var(--selectedPostFaintText,$fallback--faint);--faintLink:var(--selectedPostFaintLink,$fallback--faint);--postLink:var(--selectedPostPostLink,$fallback--faint);--postFaintLink:var(--selectedPostFaintPostLink,$fallback--faint);--icon:var(--selectedPostIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedPost,#151e2a);color:#b9b9ba;color:var(--selectedPostText,#b9b9ba)}.Status .gravestone{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));display:flex;padding:var(--status-margin,.75em)}.Status .gravestone .deleted-text{align-items:center;margin:.5em 0}.Status .status-container{display:flex;padding:var(--status-margin,.75em)}.Status .status-container>*{min-width:0}.Status .status-container.-repeat{padding-top:0}.Status .pin{align-items:center;display:flex;justify-content:flex-end;padding:var(--status-margin,.75em) var(--status-margin,.75em) 0}._misclick-prevention .Status{pointer-events:none}._misclick-prevention .Status .attachments{cursor:auto;pointer-events:auto}.Status .left-side{margin-right:var(--status-margin,.75em)}.Status .right-side{flex:1;min-width:0}.Status .usercard{margin-bottom:var(--status-margin,.75em)}.Status .status-username{--_still_image-label-scale:0.25;--emoji-size:14px;flex-shrink:1;font-weight:700;margin-right:.4em;max-width:85%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .status-favicon{height:18px;margin-right:.4em;width:18px}.Status .status-heading{margin-bottom:.5em}.Status .heading-name-row{display:flex;justify-content:space-between;line-height:1.3}.Status .heading-name-row a{display:inline-block;word-break:break-all}.Status .account-name{flex:1 1 0;margin-right:.4em;min-width:1.6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .heading-left{display:flex;min-width:0}.Status .heading-right{display:flex;flex-shrink:0}.Status .heading-right .button-unstyled{margin:-5px;padding:5px}.Status .heading-right .button-unstyled:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.Status .heading-right .svg-inline--fa{margin-left:.25em}.Status .glued-label{display:inline-flex;white-space:nowrap}.Status .timeago{margin-right:.2em}.Status .heading-edited-row,.Status .heading-reply-row{align-content:baseline;align-items:stretch;font-size:.85em;line-height:130%;margin-top:.2em;max-width:100%;position:relative}.Status .mentions,.Status .reply-to-no-popover,.Status .reply-to-popover{flex-shrink:0;margin-right:.4em;min-width:0}.Status .reply-glued-label{margin-right:.5em}.Status .reply-to-popover .reply-to:hover:before{border-bottom:1px solid var(--faint);bottom:0;content:"";display:block;pointer-events:none;position:absolute;width:100%}.Status .reply-to-popover .faint-link:hover{text-decoration:none}.Status .reply-to-popover.-strikethrough .reply-to:after{border-bottom:1px solid var(--faint);content:"";display:block;pointer-events:none;position:absolute;top:50%;width:100%}.Status .mentions,.Status .reply-to{position:relative;white-space:nowrap}.Status .mentions-text,.Status .reply-to-text{color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .mentions-line{display:inline}.Status .replies{display:flex;flex-wrap:wrap;font-size:.85em;line-height:1.3;margin-top:.25em}.Status .replies>*{margin-right:.4em}.Status .reply-link{height:17px}.Status .repeat-info{padding:.4em var(--status-margin,.75em)}.Status .repeat-info .repeat-icon{color:#0fa00f;color:var(--cGreen,#0fa00f)}.Status .repeater-avatar{border-radius:var(--avatarAltRadius,10px);height:20px;margin-left:28px;width:20px}.Status .repeater-name{margin-right:0;text-overflow:ellipsis}.Status .repeater-name .emoji{height:14px;-o-object-fit:contain;object-fit:contain;vertical-align:middle;width:14px}.Status .status-fadein{animation-duration:.4s;animation-name:fadein}@keyframes fadein{0%{opacity:0}to{opacity:1}}.Status .status-actions{display:flex;margin-top:var(--status-margin,.75em);position:relative;width:100%}.Status .status-actions>*{flex:1;max-width:4em}.Status .muted{display:flex;flex-wrap:nowrap;height:1.2em;line-height:1.2em;overflow:hidden;padding:.25em .6em;text-overflow:ellipsis}.Status .muted .mute-thread,.Status .muted .mute-words,.Status .muted .status-username{word-wrap:normal;white-space:nowrap;word-break:normal}.Status .muted .mute-words,.Status .muted .status-username{overflow:hidden;text-overflow:ellipsis}.Status .muted .status-username{flex:0 1 auto;font-size:smaller;font-weight:400;margin-right:.2em}.Status .muted .mute-thread{flex:0 0 auto}.Status .muted .mute-words{flex:1 0 5em;margin-left:.2em}.Status .muted .mute-words:before{content:" "}.Status .muted .unmute{display:block;flex:0 0 auto;margin-left:auto}.Status .reply-form{padding-bottom:0;padding-top:0}.Status .reply-body{flex:1}.Status .favs-repeated-users{margin-top:var(--status-margin,.75em)}.Status .stats{display:flex;line-height:1em;width:100%}.Status .avatar-row{align-items:center;display:flex;flex:1;overflow:hidden;position:relative}.Status .avatar-row:before{background-color:var(--faint,hsla(240,1%,73%,.5));content:"";height:100%;left:0;position:absolute;width:1px}.Status .stat-count{margin-right:var(--status-margin,.75em);-webkit-user-select:none;-moz-user-select:none;user-select:none}.Status .stat-count .stat-title{color:var(--faint,hsla(240,1%,73%,.5));font-size:.85em;position:relative;text-transform:uppercase}.Status .stat-count .stat-number{font-size:1.1em;font-weight:bolder;line-height:1em}.Status .stat-count:hover .stat-title{text-decoration:underline}@media (max-width:800px){.Status .repeater-avatar{margin-left:20px}.Status .post-avatar{height:40px;width:40px}.Status .post-avatar.-compact{height:32px;width:32px}}.Status .quoted-status{border:1px solid var(--border,#222);border-radius:var(--attachmentRadius,10px);margin-top:.5em}.Status .quoted-status.-unavailable-prompt{padding:.5em}.Status .display-quoted-status-button{margin:.5em}.Status .display-quoted-status-button-icon{color:inherit}.Report .report-content,.Report .report-state{margin:.5em 0 1em}.Report .reported-status{border:1px solid hsla(240,1%,73%,.5);border-color:var(--faint,hsla(240,1%,73%,.5));border-radius:4px;border-radius:var(--inputRadius,4px);color:#b9b9ba;color:var(--text,#b9b9ba);display:block;margin:.5em 0;padding:.5em}.Report .reported-status .status-content{pointer-events:none}.Report .reported-status .reported-status-heading{display:flex;justify-content:space-between;margin-bottom:.2em;width:100%}.Report .reported-status .reported-status-name{font-weight:700}.Report .note{margin-bottom:.5em;width:100%}.Notification{word-wrap:break-word;--emoji-size:14px;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);word-break:break-word}.Notification:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Notification.-muted{display:flex;flex-wrap:nowrap;height:1.2em;line-height:1.2em;overflow:hidden;padding:.25em .6em;text-overflow:ellipsis}.Notification.-muted .mute-thread,.Notification.-muted .mute-words,.Notification.-muted .status-username{word-wrap:normal;white-space:nowrap;word-break:normal}.Notification.-muted .mute-words,.Notification.-muted .status-username{overflow:hidden;text-overflow:ellipsis}.Notification.-muted .status-username{flex:0 1 auto;font-size:smaller;font-weight:400;margin-right:.2em}.Notification.-muted .mute-thread{flex:0 0 auto}.Notification.-muted .mute-words{flex:1 0 5em;margin-left:.2em}.Notification.-muted .mute-words:before{content:" "}.Notification.-muted .unmute{display:block;flex:0 0 auto;margin-left:auto}.Notification .type-icon{margin:0 .1em}.Notification.-type--repeat .type-icon{color:#0fa00f;color:var(--cGreen,#0fa00f)}.Notification.-type--follow .type-icon,.Notification.-type--follow-request .type-icon{color:#0095ff;color:var(--cBlue,#0095ff)}.Notification.-type--like .type-icon{color:orange;color:var(--cOrange,orange)}.Notification.-type--move .type-icon{color:#0095ff;color:var(--cBlue,#0095ff)}.Notifications:not(.minimal){padding-bottom:15em}.Notifications .loadmore-error{color:#b9b9ba;color:var(--text,#b9b9ba)}.Notifications .notification{position:relative}.Notifications .notification .notification-overlay{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.Notifications .notification.unseen .notification-overlay{background-image:linear-gradient(135deg,var(--badgeNotification,red) 4px,transparent 10px)}.notification{box-sizing:border-box}.notification:hover .animated.Avatar canvas{display:none}.notification:hover .animated.Avatar img{visibility:visible}.notification:last-child .Notification{border-bottom:none}.notification .non-mention{display:flex;flex:1;flex-wrap:nowrap;min-width:0;padding:.6em}.notification .non-mention .avatar-container{height:32px;width:32px}.notification .non-mention .faint{--link:var(--faintLink);--text:var(--faint)}.notification .follow-request-accept:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}.notification .follow-request-reject:hover{color:red;color:var(--cRed,red)}.notification .follow-text,.notification .move-text{display:flex;justify-content:space-between;overflow-wrap:break-word;padding:.5em 0}.notification .follow-text .follow-name,.notification .move-text .follow-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification .Status{flex:1}.notification time{white-space:nowrap}.notification .notification-right{flex:1;min-width:0;padding-left:.8em}.notification .notification-right .timeago{min-width:3em;text-align:right}.notification .notification-right .timeago-link{margin-right:.2em}.notification .notification-right .expand-icon .svg-inline--fa{margin-left:.25em}.notification .emoji-reaction-emoji{font-size:1.3em;height:1.25em;max-width:1.25em;width:auto}.notification .emoji-reaction-emoji-image{-o-object-fit:contain;object-fit:contain;vertical-align:middle}.notification .notification-details{word-wrap:break-word;display:flex;flex:1 1 0;flex-wrap:nowrap;justify-content:space-between;line-height:var(--post-line-height);min-width:0;overflow:hidden;position:relative;width:100%}.notification .notification-details .name-and-action{flex:1;overflow:hidden;text-overflow:ellipsis}.notification .notification-details .username{font-weight:bolder;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.notification .notification-details .timeago{margin-right:.2em}.notification .notification-details .status-content{margin:0;max-height:300px}.notification .notification-details h1{font-size:1em;line-height:1.5;margin:0 0 .3em;padding:0;word-break:break-all}.notification .notification-details h1 small{font-weight:lighter}.notification .notification-details p{margin:0 0 .3em}.MobileNav{z-index:var(--ZI_navbar)}.MobileNav .mobile-nav{box-sizing:border-box;display:grid;grid-template-columns:2fr auto;grid-template-rows:50px;line-height:var(--navbar-height);width:100%}.MobileNav .mobile-nav a{color:var(--topBarLink,#d8a070)}.MobileNav .mobile-inner-nav{align-items:center;display:flex;width:100%}.MobileNav .mobile-nav-button{cursor:pointer;display:inline-block;padding:0 1em;position:relative;text-align:center}.MobileNav .site-name{display:inline-block;padding:0 .3em}.MobileNav .item{display:flex}.MobileNav .alert-dot{background-color:red;background-color:var(--badgeNotification,red);border-radius:100%;height:8px;left:calc(50% - 4px);margin-left:6px;margin-top:-6px;position:absolute;top:calc(50% - 4px);width:8px}.MobileNav .mobile-notifications-drawer{-webkit-overflow-scrolling:touch;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);height:100vh;left:0;overflow-x:hidden;position:fixed;top:0;transform:translateX(0);transition-duration:.25s;transition-property:transform;width:100%;z-index:var(--ZI_navbar)}.MobileNav .mobile-notifications-drawer.-closed{box-shadow:none;transform:translateX(100%)}.MobileNav .mobile-notifications-header{align-items:center;background-color:#182230;background-color:var(--topBar,#182230);box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow);color:var(--topBarText);display:flex;height:50px;justify-content:space-between;line-height:50px;position:absolute;width:100%;z-index:calc(var(--ZI_navbar) + 100)}.MobileNav .mobile-notifications-header .spacer{flex:1}.MobileNav .mobile-notifications-header .title{font-size:1.3em;margin-left:.6em}.MobileNav .pins{flex:1}.MobileNav .pins .pinned-item{flex-grow:1}.MobileNav .mobile-notifications{background-color:#121a24;background-color:var(--bg,#121a24);color:#b9b9ba;color:var(--text,#b9b9ba);height:calc(100vh - var(--navbar-height));margin-top:50px;overflow-x:hidden;overflow-y:scroll;width:100vw}.MobileNav .mobile-notifications .notifications{border-radius:0;box-shadow:none;padding:0}.MobileNav .mobile-notifications .notifications .panel{border-radius:0;box-shadow:none;margin:0}.MobileNav .mobile-notifications .notifications .panel:after{border-radius:0}.MobileNav .mobile-notifications .notifications .panel .panel-heading{border-radius:0;box-shadow:none}.MobileNav .confirm-modal.dark-overlay:before{z-index:3000}.MobileNav .confirm-modal.dark-overlay .dialog-modal.panel{z-index:3001}.SearchBar{align-items:baseline;display:inline-flex;justify-content:flex-end;vertical-align:baseline}.SearchBar.-expanded{width:100%}.SearchBar .search-bar-input,.SearchBar .search-button{height:29px}.SearchBar .search-bar-input{flex:1 0 auto}.SearchBar .cancel-search{height:50px}.SearchBar .cancel-icon{color:#b9b9ba;color:var(--btnTopBarText,#b9b9ba)}.DesktopNav{width:100%;z-index:var(--ZI_navbar)}.DesktopNav input{color:var(--inputTopbarText,var(--inputText))}.DesktopNav a{color:var(--topBarLink,#d8a070)}.DesktopNav .inner-nav{box-sizing:border-box;display:grid;grid-template-areas:"sitename logo actions";grid-template-columns:2fr auto 2fr;grid-template-rows:var(--navbar-height);margin:auto;max-width:980px;padding:0 1.2em}.DesktopNav.-column-stretch .inner-nav{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1em;max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--columnGap))}.DesktopNav.-logoLeft .inner-nav{grid-template-areas:"logo sitename actions";grid-template-columns:auto 2fr 2fr}.DesktopNav.-column-stretch.-wide .inner-nav{max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--notifsColumnWidth, var(--miniColumn)) + var(--columnGap))}.DesktopNav .button-default,.DesktopNav .button-default svg{color:#b9b9ba;color:var(--btnTopBarText,#b9b9ba)}.DesktopNav .button-default:active{background-color:#182230;background-color:var(--btnPressedTopBar,#182230);color:#b9b9ba;color:var(--btnPressedTopBarText,#b9b9ba)}.DesktopNav .button-default:disabled{color:#b9b9ba;color:var(--btnDisabledTopBarText,#b9b9ba)}.DesktopNav .button-default.toggled{background-color:#182230;background-color:var(--btnToggledTopBar,#182230);color:#b9b9ba;color:var(--btnToggledTopBarText,#b9b9ba)}.DesktopNav .logo{grid-area:logo;position:relative;transition:opacity;transition-duration:.1s;transition-timing-function:ease-out}@media (min-width:800px){.DesktopNav .logo{opacity:1!important}}.DesktopNav .logo .mask{background-color:#182230;background-color:var(--topBarText,#182230);bottom:0;left:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;right:0;top:0}.DesktopNav .logo img{display:inline-block;height:var(--navbar-height)}.DesktopNav .nav-icon{height:100%;margin-left:.2em;text-align:center;width:2em}.DesktopNav .nav-icon .svg-inline--fa{color:#d8a070;color:var(--topBarLink,#d8a070)}.DesktopNav .sitename{grid-area:sitename}.DesktopNav .actions{grid-area:actions}.DesktopNav .item{display:flex;flex:1;flex-wrap:wrap;height:var(--navbar-height);line-height:var(--navbar-height);overflow:hidden}.DesktopNav .item.right{justify-content:flex-end;text-align:right}.DesktopNav .spacer{width:1em}.list-item:not(:last-child){border-bottom:1px solid #222;border-bottom-color:var(--border,#222)}.list-empty-content{padding:10px;text-align:center}.user-reporting-panel{max-height:80vh;max-width:700px;min-height:20vh;width:90vw}.user-reporting-panel .panel-body{border-color:currentcolor #222 #222;border-top:1px solid #222;border-color:var(--border,#222);display:flex;flex-direction:column-reverse;overflow:hidden}.user-reporting-panel-left{box-sizing:border-box;line-height:var(--post-line-height);padding:1.1em .7em .7em}.user-reporting-panel-left>div{margin-bottom:1em}.user-reporting-panel-left>div:last-child{margin-bottom:0}.user-reporting-panel-left p{margin-top:0}.user-reporting-panel-left textarea.form-control{line-height:16px;min-height:44px;overflow:hidden;resize:none;transition:min-height .2s .1s;width:100%}.user-reporting-panel-left .btn{min-width:10em;padding:0 2em}.user-reporting-panel-left .alert{line-height:1.3em;margin:1em 0 0}.user-reporting-panel-right{display:flex;flex-direction:column;overflow-y:auto}.user-reporting-panel-sitem{display:flex;justify-content:space-between}.user-reporting-panel-sitem>.Status{flex:1}.user-reporting-panel-sitem>.checkbox{margin:.75em}@media (min-width:801px){.user-reporting-panel .panel-body{flex-direction:row}.user-reporting-panel-left{border-right:1px solid;border-color:#222;border-color:var(--border,#222);max-width:320px;padding:1.1em;width:50%}.user-reporting-panel-left>div{margin-bottom:2em}.user-reporting-panel-right{flex:1 1 auto;margin-bottom:12px;width:50%}}.modal-view.edit-form-modal-view{align-items:flex-start}.edit-form-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.edit-form-modal-panel{margin-top:8%}}.edit-form-modal-panel .form-bottom-left{max-width:6.5em}.edit-form-modal-panel .form-bottom-left .emoji-icon{justify-content:right}.modal-view.post-form-modal-view{align-items:flex-start}.post-form-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.post-form-modal-panel{margin-top:8%}}.modal-view.status-history-modal-view{align-items:flex-start}.status-history-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.status-history-modal-panel{margin-top:8%}}.global-notice-list{align-items:center;display:flex;flex-direction:column;pointer-events:none;position:fixed;top:calc(var(--navbar-height) + .5em);width:100%;z-index:var(--ZI_modals_popovers)}.global-notice-list .global-notice{display:flex;line-height:2;margin-bottom:.5em;max-width:calc(100% - 3em);padding-left:1.5em;pointer-events:auto;text-align:center;width:40em}.global-notice-list .global-notice .notice-message{flex:1 1 100%}.global-notice-list .global-error{background-color:var(--alertPopupError,red)}.global-notice-list .global-error,.global-notice-list .global-error .svg-inline--fa{color:var(--alertPopupErrorText,#b9b9ba)}.global-notice-list .global-warning{background-color:var(--alertPopupWarning,orange)}.global-notice-list .global-warning,.global-notice-list .global-warning .svg-inline--fa{color:var(--alertPopupWarningText,#b9b9ba)}.global-notice-list .global-success{background-color:var(--alertPopupSuccess,#0fa00f)}.global-notice-list .global-success,.global-notice-list .global-success .svg-inline--fa{color:var(--alertPopupSuccessText,#b9b9ba)}.global-notice-list .global-info{background-color:var(--alertPopupNeutral,#182230)}.global-notice-list .global-info,.global-notice-list .global-info .svg-inline--fa{color:var(--alertPopupNeutralText,#b9b9ba)}.global-notice-list .close-notice{padding-right:.2em}.global-notice-list .close-notice .svg-inline--fa:hover{opacity:.6}.panel{background-color:#121a24;background-color:var(--bg,#121a24);display:flex;flex-direction:column;position:relative}.panel,.panel:after{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel:after{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:5}.panel-body{padding:var(--panel-body-padding,0)}.panel-body:empty:before{content:"¯\\_(ツ)_/¯";display:block;margin:1em;text-align:center}.panel-body>p{line-height:1.3;margin:0;padding:1em}.panel-footer,.panel-heading{--panel-heading-height-padding:0.6em;--__panel-heading-gap:0.5em;--__panel-heading-height:3.2em;--__panel-heading-height-inner:calc(var(--__panel-heading-height) - var(--panel-heading-height-padding, 0)*2);grid-column-gap:var(--__panel-heading-gap);background-size:cover;box-sizing:border-box;display:grid;flex:none;grid-auto-columns:auto;grid-auto-flow:column;grid-template-columns:minmax(50%,1fr);height:var(--__panel-heading-height);line-height:var(--__panel-heading-height-inner);padding:var(--panel-heading-height-padding);position:relative;z-index:4}.panel-footer.-flexible-height,.panel-heading.-flexible-height{--__panel-heading-height:auto}.panel-footer.-flexible-height:after,.panel-footer.-flexible-height:before,.panel-heading.-flexible-height:after,.panel-heading.-flexible-height:before{display:none}.panel-footer.-stub,.panel-footer.-stub:after,.panel-heading.-stub,.panel-heading.-stub:after{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel-footer.-sticky,.panel-heading.-sticky{position:sticky;top:var(--navbar-height)}.panel-footer:after,.panel-footer:before,.panel-heading:after,.panel-heading:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.panel-footer .title,.panel-heading .title{font-size:1.3em}.panel-footer .alert,.panel-heading .alert{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-footer:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.alert,.panel-heading:not(.-flexible-height)>.button-default{align-self:stretch;box-sizing:border-box;height:var(--__panel-heading-height-inner);margin:0;min-height:0;min-width:1px;padding-bottom:0;padding-top:0}.panel-heading{align-items:start;background-color:#121a24;background-color:var(--bg,#121a24);border-width:0 0 1px;color:var(--panelText)}.panel-heading,.panel-heading:after{border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0}.panel-heading:after{background-color:#182230;background-color:var(--panel,#182230);box-shadow:var(--panelHeaderShadow);z-index:-2}.panel-heading .-link,.panel-heading a{color:#d8a070;color:var(--panelLink,#d8a070)}.panel-heading .button-unstyled:hover .iconLetter,.panel-heading .button-unstyled:hover .svg-inline--fa,.panel-heading .button-unstyled:hover i[class*=icon-],.panel-heading a:hover .iconLetter,.panel-heading a:hover .svg-inline--fa,.panel-heading a:hover i[class*=icon-]{color:var(--panelText)}.panel-heading .faint{background-color:transparent;color:hsla(240,1%,73%,.5);color:var(--panelFaint,hsla(240,1%,73%,.5))}.panel-heading .faint-link{color:hsla(240,1%,73%,.5);color:var(--faintLink,hsla(240,1%,73%,.5))}.panel-heading:not(.-flexible-height)>.button-default{flex-shrink:0}.panel-heading:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.button-default i[class*=icon-]{color:#b9b9ba;color:var(--btnPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default:active{background-color:#182230;background-color:var(--btnPressedPanel,#182230);color:#b9b9ba;color:var(--btnPressedPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default:disabled{color:#b9b9ba;color:var(--btnDisabledPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default.toggled{color:#b9b9ba;color:var(--btnToggledPanelText,#b9b9ba)}.panel-heading .rightside-button{align-self:stretch;height:var(--__panel-heading-height);margin:calc(var(--panel-heading-height-padding)*-1) 0;margin-right:calc(var(--__panel-heading-gap)*-1);text-align:center;width:var(--__panel-heading-height)}.panel-heading .rightside-button>button{box-sizing:border-box;height:100%;padding:calc(var(--panel-heading-height-padding)*1) 0;text-align:center;width:100%}.panel-heading .rightside-button>button svg{font-size:1.2em}.panel-heading .rightside-icon{align-self:stretch;margin-right:calc(var(--__panel-heading-gap)*-1);text-align:center;width:var(--__panel-heading-height)}.panel-heading .rightside-icon svg{font-size:1.2em}.panel-footer{align-items:center;border-color:var(--border,#222);border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px);border-style:solid;border-width:1px 0 0}:root{--navbar-height:3.5rem;--post-line-height:1.4;--ZI_media_modal:9000;--ZI_modals_popovers:8500;--ZI_modals:8000;--ZI_navbar_popovers:7500;--ZI_navbar:7000;--ZI_popovers:6000}html{font-size:14px}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#b9b9ba;color:var(--text,#b9b9ba);font-family:sans-serif;font-family:var(--interfaceFont,sans-serif);margin:0;overflow-x:clip;overflow-y:scroll;overscroll-behavior-y:none}body.hidden{display:none}@media(any-pointer:fine){*{scrollbar-color:var(--btn) transparent}::-webkit-scrollbar{background:transparent}::-webkit-scrollbar-button,::-webkit-scrollbar-thumb{background-color:var(--btn);border-radius:var(--btnRadius);box-shadow:var(--buttonShadow)}::-webkit-scrollbar-button{--___bgPadding:2px;background-repeat:no-repeat,no-repeat;color:var(--btnText)}::-webkit-scrollbar-button:horizontal{background-size:50% calc(50% - var(--___bgPadding)),50% calc(50% - var(--___bgPadding))}::-webkit-scrollbar-button:horizontal:increment{background-image:linear-gradient(45deg,var(--btnText) 50%,transparent 51%),linear-gradient(-45deg,transparent 50%,var(--btnText) 51%);background-position:top var(--___bgPadding) left 50%,right 50% bottom var(--___bgPadding)}::-webkit-scrollbar-button:horizontal:decrement{background-image:linear-gradient(45deg,transparent 50%,var(--btnText) 51%),linear-gradient(-45deg,var(--btnText) 50%,transparent 51%);background-position:bottom var(--___bgPadding) right 50%,left 50% top var(--___bgPadding)}::-webkit-scrollbar-button:vertical{background-size:calc(50% - var(--___bgPadding)) 50%,calc(50% - var(--___bgPadding)) 50%}::-webkit-scrollbar-button:vertical:increment{background-image:linear-gradient(-45deg,transparent 50%,var(--btnText) 51%),linear-gradient(45deg,transparent 50%,var(--btnText) 51%);background-position:right var(--___bgPadding) top 50%,left var(--___bgPadding) top 50%}::-webkit-scrollbar-button:vertical:decrement{background-image:linear-gradient(-45deg,var(--btnText) 50%,transparent 51%),linear-gradient(45deg,var(--btnText) 50%,transparent 51%);background-position:left var(--___bgPadding) top 50%,right var(--___bgPadding) top 50%}html{background:var(--wallpaper);scrollbar-color:var(--selectedMenu) var(--wallpaper)}}a{color:#d8a070;color:var(--link,#d8a070);text-decoration:none}h4{margin:0}.iconLetter{display:inline-block;font-weight:1000;text-align:center}.iconLetter,.svg-inline--fa,i[class*=icon-]{color:#666;color:var(--icon,#666)}.button-unstyled:hover>.iconLetter,.button-unstyled:hover>.svg-inline--fa,.button-unstyled:hover>i[class*=icon-],a:hover>.iconLetter,a:hover>.svg-inline--fa,a:hover>i[class*=icon-]{color:var(--text)}nav{background-color:#182230;background-color:var(--topBar,#182230);box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow);box-sizing:border-box;color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));height:var(--navbar-height);position:fixed;z-index:var(--ZI_navbar)}#sidebar{grid-area:sidebar}#modal{position:absolute;z-index:var(--ZI_modals)}.column.-scrollable{position:sticky;top:var(--navbar-height)}#main-scroller{grid-area:content;position:relative}#notifs-column{grid-area:notifs}.app-bg-wrapper{background-color:var(--wallpaper);background-image:var(--body-background-image);background-position:50%;background-repeat:no-repeat;background-size:cover;height:100%;left:0;position:fixed;right:-20px;top:var(--navbar-height);z-index:-1000}.underlay{background-color:rgba(0,0,0,.15);background-color:var(--underlay,rgba(0,0,0,.15));grid-column:1/span 3;grid-row:1/1;pointer-events:none;z-index:-1000}.app-layout{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1em;--status-margin:0.75em;--effectiveSidebarColumnWidth:minmax(var(--miniColumn),var(--sidebarColumnWidth,var(--miniColumn)));--effectiveNotifsColumnWidth:minmax(var(--miniColumn),var(--notifsColumnWidth,var(--miniColumn)));--effectiveContentColumnWidth:minmax(var(--miniColumn),var(--contentColumnWidth,var(--maxiColumn)));align-content:flex-start;flex-wrap:wrap;grid-template-areas:"sidebar content";grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth);grid-template-rows:1fr;justify-content:center;margin:0 auto;min-height:100vh;overflow-x:clip;position:relative}.app-layout,.app-layout .column{box-sizing:border-box;display:grid}.app-layout .column{--___columnMargin:var(--columnGap);align-content:start;grid-row:1/1;grid-template-columns:100%;margin:0 calc(var(--___columnMargin)/2);padding:calc(var(--___columnMargin)) 0;row-gap:var(--___columnMargin)}.app-layout .column:not(.-scrollable){margin-top:var(--navbar-height)}.app-layout .column:hover{z-index:2}.app-layout .column.-full-height{margin-bottom:0;padding-bottom:0;padding-top:0}.app-layout .column.-scrollable{--___paddingIncrease:calc(var(--columnGap)/2);margin-left:calc(var(--___paddingIncrease)*-1);max-height:calc(100vh - var(--navbar-height));overflow-x:hidden;overflow-y:auto;padding-left:calc(var(--___paddingIncrease) + var(--___columnMargin)/2);position:sticky;top:var(--navbar-height)}@supports(scrollbar-width:none) or (-webkit-text-fill-color:initial){.app-layout .column.-scrollable:not(.-show-scrollbar){margin-right:calc(var(--___paddingIncrease)*-1);padding-right:calc(var(--___paddingIncrease) + var(--___columnMargin)/2);scrollbar-width:none}.app-layout .column.-scrollable:not(.-show-scrollbar)::-webkit-scrollbar{display:block;width:0}}.app-layout .column.-scrollable .panel-heading.-sticky{top:calc(var(--columnGap)/-1)}.app-layout.-has-new-post-button .column{padding-bottom:10rem}.app-layout.-no-sticky-headers .column .panel-heading.-sticky{position:relative;top:0}.app-layout .column-inner{align-content:start;box-sizing:border-box;display:grid;grid-template-columns:100%;row-gap:1em}.app-layout.-reverse:not(.-wide,.-mobile){grid-template-areas:"content sidebar";grid-template-columns:var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth)}.app-layout.-wide{grid-template-areas:"sidebar content notifs";grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveNotifsColumnWidth)}.app-layout.-wide.-reverse{grid-template-areas:"notifs content sidebar";grid-template-columns:var(--effectiveNotifsColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth)}.app-layout.-mobile{grid-template-areas:"content";grid-template-columns:100vw;padding:0}.app-layout.-mobile .column{margin:var(--navbar-height) 0 0 0;padding-top:0}.app-layout.-mobile .panel,.app-layout.-mobile .panel-heading,.app-layout.-mobile .panel-heading:after,.app-layout.-mobile .panel-heading:before,.app-layout.-mobile .panel:after{border-top-left-radius:0;border-top-right-radius:0}.app-layout.-mobile #notifs-column,.app-layout.-mobile #sidebar,.app-layout.-normal #notifs-column{display:none}.text-center{text-align:center}.button-default{background-color:#182230;background-color:var(--btn,#182230);border:none;border-radius:4px;border-radius:var(--btnRadius,4px);box-shadow:0 0 2px 0 #000,inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.2);box-shadow:var(--buttonShadow);color:#b9b9ba;color:var(--btnText,#b9b9ba);cursor:pointer;font-family:sans-serif;font-family:var(--interfaceFont,sans-serif);font-size:1em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.button-default.-sublime{background:transparent}.button-default .svg-inline--fa,.button-default i[class*=icon-]{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.button-default::-moz-focus-inner{border:none}.button-default:hover{box-shadow:0 0 4px hsla(0,0%,100%,.3);box-shadow:var(--buttonHoverShadow)}.button-default:active{background-color:#182230;background-color:var(--btnPressed,#182230);box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow)}.button-default:active,.button-default:active i,.button-default:active svg{color:#b9b9ba;color:var(--btnPressedText,#b9b9ba)}.button-default:disabled{background-color:#182230;background-color:var(--btnDisabled,#182230);cursor:not-allowed}.button-default:disabled,.button-default:disabled i,.button-default:disabled svg{color:#b9b9ba;color:var(--btnDisabledText,#b9b9ba)}.button-default.toggled{background-color:#182230;background-color:var(--btnToggled,#182230);box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow)}.button-default.toggled,.button-default.toggled i,.button-default.toggled svg{color:#b9b9ba;color:var(--btnToggledText,#b9b9ba)}.button-default.danger{background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5));color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba)}.button-unstyled{background:none;border:none;box-sizing:content-box;color:inherit;cursor:pointer;display:inline;font-family:inherit;font-size:100%;line-height:unset;outline:none;padding:0;text-align:initial}.button-unstyled.-link{color:#d8a070;color:var(--link,#d8a070)}.button-unstyled.-fullwidth{width:100%}.button-unstyled.-hover-highlight:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.input,input,textarea{--_padding:0.5em;background-color:#182230;background-color:var(--input,#182230);border:none;border-radius:4px;border-radius:var(--inputRadius,4px);box-shadow:inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2),inset 0 0 2px 0 #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:#b9b9ba;color:var(--inputText,#b9b9ba);display:inline-block;font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:2;margin:0;padding:0 var(--_padding);position:relative}.input.unstyled,input.unstyled,textarea.unstyled{background:none;border-radius:0;box-shadow:none;height:unset}.input.disabled,.input:disabled,.input[disabled=disabled],input.disabled,input:disabled,input[disabled=disabled],textarea.disabled,textarea:disabled,textarea[disabled=disabled]{cursor:not-allowed;opacity:.5}.input[type=range],input[type=range],textarea[type=range]{background:none;border:none;box-shadow:none;flex:1;margin:0}.input[type=radio],input[type=radio],textarea[type=radio]{display:none}.input[type=radio]:checked+label:before,input[type=radio]:checked+label:before,textarea[type=radio]:checked+label:before{background-color:var(--accent,#d8a070);box-shadow:inset 0 0 2px #000,inset 0 0 0 4px #182230;box-shadow:var(--inputShadow),0 0 0 4px var(--fg,#182230) inset}.input[type=radio]:disabled,.input[type=radio]:disabled+label,.input[type=radio]:disabled+label:before,input[type=radio]:disabled,input[type=radio]:disabled+label,input[type=radio]:disabled+label:before,textarea[type=radio]:disabled,textarea[type=radio]:disabled+label,textarea[type=radio]:disabled+label:before{opacity:.5}.input[type=radio]+label:before,input[type=radio]+label:before,textarea[type=radio]+label:before{background-color:#182230;background-color:var(--input,#182230);border-radius:100%;box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"";display:inline-block;flex-shrink:0;font-size:1.1em;height:1.1em;line-height:1.1;margin-right:.5em;overflow:hidden;text-align:center;transition:box-shadow .2s;vertical-align:top;width:1.1em}.input[type=checkbox]:checked+label:before,input[type=checkbox]:checked+label:before,textarea[type=checkbox]:checked+label:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.input[type=checkbox]:disabled,.input[type=checkbox]:disabled+label,.input[type=checkbox]:disabled+label:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled+label,input[type=checkbox]:disabled+label:before,textarea[type=checkbox]:disabled,textarea[type=checkbox]:disabled+label,textarea[type=checkbox]:disabled+label:before{opacity:.5}.input[type=checkbox]+label:before,input[type=checkbox]+label:before,textarea[type=checkbox]+label:before{background-color:#182230;background-color:var(--input,#182230);border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"✓";display:inline-block;flex-shrink:0;font-size:1.1em;height:1.1em;line-height:1.1;margin-right:.5em;overflow:hidden;text-align:center;transition:color .2s;vertical-align:top;width:1.1em}.input.resize-height,input.resize-height,textarea.resize-height{resize:vertical}textarea{line-height:var(--post-line-height);padding:var(--_padding)}option{background-color:#121a24;background-color:var(--bg,#121a24);color:#b9b9ba;color:var(--text,#b9b9ba)}.hide-number-spinner{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.hide-number-spinner[type=number]::-webkit-inner-spin-button,.hide-number-spinner[type=number]::-webkit-outer-spin-button{display:none;opacity:0}.cards-list{display:grid;grid-auto-flow:row dense;grid-template-columns:1fr 1fr;list-style:none}.cards-list li{border:1px solid var(--border);border-radius:var(--inputRadius);margin:.25em;padding:.5em}.btn-block{display:block;width:100%}.btn-group{display:inline-flex;position:relative;vertical-align:middle}.btn-group .button-dropdown,.btn-group button{flex:1 1 auto;position:relative}.btn-group .button-dropdown:not(:last-child),.btn-group .button-dropdown:not(:last-child) .button-default,.btn-group button:not(:last-child),.btn-group button:not(:last-child) .button-default{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .button-dropdown:not(:first-child),.btn-group .button-dropdown:not(:first-child) .button-default,.btn-group button:not(:first-child),.btn-group button:not(:first-child) .button-default{border-bottom-left-radius:0;border-top-left-radius:0}.fa{color:gray}.mobile-shown{display:none}.badge{border-radius:99px;box-sizing:border-box;display:inline-block;font-size:.9em;font-style:normal;font-weight:400;height:1.3em;line-height:1;max-width:10em;min-width:1.7em;overflow:hidden;padding:.15em;text-align:center;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.badge.badge-notification{background-color:red;background-color:var(--badgeNotification,red);color:#fff;color:var(--badgeNotificationText,#fff)}.alert{border-radius:5px;border-radius:var(--tooltipRadius,5px);margin:0 .35em;padding:0 .25em}.alert.error{background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5));color:#b9b9ba;color:var(--alertErrorText,#b9b9ba)}.panel-heading .alert.error{color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba)}.alert.warning{background-color:rgba(111,111,20,.5);background-color:var(--alertWarning,rgba(111,111,20,.5));color:#b9b9ba;color:var(--alertWarningText,#b9b9ba)}.panel-heading .alert.warning{color:#b9b9ba;color:var(--alertWarningPanelText,#b9b9ba)}.alert.success{background-color:var(--alertSuccess,rgba(111,111,20,.5));color:var(--alertSuccessText,#b9b9ba)}.panel-heading .alert.success{color:var(--alertSuccessPanelText,#b9b9ba)}.faint,.faint-link{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.faint-link:hover{text-decoration:underline}.visibility-notice{border:1px solid hsla(240,1%,73%,.5);border:1px solid var(--faint,hsla(240,1%,73%,.5));border-radius:4px;border-radius:var(--inputRadius,4px);padding:.5em}.notice-dismissible{padding-right:4rem;position:relative}.notice-dismissible .dismiss{color:inherit;padding:.5em;position:absolute;right:0;top:0}.fa-scale-110.iconLetter,.fa-scale-110.svg-inline--fa{font-size:1.1em}.fa-old-padding-layer,.fa-old-padding.iconLetter,.fa-old-padding.svg-inline--fa{padding:0 .3em}.veryfaint{opacity:.25}.login-hint{text-align:center}@media (min-width:801px){.login-hint{display:none}}.login-hint a{display:inline-block;padding:1em 0;width:100%}.btn.button-default{min-height:2em}.new-status-notification{flex:1;font-size:1.1em;position:relative;z-index:1}@media (max-width:800px){.mobile-hidden{display:none}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes shakeError{0%{transform:translateX(0)}15%{transform:translateX(.375rem)}30%{transform:translateX(-.375rem)}45%{transform:translateX(.375rem)}60%{transform:translateX(-.375rem)}75%{transform:translateX(.375rem)}90%{transform:translateX(-.375rem)}to{transform:translateX(0)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter-from,.fade-leave-active{opacity:0}.visible-for-screenreader-only{clip:rect(0 0 0 0);display:block;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;visibility:visible;width:1px}.thread-tree-replies{border-left:2px solid var(--border,#222);margin-left:var(--status-margin,.75em)}.thread-tree-replies-hidden{align-items:stretch;display:flex;flex-direction:column;padding:var(--status-margin,.75em)}.Conversation{z-index:1}.Conversation .conversation-dive-to-top-level-box{align-items:stretch;border-bottom:1px solid var(--border,#222);border-radius:0;display:flex;flex-direction:column;padding:var(--status-margin,.75em)}.Conversation .thread-ancestors{border-left:2px solid var(--border,#222);margin-left:var(--status-margin,.75em)}.Conversation .thread-ancestor.-faded .StatusContent{--link:var(--faintLink);--text:var(--faint);color:var(--text)}.Conversation .thread-ancestor-dive-box{border-bottom:1px solid var(--border,#222);border-radius:0;padding-left:var(--status-margin,.75em)}.Conversation .thread-ancestor-dive-box,.Conversation .thread-ancestor-dive-box-inner{align-items:stretch;display:flex;flex-direction:column}.Conversation .thread-ancestor-dive-box-inner{padding:var(--status-margin,.75em)}.Conversation .conversation-status{border-bottom:1px solid var(--border,#222);border-radius:0}.Conversation .thread-ancestor-has-other-replies .conversation-status,.Conversation .thread-ancestor:last-child .conversation-status,.Conversation .thread-ancestor:last-child .thread-ancestor-dive-box,.Conversation.-expanded .thread-tree .conversation-status,.Conversation:last-child .conversation-status{border-bottom:none}.Conversation .thread-ancestors+.thread-tree>.conversation-status{border-top:1px solid var(--border,#222)}.Conversation.status-fadein.-expanded .thread-body{border-bottom:1px solid var(--border,#222);border-left:4px solid red;border-left-color:var(--cRed,red);border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px)}.Conversation.-expanded.status-fadein{margin:calc(var(--status-margin, .75em)/2)}.timeline-menu-popover{border-top-left-radius:0;border-top-right-radius:0;font-size:1rem;margin-top:.6rem;max-width:100vw;min-width:24rem}.timeline-menu-popover ul{list-style:none;margin:0;padding:0}.timeline-menu-popover a{display:block;height:3.5em;line-height:3.5em;padding:0 .65em}.timeline-menu-popover a:hover{color:#d8a070;color:var(--selectedMenuText,#d8a070)}.timeline-menu-popover a.router-link-active,.timeline-menu-popover a:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a)}.timeline-menu-popover a.router-link-active{color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba);font-weight:bolder}.timeline-menu-popover a.router-link-active:hover{text-decoration:underline}.timeline-menu-popover a svg{margin-left:-.2em;margin-right:.4em}.timeline-menu-popover li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0}.timeline-menu-popover li:last-child a{border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px);border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px)}.timeline-menu-popover li:last-child{border:none}.TimelineMenu{margin-right:auto;min-width:0}.TimelineMenu .popover-trigger-button{vertical-align:bottom}.TimelineMenu .panel:after{border-top-left-radius:0;border-top-right-radius:0}.TimelineMenu .timeline-menu-title{cursor:pointer;display:flex;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.TimelineMenu .timeline-menu-title .timeline-menu-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.TimelineMenu .timeline-menu-title svg{margin-left:.6em;transition:transform .1s}.TimelineMenu .timeline-menu-title .click-blocker{cursor:default;flex-grow:1}.TimelineMenu.open .timeline-menu-title svg{color:#b9b9ba;color:var(--panelText,#b9b9ba);transform:rotate(180deg)}.TimelineMenu .panel{box-shadow:var(--popoverShadow)}.Timeline .alert-dot{border-radius:100%;height:8px;left:calc(50% - 4px);margin-left:6px;margin-top:-6px;top:calc(50% - 4px);width:8px}.Timeline .alert-badge,.Timeline .alert-dot{background-color:var(--badgeNeutral);position:absolute}.Timeline .alert-badge{border-radius:var(--tooltipRadius);color:var(--badgeNeutralText);font-size:.75em;left:calc(50% - .5em);line-height:1;margin-left:.7em;margin-top:-1em;padding:.2em;text-align:right;top:calc(50% - .4em)}.Timeline .loadmore-button{position:relative}.Timeline.-blocked{cursor:progress}.Timeline .conversation-heading{top:calc(var(--__panel-heading-height)*var(--currentPanelStack, 2));z-index:2}.Timeline.-nonpanel .timeline-heading{line-height:2.75em;padding:0 .5em;text-align:center}.Timeline.-nonpanel .timeline-heading .alert,.Timeline.-nonpanel .timeline-heading .button-default{line-height:2em;width:100%}.tab-switcher{display:flex}.tab-switcher .tab-icon{display:block;margin:.2em auto}.tab-switcher.top-tabs{flex-direction:column}.tab-switcher.top-tabs>.tabs{flex:0 0 auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding-top:5px;width:100%}.tab-switcher.top-tabs>.tabs:after,.tab-switcher.top-tabs>.tabs:before{border-bottom:1px solid #222;border-bottom-color:var(--border,#222);content:"";flex:1 1 auto}.tab-switcher.top-tabs>.tabs .tab-wrapper{height:2em}.tab-switcher.top-tabs>.tabs .tab-wrapper:not(.active):after{border-bottom:1px solid #222;border-bottom-color:var(--border,#222);bottom:0;left:0;right:0}.tab-switcher.top-tabs>.tabs .tab{border-bottom-left-radius:0;border-bottom-right-radius:0;margin-bottom:-93px;min-width:1px;padding-bottom:99px;width:100%}.tab-switcher.top-tabs .contents.scrollable-tabs{flex-basis:0}.tab-switcher.side-tabs{flex-direction:row}@media (max-width:800px){.tab-switcher.side-tabs{overflow-x:auto}}.tab-switcher.side-tabs>.contents{flex:1 1 auto}.tab-switcher.side-tabs>.tabs{flex:0 0 auto;flex-direction:column;overflow-x:hidden;overflow-y:auto}.tab-switcher.side-tabs>.tabs:after,.tab-switcher.side-tabs>.tabs:before{border-right:1px solid #222;border-right-color:var(--border,#222);content:"";flex-basis:.5em;flex-shrink:0}.tab-switcher.side-tabs>.tabs:after{flex-grow:1}.tab-switcher.side-tabs>.tabs:before{flex-grow:0}.tab-switcher.side-tabs>.tabs .tab-wrapper{display:flex;flex-direction:column;min-width:10em}@media (max-width:800px){.tab-switcher.side-tabs>.tabs .tab-wrapper{min-width:4em}}.tab-switcher.side-tabs>.tabs .tab-wrapper:not(.active):after{border-right:1px solid #222;border-right-color:var(--border,#222);bottom:0;right:0;top:0}.tab-switcher.side-tabs>.tabs .tab-wrapper:before{border-right:1px solid #222;border-right-color:var(--border,#222);content:"";flex:0 0 6px}.tab-switcher.side-tabs>.tabs .tab-wrapper:last-child .tab{margin-bottom:0}.tab-switcher.side-tabs>.tabs .tab{border-bottom-right-radius:0;border-top-right-radius:0;box-sizing:content-box;flex:1;margin-left:1em;margin-right:-200px;min-width:10em;min-width:1px;padding-left:1em;padding-right:calc(1em + 200px)}@media (max-width:800px){.tab-switcher.side-tabs>.tabs .tab{margin-left:.25em;margin-right:calc(.25em - 200px);padding-left:.25em;padding-right:calc(.25em + 200px)}.tab-switcher.side-tabs>.tabs .tab .text{display:none}}.tab-switcher .contents{flex:1 0 auto;min-height:0}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents .full-height:not(.hidden){display:flex;flex-direction:column;height:100%}.tab-switcher .contents .full-height:not(.hidden)>:not(.mobile-label){flex:1}.tab-switcher .contents.scrollable-tabs{overflow-y:auto}.tab-switcher .tab{padding:6px 1em;position:relative;white-space:nowrap}.tab-switcher .tab:not(.active){z-index:4}.tab-switcher .tab:not(.active):hover{z-index:6}.tab-switcher .tab.active{background:transparent;color:#b9b9ba;color:var(--tabActiveText,#b9b9ba);z-index:5}.tab-switcher .tab img{margin-top:-5px;max-height:26px;vertical-align:top}.tab-switcher .tabs{box-sizing:border-box;display:flex;position:relative}.tab-switcher .tabs:after,.tab-switcher .tabs:before{display:block;flex:1 1 auto}.tab-switcher .tab-wrapper{display:flex;flex:0 0 auto;position:relative}.tab-switcher .tab-wrapper:not(.active):after{content:"";position:absolute;z-index:7}.tab-switcher .mobile-label{border-bottom:1px solid var(--border,#222);margin-bottom:.25em;margin-left:.2em;margin-top:.5em;padding-bottom:.25em;padding-left:.3em}@media (min-width:800px){.tab-switcher .mobile-label{display:none}}.chat-title{--emoji-size:14px;display:flex}.chat-title,.chat-title .username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-title .username{word-wrap:break-word;display:inline;max-width:100%}.chat-title .avatar-container{align-self:center;line-height:1}.chat-title .titlebar-avatar{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:1.5em;margin-right:.5em;width:1.5em}.chat-title .titlebar-avatar.animated:before{display:none}.chat-list-item{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:row;height:5em;overflow:hidden;padding:.75em}.chat-list-item :focus{outline:none}.chat-list-item:hover{background-color:var(--selectedPost,#151e2a);box-shadow:0 0 3px 1px rgba(0,0,0,.1)}.chat-list-item .chat-list-item-left{margin-right:1em}.chat-list-item .chat-list-item-center{word-wrap:break-word;box-sizing:border-box;overflow:hidden;width:100%}.chat-list-item .heading{display:inline-flex;justify-content:space-between;line-height:1em;width:100%}.chat-list-item .heading-right{white-space:nowrap}.chat-list-item .name-and-account-name{flex-shrink:1;line-height:var(--post-line-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-list-item .chat-preview{color:#b9b9ba;color:var(--faint,#b9b9ba);display:inline-flex;margin:.35em 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.chat-list-item a{color:var(--faintLink,#d8a070);pointer-events:none;text-decoration:none}.chat-list-item:hover .animated.avatar canvas{display:none}.chat-list-item:hover .animated.avatar img{visibility:visible}.chat-list-item .Avatar{border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.chat-list-item .chat-preview-body{--emoji-size:1.4em;padding-right:1em}.chat-list-item .time-wrapper{line-height:var(--post-line-height)}.basic-user-card{--emoji-size:14px;display:flex;flex:1 0;margin:0;padding:.6em 1em}.basic-user-card-collapsed-content{flex:1;margin-left:.7em;min-width:0;text-align:left}.basic-user-card-user-name img{height:16px;-o-object-fit:contain;object-fit:contain;vertical-align:middle;width:16px}.basic-user-card-screen-name,.basic-user-card-user-name-value{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.basic-user-card-expanded-content{flex:1;margin-left:.7em;min-width:0}.chat-new .input-wrap{display:flex;margin:.7em .5em}.chat-new .input-wrap input{width:100%}.chat-new .search-icon{margin-right:.3em}.chat-new .member-list{padding-bottom:.7rem}.chat-new .basic-user-card:hover{background-color:var(--selectedPost,#151e2a);cursor:pointer}.chat-new .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.chat-list{margin-bottom:0;min-height:25em}.emtpy-chat-list-alert{color:#b9b9ba;color:var(--faint,#b9b9ba);display:flex;font-size:1.2em;justify-content:center;padding:3em}.chat-message-wrapper.hovered-message-chain .animated.Avatar canvas{display:none}.chat-message-wrapper.hovered-message-chain .animated.Avatar img{visibility:visible}.chat-message-wrapper .chat-message-menu{opacity:0;position:absolute;top:-.8em;transition:opacity .1s}.chat-message-wrapper .chat-message-menu button{padding-bottom:.2em;padding-top:.2em}.chat-message-wrapper .menu-icon{cursor:pointer}.chat-message-wrapper .menu-icon:hover,.extra-button-popover.open .chat-message-wrapper .menu-icon{color:#b9b9ba;color:var(--text,#b9b9ba)}.chat-message-wrapper .popover{width:12em}.chat-message-wrapper .chat-message{display:flex;padding-bottom:.5em}.chat-message-wrapper .chat-message .status-body:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.chat-message-wrapper .avatar-wrapper{margin-right:.72em;width:32px}.chat-message-wrapper .attachments,.chat-message-wrapper .link-preview{margin-bottom:1em}.chat-message-wrapper .status{border-radius:10px;border-radius:var(--chatMessageRadius,10px);display:flex;padding:.75em}.chat-message-wrapper .created-at{float:right;font-size:.8em;font-style:italic;margin:-1em 0 -.5em;opacity:.8;position:relative}.chat-message-wrapper .without-attachment .message-content .RichContent:after{content:" ";display:inline-block;margin-right:5.4em}.chat-message-wrapper .pending .created-at,.chat-message-wrapper .pending .status-content.media-body{color:var(--faint)}.chat-message-wrapper .error .created-at,.chat-message-wrapper .error .status-content.media-body{color:red;color:var(--badgeNotification,red)}.chat-message-wrapper .chat-message-inner{align-items:flex-start;display:flex;flex-direction:column;max-width:80%;min-width:10em;width:100%}.chat-message-wrapper .outgoing{align-content:end;display:flex;flex-flow:row wrap;justify-content:flex-end}.chat-message-wrapper .outgoing a{color:var(--chatMessageOutgoingLink,#d8a070)}.chat-message-wrapper .outgoing .status{background-color:var(--chatMessageOutgoingBg,#151e2a);border:1px solid var(--chatMessageOutgoingBorder,--lightBg);color:var(--chatMessageOutgoingText,#b9b9ba)}.chat-message-wrapper .outgoing .chat-message-inner{align-items:flex-end}.chat-message-wrapper .outgoing .chat-message-menu{right:.4rem}.chat-message-wrapper .incoming a{color:var(--chatMessageIncomingLink,#d8a070)}.chat-message-wrapper .incoming .status{background-color:var(--chatMessageIncomingBg,#121a24);border:1px solid var(--chatMessageIncomingBorder,--border)}.chat-message-wrapper .incoming .created-at a,.chat-message-wrapper .incoming .status{color:var(--chatMessageIncomingText,#b9b9ba)}.chat-message-wrapper .incoming .chat-message-menu{left:.4rem}.chat-message-wrapper .chat-message-inner.with-media,.chat-message-wrapper .chat-message-inner.with-media .status{width:100%}.chat-message-wrapper .visible{opacity:1}.chat-message-date-separator{color:#b9b9ba;color:var(--faintedText,#b9b9ba);font-size:.9em;margin:1.4em 0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chat-view{display:flex;height:100%}.chat-view .chat-view-inner{display:flex;height:auto;overflow:visible;width:100%}.chat-view .chat-view-body{background-color:var(--chatBg,#121a24);border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0;box-sizing:border-box;display:flex;flex-direction:column;margin:0;min-height:calc(100vh - var(--navbar-height));overflow:visible;width:100%}.chat-view .chat-view-body:after{border-radius:0}.chat-view .message-list{display:flex;flex-direction:column;height:100%;justify-content:end;padding:0 .8em}.chat-view .footer{background-color:#121a24;background-color:var(--bg,#121a24);bottom:0;position:sticky;z-index:1}.chat-view .chat-view-heading{grid-template-columns:auto minmax(50%,1fr)}.chat-view .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.chat-view .jump-to-bottom-button{align-items:center;background-color:#182230;background-color:var(--btn,#182230);border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.3),0 2px 4px rgba(0,0,0,.3);cursor:pointer;display:flex;height:2.5em;justify-content:center;opacity:0;position:absolute;right:1.3em;top:-3.2em;transition:all .35s;transition-timing-function:cubic-bezier(0,1,.5,1);visibility:hidden;width:2.5em;z-index:10}.chat-view .jump-to-bottom-button.visible{opacity:1;visibility:visible}.chat-view .jump-to-bottom-button i{color:#b9b9ba;color:var(--text,#b9b9ba);font-size:1em}.chat-view .jump-to-bottom-button .unread-message-count{border-radius:50px;font-size:.8em;left:50%;margin-top:-1rem;padding:.1em;position:absolute}.chat-view .jump-to-bottom-button .chat-loading-error{align-items:flex-end;display:flex;height:100%;width:100%}.chat-view .jump-to-bottom-button .chat-loading-error .error{width:100%}.follow-card-content-container{display:flex;flex-flow:row wrap;flex-shrink:0;justify-content:space-between;line-height:1.5em}.follow-card-button{margin-left:1em;margin-top:.5em;padding:0 1.5em}.follow-card-follow-button{margin-left:auto;margin-top:.5em;width:10em}.with-load-more-footer{border-top:1px solid #222;border-top-color:var(--border,#222);padding:10px;text-align:center}.with-load-more-footer .error{font-size:1rem}.with-load-more-footer a{cursor:pointer}.user-profile{--currentPanelStack:1;flex:2;flex-basis:500px}.user-profile .user-birthday{margin:0 .75em .5em}.user-profile .user-profile-fields{margin:0 .5em}.user-profile .user-profile-fields img{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.user-profile .user-profile-fields img.emoji{height:18px;width:18px}.user-profile .user-profile-fields .user-profile-field{border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);display:flex;margin:.25em}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name{border-right:1px solid var(--border,#222);color:var(--lightText);flex:0 1 30%;font-weight:500;min-width:120px;text-align:right}.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{color:var(--text);flex:1 1 70%;margin:0 0 0 .25em}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name,.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{box-sizing:border-box;line-height:1.3;overflow:hidden;padding:.5em 1.5em;text-overflow:ellipsis;white-space:nowrap}.user-profile .userlist-placeholder{align-items:middle;display:flex;justify-content:center;padding:2em}.user-profile-placeholder .panel-body{align-items:middle;display:flex;justify-content:center;padding:7em}.search-result-heading{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));padding:.75rem;text-align:center}@media (max-width:800px){.search-nav-heading .tab-switcher .tabs .tab-wrapper{display:block;flex:1 1 auto;justify-content:center;text-align:center}}.search-result{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);box-sizing:border-box}.search-result-footer{background-color:#182230;background-color:var(--panel,#182230);border-color:var(--border,#222);border-style:solid;border-width:1px 0 0;padding:10px}.search-input-container{display:flex;justify-content:center;padding:.8rem}.search-input-container .search-input{box-sizing:border-box;font-size:1rem;line-height:1.125rem;padding:.5rem;width:100%}.search-input-container .search-button{margin-left:.5em}.loading-icon{padding:1em}.trend{align-items:center;display:flex}.trend .hashtag{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trend .count,.trend .hashtag{color:#b9b9ba;color:var(--text,#b9b9ba)}.trend .count{flex:0 0 auto;font-size:1.5rem;font-weight:500;line-height:2.25rem;text-align:center;width:2rem}.more-statuses-button{height:3.5em;line-height:3.5em}.interface-language-switcher .language-select{margin-right:1em}.registration-form{display:flex;flex-direction:column;margin:.6em}.registration-form .container{display:flex;flex-direction:row}.registration-form .container>*{min-width:0}.registration-form .terms-of-service{flex:0 1 50%;margin:.8em}.registration-form .text-fields{display:flex;flex:1 0;flex-direction:column;margin-top:.6em}.registration-form textarea{min-height:100px;resize:vertical}.registration-form .form-group{display:flex;flex-direction:column;line-height:2;margin-bottom:1em;padding:.3em 0}.registration-form .form-group--error{animation-duration:.6s;animation-name:shakeError;animation-timing-function:ease-in-out}.registration-form .form-group--error .form--label{color:#f04124;color:var(--cRed,#f04124)}.registration-form .form-error{margin-top:-.7em;text-align:left}.registration-form .form-error span{font-size:.85em}.registration-form .form-error ul{list-style:none;margin-top:0;padding:0 0 0 5px}.registration-form .form-error ul li:before{content:"• "}.registration-form form textarea{line-height:16px;resize:vertical}.registration-form .captcha{margin-bottom:.4em;max-width:350px}.registration-form .btn{height:2em;margin-top:.6em}.registration-form .error{text-align:center}@media (max-width:800px){.registration-form .container{flex-direction:column-reverse}}.password-reset-form{align-items:center;display:flex;flex-direction:column;margin:.6em}.password-reset-form .container{display:flex;flex:1 0;flex-direction:column;margin-top:.6em;max-width:18rem}.password-reset-form .container>*{min-width:0}.password-reset-form .form-group{display:flex;flex-direction:column;line-height:1.85em;margin-bottom:1em;padding:.3em 0}.password-reset-form .error{animation-duration:.4s;animation-name:shakeError;animation-timing-function:ease-in-out;text-align:center}.password-reset-form .alert{margin:.3em 0 1em;padding:.5em}.password-reset-form .password-reset-required{background-color:var(--alertError,rgba(211,16,20,.5));padding:10px 0}.password-reset-form .notice-dismissible{padding-right:2rem}.password-reset-form .dismiss{cursor:pointer}.follow-request-card-content-container{display:flex;flex-flow:row wrap}.follow-request-card-content-container button{flex:1 1;margin-right:.5em;margin-top:.5em;max-width:12em;min-width:8em}.follow-request-card-content-container button:last-child{margin-right:0}.tos-content{margin:1em}.staff-group{padding-left:1em;padding-top:1em}.staff-group .basic-user-card{padding-left:0}.mrf-section{margin:1em}.mrf-section table{padding-bottom:20px;padding-left:10px;text-align:left;width:100%}.mrf-section table td,.mrf-section table th{max-width:360px;overflow:hidden;vertical-align:text-top;width:180px}.mrf-section table td+td,.mrf-section table th+th{width:auto}.list-card{display:flex}.list-name{flex-grow:1}.button-list-edit,.list-name{color:#d8a070;color:var(--link,#d8a070);margin:0;padding:1em}.button-list-edit:hover,.list-name:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#d8a070;color:var(--selectedMenuText,#d8a070)}.Lists .new-list-button{padding:0 .5em}.ListsUserSearch .input-wrap{display:flex;margin:.7em .5em}.ListsUserSearch .input-wrap input{width:100%}.ListsUserSearch .search-icon{margin-right:.3em}.panel-loading{align-items:center;color:#b9b9ba;color:var(--text,#b9b9ba);display:flex;font-size:2em;height:100%;justify-content:center}.panel-loading .loading-text svg{color:#b9b9ba;color:var(--text,#b9b9ba);line-height:0;vertical-align:middle}.ListEdit{--panel-body-padding:0.5em;display:flex;flex-direction:column;height:calc(100vh - var(--navbar-height));overflow:hidden}.ListEdit .list-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.ListEdit .panel-body{display:flex;flex:1;flex-direction:column;overflow:hidden}.ListEdit .list-member-management{flex:1 0 auto}.ListEdit .search-icon{margin-right:.3em}.ListEdit .users-list{overflow-y:auto;padding-bottom:.7rem}.ListEdit .members-list,.ListEdit .search-list{flex-direction:column;min-height:0;overflow:hidden}.ListEdit .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.ListEdit .btn{margin:0 .5em}.ListEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.ListEdit .panel-footer .footer-button{min-width:9em}.announcement-editor{align-items:stretch;display:flex;flex-direction:column}.announcement-editor .announcement-metadata{margin-top:.5em}.announcement-editor .post-textarea{box-sizing:content-box;height:10em;overflow:none;resize:vertical}.announcement{border-bottom:1px solid var(--border,#222);border-radius:0;padding:var(--status-margin,.75em)}.announcement .body,.announcement .heading{margin-bottom:var(--status-margin,.75em)}.announcement .footer,.announcement .footer .times{display:flex;flex-direction:column}.announcement .footer .actions{display:flex;flex-direction:row;justify-content:space-evenly}.announcement .footer .actions .btn{flex:1;margin:1em;max-width:10em}.announcements-page .post-form{padding:var(--status-margin,.75em)}.announcements-page .post-form .body,.announcements-page .post-form .heading{margin-bottom:var(--status-margin,.75em)}.announcements-page .post-form .post-button{min-width:10em} +/*# sourceMappingURL=app.a7f63ee9107a77599942.css.map*/ +\ No newline at end of file diff --git a/priv/static/static/css/app.a7f63ee9107a77599942.css.map b/priv/static/static/css/app.a7f63ee9107a77599942.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/app.a7f63ee9107a77599942.css","mappings":"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","sources":["webpack://pleroma_fe/./src/components/modal/modal.vue","webpack://pleroma_fe/./node_modules/vue-virtual-scroller/dist/vue-virtual-scroller.css","webpack://pleroma_fe/./src/components/login_form/login_form.vue","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue","webpack://pleroma_fe/./src/_variables.scss","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue","webpack://pleroma_fe/./src/components/popover/popover.vue","webpack://pleroma_fe/./src/components/still-image/still-image.vue","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.scss","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue","webpack://pleroma_fe/./src/components/select/select.vue","webpack://pleroma_fe/./src/components/poll/poll_form.vue","webpack://pleroma_fe/./src/components/flash/flash.vue","webpack://pleroma_fe/./src/components/attachment/attachment.scss","webpack://pleroma_fe/./src/components/gallery/gallery.vue","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.scss","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.scss","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.scss","webpack://pleroma_fe/./src/components/rich_content/rich_content.scss","webpack://pleroma_fe/./src/components/poll/poll.vue","webpack://pleroma_fe/./src/components/status_body/status_body.scss","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue","webpack://pleroma_fe/./src/components/status_content/status_content.vue","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue","webpack://pleroma_fe/./src/components/user_note/user_note.vue","webpack://pleroma_fe/./src/components/user_card/user_card.scss","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue","webpack://pleroma_fe/./src/components/react_button/react_button.vue","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue","webpack://pleroma_fe/./src/components/status/status.scss","webpack://pleroma_fe/./src/components/report/report.scss","webpack://pleroma_fe/./src/components/notification/notification.scss","webpack://pleroma_fe/./src/components/notifications/notifications.scss","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.scss","webpack://pleroma_fe/./src/components/list/list.vue","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue","webpack://pleroma_fe/./src/App.scss","webpack://pleroma_fe/./src/panel.scss","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue","webpack://pleroma_fe/./src/components/conversation/conversation.vue","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue","webpack://pleroma_fe/./src/components/timeline/timeline.scss","webpack://pleroma_fe/./src/components/tab_switcher/tab_switcher.scss","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.scss","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue","webpack://pleroma_fe/./src/components/chat_new/chat_new.scss","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue","webpack://pleroma_fe/./src/components/chat_message/chat_message.scss","webpack://pleroma_fe/./src/components/chat/chat.scss","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue","webpack://pleroma_fe/./src/hocs/with_load_more/with_load_more.scss","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue","webpack://pleroma_fe/./src/components/search/search.vue","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue","webpack://pleroma_fe/./src/components/registration/registration.vue","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.scss","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue","webpack://pleroma_fe/./src/components/lists/lists.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue","webpack://pleroma_fe/./src/components/announcement/announcement.vue","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue"],"sourcesContent":["\n.modal-view {\n z-index: var(--ZI_modals);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n pointer-events: none;\n animation-duration: 0.2s;\n animation-name: modal-background-fadein;\n opacity: 0;\n\n > * {\n pointer-events: initial;\n }\n\n &.modal-background {\n pointer-events: initial;\n background-color: rgb(0 0 0 / 50%);\n }\n\n &.open {\n opacity: 1;\n }\n}\n\n@keyframes modal-background-fadein {\n from {\n background-color: rgb(0 0 0 / 0%);\n }\n\n to {\n background-color: rgb(0 0 0 / 50%);\n }\n}\n",".vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}","\n@import \"../../variables\";\n\n.login-form {\n display: flex;\n flex-direction: column;\n padding: 0.6em;\n\n .btn {\n min-height: 2em;\n width: 10em;\n }\n\n .register {\n flex: 1 1;\n }\n\n .login-bottom {\n margin-top: 1em;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0.5em 0.6em;\n line-height: 24px;\n }\n\n .form-bottom {\n display: flex;\n padding: 0.5em;\n height: 32px;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n}\n","\n@import \"../../variables\";\n\n.media-upload {\n .hidden-input-file {\n display: none;\n }\n}\n\nlabel.media-upload {\n cursor: pointer; // We use <label> for interactivity... i wonder if it's fine\n}\n","\n@import \"../../variables\";\n\n.ScopeSelector {\n .scope {\n display: inline-block;\n cursor: pointer;\n min-width: 1.3em;\n min-height: 1.3em;\n text-align: center;\n\n &.selected svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n","$main-color: #f58d2c;\n$main-background: white;\n$darkened-background: whitesmoke;\n\n$fallback--bg: #121a24;\n$fallback--fg: #182230;\n$fallback--faint: rgb(185 185 186 / 50%);\n$fallback--text: #b9b9ba;\n$fallback--link: #d8a070;\n$fallback--icon: #666;\n$fallback--lightBg: rgb(21 30 42);\n$fallback--lightText: #b9b9ba;\n$fallback--border: #222;\n$fallback--cRed: #f00;\n$fallback--cBlue: #0095ff;\n$fallback--cGreen: #0fa00f;\n$fallback--cOrange: orange;\n\n$fallback--alertError: rgb(211 16 20 / 50%);\n$fallback--alertWarning: rgb(111 111 20 / 50%);\n\n$fallback--panelRadius: 10px;\n$fallback--checkboxRadius: 2px;\n$fallback--btnRadius: 4px;\n$fallback--inputRadius: 4px;\n$fallback--tooltipRadius: 5px;\n$fallback--avatarRadius: 4px;\n$fallback--avatarAltRadius: 10px;\n$fallback--attachmentRadius: 10px;\n$fallback--chatMessageRadius: 10px;\n\n$fallback--buttonShadow: 0 0 2px 0 rgb(0 0 0 / 100%),\n 0 1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 -1px 0 0 rgb(0 0 0 / 20%) inset;\n\n$status-margin: 0.75em;\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.checkbox {\n position: relative;\n display: inline-block;\n min-height: 1.2em;\n\n &-indicator {\n position: relative;\n padding-left: 1.2em;\n }\n\n &-indicator::before {\n position: absolute;\n right: 0;\n top: 0;\n display: block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1em;\n font-size: 1.1em;\n color: transparent;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n &.disabled {\n .checkbox-indicator::before,\n .label {\n opacity: 0.5;\n }\n\n .label {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n input[type=\"checkbox\"] {\n &:checked + .checkbox-indicator::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:indeterminate + .checkbox-indicator::before {\n content: \"–\";\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n }\n\n &.indeterminate-fix {\n input[type=\"checkbox\"] + .checkbox-indicator::before {\n content: \"–\";\n }\n }\n\n & > span {\n margin-left: 0.5em;\n }\n}\n","\n@import \"../../variables\";\n\n.popover-trigger-button {\n display: inline-block;\n}\n\n.popover {\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n position: fixed;\n min-width: 0;\n max-width: calc(100vw - 20px);\n box-shadow: 2px 2px 3px rgb(0 0 0 / 50%);\n box-shadow: var(--popupShadow);\n}\n\n.popover-default {\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 3;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--text;\n color: var(--popoverText, $fallback--text);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --postLink: var(--popoverPostLink, $fallback--link);\n --postFaintLink: var(--popoverPostFaintLink, $fallback--link);\n --icon: var(--popoverIcon, $fallback--icon);\n}\n\n.dropdown-menu {\n display: block;\n padding: 0.5rem 0;\n font-size: 1em;\n text-align: left;\n list-style: none;\n max-width: 100vw;\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n white-space: nowrap;\n\n .dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n .dropdown-item {\n line-height: 21px;\n overflow: hidden;\n display: block;\n padding: 0.5em 0.75em;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: none;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n\n --btnText: var(--popoverText, $fallback--text);\n\n &-icon {\n svg {\n width: 22px;\n margin-right: 0.75rem;\n color: var(--menuPopoverIcon, $fallback--icon);\n }\n }\n\n &.-has-submenu {\n .chevron-icon {\n margin-right: 0.25rem;\n margin-left: 2rem;\n }\n }\n\n &:active,\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n box-shadow: none;\n\n --btnText: var(--selectedMenuPopoverText, $fallback--link);\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n svg {\n color: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n\n .menu-checkbox {\n display: inline-block;\n vertical-align: middle;\n min-width: 22px;\n max-width: 22px;\n min-height: 22px;\n max-height: 22px;\n line-height: 22px;\n text-align: center;\n border-radius: 0;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.75em;\n\n &.menu-checkbox-checked::after {\n font-size: 1.25em;\n content: \"✓\";\n }\n\n &.-radio {\n border-radius: 9999px;\n\n &.menu-checkbox-checked::after {\n font-size: 2em;\n content: \"•\";\n }\n }\n }\n }\n\n .button-default.dropdown-item {\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuPopoverText, $fallback--link);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.still-image {\n position: relative;\n line-height: 0;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n\n canvas {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n visibility: var(--_still-image-canvas-visibility, visible);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n &.animated {\n &::before {\n zoom: var(--_still_image-label-scale, 1);\n content: \"gif\";\n position: absolute;\n line-height: 1;\n font-size: 0.7em;\n top: 0.5em;\n left: 0.5em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n display: block;\n padding: 2px 4px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n z-index: 2;\n visibility: var(--_still-image-label-visibility, visible);\n }\n\n &:hover canvas {\n display: none;\n }\n\n &:hover::before {\n visibility: var(--_still-image-label-visibility, hidden);\n }\n\n img {\n visibility: var(--_still-image-img-visibility, hidden);\n }\n\n &:hover img {\n visibility: visible;\n }\n }\n}\n","@import \"../../variables\";\n\n$emoji-picker-header-height: 36px;\n$emoji-picker-header-picture-width: 32px;\n$emoji-picker-header-picture-height: 32px;\n$emoji-picker-emoji-size: 32px;\n\n.emoji-picker {\n width: 25em;\n max-width: calc(100vw - 20px); // popover gives 10px margin from window edge\n display: flex;\n flex-direction: column;\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n &-header-image {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: $emoji-picker-header-picture-width;\n max-width: $emoji-picker-header-picture-width;\n height: $emoji-picker-header-picture-height;\n max-height: $emoji-picker-header-picture-height;\n\n .still-image {\n max-width: 100%;\n max-height: 100%;\n height: 100%;\n width: 100%;\n object-fit: contain;\n }\n }\n\n .keep-open,\n .too-many-emoji {\n padding: 7px;\n line-height: normal;\n }\n\n .too-many-emoji {\n display: flex;\n flex-direction: column;\n }\n\n .keep-open-label {\n padding: 0 7px;\n display: flex;\n }\n\n .heading {\n display: flex;\n padding: 10px 7px 5px;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n .emoji-tabs {\n flex-grow: 1;\n display: flex;\n flex-flow: row nowrap;\n overflow-x: auto;\n }\n\n .additional-tabs {\n display: flex;\n border-left: 1px solid;\n border-left-color: $fallback--icon;\n border-left-color: var(--icon, $fallback--icon);\n padding-left: 7px;\n flex: 0 0 auto;\n }\n\n .additional-tabs,\n .emoji-tabs {\n flex-basis: auto;\n display: flex;\n align-content: center;\n\n &-item {\n padding: 0 7px;\n cursor: pointer;\n font-size: 1.85em;\n width: $emoji-picker-header-picture-width;\n max-width: $emoji-picker-header-picture-width;\n height: $emoji-picker-header-picture-height;\n max-height: $emoji-picker-header-picture-height;\n display: flex;\n align-items: center;\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &.active {\n border-bottom: 4px solid;\n\n svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n }\n }\n\n .sticker-picker {\n flex: 1 1 auto;\n }\n\n .stickers,\n .emoji {\n &-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n\n &.hidden {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n }\n }\n }\n\n .emoji {\n &-search {\n padding: 5px;\n flex: 0 0 auto;\n\n input {\n width: 100%;\n }\n }\n\n &-groups {\n height: 100%;\n min-height: 200px;\n flex: 1 1 1px;\n position: relative;\n overflow: auto;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n // Autoprefixed seem to ignore this one, and also syntax is different\n mask-composite: xor;\n mask-composite: exclude;\n\n &.scrolled {\n &-top {\n mask-size: 100% 20px, 100% 0, auto;\n }\n\n &-bottom {\n mask-size: 100% 0, 100% 20px, auto;\n }\n }\n }\n\n &-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n padding-left: 5px;\n justify-content: left;\n\n &-title {\n font-size: 0.85em;\n width: 100%;\n margin: 0;\n\n &.disabled {\n display: none;\n }\n }\n }\n\n &-item {\n width: $emoji-picker-emoji-size;\n height: $emoji-picker-emoji-size;\n box-sizing: border-box;\n display: flex;\n line-height: $emoji-picker-emoji-size;\n align-items: center;\n justify-content: center;\n margin: 4px;\n cursor: pointer;\n\n .emoji-picker-emoji.-custom {\n object-fit: contain;\n max-width: 100%;\n max-height: 100%;\n }\n\n .emoji-picker-emoji.-unicode {\n font-size: 24px;\n overflow: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.emoji-input {\n display: flex;\n flex-direction: column;\n position: relative;\n\n .emoji-picker-icon {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0.2em 0.25em;\n font-size: 1.3em;\n cursor: pointer;\n line-height: 24px;\n\n &:hover i {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .emoji-picker-panel {\n position: absolute;\n z-index: 20;\n margin-top: 2px;\n\n &.hide {\n display: none;\n }\n }\n\n input,\n textarea {\n flex: 1 0 auto;\n }\n\n &.with-picker input {\n padding-right: 30px;\n }\n\n .hidden-overlay {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: hidden;\n\n /* DEBUG STUFF */\n color: red;\n\n /* set opacity to non-zero to see the overlay */\n\n .caret {\n width: 0;\n margin-right: calc(-1ch - 1px);\n border: 1px solid red;\n }\n }\n}\n\n.autocomplete {\n &-panel {\n position: absolute;\n }\n\n &-item {\n display: flex;\n cursor: pointer;\n padding: 0.2em 0.4em;\n border-bottom: 1px solid rgb(0 0 0 / 40%);\n height: 32px;\n\n .image {\n width: 32px;\n height: 32px;\n line-height: 32px;\n text-align: center;\n font-size: 32px;\n margin-right: 4px;\n\n img {\n width: 32px;\n height: 32px;\n object-fit: contain;\n }\n }\n\n .label {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 0.1em 0 0.2em;\n\n .displayText {\n line-height: 1.5;\n }\n\n .detailText {\n font-size: 9px;\n line-height: 9px;\n }\n }\n\n &.highlighted {\n background-color: $fallback--fg;\n background-color: var(--selectedMenuPopover, $fallback--fg);\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n","\n@import \"../../variables\";\n\n/* TODO fix order of styles */\nlabel.Select {\n padding: 0;\n\n select {\n appearance: none;\n background: transparent;\n border: none;\n color: $fallback--text;\n color: var(--inputText, --text, $fallback--text);\n margin: 0;\n padding: 0 2em 0 0.2em;\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n width: 100%;\n z-index: 1;\n height: 2em;\n line-height: 16px;\n }\n\n .select-down-icon {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 5px;\n height: 100%;\n width: 0.875em;\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n line-height: 2;\n z-index: 0;\n pointer-events: none;\n }\n}\n","\n@import \"../../variables\";\n\n.poll-form {\n display: flex;\n flex-direction: column;\n padding: 0 0.5em 0.5em;\n\n .add-option {\n align-self: flex-start;\n padding-top: 0.25em;\n padding-left: 0.1em;\n }\n\n .poll-option {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin-bottom: 0.25em;\n }\n\n .input-container {\n width: 100%;\n\n input {\n // Hack: dodge the floating X icon\n padding-right: 2.5em;\n width: 100%;\n }\n }\n\n .delete-option {\n // Hack: Move the icon over the input box\n width: 1.5em;\n margin-left: -1.5em;\n z-index: 1;\n }\n\n .poll-type-expiry {\n margin-top: 0.5em;\n display: flex;\n width: 100%;\n }\n\n .poll-type {\n margin-right: 0.75em;\n flex: 1 1 60%;\n\n .poll-type-select {\n padding-right: 0.75em;\n }\n }\n\n .poll-expiry {\n display: flex;\n\n .expiry-amount {\n width: 3em;\n text-align: right;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Flash {\n display: inline-block;\n width: 100%;\n height: 100%;\n position: relative;\n\n .player {\n height: 100%;\n width: 100%;\n }\n\n .placeholder {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--bg);\n color: var(--link);\n }\n\n .hider {\n top: 0;\n }\n\n .label {\n text-align: center;\n flex: 1 1 0;\n line-height: 1.2;\n white-space: normal;\n word-wrap: normal;\n }\n\n .hidden {\n display: none;\n visibility: \"hidden\";\n }\n}\n","@import \"../../variables\";\n\n.Attachment {\n display: inline-flex;\n flex-direction: column;\n position: relative;\n align-self: flex-start;\n line-height: 0;\n height: 100%;\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n\n .attachment-wrapper {\n flex: 1 1 auto;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n\n .description-container {\n flex: 0 1 0;\n display: flex;\n padding-top: 0.5em;\n z-index: 1;\n\n p {\n flex: 1;\n text-align: center;\n line-height: 1.5;\n padding: 0.5em;\n margin: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n &.-static {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding-top: 0;\n background: var(--popover);\n box-shadow: var(--popupShadow);\n }\n }\n\n .description-field {\n flex: 1;\n min-width: 0;\n }\n\n & .placeholder-container,\n & .image-container,\n & .audio-container,\n & .video-container,\n & .flash-container,\n & .oembed-container {\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .image-container {\n .image {\n width: 100%;\n height: 100%;\n }\n }\n\n & .flash-container,\n & .video-container {\n & .flash,\n & video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n align-self: center;\n }\n }\n\n .audio-container {\n display: flex;\n align-items: flex-end;\n\n audio {\n width: 100%;\n height: 100%;\n }\n }\n\n .placeholder-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 0.5em;\n }\n\n .play-icon {\n position: absolute;\n font-size: 64px;\n top: calc(50% - 32px);\n left: calc(50% - 32px);\n color: rgb(255 255 255 / 75%);\n text-shadow: 0 0 2px rgb(0 0 0 / 40%);\n\n &::before {\n margin: 0;\n }\n }\n\n .attachment-buttons {\n display: flex;\n position: absolute;\n right: 0;\n top: 0;\n margin-top: 0.5em;\n margin-right: 0.5em;\n z-index: 1;\n\n .attachment-button {\n padding: 0;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n text-align: center;\n width: 2em;\n height: 2em;\n margin-left: 0.5em;\n font-size: 1.25em;\n // TODO: theming? hard to theme with unknown background image color\n background: rgb(230 230 230 / 70%);\n\n .svg-inline--fa {\n color: rgb(0 0 0 / 60%);\n }\n\n &:hover .svg-inline--fa {\n color: rgb(0 0 0 / 90%);\n }\n }\n }\n\n &.-contain-fit {\n img,\n canvas {\n object-fit: contain;\n }\n }\n\n &.-cover-fit {\n img,\n canvas {\n object-fit: cover;\n }\n }\n\n .oembed-container {\n line-height: 1.2em;\n flex: 1 0 100%;\n width: 100%;\n margin-right: 15px;\n display: flex;\n\n img {\n width: 100%;\n }\n\n .image {\n flex: 1;\n\n img {\n border: 0;\n border-radius: 5px;\n height: 100%;\n object-fit: cover;\n }\n }\n\n .text {\n flex: 2;\n margin: 8px;\n word-break: break-all;\n\n h1 {\n font-size: 1rem;\n margin: 0;\n }\n }\n }\n\n &.-size-small {\n .play-icon {\n zoom: 0.5;\n opacity: 0.7;\n }\n\n .attachment-buttons {\n zoom: 0.7;\n opacity: 0.5;\n }\n }\n\n &.-editable {\n padding: 0.5em;\n\n & .description-container,\n & .attachment-buttons {\n margin: 0;\n }\n }\n\n &.-placeholder {\n display: inline-block;\n color: $fallback--link;\n color: var(--postLink, $fallback--link);\n overflow: hidden;\n white-space: nowrap;\n height: auto;\n line-height: 1.5;\n\n &:not(.-editable) {\n border: none;\n }\n\n &.-editable {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n\n & .description-container,\n & .attachment-buttons {\n margin: 0;\n padding: 0;\n position: relative;\n }\n\n .description-container {\n flex: 1;\n padding-left: 0.5em;\n }\n\n .attachment-buttons {\n order: 99;\n align-self: center;\n }\n }\n\n a {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n svg {\n color: inherit;\n }\n }\n\n &.-loading {\n cursor: progress;\n }\n\n &.-compact {\n .placeholder-container {\n padding-bottom: 0.5em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Gallery {\n .gallery-rows {\n display: flex;\n flex-direction: column;\n }\n\n .gallery-row {\n position: relative;\n height: 0;\n width: 100%;\n flex-grow: 1;\n\n .gallery-row-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-flow: row wrap;\n align-content: stretch;\n\n .gallery-item {\n margin: 0 0.5em 0 0;\n flex-grow: 1;\n height: 100%;\n box-sizing: border-box;\n // to make failed images a bit more noticeable on chromium\n min-width: 2em;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &.-grid {\n width: 100%;\n height: auto;\n position: relative;\n display: grid;\n grid-gap: 0.5em;\n grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));\n\n .gallery-item {\n margin: 0;\n height: 200px;\n }\n }\n }\n\n &.-grid,\n &.-minimal {\n height: auto;\n\n .gallery-row-inner {\n position: relative;\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.5em;\n }\n }\n\n &.-long {\n .gallery-rows {\n max-height: 25em;\n overflow: hidden;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n\n .many-attachments-text {\n text-align: center;\n line-height: 2;\n }\n\n .many-attachments-buttons {\n display: flex;\n }\n\n .many-attachments-button {\n display: flex;\n flex: 1;\n justify-content: center;\n line-height: 2;\n\n button {\n padding: 0 2em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Avatar {\n --_avatarShadowBox: var(--avatarStatusShadow);\n --_avatarShadowFilter: var(--avatarStatusShadowFilter);\n --_avatarShadowInset: var(--avatarStatusShadowInset);\n --_still-image-label-visibility: hidden;\n\n display: inline-block;\n position: relative;\n width: 48px;\n height: 48px;\n\n &.-compact {\n width: 32px;\n height: 32px;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .avatar {\n width: 100%;\n height: 100%;\n box-shadow: var(--_avatarShadowBox);\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n\n &.-better-shadow {\n box-shadow: var(--_avatarShadowInset);\n filter: var(--_avatarShadowFilter);\n }\n\n &.-animated::before {\n display: none;\n }\n\n &.-compact {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n &.-placeholder {\n background-color: $fallback--fg;\n background-color: var(--fg, $fallback--fg);\n }\n }\n\n img {\n width: 100%;\n height: 100%;\n }\n\n .bot-indicator {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: -0.2em;\n padding: 0.2em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n border-radius: var(--tooltipRadius);\n }\n}\n","@import \"../../variables\";\n\n.MentionLink {\n position: relative;\n white-space: normal;\n display: inline;\n color: var(--link);\n word-break: normal;\n\n & .new,\n & .original {\n display: inline;\n border-radius: 2px;\n }\n\n .mention-avatar {\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n user-select: none;\n margin-right: 0.2em;\n }\n\n .full {\n position: absolute;\n display: inline-block;\n pointer-events: none;\n opacity: 0;\n top: 100%;\n left: 0;\n height: 100%;\n word-wrap: normal;\n white-space: nowrap;\n transition: opacity 0.2s ease;\n z-index: 1;\n margin-top: 0.25em;\n padding: 0.5em;\n user-select: all;\n }\n\n & .short.-with-tooltip,\n & .you {\n user-select: none;\n }\n\n & .short,\n & .full {\n white-space: nowrap;\n }\n\n .shortName {\n white-space: normal;\n }\n\n .new {\n &.-you {\n .shortName {\n font-weight: 600;\n }\n }\n\n &.-has-selection {\n color: var(--alertNeutralText, $fallback--text);\n background-color: var(--alertNeutral, $fallback--fg);\n }\n\n .at {\n color: var(--link);\n opacity: 0.8;\n display: inline-block;\n line-height: 1;\n padding: 0 0.1em;\n vertical-align: -25%;\n margin: 0;\n }\n\n &.-striped {\n & .shortName {\n background-image:\n repeating-linear-gradient(\n 135deg,\n var(--____highlight-tintColor),\n var(--____highlight-tintColor) 5px,\n var(--____highlight-tintColor2) 5px,\n var(--____highlight-tintColor2) 10px\n );\n }\n }\n\n &.-solid {\n .shortName {\n background-image: linear-gradient(var(--____highlight-tintColor2), var(--____highlight-tintColor2));\n }\n }\n\n &.-side {\n .shortName {\n box-shadow: 0 -5px 3px -4px inset var(--____highlight-solidColor);\n }\n }\n }\n\n .serverName.-faded {\n color: var(--faintLink, $fallback--link);\n }\n}\n\n.mention-link-popover {\n max-width: 70ch;\n max-height: 20rem;\n overflow: hidden;\n}\n",".MentionsLine {\n word-break: break-all;\n\n .mention-link:not(:first-child)::before {\n content: \" \";\n }\n\n .showMoreLess {\n margin-left: 0.5em;\n white-space: normal;\n color: var(--link);\n }\n}\n",".HashtagLink {\n position: relative;\n white-space: normal;\n display: inline-block;\n color: var(--link);\n}\n","@import \"../../variables\";\n\n.RichContent {\n blockquote {\n margin: 0.2em 0 0.2em 0.2em;\n font-style: italic;\n border-left: 0.2em solid var(--faint, $fallback--faint);\n padding-left: 1em;\n }\n\n pre {\n overflow: auto;\n }\n\n code,\n samp,\n kbd,\n var,\n pre {\n font-family: var(--postCodeFont, monospace);\n }\n\n p {\n margin: 0 0 1em;\n }\n\n p:last-child {\n margin: 0;\n }\n\n h1 {\n font-size: 1.1em;\n line-height: 1.2em;\n margin: 1.4em 0;\n }\n\n h2 {\n font-size: 1.1em;\n margin: 1em 0;\n }\n\n h3 {\n font-size: 1em;\n margin: 1.2em 0;\n }\n\n h4 {\n margin: 1.1em 0;\n }\n\n .img {\n display: inline-block;\n }\n\n .emoji {\n display: inline-block;\n width: var(--emoji-size, 32px);\n height: var(--emoji-size, 32px);\n }\n\n .img,\n video {\n max-width: 100%;\n max-height: 400px;\n vertical-align: middle;\n object-fit: contain;\n }\n}\n","\n@import \"../../variables\";\n\n.poll {\n .votes {\n display: flex;\n flex-direction: column;\n margin: 0 0 0.5em;\n }\n\n .poll-option {\n margin: 0.75em 0.5em;\n }\n\n .option-result {\n height: 100%;\n display: flex;\n flex-direction: row;\n position: relative;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n\n .option-result-label {\n display: flex;\n align-items: center;\n padding: 0.1em 0.25em;\n z-index: 1;\n word-break: break-word;\n }\n\n .result-percentage {\n width: 3.5em;\n flex-shrink: 0;\n }\n\n .result-fill {\n height: 100%;\n position: absolute;\n color: $fallback--text;\n color: var(--pollText, $fallback--text);\n background-color: $fallback--lightBg;\n background-color: var(--poll, $fallback--lightBg);\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n top: 0;\n left: 0;\n transition: width 0.5s;\n }\n\n .option-vote {\n display: flex;\n align-items: center;\n }\n\n input {\n width: 3.5em;\n }\n\n .footer {\n display: flex;\n align-items: center;\n }\n\n &.loading * {\n cursor: progress;\n }\n\n .poll-vote-button {\n padding: 0 0.5em;\n margin-right: 0.5em;\n }\n\n .poll-checkbox {\n display: none;\n }\n}\n","@import \"../../variables\";\n\n.StatusBody {\n display: flex;\n flex-direction: column;\n\n .emoji {\n --_still_image-label-scale: 0.5;\n }\n\n .attachments {\n margin-top: 0.5em;\n }\n\n & .text,\n & .summary {\n font-family: var(--postFont, sans-serif);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-word;\n line-height: var(--post-line-height);\n }\n\n .summary {\n display: block;\n font-style: italic;\n padding-bottom: 0.5em;\n }\n\n .text {\n &.-single-line {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n height: 1.4em;\n }\n }\n\n .summary-wrapper {\n margin-bottom: 0.5em;\n border-style: solid;\n border-width: 0 0 1px;\n border-color: var(--border, $fallback--border);\n flex-grow: 0;\n\n &.-tall {\n position: relative;\n\n .summary {\n max-height: 2em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .text-wrapper {\n display: flex;\n flex-flow: column nowrap;\n\n &.-tall-status {\n position: relative;\n height: 220px;\n overflow-x: hidden;\n overflow-y: hidden;\n z-index: 1;\n\n .media-body {\n min-height: 0;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n }\n\n & .tall-status-hider,\n & .tall-subject-hider,\n & .status-unhider,\n & .cw-status-hider {\n display: inline-block;\n word-break: break-all;\n width: 100%;\n text-align: center;\n }\n\n .tall-status-hider {\n position: absolute;\n height: 70px;\n margin-top: 150px;\n line-height: 110px;\n z-index: 2;\n }\n\n .tall-subject-hider {\n // position: absolute;\n padding-bottom: 0.5em;\n }\n\n & .status-unhider,\n & .cw-status-hider {\n word-break: break-all;\n\n svg {\n color: inherit;\n }\n }\n\n .greentext {\n color: $fallback--cGreen;\n color: var(--postGreentext, $fallback--cGreen);\n }\n\n .cyantext {\n color: var(--postCyantext, $fallback--cBlue);\n }\n\n &.-compact {\n align-items: top;\n flex-direction: row;\n\n --emoji-size: 16px;\n\n & .body,\n & .attachments {\n max-height: 3.25em;\n }\n\n .body {\n overflow: hidden;\n white-space: normal;\n min-width: 5em;\n flex: 5 1 auto;\n mask-size: auto 3.5em, auto auto;\n mask-position: 0 0, 0 0;\n mask-repeat: repeat-x, repeat;\n mask-image: linear-gradient(to bottom, white 2em, transparent 3em);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n\n .attachments {\n margin-top: 0;\n flex: 1 1 0;\n min-width: 5em;\n height: 100%;\n margin-left: 0.5em;\n }\n\n .summary-wrapper {\n .summary::after {\n content: \": \";\n }\n\n line-height: inherit;\n margin: 0;\n border: none;\n display: inline-block;\n }\n\n .text-wrapper {\n display: inline-block;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.link-preview-card {\n display: flex;\n flex-direction: row;\n cursor: pointer;\n overflow: hidden;\n margin-top: 0.5em;\n\n .card-image {\n flex-shrink: 0;\n width: 120px;\n max-width: 25%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n }\n }\n\n .card-content {\n max-height: 100%;\n margin: 0.5em;\n display: flex;\n flex-direction: column;\n }\n\n .card-host {\n font-size: 0.85em;\n }\n\n .card-description {\n margin: 0.5em 0 0;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n line-height: 1.2em;\n // cap description at 3 lines, the 1px is to clean up some stray pixels\n // TODO: fancier fade-out at the bottom to show off that it's too long?\n max-height: calc(1.2em * 3 - 1px);\n }\n\n .nsfw-alert {\n margin: 2em 0;\n }\n\n color: $fallback--text;\n color: var(--text, $fallback--text);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n","\n.StatusContent {\n flex: 1;\n min-width: 0;\n}\n","\n@import \"../../variables\";\n\n.post-status-form {\n position: relative;\n\n .attachments {\n margin-bottom: 0.5em;\n }\n\n .form-bottom {\n display: flex;\n justify-content: space-between;\n padding: 0.5em;\n height: 2.5em;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .form-bottom-left {\n display: flex;\n flex: 1;\n padding-right: 7px;\n margin-right: 7px;\n max-width: 10em;\n }\n\n .preview-heading {\n display: flex;\n padding-left: 0.5em;\n }\n\n .preview-toggle {\n flex: 1;\n cursor: pointer;\n user-select: none;\n\n &:hover {\n text-decoration: underline;\n }\n\n svg,\n i {\n margin-left: 0.2em;\n font-size: 0.8em;\n transform: rotate(90deg);\n }\n }\n\n .preview-container {\n margin-bottom: 1em;\n }\n\n .preview-error {\n font-style: italic;\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n\n .preview-status {\n border: 1px solid $fallback--border;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n padding: 0.5em;\n margin: 0;\n }\n\n .reply-or-quote-selector {\n margin-bottom: 0.5em;\n }\n\n .text-format {\n .only-format {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n .visibility-tray {\n display: flex;\n justify-content: space-between;\n padding-top: 5px;\n align-items: baseline;\n }\n\n .visibility-notice.edit-warning {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n // Order is not necessary but a good indicator\n .media-upload-icon {\n order: 1;\n justify-content: left;\n }\n\n .emoji-icon {\n order: 2;\n justify-content: center;\n }\n\n .poll-icon {\n order: 3;\n justify-content: right;\n }\n\n .media-upload-icon,\n .poll-icon,\n .emoji-icon {\n font-size: 1.85em;\n line-height: 1.1;\n flex: 1;\n padding: 0 0.1em;\n display: flex;\n align-items: center;\n\n &.selected,\n &:hover {\n // needs to be specific to override icon default color\n svg,\n i,\n label {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n &.disabled {\n svg,\n i {\n cursor: not-allowed;\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n\n &:hover {\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n }\n }\n }\n }\n\n .error {\n text-align: center;\n }\n\n .media-upload-wrapper {\n margin-right: 0.2em;\n margin-bottom: 0.5em;\n width: 18em;\n\n img,\n video {\n object-fit: contain;\n max-height: 10em;\n }\n\n .video {\n max-height: 10em;\n }\n\n input {\n flex: 1;\n width: 100%;\n }\n }\n\n .status-input-wrapper {\n display: flex;\n position: relative;\n width: 100%;\n flex-direction: column;\n }\n\n .btn[disabled] {\n cursor: not-allowed;\n }\n\n form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n position: relative;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.25em 0.5em 0.5em;\n line-height: 1.85;\n }\n\n .form-post-body {\n // TODO: make a resizable textarea component?\n box-sizing: content-box; // needed for easier computation of dynamic size\n overflow: hidden;\n transition: min-height 200ms 100ms;\n // stock padding + 1 line of text (for counter)\n padding-bottom: calc(var(--_padding) + var(--post-line-height) * 1em);\n // two lines of text\n height: calc(var(--post-line-height) * 1em);\n min-height: calc(var(--post-line-height) * 1em);\n resize: none;\n\n &.scrollable-form {\n overflow-y: auto;\n }\n }\n\n .main-input {\n position: relative;\n }\n\n .character-counter {\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0 0.5em;\n\n &.error {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 0.6; }\n }\n\n @keyframes fade-out {\n from { opacity: 0.6; }\n to { opacity: 0; }\n }\n\n .drop-indicator {\n position: absolute;\n width: 100%;\n height: 100%;\n font-size: 5em;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n border: 2px dashed $fallback--text;\n border: 2px dashed var(--text, $fallback--text);\n }\n}\n","\n.remote-follow {\n max-width: 220px;\n\n .remote-button {\n width: 100%;\n min-height: 2em;\n }\n}\n","\n@import \"../../variables\";\n\n// TODO: unify with other modals.\n.dark-overlay {\n &::before {\n bottom: 0;\n content: \" \";\n display: block;\n cursor: default;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n background: rgb(27 31 35 / 50%);\n z-index: 2000;\n }\n}\n\n.dialog-modal.panel {\n top: 0;\n left: 50%;\n max-height: 80vh;\n max-width: 90vw;\n margin: 15vh auto;\n position: fixed;\n transform: translateX(-50%);\n z-index: 2001;\n cursor: default;\n display: block;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .dialog-modal-heading {\n .title {\n text-align: center;\n }\n }\n\n .dialog-modal-content {\n margin: 0;\n padding: 1rem;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n white-space: normal;\n }\n\n .dialog-modal-footer {\n margin: 0;\n padding: 0.5em;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n display: flex;\n justify-content: flex-end;\n\n button {\n width: auto;\n margin-left: 0.5rem;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.moderation-tools-popover {\n height: 100%;\n\n .trigger {\n /* stylelint-disable-next-line declaration-no-important */\n display: flex !important;\n height: 100%;\n }\n}\n\n.moderation-tools-button {\n svg,\n i {\n font-size: 0.8em;\n }\n}\n","\n@import \"../../variables\";\n\n.AccountActions {\n .ellipsis-button {\n width: 2.5em;\n margin: -0.5em 0;\n padding: 0.5em 0;\n text-align: center;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.user-note {\n display: flex;\n flex-direction: column;\n\n .heading {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75em;\n\n .btn {\n min-width: 95px;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n\n .btn {\n margin-left: 0.5em;\n }\n }\n }\n\n .note-text {\n align-self: stretch;\n }\n\n .note-text.-blank {\n font-style: italic;\n color: var(--faint, $fallback--faint);\n }\n}\n","@import \"../../variables\";\n\n.user-card {\n position: relative;\n z-index: 1;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n .panel-heading {\n padding: 0.5em 0;\n text-align: center;\n box-shadow: none;\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n // create new stacking context\n position: relative;\n }\n\n .panel-body {\n word-wrap: break-word;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n // create new stacking context\n position: relative;\n }\n\n .background-image {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n mask:\n linear-gradient(to top, white, transparent) bottom no-repeat,\n linear-gradient(to top, white, white);\n // Autoprefixer seem to ignore this one, and also syntax is different\n mask-composite: xor;\n mask-composite: exclude;\n background-size: cover;\n mask-size: 100% 60%;\n border-top-left-radius: calc(var(--__roundnessTop, --panelRadius) - 1px);\n border-top-right-radius: calc(var(--__roundnessTop, --panelRadius) - 1px);\n border-bottom-left-radius: calc(var(--__roundnessBottom, --panelRadius) - 1px);\n border-bottom-right-radius: calc(var(--__roundnessBottom, --panelRadius) - 1px);\n background-color: var(--profileBg);\n z-index: -2;\n\n &.hide-bio {\n mask-size: 100% 40px;\n }\n }\n\n &-bio {\n text-align: center;\n display: block;\n line-height: 1.3;\n padding: 1em;\n margin: 0;\n\n a {\n color: $fallback--link;\n color: var(--postLink, $fallback--link);\n }\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n }\n }\n\n &.-rounded-t {\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n\n --__roundnessTop: var(--panelRadius);\n --__roundnessBottom: 0;\n }\n\n &.-rounded {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n\n --__roundnessTop: var(--panelRadius);\n --__roundnessBottom: var(--panelRadius);\n }\n\n &.-popover {\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n --__roundnessTop: var(--tooltipRadius);\n --__roundnessBottom: var(--tooltipRadius);\n }\n\n &.-bordered {\n border-width: 1px;\n border-style: solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n}\n\n.user-info {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n padding: 0 26px;\n\n a {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n\n &:hover {\n color: var(--icon);\n }\n }\n\n .container {\n min-width: 0;\n padding: 16px 0 6px;\n display: flex;\n align-items: flex-start;\n max-height: 56px;\n\n > * {\n min-width: 0;\n }\n\n > a {\n vertical-align: middle;\n display: flex;\n }\n\n .Avatar {\n --_avatarShadowBox: var(--avatarShadow);\n --_avatarShadowFilter: var(--avatarShadowFilter);\n --_avatarShadowInset: var(--avatarShadowInset);\n\n width: 56px;\n height: 56px;\n object-fit: cover;\n }\n }\n\n &-avatar {\n position: relative;\n cursor: pointer;\n\n &.-overlay {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: rgb(0 0 0 / 30%);\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n opacity: 0;\n transition: opacity 0.2s ease;\n\n svg {\n color: #fff;\n }\n }\n\n &:hover &.-overlay {\n opacity: 1;\n }\n }\n\n .external-link-button,\n .edit-profile-button {\n cursor: pointer;\n width: 2.5em;\n text-align: center;\n margin: -0.5em 0;\n padding: 0.5em 0;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n .bottom-line {\n font-weight: light;\n font-size: 1.1em;\n align-items: baseline;\n\n .lock-icon {\n margin-left: 0.5em;\n }\n\n .user-screen-name {\n min-width: 1px;\n flex: 0 1 auto;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .dailyAvg {\n min-width: 1px;\n flex: 0 0 auto;\n margin-left: 1em;\n font-size: 0.7em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .user-role {\n flex: none;\n color: $fallback--text;\n color: var(--alertNeutralText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--alertNeutral, $fallback--fg);\n }\n }\n\n .user-summary {\n display: block;\n margin-left: 0.6em;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1 1 0;\n // This is so that text doesn't get overlapped by avatar's shadow if it has\n // big one\n z-index: 1;\n line-height: 2em;\n\n --emoji-size: 1.7em;\n\n .top-line,\n .bottom-line {\n display: flex;\n }\n }\n\n .user-name {\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1 1 auto;\n margin-right: 1em;\n font-size: 1.1em;\n }\n\n .user-meta {\n margin-bottom: 0.15em;\n display: flex;\n align-items: baseline;\n line-height: 22px;\n flex-wrap: wrap;\n\n .following {\n flex: 1 0 auto;\n margin: 0;\n margin-bottom: 0.25em;\n text-align: left;\n }\n\n .highlighter {\n flex: 0 1 auto;\n display: flex;\n flex-wrap: wrap;\n margin-right: -0.5em;\n align-self: start;\n\n .userHighlightCl {\n padding: 2px 10px;\n flex: 1 0 auto;\n }\n\n .userHighlightSel {\n padding-top: 0;\n padding-bottom: 0;\n flex: 1 0 auto;\n }\n\n .userHighlightText {\n width: 70px;\n flex: 1 0 auto;\n }\n\n .userHighlightCl,\n .userHighlightText,\n .userHighlightSel {\n vertical-align: top;\n margin-right: 0.5em;\n margin-bottom: 0.25em;\n }\n }\n }\n\n .user-interactions {\n position: relative;\n display: flex;\n flex-flow: row wrap;\n margin-right: -0.75em;\n\n > * {\n margin: 0 0.75em 0.6em 0;\n white-space: nowrap;\n min-width: 95px;\n }\n\n button {\n margin: 0;\n }\n }\n\n .user-note {\n margin: 0 0.75em 0.6em 0;\n }\n}\n\n.sidebar .edit-profile-button {\n display: none;\n}\n\n.user-counts {\n display: flex;\n line-height: 16px;\n padding: 0.5em 1.5em 0;\n text-align: center;\n justify-content: space-between;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n flex-wrap: wrap;\n}\n\n.user-count {\n flex: 1 0 auto;\n padding: 0.5em 0;\n margin: 0 0.5em;\n\n h5 {\n font-size: 1em;\n font-weight: bolder;\n margin: 0 0 0.25em;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */\n a {\n text-decoration: none;\n }\n}\n\n.mute-expiry {\n display: flex;\n flex-direction: row;\n}\n","\n.user-panel .signed-in {\n overflow: visible;\n z-index: 10;\n}\n","\n@import \"../../variables\";\n\n.NavigationEntry {\n display: flex;\n box-sizing: border-box;\n align-items: baseline;\n height: 3.5em;\n line-height: 3.5em;\n padding: 0 1em;\n width: 100%;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n .timelines-chevron {\n margin-right: 0;\n }\n\n .main-link {\n flex: 1;\n }\n\n .menu-icon {\n margin-right: 0.8em;\n }\n\n .extra-button {\n width: 3em;\n text-align: center;\n\n &:last-child {\n margin-right: -0.8em;\n }\n }\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n }\n\n &.-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.NavigationPins {\n display: flex;\n flex-wrap: wrap;\n overflow: hidden;\n height: 100%;\n\n .alert-dot {\n border-radius: 100%;\n height: 0.5em;\n width: 0.5em;\n position: absolute;\n right: calc(50% - 0.75em);\n top: calc(50% - 0.5em);\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .pinned-item {\n position: relative;\n flex: 1 0 3em;\n min-width: 2em;\n text-align: center;\n overflow: visible;\n box-sizing: border-box;\n height: 100%;\n\n & .svg-inline--fa,\n & .iconLetter {\n margin: 0;\n }\n\n &.router-link-active {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n border-bottom: 4px solid;\n\n & .svg-inline--fa,\n & .iconLetter {\n color: inherit;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.NavPanel {\n .panel {\n overflow: hidden;\n box-shadow: var(--panelShadow);\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n position: relative;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n > li {\n &:first-child .menu-item {\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child .menu-item {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n li:last-child {\n border: none;\n }\n\n .navigation-chevron {\n margin-left: 0.8em;\n margin-right: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-chevron {\n margin-left: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-background {\n padding: 0 0 0 0.6em;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n .timelines {\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n }\n\n .nav-panel-heading {\n // breaks without a unit\n // stylelint-disable-next-line length-zero-no-unit\n --panel-heading-height-padding: 0px;\n }\n}\n","\n .features-panel li {\n line-height: 24px;\n }\n","\n .who-to-follow * {\n vertical-align: middle;\n }\n\n .who-to-follow img {\n width: 32px;\n height: 32px;\n }\n\n .who-to-follow {\n padding: 0 1em;\n margin: 0;\n }\n\n .who-to-follow-items {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0;\n margin: 1em 0;\n }\n\n .who-to-follow-more {\n padding: 0;\n margin: 1em 0;\n text-align: center;\n }\n","\n@import \"../../variables\";\n\n.floating-shout {\n position: fixed;\n bottom: 0.5em;\n z-index: var(--ZI_popovers);\n max-width: 25em;\n\n &.-left {\n left: 0.5em;\n }\n\n &:not(.-left) {\n right: 0.5em;\n }\n}\n\n.shout-panel {\n .shout-heading {\n cursor: pointer;\n\n .icon {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n margin-right: 0.5em;\n }\n\n .title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n .shout-window {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 20em;\n }\n\n .shout-window-container {\n height: 100%;\n }\n\n .shout-message {\n display: flex;\n padding: 0.2em 0.5em;\n }\n\n .shout-avatar {\n img {\n height: 24px;\n width: 24px;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n margin-right: 0.5em;\n margin-top: 0.25em;\n }\n }\n\n .shout-input {\n display: flex;\n\n textarea {\n flex: 1;\n margin: 0.6em;\n min-height: 3.5em;\n resize: none;\n }\n }\n\n .shout-panel {\n .title {\n display: flex;\n justify-content: space-between;\n }\n }\n}\n","\n$modal-view-button-icon-height: 3em;\n$modal-view-button-icon-half-height: calc(#{$modal-view-button-icon-height} / 2);\n$modal-view-button-icon-width: 3em;\n$modal-view-button-icon-margin: 0.5em;\n\n.media-modal-view {\n @keyframes media-fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .modal-image-container {\n display: flex;\n overflow: hidden;\n align-items: center;\n flex-direction: column;\n max-width: 100%;\n max-height: 100%;\n width: 100%;\n height: 100%;\n flex-grow: 1;\n justify-content: center;\n\n &-inner {\n width: 100%;\n height: 100%;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n }\n\n .description,\n .counter {\n /* Hardcoded since background is also hardcoded */\n color: white;\n margin-top: 1em;\n text-shadow: 0 0 10px black, 0 0 10px black;\n padding: 0.2em 2em;\n }\n\n .description {\n flex: 0 0 auto;\n overflow-y: auto;\n min-height: 1em;\n max-width: 500px;\n max-height: 9.5em;\n word-break: break-all;\n }\n\n .modal-image {\n max-width: 100%;\n max-height: 100%;\n image-orientation: from-image; // NOTE: only FF supports this\n animation: 0.1s cubic-bezier(0.7, 0, 1, 0.6) media-fadein;\n\n &.loading {\n opacity: 0.5;\n }\n }\n\n .loading-spinner {\n width: 100%;\n height: 100%;\n position: absolute;\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n color: white;\n }\n }\n\n .modal-view-button {\n border: 0;\n padding: 0;\n opacity: 0;\n box-shadow: none;\n background: none;\n appearance: none;\n overflow: visible;\n cursor: pointer;\n transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n\n .button-icon {\n position: absolute;\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n font-size: 1rem;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n }\n\n .modal-view-button-arrow {\n position: absolute;\n display: block;\n top: 50%;\n margin-top: $modal-view-button-icon-half-height;\n width: $modal-view-button-icon-width;\n height: $modal-view-button-icon-height;\n\n .arrow-icon {\n position: absolute;\n top: 0;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n\n &--prev {\n left: 0;\n\n .arrow-icon {\n left: $modal-view-button-icon-margin;\n }\n }\n\n &--next {\n right: 0;\n\n .arrow-icon {\n right: $modal-view-button-icon-margin;\n }\n }\n }\n\n .modal-view-button-hide {\n position: absolute;\n top: 0;\n right: 0;\n\n .button-icon {\n top: $modal-view-button-icon-margin;\n right: $modal-view-button-icon-margin;\n }\n }\n}\n\n.modal-view.media-modal-view {\n z-index: var(--ZI_media_modal);\n flex-direction: column;\n\n .modal-view-button-arrow,\n .modal-view-button-hide {\n opacity: 0.75;\n\n &:focus,\n &:hover {\n outline: none;\n box-shadow: none;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n overflow: hidden;\n}\n","\n@import \"../../variables\";\n\n.side-drawer-container {\n position: fixed;\n z-index: var(--ZI_navbar);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: stretch;\n transition-duration: 0s;\n transition-property: transform;\n}\n\n.side-drawer-container-open {\n transform: translate(0%);\n}\n\n.side-drawer-container-closed {\n transition-delay: 0.35s;\n transform: translate(-100%);\n}\n\n.side-drawer-darken {\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n position: fixed;\n z-index: -1;\n transition: 0.35s;\n transition-property: background-color;\n background-color: rgb(0 0 0 / 50%);\n}\n\n.side-drawer-darken-closed {\n background-color: rgb(0 0 0 / 0%);\n}\n\n.side-drawer-click-outside {\n flex: 1 1 100%;\n}\n\n.side-drawer {\n overflow-x: hidden;\n transition: 0.35s;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-property: transform;\n margin: 0 0 0 -100px;\n padding: 0 0 1em 100px;\n width: 80%;\n max-width: 20em;\n flex: 0 0 80%;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n .badge {\n margin-left: 10px;\n }\n}\n\n.side-drawer-logo-wrapper {\n display: flex;\n align-items: center;\n padding: 0.85em;\n\n img {\n flex: none;\n height: 50px;\n margin-right: 0.85em;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.side-drawer-click-outside-closed {\n flex: 0 0 0;\n}\n\n.side-drawer-closed {\n transform: translate(-100%);\n}\n\n.side-drawer-heading {\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n display: flex;\n padding: 0;\n margin: 0;\n}\n\n.side-drawer ul {\n list-style: none;\n margin: 0;\n padding: 0;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.side-drawer ul:last-child {\n border: 0;\n}\n\n.side-drawer li {\n padding: 0;\n\n a,\n button {\n box-sizing: border-box;\n display: block;\n height: 3em;\n line-height: 3em;\n padding: 0 0.7em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.MobilePostButton {\n &.button-default {\n width: 5em;\n height: 5em;\n border-radius: 100%;\n position: fixed;\n bottom: 1.5em;\n right: 1.5em;\n // TODO: this needs its own color, it has to stand out enough and link color\n // is not very optimal for this particular use.\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 2px 2px rgb(0 0 0 / 30%), 0 4px 6px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s transform;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n }\n\n &.hidden {\n transform: translateY(150%);\n }\n\n svg {\n font-size: 1.5em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n@media all and (min-width: 801px) {\n .new-status-button:not(.always-show) {\n display: none;\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReplyButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n &:hover .svg-inline--fa,\n &.-active .svg-inline--fa {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.FavoriteButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-favorited .svg-inline--fa {\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReactButton {\n .reaction-picker-filter {\n padding: 0.5em;\n display: flex;\n\n input {\n flex: 1;\n }\n }\n\n .reaction-picker-divider {\n height: 1px;\n width: 100%;\n margin: 0.5em;\n background-color: var(--border, $fallback--border);\n }\n\n .reaction-picker {\n width: 10em;\n height: 9em;\n font-size: 1.5em;\n overflow-y: scroll;\n display: flex;\n flex-wrap: wrap;\n padding: 0.5em;\n text-align: center;\n align-content: flex-start;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n\n .emoji-button {\n cursor: pointer;\n flex-basis: 20%;\n line-height: 1.5;\n align-content: center;\n\n &:hover {\n transform: scale(1.25);\n }\n }\n }\n\n .popover-trigger {\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.RetweetButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-repeated .svg-inline--fa {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ExtraButtons {\n .popover-trigger {\n position: static;\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover-trigger-button {\n /* override of popover internal stuff */\n width: auto;\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.avatars {\n display: flex;\n margin: 0;\n padding: 0;\n\n // For hiding overflowing elements\n flex-wrap: wrap;\n height: 24px;\n\n .avatars-item {\n margin: 0 0 5px 5px;\n\n &:first-child {\n padding-left: 5px;\n }\n\n .avatar-small {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n height: 24px;\n width: 24px;\n }\n }\n}\n","\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n.status-popover.popover {\n font-size: 1rem;\n min-width: 15em;\n max-width: 95%;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n /* TODO cleanup this */\n .Status.Status {\n border: none;\n }\n\n .status-preview-no-content {\n padding: 1em;\n text-align: center;\n\n i {\n font-size: 2em;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.user-list-popover {\n padding: 0.5em;\n\n --emoji-size: 16px;\n\n .user-list-row {\n padding: 0.25em;\n display: flex;\n flex-direction: row;\n\n .user-list-names {\n display: flex;\n flex-direction: column;\n margin-left: 0.5em;\n min-width: 5em;\n\n img {\n width: 1em;\n height: 1em;\n }\n }\n\n .user-list-screen-name {\n font-size: 0.65em;\n }\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.EmojiReactions {\n display: flex;\n margin-top: 0.25em;\n flex-wrap: wrap;\n\n --emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));\n\n .emoji-reaction-container {\n display: flex;\n align-items: stretch;\n margin-top: 0.5em;\n margin-right: 0.5em;\n\n .emoji-reaction-popover {\n padding: 0;\n\n .emoji-reaction-count-button {\n background-color: var(--btn);\n margin: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-sizing: border-box;\n min-width: 2em;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-right: -1px;\n }\n }\n }\n }\n\n .emoji-reaction {\n padding-left: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n\n .reaction-emoji {\n width: var(--emoji-size);\n height: var(--emoji-size);\n margin-right: 0.25em;\n line-height: var(--emoji-size);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .reaction-emoji-content {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n line-height: inherit;\n overflow: hidden;\n font-size: calc(var(--emoji-size) * 0.8);\n margin: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-left: -1px; // offset the border, can't use inset shadows either\n margin-right: -1px;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n\n .emoji-reaction-expand {\n padding: 0 0.5em;\n margin-right: 0.5em;\n margin-top: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n","@import \"../../variables\";\n\n.Status {\n min-width: 0;\n white-space: normal;\n word-wrap: break-word;\n word-break: break-word;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n &.-focused {\n background-color: $fallback--lightBg;\n background-color: var(--selectedPost, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedPostText, $fallback--text);\n\n --lightText: var(--selectedPostLightText, $fallback--light);\n --faint: var(--selectedPostFaintText, $fallback--faint);\n --faintLink: var(--selectedPostFaintLink, $fallback--faint);\n --postLink: var(--selectedPostPostLink, $fallback--faint);\n --postFaintLink: var(--selectedPostFaintPostLink, $fallback--faint);\n --icon: var(--selectedPostIcon, $fallback--icon);\n }\n\n .gravestone {\n padding: var(--status-margin, $status-margin);\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n display: flex;\n\n .deleted-text {\n margin: 0.5em 0;\n align-items: center;\n }\n }\n\n .status-container {\n display: flex;\n padding: var(--status-margin, $status-margin);\n\n > * {\n min-width: 0;\n }\n\n &.-repeat {\n padding-top: 0;\n }\n }\n\n .pin {\n padding: var(--status-margin, $status-margin) var(--status-margin, $status-margin) 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n\n ._misclick-prevention & {\n pointer-events: none;\n\n .attachments {\n pointer-events: initial;\n cursor: initial;\n }\n }\n\n .left-side {\n margin-right: var(--status-margin, $status-margin);\n }\n\n .right-side {\n flex: 1;\n min-width: 0;\n }\n\n .usercard {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .status-username {\n white-space: nowrap;\n overflow: hidden;\n max-width: 85%;\n font-weight: bold;\n flex-shrink: 1;\n margin-right: 0.4em;\n text-overflow: ellipsis;\n\n --_still_image-label-scale: 0.25;\n --emoji-size: 14px;\n }\n\n .status-favicon {\n height: 18px;\n width: 18px;\n margin-right: 0.4em;\n }\n\n .status-heading {\n margin-bottom: 0.5em;\n }\n\n .heading-name-row {\n display: flex;\n justify-content: space-between;\n line-height: 1.3;\n\n a {\n display: inline-block;\n word-break: break-all;\n }\n }\n\n .account-name {\n min-width: 1.6em;\n margin-right: 0.4em;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1 1 0;\n }\n\n .heading-left {\n display: flex;\n min-width: 0;\n }\n\n .heading-right {\n display: flex;\n flex-shrink: 0;\n\n .button-unstyled {\n padding: 5px;\n margin: -5px;\n\n &:hover svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n .svg-inline--fa {\n margin-left: 0.25em;\n }\n }\n\n .glued-label {\n display: inline-flex;\n white-space: nowrap;\n }\n\n .timeago {\n margin-right: 0.2em;\n }\n\n & .heading-reply-row,\n & .heading-edited-row {\n position: relative;\n align-content: baseline;\n font-size: 0.85em;\n margin-top: 0.2em;\n line-height: 130%;\n max-width: 100%;\n align-items: stretch;\n }\n\n & .reply-to-popover,\n & .reply-to-no-popover,\n & .mentions {\n min-width: 0;\n margin-right: 0.4em;\n flex-shrink: 0;\n }\n\n .reply-glued-label {\n margin-right: 0.5em;\n }\n\n .reply-to-popover {\n .reply-to:hover::before {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0;\n width: 100%;\n border-bottom: 1px solid var(--faint);\n pointer-events: none;\n }\n\n .faint-link:hover {\n // override default\n text-decoration: none;\n }\n\n &.-strikethrough {\n .reply-to::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n width: 100%;\n border-bottom: 1px solid var(--faint);\n pointer-events: none;\n }\n }\n }\n\n & .mentions,\n & .reply-to {\n white-space: nowrap;\n position: relative;\n }\n\n & .mentions-text,\n & .reply-to-text {\n color: var(--faint);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .mentions-line {\n display: inline;\n }\n\n .replies {\n margin-top: 0.25em;\n line-height: 1.3;\n font-size: 0.85em;\n display: flex;\n flex-wrap: wrap;\n\n & > * {\n margin-right: 0.4em;\n }\n }\n\n .reply-link {\n height: 17px;\n }\n\n .repeat-info {\n padding: 0.4em var(--status-margin, $status-margin);\n\n .repeat-icon {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n }\n\n .repeater-avatar {\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n margin-left: 28px;\n width: 20px;\n height: 20px;\n }\n\n .repeater-name {\n text-overflow: ellipsis;\n margin-right: 0;\n\n .emoji {\n width: 14px;\n height: 14px;\n vertical-align: middle;\n object-fit: contain;\n }\n }\n\n .status-fadein {\n animation-duration: 0.4s;\n animation-name: fadein;\n }\n\n @keyframes fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .status-actions {\n position: relative;\n width: 100%;\n display: flex;\n margin-top: var(--status-margin, $status-margin);\n\n > * {\n max-width: 4em;\n flex: 1;\n }\n }\n\n .muted {\n padding: 0.25em 0.6em;\n height: 1.2em;\n line-height: 1.2em;\n text-overflow: ellipsis;\n overflow: hidden;\n display: flex;\n flex-wrap: nowrap;\n\n & .status-username,\n & .mute-thread,\n & .mute-words {\n word-wrap: normal;\n word-break: normal;\n white-space: nowrap;\n }\n\n & .status-username,\n & .mute-words {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .status-username {\n font-weight: normal;\n flex: 0 1 auto;\n margin-right: 0.2em;\n font-size: smaller;\n }\n\n .mute-thread {\n flex: 0 0 auto;\n }\n\n .mute-words {\n flex: 1 0 5em;\n margin-left: 0.2em;\n\n &::before {\n content: \" \";\n }\n }\n\n .unmute {\n flex: 0 0 auto;\n margin-left: auto;\n display: block;\n }\n }\n\n .reply-form {\n padding-top: 0;\n padding-bottom: 0;\n }\n\n .reply-body {\n flex: 1;\n }\n\n .favs-repeated-users {\n margin-top: var(--status-margin, $status-margin);\n }\n\n .stats {\n width: 100%;\n display: flex;\n line-height: 1em;\n }\n\n .avatar-row {\n flex: 1;\n overflow: hidden;\n position: relative;\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n position: absolute;\n height: 100%;\n width: 1px;\n left: 0;\n background-color: var(--faint, $fallback--faint);\n }\n }\n\n .stat-count {\n margin-right: var(--status-margin, $status-margin);\n user-select: none;\n\n .stat-title {\n color: var(--faint, $fallback--faint);\n font-size: 0.85em;\n text-transform: uppercase;\n position: relative;\n }\n\n .stat-number {\n font-weight: bolder;\n font-size: 1.1em;\n line-height: 1em;\n }\n\n &:hover .stat-title {\n text-decoration: underline;\n }\n }\n\n @media all and (max-width: 800px) {\n .repeater-avatar {\n margin-left: 20px;\n }\n\n .post-avatar {\n width: 40px;\n height: 40px;\n\n // TODO define those other way somehow?\n // stylelint-disable rscss/class-format\n &.-compact {\n width: 32px;\n height: 32px;\n }\n }\n }\n\n .quoted-status {\n margin-top: 0.5em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n\n &.-unavailable-prompt {\n padding: 0.5em;\n }\n }\n\n .display-quoted-status-button {\n margin: 0.5em;\n\n &-icon {\n color: inherit;\n }\n }\n}\n","@import \"../../variables\";\n\n.Report {\n .report-content {\n margin: 0.5em 0 1em;\n }\n\n .report-state {\n margin: 0.5em 0 1em;\n }\n\n .reported-status {\n border: 1px solid $fallback--faint;\n border-color: var(--faint, $fallback--faint);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n color: $fallback--text;\n color: var(--text, $fallback--text);\n display: block;\n padding: 0.5em;\n margin: 0.5em 0;\n\n .status-content {\n pointer-events: none;\n }\n\n .reported-status-heading {\n display: flex;\n width: 100%;\n justify-content: space-between;\n margin-bottom: 0.2em;\n }\n\n .reported-status-name {\n font-weight: bold;\n }\n }\n\n .note {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n","@import \"../../variables\";\n\n// TODO Copypaste from Status, should unify it somehow\n.Notification {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n word-wrap: break-word;\n word-break: break-word;\n\n --emoji-size: 14px;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n &.-muted {\n padding: 0.25em 0.6em;\n height: 1.2em;\n line-height: 1.2em;\n text-overflow: ellipsis;\n overflow: hidden;\n display: flex;\n flex-wrap: nowrap;\n\n & .status-username,\n & .mute-thread,\n & .mute-words {\n word-wrap: normal;\n word-break: normal;\n white-space: nowrap;\n }\n\n & .status-username,\n & .mute-words {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .status-username {\n font-weight: normal;\n flex: 0 1 auto;\n margin-right: 0.2em;\n font-size: smaller;\n }\n\n .mute-thread {\n flex: 0 0 auto;\n }\n\n .mute-words {\n flex: 1 0 5em;\n margin-left: 0.2em;\n\n &::before {\n content: \" \";\n }\n }\n\n .unmute {\n flex: 0 0 auto;\n margin-left: auto;\n display: block;\n }\n }\n\n .type-icon {\n margin: 0 0.1em;\n }\n\n &.-type--repeat .type-icon {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n &.-type--follow .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n &.-type--follow-request .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n &.-type--like .type-icon {\n color: orange;\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n &.-type--move .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n}\n","@import \"../../variables\";\n\n.Notifications {\n &:not(.minimal) {\n // a bit of a hack to allow scrolling below notifications\n padding-bottom: 15em;\n }\n\n .loadmore-error {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .notification {\n position: relative;\n\n .notification-overlay {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n &.unseen {\n .notification-overlay {\n background-image: linear-gradient(135deg, var(--badgeNotification, $fallback--cRed) 4px, transparent 10px);\n }\n }\n }\n}\n\n/* stylelint-disable-next-line no-descending-specificity */\n.notification {\n box-sizing: border-box;\n\n &:hover .animated.Avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n\n &:last-child .Notification {\n border-bottom: none;\n }\n\n .non-mention {\n display: flex;\n flex: 1;\n flex-wrap: nowrap;\n padding: 0.6em;\n min-width: 0;\n\n .avatar-container {\n width: 32px;\n height: 32px;\n }\n\n .faint {\n --link: var(--faintLink);\n --text: var(--faint);\n }\n }\n\n .follow-request-accept {\n &:hover {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .follow-request-reject {\n &:hover {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n .follow-text,\n .move-text {\n padding: 0.5em 0;\n overflow-wrap: break-word;\n display: flex;\n justify-content: space-between;\n\n .follow-name {\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n /* TODO cleanup this */\n .Status {\n flex: 1;\n }\n\n time {\n white-space: nowrap;\n }\n\n .notification-right {\n flex: 1;\n padding-left: 0.8em;\n min-width: 0;\n\n .timeago {\n min-width: 3em;\n text-align: right;\n }\n\n .timeago-link {\n margin-right: 0.2em;\n }\n\n .expand-icon {\n .svg-inline--fa {\n margin-left: 0.25em;\n }\n }\n }\n\n .emoji-reaction-emoji {\n font-size: 1.3em;\n max-width: 1.25em;\n height: 1.25em;\n width: auto;\n }\n\n .emoji-reaction-emoji-image {\n vertical-align: middle;\n object-fit: contain;\n }\n\n .notification-details {\n min-width: 0;\n word-wrap: break-word;\n line-height: var(--post-line-height);\n position: relative;\n overflow: hidden;\n width: 100%;\n flex: 1 1 0;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n\n .name-and-action {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .username {\n font-weight: bolder;\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .timeago {\n margin-right: 0.2em;\n }\n\n .status-content {\n margin: 0;\n max-height: 300px;\n }\n\n h1 {\n word-break: break-all;\n margin: 0 0 0.3em;\n padding: 0;\n font-size: 1em;\n line-height: 1.5;\n\n small {\n font-weight: lighter;\n }\n }\n\n p {\n margin: 0;\n margin-top: 0;\n margin-bottom: 0.3em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.MobileNav {\n z-index: var(--ZI_navbar);\n\n .mobile-nav {\n display: grid;\n line-height: var(--navbar-height);\n grid-template-rows: 50px;\n grid-template-columns: 2fr auto;\n width: 100%;\n box-sizing: border-box;\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .mobile-inner-nav {\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .mobile-nav-button {\n display: inline-block;\n text-align: center;\n padding: 0 1em;\n position: relative;\n cursor: pointer;\n }\n\n .site-name {\n padding: 0 0.3em;\n display: inline-block;\n }\n\n .item {\n /* moslty just to get rid of extra whitespaces */\n display: flex;\n }\n\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .mobile-notifications-drawer {\n width: 100%;\n height: 100vh;\n overflow-x: hidden;\n position: fixed;\n top: 0;\n left: 0;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n transition-property: transform;\n transition-duration: 0.25s;\n transform: translateX(0);\n z-index: var(--ZI_navbar);\n -webkit-overflow-scrolling: touch;\n\n &.-closed {\n transform: translateX(100%);\n box-shadow: none;\n }\n }\n\n .mobile-notifications-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: calc(var(--ZI_navbar) + 100);\n width: 100%;\n height: 50px;\n line-height: 50px;\n position: absolute;\n color: var(--topBarText);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n\n .spacer {\n flex: 1;\n }\n\n .title {\n font-size: 1.3em;\n margin-left: 0.6em;\n }\n }\n\n .pins {\n flex: 1;\n\n .pinned-item {\n flex-grow: 1;\n }\n }\n\n .mobile-notifications {\n margin-top: 50px;\n width: 100vw;\n height: calc(100vh - var(--navbar-height));\n overflow-x: hidden;\n overflow-y: scroll;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .notifications {\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n\n .panel {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n }\n\n .panel::after {\n border-radius: 0;\n }\n\n .panel .panel-heading {\n border-radius: 0;\n box-shadow: none;\n }\n }\n }\n\n .confirm-modal.dark-overlay {\n &::before {\n z-index: 3000;\n }\n\n .dialog-modal.panel {\n z-index: 3001;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.SearchBar {\n display: inline-flex;\n align-items: baseline;\n vertical-align: baseline;\n justify-content: flex-end;\n\n &.-expanded {\n width: 100%;\n }\n\n .search-bar-input,\n .search-button {\n height: 29px;\n }\n\n .search-bar-input {\n flex: 1 0 auto;\n }\n\n .cancel-search {\n height: 50px;\n }\n\n .cancel-icon {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n}\n\n","@import \"../../variables\";\n\n.DesktopNav {\n width: 100%;\n z-index: var(--ZI_navbar);\n\n input {\n color: var(--inputTopbarText, var(--inputText));\n }\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n\n .inner-nav {\n display: grid;\n grid-template-rows: var(--navbar-height);\n grid-template-columns: 2fr auto 2fr;\n grid-template-areas: \"sitename logo actions\";\n box-sizing: border-box;\n padding: 0 1.2em;\n margin: auto;\n max-width: 980px;\n }\n\n &.-column-stretch .inner-nav {\n --miniColumn: 25rem;\n --maxiColumn: 45rem;\n --columnGap: 1em;\n\n max-width:\n calc(\n var(--sidebarColumnWidth, var(--miniColumn)) +\n var(--contentColumnWidth, var(--maxiColumn)) +\n var(--columnGap)\n );\n }\n\n &.-logoLeft .inner-nav {\n grid-template-columns: auto 2fr 2fr;\n grid-template-areas: \"logo sitename actions\";\n }\n\n &.-column-stretch.-wide .inner-nav {\n max-width:\n calc(\n var(--sidebarColumnWidth, var(--miniColumn)) +\n var(--contentColumnWidth, var(--maxiColumn)) +\n var(--notifsColumnWidth, var(--miniColumn)) +\n var(--columnGap)\n );\n }\n\n .button-default {\n &,\n svg {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--fg;\n background-color: var(--btnPressedTopBar, $fallback--fg);\n color: $fallback--text;\n color: var(--btnPressedTopBarText, $fallback--text);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledTopBarText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledTopBarText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnToggledTopBar, $fallback--fg);\n }\n }\n\n .logo {\n grid-area: logo;\n position: relative;\n transition: opacity;\n transition-timing-function: ease-out;\n transition-duration: 100ms;\n\n @media all and (min-width: 800px) {\n /* stylelint-disable-next-line declaration-no-important */\n opacity: 1 !important;\n }\n\n .mask {\n mask-repeat: no-repeat;\n mask-position: center;\n mask-size: contain;\n background-color: $fallback--fg;\n background-color: var(--topBarText, $fallback--fg);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n img {\n display: inline-block;\n height: var(--navbar-height);\n }\n }\n\n .nav-icon {\n margin-left: 0.2em;\n width: 2em;\n height: 100%;\n text-align: center;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .sitename {\n grid-area: sitename;\n }\n\n .actions {\n grid-area: actions;\n }\n\n .item {\n flex: 1;\n line-height: var(--navbar-height);\n height: var(--navbar-height);\n overflow: hidden;\n display: flex;\n flex-wrap: wrap;\n\n &.right {\n justify-content: flex-end;\n text-align: right;\n }\n }\n\n .spacer {\n width: 1em;\n }\n}\n","\n@import \"../../variables\";\n\n.list {\n &-item:not(:last-child) {\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n &-empty-content {\n text-align: center;\n padding: 10px;\n }\n}\n","\n@import \"../../variables\";\n\n.user-reporting-panel {\n width: 90vw;\n max-width: 700px;\n min-height: 20vh;\n max-height: 80vh;\n\n .panel-body {\n display: flex;\n flex-direction: column-reverse;\n border-top: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n overflow: hidden;\n }\n\n &-left {\n padding: 1.1em 0.7em 0.7em;\n line-height: var(--post-line-height);\n box-sizing: border-box;\n\n > div {\n margin-bottom: 1em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p {\n margin-top: 0;\n }\n\n textarea.form-control {\n line-height: 16px;\n resize: none;\n overflow: hidden;\n transition: min-height 200ms 100ms;\n min-height: 44px;\n width: 100%;\n }\n\n .btn {\n min-width: 10em;\n padding: 0 2em;\n }\n\n .alert {\n margin: 1em 0 0;\n line-height: 1.3em;\n }\n }\n\n &-right {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n &-sitem {\n display: flex;\n justify-content: space-between;\n\n /* TODO cleanup this */\n > .Status {\n flex: 1;\n }\n\n > .checkbox {\n margin: 0.75em;\n }\n }\n\n @media all and (min-width: 801px) {\n .panel-body {\n flex-direction: row;\n }\n\n &-left {\n width: 50%;\n max-width: 320px;\n border-right: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 1.1em;\n\n > div {\n margin-bottom: 2em;\n }\n }\n\n &-right {\n width: 50%;\n flex: 1 1 auto;\n margin-bottom: 12px;\n }\n }\n}\n","\n.modal-view.edit-form-modal-view {\n align-items: flex-start;\n}\n\n.edit-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n\n .form-bottom-left {\n max-width: 6.5em;\n\n .emoji-icon {\n justify-content: right;\n }\n }\n}\n","\n.modal-view.post-form-modal-view {\n align-items: flex-start;\n}\n\n.post-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n","\n.modal-view.status-history-modal-view {\n align-items: flex-start;\n}\n\n.status-history-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n","\n@import \"../../variables\";\n\n.global-notice-list {\n position: fixed;\n top: calc(var(--navbar-height) + 0.5em);\n width: 100%;\n pointer-events: none;\n z-index: var(--ZI_modals_popovers);\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .global-notice {\n pointer-events: auto;\n text-align: center;\n width: 40em;\n max-width: calc(100% - 3em);\n display: flex;\n padding-left: 1.5em;\n line-height: 2;\n margin-bottom: 0.5em;\n\n .notice-message {\n flex: 1 1 100%;\n }\n }\n\n .global-error {\n background-color: var(--alertPopupError, $fallback--cRed);\n color: var(--alertPopupErrorText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupErrorText, $fallback--text);\n }\n }\n\n .global-warning {\n background-color: var(--alertPopupWarning, $fallback--cOrange);\n color: var(--alertPopupWarningText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupWarningText, $fallback--text);\n }\n }\n\n .global-success {\n background-color: var(--alertPopupSuccess, $fallback--cGreen);\n color: var(--alertPopupSuccessText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupSuccessText, $fallback--text);\n }\n }\n\n .global-info {\n background-color: var(--alertPopupNeutral, $fallback--fg);\n color: var(--alertPopupNeutralText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupNeutralText, $fallback--text);\n }\n }\n\n .close-notice {\n padding-right: 0.2em;\n\n .svg-inline--fa:hover {\n opacity: 0.6;\n }\n }\n}\n","// stylelint-disable rscss/class-format\n/* stylelint-disable no-descending-specificity */\n@import \"./variables\";\n@import \"./panel\";\n\n:root {\n --navbar-height: 3.5rem;\n --post-line-height: 1.4;\n // Z-Index stuff\n --ZI_media_modal: 9000;\n --ZI_modals_popovers: 8500;\n --ZI_modals: 8000;\n --ZI_navbar_popovers: 7500;\n --ZI_navbar: 7000;\n --ZI_popovers: 6000;\n}\n\nhtml {\n font-size: 14px;\n // overflow-x: clip causes my browser's tab to crash with SIGILL lul\n}\n\nbody {\n font-family: sans-serif;\n font-family: var(--interfaceFont, sans-serif);\n margin: 0;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n overscroll-behavior-y: none;\n overflow-x: clip;\n overflow-y: scroll;\n\n &.hidden {\n display: none;\n }\n}\n\n// ## Custom scrollbars\n// Only show custom scrollbars on devices which\n// have a cursor/pointer to operate them\n@media (any-pointer: fine) {\n * {\n scrollbar-color: var(--btn) transparent;\n\n &::-webkit-scrollbar {\n background: transparent;\n }\n\n &::-webkit-scrollbar-button,\n &::-webkit-scrollbar-thumb {\n background-color: var(--btn);\n box-shadow: var(--buttonShadow);\n border-radius: var(--btnRadius);\n }\n\n // horizontal/vertical/increment/decrement are webkit-specific stuff\n // that indicates whether we're affecting vertical scrollbar, increase button etc\n // stylelint-disable selector-pseudo-class-no-unknown\n &::-webkit-scrollbar-button {\n --___bgPadding: 2px;\n\n color: var(--btnText);\n background-repeat: no-repeat, no-repeat;\n\n &:horizontal {\n background-size: 50% calc(50% - var(--___bgPadding)), 50% calc(50% - var(--___bgPadding));\n\n &:increment {\n background-image:\n linear-gradient(45deg, var(--btnText) 50%, transparent 51%),\n linear-gradient(-45deg, transparent 50%, var(--btnText) 51%);\n background-position: top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding);\n }\n\n &:decrement {\n background-image:\n linear-gradient(45deg, transparent 50%, var(--btnText) 51%),\n linear-gradient(-45deg, var(--btnText) 50%, transparent 51%);\n background-position: bottom var(--___bgPadding) right 50%, left 50% top var(--___bgPadding);\n }\n }\n\n &:vertical {\n background-size: calc(50% - var(--___bgPadding)) 50%, calc(50% - var(--___bgPadding)) 50%;\n\n &:increment {\n background-image:\n linear-gradient(-45deg, transparent 50%, var(--btnText) 51%),\n linear-gradient(45deg, transparent 50%, var(--btnText) 51%);\n background-position: right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%;\n }\n\n &:decrement {\n background-image:\n linear-gradient(-45deg, var(--btnText) 50%, transparent 51%),\n linear-gradient(45deg, var(--btnText) 50%, transparent 51%);\n background-position: left var(--___bgPadding) top 50%, right var(--___bgPadding) top 50%;\n }\n }\n }\n // stylelint-enable selector-pseudo-class-no-unknown\n }\n // Body should have background to scrollbar otherwise it will use white (body color?)\n html {\n scrollbar-color: var(--selectedMenu) var(--wallpaper);\n background: var(--wallpaper);\n }\n}\n\na {\n text-decoration: none;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n}\n\nh4 {\n margin: 0;\n}\n\n.iconLetter {\n display: inline-block;\n text-align: center;\n font-weight: 1000;\n}\n\ni[class*=\"icon-\"],\n.svg-inline--fa,\n.iconLetter {\n color: $fallback--icon;\n color: var(--icon, $fallback--icon);\n}\n\n.button-unstyled:hover,\na:hover {\n > i[class*=\"icon-\"],\n > .svg-inline--fa,\n > .iconLetter {\n color: var(--text);\n }\n}\n\nnav {\n z-index: var(--ZI_navbar);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n box-sizing: border-box;\n height: var(--navbar-height);\n position: fixed;\n}\n\n#sidebar {\n grid-area: sidebar;\n}\n\n#modal {\n position: absolute;\n z-index: var(--ZI_modals);\n}\n\n.column.-scrollable {\n top: var(--navbar-height);\n position: sticky;\n}\n\n#main-scroller {\n grid-area: content;\n position: relative;\n}\n\n#notifs-column {\n grid-area: notifs;\n}\n\n.app-bg-wrapper {\n position: fixed;\n height: 100%;\n top: var(--navbar-height);\n z-index: -1000;\n left: 0;\n right: -20px;\n background-size: cover;\n background-repeat: no-repeat;\n background-color: var(--wallpaper);\n background-image: var(--body-background-image);\n background-position: 50%;\n}\n\n.underlay {\n grid-column: 1 / span 3;\n grid-row: 1 / 1;\n pointer-events: none;\n background-color: rgb(0 0 0 / 15%);\n background-color: var(--underlay, rgb(0 0 0 / 15%));\n z-index: -1000;\n}\n\n.app-layout {\n --miniColumn: 25rem;\n --maxiColumn: 45rem;\n --columnGap: 1em;\n --status-margin: 0.75em;\n --effectiveSidebarColumnWidth: minmax(var(--miniColumn), var(--sidebarColumnWidth, var(--miniColumn)));\n --effectiveNotifsColumnWidth: minmax(var(--miniColumn), var(--notifsColumnWidth, var(--miniColumn)));\n --effectiveContentColumnWidth: minmax(var(--miniColumn), var(--contentColumnWidth, var(--maxiColumn)));\n\n position: relative;\n display: grid;\n grid-template-columns:\n var(--effectiveSidebarColumnWidth)\n var(--effectiveContentColumnWidth);\n grid-template-areas: \"sidebar content\";\n grid-template-rows: 1fr;\n box-sizing: border-box;\n margin: 0 auto;\n align-content: flex-start;\n flex-wrap: wrap;\n justify-content: center;\n min-height: 100vh;\n overflow-x: clip;\n\n .column {\n --___columnMargin: var(--columnGap);\n\n display: grid;\n grid-template-columns: 100%;\n box-sizing: border-box;\n grid-row: 1 / 1;\n margin: 0 calc(var(--___columnMargin) / 2);\n padding: calc(var(--___columnMargin)) 0;\n row-gap: var(--___columnMargin);\n align-content: start;\n\n &:not(.-scrollable) {\n margin-top: var(--navbar-height);\n }\n\n &:hover {\n z-index: 2;\n }\n\n &.-full-height {\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n }\n\n &.-scrollable {\n --___paddingIncrease: calc(var(--columnGap) / 2);\n\n position: sticky;\n top: var(--navbar-height);\n max-height: calc(100vh - var(--navbar-height));\n overflow-y: auto;\n overflow-x: hidden;\n margin-left: calc(var(--___paddingIncrease) * -1);\n padding-left: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);\n\n // On browsers that don't support hiding scrollbars we enforce \"show scrolbars\" mode\n // might implement old style of hiding scrollbars later if there's demand\n @supports (scrollbar-width: none) or (-webkit-text-fill-color: initial) {\n &:not(.-show-scrollbar) {\n scrollbar-width: none;\n margin-right: calc(var(--___paddingIncrease) * -1);\n padding-right: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);\n\n &::-webkit-scrollbar {\n display: block;\n width: 0;\n }\n }\n }\n\n .panel-heading.-sticky {\n top: calc(var(--columnGap) / -1);\n }\n }\n }\n\n &.-has-new-post-button {\n .column {\n padding-bottom: 10rem;\n }\n }\n\n &.-no-sticky-headers {\n .column {\n .panel-heading.-sticky {\n position: relative;\n top: 0;\n }\n }\n }\n\n .column-inner {\n display: grid;\n grid-template-columns: 100%;\n box-sizing: border-box;\n row-gap: 1em;\n align-content: start;\n }\n\n &.-reverse:not(.-wide, .-mobile) {\n grid-template-columns:\n var(--effectiveContentColumnWidth)\n var(--effectiveSidebarColumnWidth);\n grid-template-areas: \"content sidebar\";\n }\n\n &.-wide {\n grid-template-columns:\n var(--effectiveSidebarColumnWidth)\n var(--effectiveContentColumnWidth)\n var(--effectiveNotifsColumnWidth);\n grid-template-areas: \"sidebar content notifs\";\n\n &.-reverse {\n grid-template-columns:\n var(--effectiveNotifsColumnWidth)\n var(--effectiveContentColumnWidth)\n var(--effectiveSidebarColumnWidth);\n grid-template-areas: \"notifs content sidebar\";\n }\n }\n\n &.-mobile {\n grid-template-columns: 100vw;\n grid-template-areas: \"content\";\n padding: 0;\n\n .column {\n padding-top: 0;\n margin: var(--navbar-height) 0 0 0;\n }\n\n .panel-heading,\n .panel-heading::after,\n .panel-heading::before,\n .panel,\n .panel::after {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n #sidebar,\n #notifs-column {\n display: none;\n }\n }\n\n &.-normal {\n #notifs-column {\n display: none;\n }\n }\n}\n\n.text-center {\n text-align: center;\n}\n\n.button-default {\n user-select: none;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n border: none;\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n cursor: pointer;\n box-shadow: $fallback--buttonShadow;\n box-shadow: var(--buttonShadow);\n font-size: 1em;\n font-family: sans-serif;\n font-family: var(--interfaceFont, sans-serif);\n\n &.-sublime {\n background: transparent;\n }\n\n i[class*=\"icon-\"],\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &::-moz-focus-inner {\n border: none;\n }\n\n &:hover {\n box-shadow: 0 0 4px rgb(255 255 255 / 30%);\n box-shadow: var(--buttonHoverShadow);\n }\n\n &:active {\n box-shadow:\n 0 0 4px 0 rgb(255 255 255 / 30%),\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset;\n box-shadow: var(--buttonPressedShadow);\n color: $fallback--text;\n color: var(--btnPressedText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnPressed, $fallback--fg);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnPressedText, $fallback--text);\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnDisabled, $fallback--fg);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnToggled, $fallback--fg);\n box-shadow:\n 0 0 4px 0 rgb(255 255 255 / 30%),\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset;\n box-shadow: var(--buttonPressedShadow);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n\n &.danger {\n // TODO: add better color variable\n color: $fallback--text;\n color: var(--alertErrorPanelText, $fallback--text);\n background-color: $fallback--alertError;\n background-color: var(--alertError, $fallback--alertError);\n }\n}\n\n.button-unstyled {\n background: none;\n border: none;\n outline: none;\n display: inline;\n text-align: initial;\n font-size: 100%;\n font-family: inherit;\n padding: 0;\n line-height: unset;\n cursor: pointer;\n box-sizing: content-box;\n color: inherit;\n\n &.-link {\n color: $fallback--link;\n color: var(--link, $fallback--link);\n }\n\n &.-fullwidth {\n width: 100%;\n }\n\n &.-hover-highlight {\n &:hover svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n\ninput,\ntextarea,\n.input {\n &.unstyled {\n border-radius: 0;\n background: none;\n box-shadow: none;\n height: unset;\n }\n\n --_padding: 0.5em;\n\n border: none;\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n box-shadow:\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 0 2px 0 rgb(0 0 0 / 100%) inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n color: $fallback--lightText;\n color: var(--inputText, $fallback--lightText);\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n margin: 0;\n box-sizing: border-box;\n display: inline-block;\n position: relative;\n line-height: 2;\n hyphens: none;\n padding: 0 var(--_padding);\n\n &:disabled,\n &[disabled=\"disabled\"],\n &.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n &[type=\"range\"] {\n background: none;\n border: none;\n margin: 0;\n box-shadow: none;\n flex: 1;\n }\n\n &[type=\"radio\"] {\n display: none;\n\n &:checked + label::before {\n box-shadow: 0 0 2px black inset, 0 0 0 4px $fallback--fg inset;\n box-shadow: var(--inputShadow), 0 0 0 4px var(--fg, $fallback--fg) inset;\n background-color: var(--accent, $fallback--link);\n }\n\n &:disabled {\n &,\n & + label,\n & + label::before {\n opacity: 0.5;\n }\n }\n\n + label::before {\n flex-shrink: 0;\n display: inline-block;\n content: \"\";\n transition: box-shadow 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: 100%; // Radio buttons should always be circle\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.5em;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1;\n font-size: 1.1em;\n box-sizing: border-box;\n color: transparent;\n overflow: hidden;\n }\n }\n\n &[type=\"checkbox\"] {\n &:checked + label::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:disabled {\n &,\n & + label,\n & + label::before {\n opacity: 0.5;\n }\n }\n\n + label::before {\n flex-shrink: 0;\n display: inline-block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.5em;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1;\n font-size: 1.1em;\n box-sizing: border-box;\n color: transparent;\n overflow: hidden;\n }\n }\n\n &.resize-height {\n resize: vertical;\n }\n}\n\n// Textareas should have stock line-height + vertical padding instead of huge line-height\ntextarea {\n padding: var(--_padding);\n line-height: var(--post-line-height);\n}\n\noption {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n}\n\n.hide-number-spinner {\n appearance: textfield;\n\n &[type=\"number\"]::-webkit-inner-spin-button,\n &[type=\"number\"]::-webkit-outer-spin-button {\n opacity: 0;\n display: none;\n }\n}\n\n.cards-list {\n list-style: none;\n display: grid;\n grid-auto-flow: row dense;\n grid-template-columns: 1fr 1fr;\n\n li {\n border: 1px solid var(--border);\n border-radius: var(--inputRadius);\n padding: 0.5em;\n margin: 0.25em;\n }\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-group {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n\n button,\n .button-dropdown {\n position: relative;\n flex: 1 1 auto;\n\n &:not(:last-child),\n &:not(:last-child) .button-default {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &:not(:first-child),\n &:not(:first-child) .button-default {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n}\n\n.fa {\n color: grey;\n}\n\n.mobile-shown {\n display: none;\n}\n\n.badge {\n box-sizing: border-box;\n display: inline-block;\n border-radius: 99px;\n max-width: 10em;\n min-width: 1.7em;\n height: 1.3em;\n padding: 0.15em;\n vertical-align: middle;\n font-weight: normal;\n font-style: normal;\n font-size: 0.9em;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.badge-notification {\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n color: white;\n color: var(--badgeNotificationText, white);\n }\n}\n\n.alert {\n margin: 0 0.35em;\n padding: 0 0.25em;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n &.error {\n background-color: $fallback--alertError;\n background-color: var(--alertError, $fallback--alertError);\n color: $fallback--text;\n color: var(--alertErrorText, $fallback--text);\n\n .panel-heading & {\n color: $fallback--text;\n color: var(--alertErrorPanelText, $fallback--text);\n }\n }\n\n &.warning {\n background-color: $fallback--alertWarning;\n background-color: var(--alertWarning, $fallback--alertWarning);\n color: $fallback--text;\n color: var(--alertWarningText, $fallback--text);\n\n .panel-heading & {\n color: $fallback--text;\n color: var(--alertWarningPanelText, $fallback--text);\n }\n }\n\n &.success {\n background-color: var(--alertSuccess, $fallback--alertWarning);\n color: var(--alertSuccessText, $fallback--text);\n\n .panel-heading & {\n color: var(--alertSuccessPanelText, $fallback--text);\n }\n }\n}\n\n.faint {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n}\n\n.faint-link {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n\n &:hover {\n text-decoration: underline;\n }\n}\n\n.visibility-notice {\n padding: 0.5em;\n border: 1px solid $fallback--faint;\n border: 1px solid var(--faint, $fallback--faint);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n}\n\n.notice-dismissible {\n padding-right: 4rem;\n position: relative;\n\n .dismiss {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.5em;\n color: inherit;\n }\n}\n\n.fa-scale-110 {\n &.svg-inline--fa,\n &.iconLetter {\n font-size: 1.1em;\n }\n}\n\n.fa-old-padding {\n &.iconLetter,\n &.svg-inline--fa,\n &-layer {\n padding: 0 0.3em;\n }\n}\n\n.veryfaint {\n opacity: 0.25;\n}\n\n.login-hint {\n text-align: center;\n\n @media all and (min-width: 801px) {\n display: none;\n }\n\n a {\n display: inline-block;\n padding: 1em 0;\n width: 100%;\n }\n}\n\n.btn.button-default {\n min-height: 2em;\n}\n\n.new-status-notification {\n position: relative;\n font-size: 1.1em;\n z-index: 1;\n flex: 1;\n}\n\n@media all and (max-width: 800px) {\n .mobile-hidden {\n display: none;\n }\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(359deg);\n }\n}\n\n@keyframes shakeError {\n 0% {\n transform: translateX(0);\n }\n\n 15% {\n transform: translateX(0.375rem);\n }\n\n 30% {\n transform: translateX(-0.375rem);\n }\n\n 45% {\n transform: translateX(0.375rem);\n }\n\n 60% {\n transform: translateX(-0.375rem);\n }\n\n 75% {\n transform: translateX(0.375rem);\n }\n\n 90% {\n transform: translateX(-0.375rem);\n }\n\n 100% {\n transform: translateX(0);\n }\n}\n\n// Vue transitions\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s;\n}\n\n.fade-enter-from,\n.fade-leave-active {\n opacity: 0;\n}\n/* stylelint-enable no-descending-specificity */\n\n.visible-for-screenreader-only {\n display: block;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n visibility: visible;\n clip: rect(0 0 0 0);\n padding: 0;\n position: absolute;\n}\n","/* stylelint-disable no-descending-specificity */\n.panel {\n position: relative;\n display: flex;\n flex-direction: column;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n &::after,\n & {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n}\n\n.panel-body {\n padding: var(--panel-body-padding, 0);\n\n &:empty::before {\n content: \"¯\\\\_(ツ)_/¯\"; // Could use words but it'd require translations\n display: block;\n margin: 1em;\n text-align: center;\n }\n\n > p {\n line-height: 1.3;\n padding: 1em;\n margin: 0;\n }\n}\n\n.panel-heading,\n.panel-footer {\n --panel-heading-height-padding: 0.6em;\n --__panel-heading-gap: 0.5em;\n --__panel-heading-height: 3.2em;\n --__panel-heading-height-inner: calc(var(--__panel-heading-height) - 2 * var(--panel-heading-height-padding, 0));\n\n position: relative;\n box-sizing: border-box;\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: minmax(50%, 1fr);\n grid-auto-columns: auto;\n grid-column-gap: var(--__panel-heading-gap);\n flex: none;\n background-size: cover;\n padding: var(--panel-heading-height-padding);\n height: var(--__panel-heading-height);\n line-height: var(--__panel-heading-height-inner);\n z-index: 4;\n\n &.-flexible-height {\n --__panel-heading-height: auto;\n\n &::after,\n &::before {\n display: none;\n }\n }\n\n &.-stub {\n &,\n &::after {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n &.-sticky {\n position: sticky;\n top: var(--navbar-height);\n }\n\n &::after,\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n pointer-events: none;\n }\n\n .title {\n font-size: 1.3em;\n }\n\n .alert {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n }\n\n &:not(.-flexible-height) {\n > .button-default,\n > .alert {\n height: var(--__panel-heading-height-inner);\n min-height: 0;\n box-sizing: border-box;\n margin: 0;\n min-width: 1px;\n padding-top: 0;\n padding-bottom: 0;\n align-self: stretch;\n }\n }\n}\n\n// TODO Should refactor panels into separate component and utilize slots\n\n.panel-heading {\n border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;\n border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;\n border-width: 0 0 1px;\n align-items: start;\n // panel theme\n color: var(--panelText);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n &::after {\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n z-index: -2;\n border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;\n border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;\n box-shadow: var(--panelHeaderShadow);\n }\n\n a,\n .-link {\n color: $fallback--link;\n color: var(--panelLink, $fallback--link);\n }\n\n .button-unstyled:hover,\n a:hover {\n i[class*=\"icon-\"],\n .svg-inline--fa,\n .iconLetter {\n color: var(--panelText);\n }\n }\n\n .faint {\n background-color: transparent;\n color: $fallback--faint;\n color: var(--panelFaint, $fallback--faint);\n }\n\n .faint-link {\n color: $fallback--faint;\n color: var(--faintLink, $fallback--faint);\n }\n\n &:not(.-flexible-height) {\n > .button-default {\n flex-shrink: 0;\n\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnPanelText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--fg;\n background-color: var(--btnPressedPanel, $fallback--fg);\n color: $fallback--text;\n color: var(--btnPressedPanelText, $fallback--text);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledPanelText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledPanelText, $fallback--text);\n }\n }\n }\n\n .rightside-button {\n align-self: stretch;\n text-align: center;\n width: var(--__panel-heading-height);\n height: var(--__panel-heading-height);\n margin: calc(-1 * var(--panel-heading-height-padding)) 0;\n margin-right: calc(-1 * var(--__panel-heading-gap));\n\n > button {\n box-sizing: border-box;\n padding: calc(1 * var(--panel-heading-height-padding)) 0;\n height: 100%;\n width: 100%;\n text-align: center;\n\n svg {\n font-size: 1.2em;\n }\n }\n }\n\n .rightside-icon {\n align-self: stretch;\n text-align: center;\n width: var(--__panel-heading-height);\n margin-right: calc(-1 * var(--__panel-heading-gap));\n\n svg {\n font-size: 1.2em;\n }\n }\n}\n\n.panel-footer {\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n align-items: center;\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n}\n/* stylelint-enable no-descending-specificity */\n","\n@import \"../../variables\";\n\n.thread-tree-replies {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n}\n\n.thread-tree-replies-hidden {\n padding: var(--status-margin, $status-margin);\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n}\n","\n@import \"../../variables\";\n\n.Conversation {\n z-index: 1;\n\n .conversation-dive-to-top-level-box {\n padding: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n\n .thread-ancestors {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n }\n\n .thread-ancestor.-faded .StatusContent {\n --link: var(--faintLink);\n --text: var(--faint);\n\n color: var(--text);\n }\n\n .thread-ancestor-dive-box {\n padding-left: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n &,\n &-inner {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n }\n\n .thread-ancestor-dive-box-inner {\n padding: var(--status-margin, $status-margin);\n }\n\n .conversation-status {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n }\n\n .thread-ancestor-has-other-replies .conversation-status,\n &:last-child .conversation-status,\n .thread-ancestor:last-child .conversation-status,\n .thread-ancestor:last-child .thread-ancestor-dive-box,\n &.-expanded .thread-tree .conversation-status {\n border-bottom: none;\n }\n\n .thread-ancestors + .thread-tree > .conversation-status {\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n /* expanded conversation in timeline */\n &.status-fadein.-expanded .thread-body {\n border-left: 4px solid $fallback--cRed;\n border-left-color: var(--cRed, $fallback--cRed);\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n border-bottom: 1px solid var(--border, $fallback--border);\n }\n\n &.-expanded.status-fadein {\n margin: calc(var(--status-margin, $status-margin) / 2);\n }\n}\n","\n@import \"../../variables\";\n\n.timeline-menu-popover {\n min-width: 24rem;\n max-width: 100vw;\n margin-top: 0.6rem;\n font-size: 1rem;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n a {\n display: block;\n padding: 0 0.65em;\n height: 3.5em;\n line-height: 3.5em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n }\n\n &.router-link-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n svg {\n margin-right: 0.4em;\n margin-left: -0.2em;\n }\n }\n\n li {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 0;\n\n &:last-child a {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child {\n border: none;\n }\n }\n}\n\n.TimelineMenu {\n margin-right: auto;\n min-width: 0;\n\n .popover-trigger-button {\n vertical-align: bottom;\n }\n\n .panel::after {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n }\n\n .timeline-menu-title {\n margin: 0;\n cursor: pointer;\n user-select: none;\n width: 100%;\n display: flex;\n\n .timeline-menu-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n svg {\n margin-left: 0.6em;\n transition: transform 100ms;\n }\n\n .click-blocker {\n cursor: default;\n flex-grow: 1;\n }\n }\n\n &.open .timeline-menu-title svg {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n transform: rotate(180deg);\n }\n\n .panel {\n box-shadow: var(--popoverShadow);\n }\n}\n","@import \"../../variables\";\n\n.Timeline {\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: var(--badgeNeutral);\n }\n\n .alert-badge {\n font-size: 0.75em;\n line-height: 1;\n text-align: right;\n border-radius: var(--tooltipRadius);\n position: absolute;\n left: calc(50% - 0.5em);\n top: calc(50% - 0.4em);\n padding: 0.2em;\n margin-left: 0.7em;\n margin-top: -1em;\n background-color: var(--badgeNeutral);\n color: var(--badgeNeutralText);\n }\n\n .loadmore-button {\n position: relative;\n }\n\n &.-blocked {\n cursor: progress;\n }\n\n .conversation-heading {\n top: calc(var(--__panel-heading-height) * var(--currentPanelStack, 2));\n z-index: 2;\n }\n\n &.-nonpanel {\n .timeline-heading {\n text-align: center;\n line-height: 2.75em;\n padding: 0 0.5em;\n\n .button-default,\n .alert {\n line-height: 2em;\n width: 100%;\n }\n }\n }\n}\n","@import \"../../variables\";\n\n/* stylelint-disable no-descending-specificity */\n.tab-switcher {\n display: flex;\n\n .tab-icon {\n margin: 0.2em auto;\n display: block;\n }\n\n &.top-tabs {\n flex-direction: column;\n\n > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n flex-direction: row;\n flex: 0 0 auto;\n\n &::after,\n &::before {\n content: \"\";\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n .tab-wrapper {\n height: 2em;\n\n &:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n }\n\n .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: 6px - 99px;\n }\n }\n\n .contents.scrollable-tabs {\n flex-basis: 0;\n }\n }\n\n &.side-tabs {\n flex-direction: row;\n\n @media all and (max-width: 800px) {\n overflow-x: auto;\n }\n\n > .contents {\n flex: 1 1 auto;\n }\n\n > .tabs {\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n flex-direction: column;\n\n &::after,\n &::before {\n flex-shrink: 0;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &::after {\n flex-grow: 1;\n }\n\n &::before {\n flex-grow: 0;\n }\n\n .tab-wrapper {\n min-width: 10em;\n display: flex;\n flex-direction: column;\n\n @media all and (max-width: 800px) {\n min-width: 4em;\n }\n\n &:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &::before {\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &:last-child .tab {\n margin-bottom: 0;\n }\n }\n\n .tab {\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 padding-left: 0.25em;\n padding-right: calc(0.25em + 200px);\n margin-right: calc(0.25em - 200px);\n margin-left: 0.25em;\n\n .text {\n display: none;\n }\n }\n }\n }\n }\n\n .contents {\n flex: 1 0 auto;\n min-height: 0;\n\n .hidden {\n display: none;\n }\n\n .full-height:not(.hidden) {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n > *:not(.mobile-label) {\n flex: 1;\n }\n }\n\n &.scrollable-tabs {\n overflow-y: auto;\n }\n }\n\n .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n\n &:not(.active) {\n z-index: 4;\n\n &:hover {\n z-index: 6;\n }\n }\n\n &.active {\n background: transparent;\n z-index: 5;\n color: $fallback--text;\n color: var(--tabActiveText, $fallback--text);\n }\n\n img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n }\n }\n\n .tabs {\n display: flex;\n position: relative;\n box-sizing: border-box;\n\n &::after,\n &::before {\n display: block;\n flex: 1 1 auto;\n }\n }\n\n .tab-wrapper {\n position: relative;\n display: flex;\n flex: 0 0 auto;\n\n &:not(.active) {\n &::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n }\n }\n }\n\n .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, $fallback--border);\n\n @media all and (min-width: 800px) {\n display: none;\n }\n }\n}\n/* stylelint-enable no-descending-specificity */\n","\n@import \"../../variables\";\n\n.chat-title {\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n --emoji-size: 14px;\n\n .username {\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: inline;\n word-wrap: break-word;\n overflow: hidden;\n }\n\n .avatar-container {\n align-self: center;\n line-height: 1;\n }\n\n .titlebar-avatar {\n margin-right: 0.5em;\n height: 1.5em;\n width: 1.5em;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n\n &.animated::before {\n display: none;\n }\n }\n}\n",".chat-list-item {\n display: flex;\n flex-direction: row;\n padding: 0.75em;\n height: 5em;\n overflow: hidden;\n box-sizing: border-box;\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n &:hover {\n background-color: var(--selectedPost, $fallback--lightBg);\n box-shadow: 0 0 3px 1px rgb(0 0 0 / 10%);\n }\n\n .chat-list-item-left {\n margin-right: 1em;\n }\n\n .chat-list-item-center {\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n word-wrap: break-word;\n }\n\n .heading {\n width: 100%;\n display: inline-flex;\n justify-content: space-between;\n line-height: 1em;\n }\n\n .heading-right {\n white-space: nowrap;\n }\n\n .name-and-account-name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n flex-shrink: 1;\n line-height: var(--post-line-height);\n }\n\n .chat-preview {\n display: inline-flex;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0.35em 0;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n width: 100%;\n }\n\n a {\n color: var(--faintLink, $fallback--link);\n text-decoration: none;\n pointer-events: none;\n }\n\n &:hover .animated.avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n\n .Avatar {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .chat-preview-body {\n --emoji-size: 1.4em;\n\n padding-right: 1em;\n }\n\n .time-wrapper {\n line-height: var(--post-line-height);\n }\n}\n","\n.basic-user-card {\n display: flex;\n flex: 1 0;\n margin: 0;\n padding: 0.6em 1em;\n\n --emoji-size: 14px;\n\n &-collapsed-content {\n margin-left: 0.7em;\n text-align: left;\n flex: 1;\n min-width: 0;\n }\n\n &-user-name {\n img {\n object-fit: contain;\n height: 16px;\n width: 16px;\n vertical-align: middle;\n }\n }\n\n &-user-name-value,\n &-screen-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-expanded-content {\n flex: 1;\n margin-left: 0.7em;\n min-width: 0;\n }\n}\n",".chat-new {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .member-list {\n padding-bottom: 0.7rem;\n }\n\n .basic-user-card:hover {\n cursor: pointer;\n background-color: var(--selectedPost, $fallback--lightBg);\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n}\n","\n@import \"../../variables\";\n\n.chat-list {\n min-height: 25em;\n margin-bottom: 0;\n}\n\n.emtpy-chat-list-alert {\n padding: 3em;\n font-size: 1.2em;\n display: flex;\n justify-content: center;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n}\n\n","@import \"../../variables\";\n\n.chat-message-wrapper {\n &.hovered-message-chain {\n .animated.Avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n }\n\n .chat-message-menu {\n transition: opacity 0.1s;\n opacity: 0;\n position: absolute;\n top: -0.8em;\n\n button {\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n }\n }\n\n .menu-icon {\n cursor: pointer;\n\n &:hover,\n .extra-button-popover.open & {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover {\n width: 12em;\n }\n\n .chat-message {\n display: flex;\n padding-bottom: 0.5em;\n\n .status-body:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n }\n\n .avatar-wrapper {\n margin-right: 0.72em;\n width: 32px;\n }\n\n .link-preview,\n .attachments {\n margin-bottom: 1em;\n }\n\n .status {\n border-radius: $fallback--chatMessageRadius;\n border-radius: var(--chatMessageRadius, $fallback--chatMessageRadius);\n display: flex;\n padding: 0.75em;\n }\n\n .created-at {\n position: relative;\n float: right;\n font-size: 0.8em;\n margin: -1em 0 -0.5em;\n font-style: italic;\n opacity: 0.8;\n }\n\n .without-attachment {\n .message-content {\n // TODO figure out how to do it properly\n .RichContent::after {\n margin-right: 5.4em;\n content: \" \";\n display: inline-block;\n }\n }\n }\n\n .pending {\n .status-content.media-body,\n .created-at {\n color: var(--faint);\n }\n }\n\n .error {\n .status-content.media-body,\n .created-at {\n color: $fallback--cRed;\n color: var(--badgeNotification, $fallback--cRed);\n }\n }\n\n .chat-message-inner {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-width: 80%;\n min-width: 10em;\n width: 100%;\n }\n\n .outgoing {\n display: flex;\n flex-flow: row wrap;\n align-content: end;\n justify-content: flex-end;\n\n a {\n color: var(--chatMessageOutgoingLink, $fallback--link);\n }\n\n .status {\n color: var(--chatMessageOutgoingText, $fallback--text);\n background-color: var(--chatMessageOutgoingBg, $fallback--lightBg);\n border: 1px solid var(--chatMessageOutgoingBorder, --lightBg);\n }\n\n .chat-message-inner {\n align-items: flex-end;\n }\n\n .chat-message-menu {\n right: 0.4rem;\n }\n }\n\n .incoming {\n a {\n color: var(--chatMessageIncomingLink, $fallback--link);\n }\n\n .status {\n color: var(--chatMessageIncomingText, $fallback--text);\n background-color: var(--chatMessageIncomingBg, $fallback--bg);\n border: 1px solid var(--chatMessageIncomingBorder, --border);\n }\n\n .created-at {\n a {\n color: var(--chatMessageIncomingText, $fallback--text);\n }\n }\n\n .chat-message-menu {\n left: 0.4rem;\n }\n }\n\n .chat-message-inner.with-media {\n width: 100%;\n\n .status {\n width: 100%;\n }\n }\n\n .visible {\n opacity: 1;\n }\n}\n\n.chat-message-date-separator {\n text-align: center;\n margin: 1.4em 0;\n font-size: 0.9em;\n user-select: none;\n color: $fallback--text;\n color: var(--faintedText, $fallback--text);\n}\n",".chat-view {\n display: flex;\n height: 100%;\n\n .chat-view-inner {\n height: auto;\n width: 100%;\n overflow: visible;\n display: flex;\n }\n\n .chat-view-body {\n box-sizing: border-box;\n background-color: var(--chatBg, $fallback--bg);\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: visible;\n min-height: calc(100vh - var(--navbar-height));\n margin: 0;\n border-radius: 10px 10px 0 0;\n border-radius: var(--panelRadius, 10px) var(--panelRadius, 10px) 0 0;\n\n &::after {\n border-radius: 0;\n }\n }\n\n .message-list {\n padding: 0 0.8em;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: end;\n }\n\n .footer {\n position: sticky;\n bottom: 0;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n z-index: 1;\n }\n\n .chat-view-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .jump-to-bottom-button {\n width: 2.5em;\n height: 2.5em;\n border-radius: 100%;\n position: absolute;\n right: 1.3em;\n top: -3.2em;\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 1px 1px rgb(0 0 0 / 30%), 0 2px 4px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s all;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n opacity: 0;\n visibility: hidden;\n cursor: pointer;\n\n &.visible {\n opacity: 1;\n visibility: visible;\n }\n\n i {\n font-size: 1em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .unread-message-count {\n font-size: 0.8em;\n left: 50%;\n margin-top: -1rem;\n padding: 0.1em;\n border-radius: 50px;\n position: absolute;\n }\n\n .chat-loading-error {\n width: 100%;\n display: flex;\n align-items: flex-end;\n height: 100%;\n\n .error {\n width: 100%;\n }\n }\n }\n}\n","\n.follow-card {\n &-content-container {\n flex-shrink: 0;\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n line-height: 1.5em;\n }\n\n &-button {\n margin-top: 0.5em;\n padding: 0 1.5em;\n margin-left: 1em;\n }\n\n &-follow-button {\n margin-top: 0.5em;\n margin-left: auto;\n width: 10em;\n }\n}\n","@import \"../../variables\";\n\n.with-load-more {\n &-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: $fallback--border;\n border-top-color: var(--border, $fallback--border);\n\n .error {\n font-size: 1rem;\n }\n\n a {\n cursor: pointer;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.user-profile {\n flex: 2;\n flex-basis: 500px;\n\n // No sticky header on user profile\n --currentPanelStack: 1;\n\n .user-birthday {\n margin: 0 0.75em 0.5em;\n }\n\n .user-profile-fields {\n margin: 0 0.5em;\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n\n &.emoji {\n width: 18px;\n height: 18px;\n }\n }\n\n .user-profile-field {\n display: flex;\n margin: 0.25em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n\n .user-profile-field-name {\n flex: 0 1 30%;\n font-weight: 500;\n text-align: right;\n color: var(--lightText);\n min-width: 120px;\n border-right: 1px solid var(--border, $fallback--border);\n }\n\n .user-profile-field-value {\n flex: 1 1 70%;\n color: var(--text);\n margin: 0 0 0 0.25em;\n }\n\n .user-profile-field-name,\n .user-profile-field-value {\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n padding: 0.5em 1.5em;\n box-sizing: border-box;\n }\n }\n }\n\n .userlist-placeholder {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 2em;\n }\n}\n\n.user-profile-placeholder {\n .panel-body {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 7em;\n }\n}\n","\n@import \"../../variables\";\n\n.search-result-heading {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n padding: 0.75rem;\n text-align: center;\n}\n\n@media all and (max-width: 800px) {\n .search-nav-heading {\n .tab-switcher .tabs .tab-wrapper {\n display: block;\n justify-content: center;\n flex: 1 1 auto;\n text-align: center;\n }\n }\n}\n\n.search-result {\n box-sizing: border-box;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.search-result-footer {\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n padding: 10px;\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n}\n\n.search-input-container {\n padding: 0.8rem;\n display: flex;\n justify-content: center;\n\n .search-input {\n width: 100%;\n line-height: 1.125rem;\n font-size: 1rem;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n\n .search-button {\n margin-left: 0.5em;\n }\n}\n\n.loading-icon {\n padding: 1em;\n}\n\n.trend {\n display: flex;\n align-items: center;\n\n .hashtag {\n flex: 1 1 auto;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .count {\n flex: 0 0 auto;\n width: 2rem;\n font-size: 1.5rem;\n line-height: 2.25rem;\n font-weight: 500;\n text-align: center;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n.more-statuses-button {\n height: 3.5em;\n line-height: 3.5em;\n}\n\n","\n@import \"../../variables\";\n\n.interface-language-switcher {\n .language-select {\n margin-right: 1em;\n }\n}\n","\n@import \"../../variables\";\n$validations-cRed: #f04124;\n\n.registration-form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex-direction: row;\n\n > * {\n min-width: 0;\n }\n }\n\n .terms-of-service {\n flex: 0 1 50%;\n margin: 0.8em;\n }\n\n .text-fields {\n margin-top: 0.6em;\n flex: 1 0;\n display: flex;\n flex-direction: column;\n }\n\n textarea {\n min-height: 100px;\n resize: vertical;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0;\n line-height: 2;\n margin-bottom: 1em;\n }\n\n .form-group--error {\n animation-name: shakeError;\n animation-duration: 0.6s;\n animation-timing-function: ease-in-out;\n }\n\n .form-group--error .form--label {\n color: $validations-cRed;\n color: var(--cRed, $validations-cRed);\n }\n\n .form-error {\n margin-top: -0.7em;\n text-align: left;\n\n span {\n font-size: 0.85em;\n }\n }\n\n .form-error ul {\n list-style: none;\n padding: 0 0 0 5px;\n margin-top: 0;\n\n li::before {\n content: \"• \";\n }\n }\n\n form textarea {\n line-height: 16px;\n resize: vertical;\n }\n\n .captcha {\n max-width: 350px;\n margin-bottom: 0.4em;\n }\n\n .btn {\n margin-top: 0.6em;\n height: 2em;\n }\n\n .error {\n text-align: center;\n }\n}\n\n@media all and (max-width: 800px) {\n .registration-form .container {\n flex-direction: column-reverse;\n }\n}\n","\n@import \"../../variables\";\n\n.password-reset-form {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex: 1 0;\n flex-direction: column;\n margin-top: 0.6em;\n max-width: 18rem;\n\n > * {\n min-width: 0;\n }\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 1em;\n padding: 0.3em 0;\n line-height: 1.85em;\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n\n .alert {\n padding: 0.5em;\n margin: 0.3em 0 1em;\n }\n\n .password-reset-required {\n background-color: var(--alertError, $fallback--alertError);\n padding: 10px 0;\n }\n\n .notice-dismissible {\n padding-right: 2rem;\n }\n\n .dismiss {\n cursor: pointer;\n }\n}\n\n","\n.follow-request-card-content-container {\n display: flex;\n flex-flow: row wrap;\n\n button {\n margin-top: 0.5em;\n margin-right: 0.5em;\n flex: 1 1;\n max-width: 12em;\n min-width: 8em;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n","\n.tos-content {\n margin: 1em;\n}\n","\n.staff-group {\n padding-left: 1em;\n padding-top: 1em;\n\n .basic-user-card {\n padding-left: 0;\n }\n}\n\n",".mrf-section {\n margin: 1em;\n\n table {\n width: 100%;\n text-align: left;\n padding-left: 10px;\n padding-bottom: 20px;\n\n th,\n td {\n width: 180px;\n max-width: 360px;\n overflow: hidden;\n vertical-align: text-top;\n }\n\n th + th,\n td + td {\n width: auto;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.list-card {\n display: flex;\n}\n\n.list-name {\n flex-grow: 1;\n}\n\n.list-name,\n.button-list-edit {\n margin: 0;\n padding: 1em;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n }\n}\n","\n.Lists {\n .new-list-button {\n padding: 0 0.5em;\n }\n}\n","\n@import \"../../variables\";\n\n.ListsUserSearch {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n}\n\n","\n@import \"src/variables\";\n\n.panel-loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n\n .loading-text svg {\n line-height: 0;\n vertical-align: middle;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n","\n@import \"../../variables\";\n\n.ListEdit {\n --panel-body-padding: 0.5em;\n\n height: calc(100vh - var(--navbar-height));\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .list-edit-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .panel-body {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n }\n\n .list-member-management {\n flex: 1 0 auto;\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .users-list {\n padding-bottom: 0.7rem;\n overflow-y: auto;\n }\n\n & .search-list,\n & .members-list {\n overflow: hidden;\n flex-direction: column;\n min-height: 0;\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .btn {\n margin: 0 0.5em;\n }\n\n .panel-footer {\n grid-template-columns: minmax(10%, 1fr);\n\n .footer-button {\n min-width: 9em;\n }\n }\n}\n","\n.announcement-editor {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n\n .announcement-metadata {\n margin-top: 0.5em;\n }\n\n .post-textarea {\n resize: vertical;\n height: 10em;\n overflow: none;\n box-sizing: content-box;\n }\n}\n","\n@import \"../../variables\";\n\n.announcement {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .footer {\n display: flex;\n flex-direction: column;\n\n .times {\n display: flex;\n flex-direction: column;\n }\n }\n\n .footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n\n .btn {\n flex: 1;\n margin: 1em;\n max-width: 10em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.announcements-page {\n .post-form {\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .post-button {\n min-width: 10em;\n }\n }\n}\n"],"names":[],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/static/css/app.c18a2c80794a1b699a61.css b/priv/static/static/css/app.c18a2c80794a1b699a61.css @@ -1,2 +0,0 @@ -.modal-view{align-items:center;animation-duration:.2s;animation-name:modal-background-fadein;bottom:0;display:flex;justify-content:center;left:0;opacity:0;overflow:auto;pointer-events:none;position:fixed;right:0;top:0;z-index:var(--ZI_modals)}.modal-view>*{pointer-events:auto}.modal-view.modal-background{background-color:rgba(0,0,0,.5);pointer-events:auto}.modal-view.open{opacity:1}@keyframes modal-background-fadein{0%{background-color:transparent}to{background-color:rgba(0,0,0,.5)}}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:-webkit-box;display:-ms-flexbox;display:flex}.vue-recycle-scroller__slot{-webkit-box-flex:1;-ms-flex:auto 0 0px;flex:auto 0 0}.vue-recycle-scroller__item-wrapper{-webkit-box-flex:1;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1;flex:1;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{left:0;position:absolute;top:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-b329ee4c],.resize-observer[data-v-b329ee4c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.login-form{display:flex;flex-direction:column;padding:.6em}.login-form .btn{min-height:2em;width:10em}.login-form .register{flex:1 1}.login-form .login-bottom{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-top:1em}.login-form .form-group{display:flex;flex-direction:column;line-height:24px;padding:.3em .5em .6em}.login-form .form-bottom{display:flex;height:32px;padding:.5em}.login-form .form-bottom button{width:10em}.login-form .form-bottom p{display:flex;margin:.35em;padding:.35em}.login-form .error{animation-duration:.4s;animation-name:shakeError;animation-timing-function:ease-in-out;text-align:center}.media-upload .hidden-input-file{display:none}label.media-upload{cursor:pointer}.ScopeSelector .scope{cursor:pointer;display:inline-block;min-height:1.3em;min-width:1.3em;text-align:center}.ScopeSelector .scope.selected svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.checkbox{display:inline-block;min-height:1.2em;position:relative}.checkbox-indicator{padding-left:1.2em;position:relative}.checkbox-indicator:before{background-color:#182230;background-color:var(--input,#182230);border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"✓";display:block;font-size:1.1em;height:1.1em;line-height:1.1em;overflow:hidden;position:absolute;right:0;text-align:center;top:0;transition:color .2s;vertical-align:top;width:1.1em}.checkbox.disabled .checkbox-indicator:before,.checkbox.disabled .label{opacity:.5}.checkbox.disabled .label{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.checkbox input[type=checkbox]:checked+.checkbox-indicator:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.checkbox input[type=checkbox]:indeterminate+.checkbox-indicator:before{color:#b9b9ba;color:var(--inputText,#b9b9ba);content:"–"}.checkbox.indeterminate-fix input[type=checkbox]+.checkbox-indicator:before{content:"–"}.checkbox>span{margin-left:.5em}.popover-trigger-button{display:inline-block}.popover{box-shadow:2px 2px 3px rgba(0,0,0,.5);box-shadow:var(--popupShadow);max-width:calc(100vw - 20px);min-width:0;position:fixed;z-index:var(--ZI_popover_override,var(--ZI_popovers))}.popover-default{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--postLink:var(--popoverPostLink,$fallback--link);--postFaintLink:var(--popoverPostFaintLink,$fallback--link);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);border-radius:4px;border-radius:var(--btnRadius,4px);color:#b9b9ba;color:var(--popoverText,#b9b9ba)}.popover-default:after{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.dropdown-menu{display:block;font-size:1em;list-style:none;max-width:100vw;padding:.5rem 0;text-align:left;white-space:nowrap;z-index:var(--ZI_popover_override,var(--ZI_popovers))}.dropdown-menu .dropdown-divider{border-top:1px solid #222;border-top:1px solid var(--border,#222);height:0;margin:.5rem 0;overflow:hidden}.dropdown-menu .dropdown-item{--btnText:var(--popoverText,$fallback--text);background-color:transparent;border:none;border-radius:0;box-shadow:none;box-sizing:border-box;clear:both;display:block;font-weight:400;height:100%;line-height:21px;overflow:hidden;padding:.5em .75em;text-align:inherit;white-space:nowrap;width:100%}.dropdown-menu .dropdown-item-icon svg{color:var(--menuPopoverIcon,#666);margin-right:.75rem;width:22px}.dropdown-menu .dropdown-item.-has-submenu .chevron-icon{margin-left:2rem;margin-right:.25rem}.dropdown-menu .dropdown-item:active,.dropdown-menu .dropdown-item:hover{--btnText:var(--selectedMenuPopoverText,$fallback--link);--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);box-shadow:none}.dropdown-menu .dropdown-item:active svg,.dropdown-menu .dropdown-item:hover svg{--icon:var(--selectedMenuPopoverIcon,$fallback--icon);color:var(--selectedMenuPopoverIcon,#666)}.dropdown-menu .dropdown-item .menu-checkbox{background-color:#182230;background-color:var(--input,#182230);border-radius:0;box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);display:inline-block;line-height:22px;margin-right:.75em;max-height:22px;max-width:22px;min-height:22px;min-width:22px;text-align:center;vertical-align:middle}.dropdown-menu .dropdown-item .menu-checkbox.menu-checkbox-checked:after{content:"✓";font-size:1.25em}.dropdown-menu .dropdown-item .menu-checkbox.-radio{border-radius:9999px}.dropdown-menu .dropdown-item .menu-checkbox.-radio.menu-checkbox-checked:after{content:"•";font-size:2em}.dropdown-menu .button-default.dropdown-item,.dropdown-menu .button-default.dropdown-item i[class*=icon-]{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.dropdown-menu .button-default.dropdown-item:active{background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#d8a070;color:var(--selectedMenuPopoverText,#d8a070)}.dropdown-menu .button-default.dropdown-item:disabled{color:#b9b9ba;color:var(--btnDisabledText,#b9b9ba)}.dropdown-menu .button-default.dropdown-item.toggled{color:#b9b9ba;color:var(--btnToggledText,#b9b9ba)}.still-image{align-items:center;display:inline-flex;line-height:0;overflow:hidden;position:relative}.still-image canvas{bottom:0;left:0;position:absolute;right:0;top:0;visibility:var(--_still-image-canvas-visibility,visible)}.still-image canvas,.still-image img{height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.still-image.animated:before{zoom:var(--_still_image-label-scale,1);background:hsla(0,0%,50%,.5);border-radius:5px;border-radius:var(--tooltipRadius,5px);color:#fff;content:"gif";display:block;font-size:.7em;left:.5em;line-height:1;padding:2px 4px;position:absolute;top:.5em;visibility:var(--_still-image-label-visibility,visible);z-index:2}.still-image.animated:hover canvas{display:none}.still-image.animated:hover:before{visibility:var(--_still-image-label-visibility,hidden)}.still-image.animated img{visibility:var(--_still-image-img-visibility,hidden)}.still-image.animated:hover img{visibility:visible}.emoji-picker{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);color:#d8a070;color:var(--popoverText,#d8a070);display:flex;flex-direction:column;max-width:calc(100vw - 20px);width:25em}.emoji-picker-header-image{align-items:center;display:inline-flex;height:32px;justify-content:center;max-height:32px;max-width:32px;width:32px}.emoji-picker-header-image .still-image{height:100%;max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain;width:100%}.emoji-picker .keep-open,.emoji-picker .too-many-emoji{line-height:normal;padding:7px}.emoji-picker .too-many-emoji{display:flex;flex-direction:column}.emoji-picker .keep-open-label{display:flex;padding:0 7px}.emoji-picker .heading{display:flex;padding:10px 7px 5px}.emoji-picker .content{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.emoji-picker .emoji-tabs{display:flex;flex-flow:row nowrap;flex-grow:1;overflow-x:auto}.emoji-picker .additional-tabs{border-left:1px solid #666;border-left-color:var(--icon,#666);display:flex;flex:0 0 auto;padding-left:7px}.emoji-picker .additional-tabs,.emoji-picker .emoji-tabs{align-content:center;display:flex;flex-basis:auto}.emoji-picker .additional-tabs-item,.emoji-picker .emoji-tabs-item{align-items:center;cursor:pointer;display:flex;font-size:1.85em;height:32px;max-height:32px;max-width:32px;padding:0 7px;width:32px}.emoji-picker .additional-tabs-item.disabled,.emoji-picker .emoji-tabs-item.disabled{opacity:.5;pointer-events:none}.emoji-picker .additional-tabs-item.active,.emoji-picker .emoji-tabs-item.active{border-bottom:4px solid}.emoji-picker .additional-tabs-item.active svg,.emoji-picker .emoji-tabs-item.active svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.emoji-picker .sticker-picker{flex:1 1 auto}.emoji-picker .emoji-content,.emoji-picker .stickers-content{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.emoji-picker .emoji-content.hidden,.emoji-picker .stickers-content.hidden{opacity:0;pointer-events:none;position:absolute}.emoji-picker .emoji-search{flex:0 0 auto;padding:5px}.emoji-picker .emoji-search input{width:100%}.emoji-picker .emoji-groups{flex:1 1 1px;height:100%;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;min-height:200px;overflow:auto;position:relative;transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.emoji-picker .emoji-groups.scrolled-top{-webkit-mask-size:100% 20px,100% 0,auto;mask-size:100% 20px,100% 0,auto}.emoji-picker .emoji-groups.scrolled-bottom{-webkit-mask-size:100% 0,100% 20px,auto;mask-size:100% 0,100% 20px,auto}.emoji-picker .emoji-group{align-items:center;display:flex;flex-wrap:wrap;justify-content:left;padding-left:5px}.emoji-picker .emoji-group-title{font-size:.85em;margin:0;width:100%}.emoji-picker .emoji-group-title.disabled{display:none}.emoji-picker .emoji-item{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;height:32px;justify-content:center;line-height:32px;margin:4px;width:32px}.emoji-picker .emoji-item .emoji-picker-emoji.-custom{max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain}.emoji-picker .emoji-item .emoji-picker-emoji.-unicode{font-size:24px;overflow:hidden}.emoji-input{display:flex;flex-direction:column;position:relative}.emoji-input .emoji-picker-icon{cursor:pointer;font-size:1.3em;line-height:24px;margin:.2em .25em;position:absolute;right:0;top:0}.emoji-input .emoji-picker-icon:hover i{color:#b9b9ba;color:var(--text,#b9b9ba)}.emoji-input .emoji-picker-panel{margin-top:2px;position:absolute;z-index:20}.emoji-input .emoji-picker-panel.hide{display:none}.emoji-input input,.emoji-input textarea{flex:1 0 auto}.emoji-input.with-picker input{padding-right:30px}.emoji-input .hidden-overlay{bottom:0;color:red;left:0;opacity:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0}.emoji-input .hidden-overlay .caret{border:1px solid red;margin-right:calc(-1ch - 1px);width:0}.autocomplete-panel{position:absolute}.autocomplete-item{border-bottom:1px solid rgba(0,0,0,.4);cursor:pointer;display:flex;height:32px;padding:.2em .4em}.autocomplete-item .image{font-size:32px;height:32px;line-height:32px;margin-right:4px;text-align:center;width:32px}.autocomplete-item .image img{height:32px;-o-object-fit:contain;object-fit:contain;width:32px}.autocomplete-item .label{display:flex;flex-direction:column;justify-content:center;margin:0 .1em 0 .2em}.autocomplete-item .label .displayText{line-height:1.5}.autocomplete-item .label .detailText{font-size:9px;line-height:9px}.autocomplete-item.highlighted{--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#182230;background-color:var(--selectedMenuPopover,#182230);color:var(--selectedMenuPopoverText,#b9b9ba)}label.Select{padding:0}label.Select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:#b9b9ba;color:var(--inputText,--text,#b9b9ba);font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:1em;height:2em;line-height:16px;margin:0;padding:0 2em 0 .2em;width:100%;z-index:1}label.Select .select-down-icon{bottom:0;color:#b9b9ba;color:var(--inputText,#b9b9ba);height:100%;line-height:2;pointer-events:none;position:absolute;right:5px;top:0;width:.875em;z-index:0}.poll-form{display:flex;flex-direction:column;padding:0 .5em .5em}.poll-form .add-option{align-self:flex-start;padding-left:.1em;padding-top:.25em}.poll-form .poll-option{align-items:baseline;display:flex;justify-content:space-between;margin-bottom:.25em}.poll-form .input-container{width:100%}.poll-form .input-container input{padding-right:2.5em;width:100%}.poll-form .delete-option{margin-left:-1.5em;width:1.5em;z-index:1}.poll-form .poll-type-expiry{display:flex;margin-top:.5em;width:100%}.poll-form .poll-type{flex:1 1 60%;margin-right:.75em}.poll-form .poll-type .poll-type-select{padding-right:.75em}.poll-form .poll-expiry{display:flex}.poll-form .poll-expiry .expiry-amount{text-align:right;width:3em}.Flash{display:inline-block;position:relative}.Flash,.Flash .placeholder,.Flash .player{height:100%;width:100%}.Flash .placeholder{align-items:center;background:var(--bg);color:var(--link);display:flex;justify-content:center}.Flash .hider{top:0}.Flash .label{word-wrap:normal;flex:1 1 0;line-height:1.2;text-align:center;white-space:normal}.Flash .hidden{display:none;visibility:"hidden"}.Attachment{align-self:flex-start;border:1px solid #222;border-color:var(--border,#222);border-radius:10px;border-radius:var(--attachmentRadius,10px);display:inline-flex;flex-direction:column;height:100%;line-height:0;position:relative}.Attachment .attachment-wrapper{flex:1 1 auto;height:100%;overflow:hidden;position:relative}.Attachment .description-container{display:flex;flex:0 1 0;padding-top:.5em;z-index:1}.Attachment .description-container p{flex:1;line-height:1.5;margin:0;overflow:hidden;padding:.5em;text-align:center;text-overflow:ellipsis;white-space:nowrap}.Attachment .description-container.-static{background:var(--popover);bottom:0;box-shadow:var(--popupShadow);left:0;padding-top:0;position:absolute;right:0}.Attachment .description-field{flex:1;min-width:0}.Attachment .audio-container,.Attachment .flash-container,.Attachment .image-container,.Attachment .oembed-container,.Attachment .placeholder-container,.Attachment .video-container{display:flex;height:100%;justify-content:center;width:100%}.Attachment .image-container .image{height:100%;width:100%}.Attachment .flash-container .flash,.Attachment .flash-container video,.Attachment .video-container .flash,.Attachment .video-container video{align-self:center;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.Attachment .audio-container{align-items:flex-end;display:flex}.Attachment .audio-container audio{height:100%;width:100%}.Attachment .placeholder-container{align-items:center;display:flex;flex-direction:column;justify-content:center;padding-top:.5em}.Attachment .play-icon{color:hsla(0,0%,100%,.75);font-size:64px;left:calc(50% - 32px);position:absolute;text-shadow:0 0 2px rgba(0,0,0,.4);top:calc(50% - 32px)}.Attachment .play-icon:before{margin:0}.Attachment .attachment-buttons{display:flex;margin-right:.5em;margin-top:.5em;position:absolute;right:0;top:0;z-index:1}.Attachment .attachment-buttons .attachment-button{background:hsla(0,0%,90%,.7);border-radius:5px;border-radius:var(--tooltipRadius,5px);font-size:1.25em;height:2em;margin-left:.5em;padding:0;text-align:center;width:2em}.Attachment .attachment-buttons .attachment-button .svg-inline--fa{color:rgba(0,0,0,.6)}.Attachment .attachment-buttons .attachment-button:hover .svg-inline--fa{color:rgba(0,0,0,.9)}.Attachment.-contain-fit canvas,.Attachment.-contain-fit img{-o-object-fit:contain;object-fit:contain}.Attachment.-cover-fit canvas,.Attachment.-cover-fit img{-o-object-fit:cover;object-fit:cover}.Attachment .oembed-container{display:flex;flex:1 0 100%;line-height:1.2em;margin-right:15px;width:100%}.Attachment .oembed-container img{width:100%}.Attachment .oembed-container .image{flex:1}.Attachment .oembed-container .image img{border:0;border-radius:5px;height:100%;-o-object-fit:cover;object-fit:cover}.Attachment .oembed-container .text{flex:2;margin:8px;word-break:break-all}.Attachment .oembed-container .text h1{font-size:1rem;margin:0}.Attachment.-size-small .play-icon{zoom:.5;opacity:.7}.Attachment.-size-small .attachment-buttons{zoom:.7;opacity:.5}.Attachment.-editable{padding:.5em}.Attachment.-editable .attachment-buttons,.Attachment.-editable .description-container{margin:0}.Attachment.-placeholder{color:#d8a070;color:var(--postLink,#d8a070);display:inline-block;height:auto;line-height:1.5;overflow:hidden;white-space:nowrap}.Attachment.-placeholder:not(.-editable){border:none}.Attachment.-placeholder.-editable{align-items:baseline;display:flex;flex-direction:row}.Attachment.-placeholder.-editable .attachment-buttons,.Attachment.-placeholder.-editable .description-container{margin:0;padding:0;position:relative}.Attachment.-placeholder.-editable .description-container{flex:1;padding-left:.5em}.Attachment.-placeholder.-editable .attachment-buttons{align-self:center;order:99}.Attachment.-placeholder a{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis}.Attachment.-placeholder svg{color:inherit}.Attachment.-loading{cursor:progress}.Attachment.-compact .placeholder-container{padding-bottom:.5em}.Gallery .gallery-rows{display:flex;flex-direction:column}.Gallery .gallery-row{flex-grow:1;height:0;position:relative;width:100%}.Gallery .gallery-row .gallery-row-inner{align-content:stretch;bottom:0;display:flex;flex-flow:row wrap;left:0;position:absolute;right:0;top:0}.Gallery .gallery-row .gallery-row-inner .gallery-item{box-sizing:border-box;flex-grow:1;height:100%;margin:0 .5em 0 0;min-width:2em}.Gallery .gallery-row .gallery-row-inner .gallery-item:last-child{margin:0}.Gallery .gallery-row .gallery-row-inner.-grid{grid-gap:.5em;display:grid;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));height:auto;position:relative;width:100%}.Gallery .gallery-row .gallery-row-inner.-grid .gallery-item{height:200px;margin:0}.Gallery .gallery-row.-grid,.Gallery .gallery-row.-minimal{height:auto}.Gallery .gallery-row.-grid .gallery-row-inner,.Gallery .gallery-row.-minimal .gallery-row-inner{position:relative}.Gallery .gallery-row:not(:first-child){margin-top:.5em}.Gallery.-long .gallery-rows{-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;max-height:25em;overflow:hidden}.Gallery .many-attachments-text{line-height:2;text-align:center}.Gallery .many-attachments-buttons{display:flex}.Gallery .many-attachments-button{display:flex;flex:1;justify-content:center;line-height:2}.Gallery .many-attachments-button button{padding:0 2em}.Avatar{--_avatarShadowBox:var(--avatarStatusShadow);--_avatarShadowFilter:var(--avatarStatusShadowFilter);--_avatarShadowInset:var(--avatarStatusShadowInset);--_still-image-label-visibility:hidden;display:inline-block;height:48px;position:relative;width:48px}.Avatar.-compact{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:32px;width:32px}.Avatar .avatar{border-radius:4px;border-radius:var(--avatarRadius,4px);box-shadow:var(--_avatarShadowBox);height:100%;width:100%}.Avatar .avatar.-better-shadow{box-shadow:var(--_avatarShadowInset);filter:var(--_avatarShadowFilter)}.Avatar .avatar.-animated:before{display:none}.Avatar .avatar.-compact{border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.Avatar .avatar.-placeholder{background-color:#182230;background-color:var(--fg,#182230)}.Avatar img{height:100%;width:100%}.Avatar .bot-indicator{background:hsla(0,0%,50%,.5);border-radius:var(--tooltipRadius);bottom:0;color:#fff;margin:-.2em;padding:.2em;position:absolute;right:0}.MentionLink{color:var(--link);display:inline;position:relative;white-space:normal;word-break:normal}.MentionLink .new,.MentionLink .original{border-radius:2px;display:inline}.MentionLink .mention-avatar{border-radius:var(--avatarAltRadius,10px);height:1.5em;margin-right:.2em;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1.5em}.MentionLink .full{word-wrap:normal;display:inline-block;height:100%;left:0;margin-top:.25em;opacity:0;padding:.5em;pointer-events:none;position:absolute;top:100%;transition:opacity .2s ease;-webkit-user-select:all;-moz-user-select:all;user-select:all;white-space:nowrap;z-index:1}.MentionLink .short.-with-tooltip,.MentionLink .you{-webkit-user-select:none;-moz-user-select:none;user-select:none}.MentionLink .full,.MentionLink .short{white-space:nowrap}.MentionLink .shortName{white-space:normal}.MentionLink .new.-you .shortName{font-weight:600}.MentionLink .new.-has-selection{background-color:var(--alertNeutral,#182230);color:var(--alertNeutralText,#b9b9ba)}.MentionLink .new .at{color:var(--link);display:inline-block;line-height:1;margin:0;opacity:.8;padding:0 .1em;vertical-align:-25%}.MentionLink .new.-striped .shortName{background-image:repeating-linear-gradient(135deg,var(--____highlight-tintColor),var(--____highlight-tintColor) 5px,var(--____highlight-tintColor2) 5px,var(--____highlight-tintColor2) 10px)}.MentionLink .new.-solid .shortName{background-image:linear-gradient(var(--____highlight-tintColor2),var(--____highlight-tintColor2))}.MentionLink .new.-side .shortName{box-shadow:0 -5px 3px -4px inset var(--____highlight-solidColor)}.MentionLink .serverName.-faded{color:var(--faintLink,#d8a070)}.mention-link-popover{max-height:20rem;max-width:70ch;overflow:hidden}.MentionsLine{word-break:break-all}.MentionsLine .mention-link:not(:first-child):before{content:" "}.MentionsLine .showMoreLess{color:var(--link);margin-left:.5em;white-space:normal}.HashtagLink{color:var(--link);display:inline-block;position:relative;white-space:normal}.RichContent blockquote{border-left:.2em solid var(--faint,hsla(240,1%,73%,.5));font-style:italic;margin:.2em 0 .2em .2em;padding-left:1em}.RichContent pre{overflow:auto}.RichContent code,.RichContent kbd,.RichContent pre,.RichContent samp,.RichContent var{font-family:var(--postCodeFont,monospace)}.RichContent p{margin:0 0 1em}.RichContent p:last-child{margin:0}.RichContent h1{font-size:1.1em;line-height:1.2em;margin:1.4em 0}.RichContent h2{font-size:1.1em;margin:1em 0}.RichContent h3{font-size:1em;margin:1.2em 0}.RichContent h4{margin:1.1em 0}.RichContent .emoji,.RichContent .img{display:inline-block}.RichContent .emoji{height:var(--emoji-size,32px);width:var(--emoji-size,32px)}.RichContent .img,.RichContent video{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.poll .votes{display:flex;flex-direction:column;margin:0 0 .5em}.poll .poll-option{margin:.75em .5em}.poll .option-result{color:#b9b9ba;color:var(--lightText,#b9b9ba);display:flex;flex-direction:row;height:100%;position:relative}.poll .option-result-label{align-items:center;display:flex;padding:.1em .25em;word-break:break-word;z-index:1}.poll .result-percentage{flex-shrink:0;width:3.5em}.poll .result-fill{background-color:#151e2a;background-color:var(--poll,#151e2a);border-radius:10px;border-radius:var(--panelRadius,10px);color:#b9b9ba;color:var(--pollText,#b9b9ba);height:100%;left:0;position:absolute;top:0;transition:width .5s}.poll .option-vote{align-items:center;display:flex}.poll input{width:3.5em}.poll .footer{align-items:center;display:flex}.poll.loading *{cursor:progress}.poll .poll-vote-button{margin-right:.5em;padding:0 .5em}.poll .poll-checkbox{display:none}.StatusBody{display:flex;flex-direction:column}.StatusBody .emoji{--_still_image-label-scale:0.5}.StatusBody .attachments{margin-top:.5em}.StatusBody .summary,.StatusBody .text{word-wrap:break-word;font-family:var(--postFont,sans-serif);line-height:var(--post-line-height);overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.StatusBody .summary{display:block;font-style:italic;padding-bottom:.5em}.StatusBody .text.-single-line{height:1.4em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.StatusBody .summary-wrapper{border-color:var(--border,#222);border-style:solid;border-width:0 0 1px;flex-grow:0;margin-bottom:.5em}.StatusBody .summary-wrapper.-tall{position:relative}.StatusBody .summary-wrapper.-tall .summary{max-height:2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.StatusBody .text-wrapper{display:flex;flex-flow:column nowrap}.StatusBody .text-wrapper.-tall-status{height:220px;overflow-x:hidden;overflow-y:hidden;position:relative;z-index:1}.StatusBody .text-wrapper.-tall-status .media-body{-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;min-height:0}.StatusBody .cw-status-hider,.StatusBody .status-unhider,.StatusBody .tall-status-hider,.StatusBody .tall-subject-hider{display:inline-block;text-align:center;width:100%;word-break:break-all}.StatusBody .tall-status-hider{height:70px;line-height:110px;margin-top:150px;position:absolute;z-index:2}.StatusBody .tall-subject-hider{padding-bottom:.5em}.StatusBody .cw-status-hider,.StatusBody .status-unhider{word-break:break-all}.StatusBody .cw-status-hider svg,.StatusBody .status-unhider svg{color:inherit}.StatusBody .greentext{color:#0fa00f;color:var(--postGreentext,#0fa00f)}.StatusBody .cyantext{color:var(--postCyantext,#0095ff)}.StatusBody.-compact{--emoji-size:16px;align-items:top;flex-direction:row}.StatusBody.-compact .attachments,.StatusBody.-compact .body{max-height:3.25em}.StatusBody.-compact .body{flex:5 1 auto;mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-image:linear-gradient(180deg,#fff 2em,transparent 3em);mask-image:linear-gradient(180deg,#fff 2em,transparent 3em);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-repeat:repeat-x,repeat;mask-repeat:repeat-x,repeat;-webkit-mask-size:auto 3.5em,auto auto;mask-size:auto 3.5em,auto auto;min-width:5em;overflow:hidden;white-space:normal}.StatusBody.-compact .attachments{flex:1 1 0;height:100%;margin-left:.5em;margin-top:0;min-width:5em}.StatusBody.-compact .summary-wrapper{border:none;display:inline-block;line-height:inherit;margin:0}.StatusBody.-compact .summary-wrapper .summary:after{content:": "}.StatusBody.-compact .text-wrapper{display:inline-block}.link-preview-card{border:1px solid #222;border-color:var(--border,#222);border-radius:10px;border-radius:var(--attachmentRadius,10px);color:#b9b9ba;color:var(--text,#b9b9ba);cursor:pointer;display:flex;flex-direction:row;margin-top:.5em;overflow:hidden}.link-preview-card .card-image{flex-shrink:0;max-width:25%;width:120px}.link-preview-card .card-image img{border-radius:10px;border-radius:var(--attachmentRadius,10px);height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.link-preview-card .card-content{display:flex;flex-direction:column;margin:.5em;max-height:100%}.link-preview-card .card-host{font-size:.85em}.link-preview-card .card-description{line-height:1.2em;margin:.5em 0 0;max-height:calc(3.6em - 1px);overflow:hidden;text-overflow:ellipsis;word-break:break-word}.link-preview-card .nsfw-alert{margin:2em 0}.StatusContent{flex:1;min-width:0}.post-status-form{position:relative}.post-status-form .attachments{margin-bottom:.5em}.post-status-form .form-bottom{display:flex;height:2.5em;justify-content:space-between;padding:.5em}.post-status-form .form-bottom button{width:10em}.post-status-form .form-bottom p{display:flex;margin:.35em;padding:.35em}.post-status-form .form-bottom-left{display:flex;flex:1;margin-right:7px;max-width:10em;padding-right:7px}.post-status-form .preview-heading{display:flex;padding-left:.5em}.post-status-form .preview-toggle{cursor:pointer;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.post-status-form .preview-toggle:hover{text-decoration:underline}.post-status-form .preview-toggle i,.post-status-form .preview-toggle svg{font-size:.8em;margin-left:.2em;transform:rotate(90deg)}.post-status-form .preview-container{margin-bottom:1em}.post-status-form .preview-error{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));font-style:italic}.post-status-form .preview-status{border:1px solid #222;border:1px solid var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);margin:0;padding:.5em}.post-status-form .reply-or-quote-selector{margin-bottom:.5em}.post-status-form .text-format .only-format{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.post-status-form .visibility-tray{align-items:baseline;display:flex;justify-content:space-between;padding-top:5px}.post-status-form .visibility-notice.edit-warning>:first-child{margin-top:0}.post-status-form .visibility-notice.edit-warning>:last-child{margin-bottom:0}.post-status-form .media-upload-icon{justify-content:left;order:1}.post-status-form .emoji-icon{justify-content:center;order:2}.post-status-form .poll-icon{justify-content:right;order:3}.post-status-form .emoji-icon,.post-status-form .media-upload-icon,.post-status-form .poll-icon{align-items:center;display:flex;flex:1;font-size:1.85em;line-height:1.1;padding:0 .1em}.post-status-form .emoji-icon.selected i,.post-status-form .emoji-icon.selected label,.post-status-form .emoji-icon.selected svg,.post-status-form .emoji-icon:hover i,.post-status-form .emoji-icon:hover label,.post-status-form .emoji-icon:hover svg,.post-status-form .media-upload-icon.selected i,.post-status-form .media-upload-icon.selected label,.post-status-form .media-upload-icon.selected svg,.post-status-form .media-upload-icon:hover i,.post-status-form .media-upload-icon:hover label,.post-status-form .media-upload-icon:hover svg,.post-status-form .poll-icon.selected i,.post-status-form .poll-icon.selected label,.post-status-form .poll-icon.selected svg,.post-status-form .poll-icon:hover i,.post-status-form .poll-icon:hover label,.post-status-form .poll-icon:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.post-status-form .emoji-icon.disabled i,.post-status-form .emoji-icon.disabled svg,.post-status-form .media-upload-icon.disabled i,.post-status-form .media-upload-icon.disabled svg,.post-status-form .poll-icon.disabled i,.post-status-form .poll-icon.disabled svg{color:#666;color:var(--btnDisabledText,#666);cursor:not-allowed}.post-status-form .emoji-icon.disabled i:hover,.post-status-form .emoji-icon.disabled svg:hover,.post-status-form .media-upload-icon.disabled i:hover,.post-status-form .media-upload-icon.disabled svg:hover,.post-status-form .poll-icon.disabled i:hover,.post-status-form .poll-icon.disabled svg:hover{color:#666;color:var(--btnDisabledText,#666)}.post-status-form .error{text-align:center}.post-status-form .media-upload-wrapper{margin-bottom:.5em;margin-right:.2em;width:18em}.post-status-form .media-upload-wrapper img,.post-status-form .media-upload-wrapper video{max-height:10em;-o-object-fit:contain;object-fit:contain}.post-status-form .media-upload-wrapper .video{max-height:10em}.post-status-form .media-upload-wrapper input{flex:1;width:100%}.post-status-form .status-input-wrapper{display:flex;flex-direction:column;position:relative;width:100%}.post-status-form .btn[disabled]{cursor:not-allowed}.post-status-form form{display:flex;flex-direction:column;margin:.6em;position:relative}.post-status-form .form-group{display:flex;flex-direction:column;line-height:1.85;padding:.25em .5em .5em}.post-status-form .form-post-body{box-sizing:content-box;height:calc(var(--post-line-height)*1em);min-height:calc(var(--post-line-height)*1em);overflow:hidden;padding-bottom:calc(var(--_padding) + var(--post-line-height)*1em);resize:none;transition:min-height .2s .1s}.post-status-form .form-post-body.scrollable-form{overflow-y:auto}.post-status-form .main-input{position:relative}.post-status-form .character-counter{bottom:0;margin:0 .5em;padding:0;position:absolute;right:0}.post-status-form .character-counter.error{color:red;color:var(--cRed,red)}@keyframes fade-in{0%{opacity:0}to{opacity:.6}}@keyframes fade-out{0%{opacity:.6}to{opacity:0}}.post-status-form .drop-indicator{align-items:center;background-color:#121a24;background-color:var(--bg,#121a24);border:2px dashed #b9b9ba;border:2px dashed var(--text,#b9b9ba);border-radius:5px;border-radius:var(--tooltipRadius,5px);color:#b9b9ba;color:var(--text,#b9b9ba);display:flex;font-size:5em;height:100%;justify-content:center;opacity:.6;position:absolute;width:100%}.remote-follow{max-width:220px}.remote-follow .remote-button{min-height:2em;width:100%}.dark-overlay:before{background:rgba(27,31,35,.5);bottom:0;content:" ";left:0;right:0;z-index:2000}.dark-overlay:before,.dialog-modal.panel{cursor:default;display:block;position:fixed;top:0}.dialog-modal.panel{background-color:#121a24;background-color:var(--bg,#121a24);left:50%;margin:15vh auto;max-height:80vh;max-width:90vw;transform:translateX(-50%);z-index:2001}.dialog-modal.panel .dialog-modal-heading .title{text-align:center}.dialog-modal.panel .dialog-modal-content{background-color:#121a24;background-color:var(--bg,#121a24);margin:0;padding:1rem;white-space:normal}.dialog-modal.panel .dialog-modal-footer{background-color:#121a24;background-color:var(--bg,#121a24);border-top:1px solid #222;border-top:1px solid var(--border,#222);display:flex;justify-content:flex-end;margin:0;padding:.5em}.dialog-modal.panel .dialog-modal-footer button{margin-left:.5rem;width:auto}.moderation-tools-popover{height:100%}.moderation-tools-popover .trigger{display:flex!important;height:100%}.moderation-tools-button i,.moderation-tools-button svg{font-size:.8em}.AccountActions .ellipsis-button{margin:-.5em 0;padding:.5em 0;text-align:center;width:2.5em}.AccountActions .ellipsis-button:not(:hover) .icon{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-note{display:flex;flex-direction:column}.user-note .heading{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-bottom:.75em}.user-note .heading .btn{min-width:95px}.user-note .heading .buttons{display:flex;flex-direction:row;justify-content:right}.user-note .heading .buttons .btn{margin-left:.5em}.user-note .note-text{align-self:stretch}.user-note .note-text.-blank{color:var(--faint,hsla(240,1%,73%,.5));font-style:italic}.user-card{position:relative;z-index:1}.user-card:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.user-card .panel-heading{align-items:stretch;background:transparent;box-shadow:none;flex-direction:column;padding:.5em 0;position:relative;text-align:center}.user-card .panel-body{word-wrap:break-word;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;position:relative}.user-card .background-image{background-color:var(--profileBg);background-size:cover;border-bottom-left-radius:calc(var(--__roundnessBottom, --panelRadius) - 1px);border-bottom-right-radius:calc(var(--__roundnessBottom, --panelRadius) - 1px);border-top-left-radius:calc(var(--__roundnessTop, --panelRadius) - 1px);border-top-right-radius:calc(var(--__roundnessTop, --panelRadius) - 1px);bottom:0;left:0;-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 60%;mask-size:100% 60%;position:absolute;right:0;top:0;z-index:-2}.user-card .background-image.hide-bio{-webkit-mask-size:100% 40px;mask-size:100% 40px}.user-card-bio{display:block;line-height:1.3;margin:0;padding:1em;text-align:center}.user-card-bio a{color:#d8a070;color:var(--postLink,#d8a070)}.user-card-bio img{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.user-card.-rounded-t{--__roundnessTop:var(--panelRadius);--__roundnessBottom:0;border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px);border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px)}.user-card.-rounded{--__roundnessTop:var(--panelRadius);--__roundnessBottom:var(--panelRadius);border-radius:10px;border-radius:var(--panelRadius,10px)}.user-card.-popover{--__roundnessTop:var(--tooltipRadius);--__roundnessBottom:var(--tooltipRadius);border-radius:5px;border-radius:var(--tooltipRadius,5px)}.user-card.-bordered{border:1px solid #222;border-color:var(--border,#222)}.user-info{padding:0 26px}.user-info,.user-info a{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-info a:hover{color:var(--icon)}.user-info .container{align-items:flex-start;display:flex;max-height:56px;min-width:0;padding:16px 0 6px}.user-info .container>*{min-width:0}.user-info .container>a{display:flex;vertical-align:middle}.user-info .container .Avatar{--_avatarShadowBox:var(--avatarShadow);--_avatarShadowFilter:var(--avatarShadowFilter);--_avatarShadowInset:var(--avatarShadowInset);height:56px;-o-object-fit:cover;object-fit:cover;width:56px}.user-info-avatar{cursor:pointer;position:relative}.user-info-avatar.-overlay{align-items:center;background-color:rgba(0,0,0,.3);border-radius:4px;border-radius:var(--avatarRadius,4px);bottom:0;display:flex;justify-content:center;left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease}.user-info-avatar.-overlay svg{color:#fff}.user-info-avatar:hover .user-info-avatar.-overlay{opacity:1}.user-info .edit-profile-button,.user-info .external-link-button{cursor:pointer;margin:-.5em 0;padding:.5em 0;text-align:center;width:2.5em}.user-info .edit-profile-button:not(:hover) .icon,.user-info .external-link-button:not(:hover) .icon{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-info .bottom-line{align-items:baseline;font-size:1.1em;font-weight:light}.user-info .bottom-line .lock-icon{margin-left:.5em}.user-info .bottom-line .user-screen-name{flex:0 1 auto;min-width:1px;overflow:hidden;text-overflow:ellipsis}.user-info .bottom-line .dailyAvg{color:#b9b9ba;color:var(--text,#b9b9ba);flex:0 0 auto;font-size:.7em;margin-left:1em;min-width:1px}.user-info .bottom-line .user-role{background-color:#182230;background-color:var(--alertNeutral,#182230);color:#b9b9ba;color:var(--alertNeutralText,#b9b9ba);flex:none}.user-info .user-summary{--emoji-size:1.7em;display:block;flex:1 1 0;line-height:2em;margin-left:.6em;text-align:left;text-overflow:ellipsis;white-space:nowrap;z-index:1}.user-info .user-summary .bottom-line,.user-info .user-summary .top-line{display:flex}.user-info .user-name{flex:1 1 auto;font-size:1.1em;margin-right:1em;overflow:hidden;text-overflow:ellipsis}.user-info .user-meta{align-items:baseline;display:flex;flex-wrap:wrap;line-height:22px;margin-bottom:.15em}.user-info .user-meta .following{flex:1 0 auto;margin:0 0 .25em;text-align:left}.user-info .user-meta .highlighter{align-self:start;display:flex;flex:0 1 auto;flex-wrap:wrap;margin-right:-.5em}.user-info .user-meta .highlighter .userHighlightCl{flex:1 0 auto;padding:2px 10px}.user-info .user-meta .highlighter .userHighlightSel{flex:1 0 auto;padding-bottom:0;padding-top:0}.user-info .user-meta .highlighter .userHighlightText{flex:1 0 auto;width:70px}.user-info .user-meta .highlighter .userHighlightCl,.user-info .user-meta .highlighter .userHighlightSel,.user-info .user-meta .highlighter .userHighlightText{margin-bottom:.25em;margin-right:.5em;vertical-align:top}.user-info .user-interactions{display:flex;flex-flow:row wrap;margin-right:-.75em;position:relative}.user-info .user-interactions>*{margin:0 .75em .6em 0;min-width:95px;white-space:nowrap}.user-info .user-interactions button{margin:0}.user-info .user-note{margin:0 .75em .6em 0}.sidebar .edit-profile-button{display:none}.user-counts{color:#b9b9ba;color:var(--lightText,#b9b9ba);display:flex;flex-wrap:wrap;justify-content:space-between;line-height:16px;padding:.5em 1.5em 0;text-align:center}.user-count{flex:1 0 auto;margin:0 .5em;padding:.5em 0}.user-count h5{font-size:1em;font-weight:bolder;margin:0 0 .25em}.user-count a{text-decoration:none}.mute-expiry{display:flex;flex-direction:row}.user-panel .signed-in{overflow:visible;z-index:10}.NavigationEntry{align-items:baseline;box-sizing:border-box;color:#d8a070;color:var(--link,#d8a070);display:flex;height:3.5em;line-height:3.5em;padding:0 1em;width:100%}.NavigationEntry .timelines-chevron{margin-right:0}.NavigationEntry .main-link{flex:1}.NavigationEntry .menu-icon{margin-right:.8em}.NavigationEntry .extra-button{text-align:center;width:3em}.NavigationEntry .extra-button:last-child{margin-right:-.8em}.NavigationEntry:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#d8a070;color:var(--selectedMenuText,#d8a070)}.NavigationEntry:hover .menu-icon{--icon:var(--text,$fallback--icon)}.NavigationEntry.-active{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba);font-weight:bolder}.NavigationEntry.-active .menu-icon{--icon:var(--text,$fallback--icon)}.NavigationEntry.-active:hover{text-decoration:underline}.NavigationPins{display:flex;flex-wrap:wrap;height:100%;overflow:hidden}.NavigationPins .alert-dot{background-color:red;background-color:var(--badgeNotification,red);border-radius:100%;height:.5em;position:absolute;right:calc(50% - .75em);top:calc(50% - .5em);width:.5em}.NavigationPins .pinned-item{box-sizing:border-box;flex:1 0 3em;height:100%;min-width:2em;overflow:visible;position:relative;text-align:center}.NavigationPins .pinned-item .iconLetter,.NavigationPins .pinned-item .svg-inline--fa{margin:0}.NavigationPins .pinned-item.router-link-active{border-bottom:4px solid;color:#b9b9ba;color:var(--panelText,#b9b9ba)}.NavigationPins .pinned-item.router-link-active .iconLetter,.NavigationPins .pinned-item.router-link-active .svg-inline--fa{color:inherit}.NavPanel .panel{box-shadow:var(--panelShadow);overflow:hidden}.NavPanel ul{list-style:none;margin:0;padding:0}.NavPanel li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);position:relative}.NavPanel>li:first-child .menu-item{border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px);border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px)}.NavPanel>li:last-child .menu-item{border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px);border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px)}.NavPanel li:last-child{border:none}.NavPanel .navigation-chevron{margin-right:.8em}.NavPanel .navigation-chevron,.NavPanel .timelines-chevron{font-size:1.1em;margin-left:.8em}.NavPanel .timelines-background{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0 0 0 .6em}.NavPanel .timelines{background-color:#121a24;background-color:var(--bg,#121a24)}.NavPanel .nav-panel-heading{--panel-heading-height-padding:0px}.features-panel li{line-height:24px}.who-to-follow *{vertical-align:middle}.who-to-follow img{height:32px;width:32px}.who-to-follow{margin:0;padding:0 1em}.who-to-follow-items{margin:1em 0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.who-to-follow-more{margin:1em 0;padding:0;text-align:center}.floating-shout{bottom:.5em;max-width:25em;position:fixed;z-index:var(--ZI_popovers)}.floating-shout.-left{left:.5em}.floating-shout:not(.-left){right:.5em}.shout-panel .shout-heading{cursor:pointer}.shout-panel .shout-heading .icon{color:#b9b9ba;color:var(--panelText,#b9b9ba);margin-right:.5em}.shout-panel .shout-heading .title{align-items:center;display:flex;justify-content:space-between}.shout-panel .shout-window{max-height:20em;overflow-x:hidden;overflow-y:auto}.shout-panel .shout-window-container{height:100%}.shout-panel .shout-message{display:flex;padding:.2em .5em}.shout-panel .shout-avatar img{border-radius:4px;border-radius:var(--avatarRadius,4px);height:24px;margin-right:.5em;margin-top:.25em;width:24px}.shout-panel .shout-input{display:flex}.shout-panel .shout-input textarea{flex:1;margin:.6em;min-height:3.5em;resize:none}.shout-panel .shout-panel .title{display:flex;justify-content:space-between}@keyframes media-fadein{0%{opacity:0}to{opacity:1}}.media-modal-view .modal-image-container{max-height:100%;max-width:100%;overflow:hidden}.media-modal-view .modal-image-container,.media-modal-view .modal-image-container-inner{align-items:center;display:flex;flex-direction:column;flex-grow:1;height:100%;justify-content:center;width:100%}.media-modal-view .counter,.media-modal-view .description{color:#fff;margin-top:1em;padding:.2em 2em;text-shadow:0 0 10px #000,0 0 10px #000}.media-modal-view .description{flex:0 0 auto;max-height:9.5em;max-width:500px;min-height:1em;overflow-y:auto;word-break:break-all}.media-modal-view .modal-image{animation:media-fadein .1s cubic-bezier(.7,0,1,.6);image-orientation:from-image;max-height:100%;max-width:100%}.media-modal-view .modal-image.loading{opacity:.5}.media-modal-view .loading-spinner{align-items:center;display:flex;height:100%;justify-content:center;pointer-events:none;position:absolute;width:100%}.media-modal-view .loading-spinner svg{color:#fff}.media-modal-view .modal-view-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;box-shadow:none;cursor:pointer;height:3em;opacity:0;overflow:visible;padding:0;transition:opacity 333ms cubic-bezier(.4,0,.22,1);width:3em}.media-modal-view .modal-view-button .button-icon{background-color:rgba(0,0,0,.3);color:#fff;font-size:1rem;height:3em;line-height:3em;position:absolute;text-align:center;width:3em}.media-modal-view .modal-view-button-arrow{display:block;height:3em;margin-top:1.5em;position:absolute;top:50%;width:3em}.media-modal-view .modal-view-button-arrow .arrow-icon{background-color:rgba(0,0,0,.3);color:#fff;line-height:3em;position:absolute;text-align:center;top:0}.media-modal-view .modal-view-button-arrow--prev{left:0}.media-modal-view .modal-view-button-arrow--prev .arrow-icon{left:.5em}.media-modal-view .modal-view-button-arrow--next{right:0}.media-modal-view .modal-view-button-arrow--next .arrow-icon{right:.5em}.media-modal-view .modal-view-button-hide{position:absolute;right:0;top:0}.media-modal-view .modal-view-button-hide .button-icon{right:.5em;top:.5em}.modal-view.media-modal-view{flex-direction:column;overflow:hidden;z-index:var(--ZI_media_modal)}.modal-view.media-modal-view .modal-view-button-arrow,.modal-view.media-modal-view .modal-view-button-hide{opacity:.75}.modal-view.media-modal-view .modal-view-button-arrow:focus,.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:focus,.modal-view.media-modal-view .modal-view-button-hide:hover{box-shadow:none;outline:none}.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:hover{opacity:1}.side-drawer-container{align-items:stretch;display:flex;height:100%;left:0;position:fixed;top:0;transition-duration:0s;transition-property:transform;width:100%;z-index:var(--ZI_navbar)}.side-drawer-container-open{transform:translate(0)}.side-drawer-container-closed{transform:translate(-100%);transition-delay:.35s}.side-drawer-darken{background-color:rgba(0,0,0,.5);height:100vh;left:0;position:fixed;top:0;transition:.35s;transition-property:background-color;width:100vw;z-index:-1}.side-drawer-darken-closed{background-color:transparent}.side-drawer-click-outside{flex:1 1 100%}.side-drawer{--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon);background-color:#121a24;background-color:var(--popover,#121a24);box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);color:#d8a070;color:var(--popoverText,#d8a070);flex:0 0 80%;margin:0 0 0 -100px;max-width:20em;overflow-x:hidden;padding:0 0 1em 100px;transition:.35s;transition-property:transform;transition-timing-function:cubic-bezier(0,1,.5,1);width:80%}.side-drawer .badge{margin-left:10px}.side-drawer-logo-wrapper{align-items:center;display:flex;padding:.85em}.side-drawer-logo-wrapper img{flex:none;height:50px;margin-right:.85em}.side-drawer-logo-wrapper span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-drawer-click-outside-closed{flex:0 0 0}.side-drawer-closed{transform:translate(-100%)}.side-drawer-heading{align-items:stretch;background:transparent;display:flex;flex-direction:column;margin:0;padding:0}.side-drawer ul{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);list-style:none;margin:0;padding:0}.side-drawer ul:last-child{border:0}.side-drawer li{padding:0}.side-drawer li a,.side-drawer li button{box-sizing:border-box;display:block;height:3em;line-height:3em;padding:0 .7em}.side-drawer li a:hover,.side-drawer li button:hover{--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#b9b9ba;color:var(--selectedMenuPopoverText,#b9b9ba)}.MobilePostButton.button-default{align-items:center;background-color:#182230;background-color:var(--btn,#182230);border-radius:100%;bottom:1.5em;box-shadow:0 2px 2px rgba(0,0,0,.3),0 4px 6px rgba(0,0,0,.3);display:flex;height:5em;justify-content:center;position:fixed;right:1.5em;transition:transform .35s;transition-timing-function:cubic-bezier(0,1,.5,1);width:5em;z-index:10}.MobilePostButton.hidden{transform:translateY(150%)}.MobilePostButton svg{color:#b9b9ba;color:var(--text,#b9b9ba);font-size:1.5em}@media (min-width:801px){.new-status-button:not(.always-show){display:none}}.ReplyButton{display:flex}.ReplyButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.ReplyButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ReplyButton .interactive.-active .svg-inline--fa,.ReplyButton .interactive:hover .svg-inline--fa{color:#0095ff;color:var(--cBlue,#0095ff)}.ReplyButton .interactive .focus-marker{visibility:hidden}.ReplyButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ReplyButton .interactive:focus .focus-marker,.ReplyButton .interactive:hover .focus-marker{visibility:visible}.ReplyButton .interactive:focus-visible .focus-marker{visibility:visible}.FavoriteButton{display:flex}.FavoriteButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.FavoriteButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.FavoriteButton .interactive .svg-inline--fa{animation-duration:.6s}.FavoriteButton .interactive.-favorited .svg-inline--fa,.FavoriteButton .interactive:hover .svg-inline--fa{color:orange;color:var(--cOrange,orange)}.FavoriteButton .interactive .focus-marker{visibility:hidden}.FavoriteButton .interactive .active-marker{visibility:visible}.FavoriteButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.FavoriteButton .interactive:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.FavoriteButton .interactive:focus .focus-marker,.FavoriteButton .interactive:hover .focus-marker{visibility:visible}.FavoriteButton .interactive:focus .active-marker,.FavoriteButton .interactive:hover .active-marker{visibility:hidden}.FavoriteButton .interactive:focus-visible .focus-marker{visibility:visible}.FavoriteButton .interactive:focus-visible .active-marker{visibility:hidden}.ReactButton .reaction-picker-filter{display:flex;padding:.5em}.ReactButton .reaction-picker-filter input{flex:1}.ReactButton .reaction-picker-divider{background-color:var(--border,#222);height:1px;margin:.5em;width:100%}.ReactButton .reaction-picker{align-content:flex-start;display:flex;flex-wrap:wrap;font-size:1.5em;height:9em;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;overflow-y:scroll;padding:.5em;text-align:center;transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:10em}.ReactButton .reaction-picker .emoji-button{align-content:center;cursor:pointer;flex-basis:20%;line-height:1.5}.ReactButton .reaction-picker .emoji-button:hover{transform:scale(1.25)}.ReactButton .popover-trigger{margin:-10px;padding:10px}.ReactButton .popover-trigger:hover .svg-inline--fa{color:#b9b9ba;color:var(--text,#b9b9ba)}.ReactButton .popover-trigger .focus-marker{visibility:hidden}.ReactButton .popover-trigger:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ReactButton .popover-trigger:focus .focus-marker,.ReactButton .popover-trigger:hover .focus-marker{visibility:visible}.ReactButton .popover-trigger:focus-visible .focus-marker{visibility:visible}.RetweetButton{display:flex}.RetweetButton>:first-child{margin:-10px -8px -10px -10px;padding:10px}.RetweetButton .action-counter{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.RetweetButton .interactive .svg-inline--fa{animation-duration:.6s}.RetweetButton .interactive.-repeated .svg-inline--fa,.RetweetButton .interactive:hover .svg-inline--fa{color:#0fa00f;color:var(--cGreen,#0fa00f)}.RetweetButton .interactive .focus-marker{visibility:hidden}.RetweetButton .interactive .active-marker{visibility:visible}.RetweetButton .interactive:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.RetweetButton .interactive:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.RetweetButton .interactive:focus .focus-marker,.RetweetButton .interactive:hover .focus-marker{visibility:visible}.RetweetButton .interactive:focus .active-marker,.RetweetButton .interactive:hover .active-marker{visibility:hidden}.RetweetButton .interactive:focus-visible .focus-marker{visibility:visible}.RetweetButton .interactive:focus-visible .active-marker{visibility:hidden}.ExtraButtons .popover-trigger{margin:-10px;padding:10px;position:static}.ExtraButtons .popover-trigger:hover .svg-inline--fa{color:#b9b9ba;color:var(--text,#b9b9ba)}.ExtraButtons .popover-trigger-button{width:auto}.ExtraButtons .popover-trigger-button .focus-marker{visibility:hidden}.ExtraButtons .popover-trigger-button:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.ExtraButtons .popover-trigger-button:focus .focus-marker,.ExtraButtons .popover-trigger-button:hover .focus-marker{visibility:visible}.ExtraButtons .popover-trigger-button:focus-visible .focus-marker{visibility:visible}.avatars{display:flex;flex-wrap:wrap;height:24px;margin:0;padding:0}.avatars .avatars-item{margin:0 0 5px 5px}.avatars .avatars-item:first-child{padding-left:5px}.avatars .avatars-item .avatar-small{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:24px;width:24px}.status-popover.popover{border-color:#222;border-color:var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);border-style:solid;border-width:1px;font-size:1rem;max-width:95%;min-width:15em}.status-popover.popover .Status.Status{border:none}.status-popover.popover .status-preview-no-content{padding:1em;text-align:center}.status-popover.popover .status-preview-no-content i{font-size:2em}.user-list-popover{--emoji-size:16px;padding:.5em}.user-list-popover .user-list-row{display:flex;flex-direction:row;padding:.25em}.user-list-popover .user-list-row .user-list-names{display:flex;flex-direction:column;margin-left:.5em;min-width:5em}.user-list-popover .user-list-row .user-list-names img{height:1em;width:1em}.user-list-popover .user-list-row .user-list-screen-name{font-size:.65em}.EmojiReactions{--emoji-size:calc(1.25em*var(--emojiReactionsScale, 1));display:flex;flex-wrap:wrap;margin-top:.25em}.EmojiReactions .emoji-reaction-container{align-items:stretch;display:flex;margin-right:.5em;margin-top:.5em}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover{padding:0}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button{align-items:center;background-color:var(--btn);border-bottom-left-radius:0;border-top-left-radius:0;box-sizing:border-box;color:#b9b9ba;color:var(--btnText,#b9b9ba);display:inline-flex;height:100%;justify-content:center;margin:0;min-width:2em}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button.-picked-reaction{border:1px solid var(--accent,#d8a070);margin-right:-1px}.EmojiReactions .emoji-reaction{align-items:center;border-bottom-right-radius:0;border-top-right-radius:0;box-sizing:border-box;display:flex;justify-content:center;margin:0;padding-left:.5em}.EmojiReactions .emoji-reaction .reaction-emoji{align-items:center;display:flex;height:var(--emoji-size);justify-content:center;line-height:var(--emoji-size);margin-right:.25em;width:var(--emoji-size)}.EmojiReactions .emoji-reaction .reaction-emoji-content{font-size:calc(var(--emoji-size)*.8);height:auto;line-height:inherit;margin:0;max-height:100%;max-width:100%;overflow:hidden;width:auto}.EmojiReactions .emoji-reaction:focus{outline:none}.EmojiReactions .emoji-reaction .svg-inline--fa{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.EmojiReactions .emoji-reaction.-picked-reaction{border:1px solid var(--accent,#d8a070);margin-left:-1px;margin-right:-1px}.EmojiReactions .emoji-reaction.-picked-reaction .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus .svg-inline--fa,.EmojiReactions .emoji-reaction:hover .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction:focus .focus-marker,.EmojiReactions .emoji-reaction:hover .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus .active-marker,.EmojiReactions .emoji-reaction:hover .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus-visible .svg-inline--fa{color:#d8a070;color:var(--accent,#d8a070)}.EmojiReactions .emoji-reaction:focus-visible .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus-visible .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction-expand{align-items:center;display:flex;justify-content:center;margin-right:.5em;margin-top:.5em;padding:0 .5em}.EmojiReactions .emoji-reaction-expand:hover{text-decoration:underline}.Status{word-wrap:break-word;min-width:0;white-space:normal;word-break:break-word}.Status:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Status.-focused{--lightText:var(--selectedPostLightText,$fallback--light);--faint:var(--selectedPostFaintText,$fallback--faint);--faintLink:var(--selectedPostFaintLink,$fallback--faint);--postLink:var(--selectedPostPostLink,$fallback--faint);--postFaintLink:var(--selectedPostFaintPostLink,$fallback--faint);--icon:var(--selectedPostIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedPost,#151e2a);color:#b9b9ba;color:var(--selectedPostText,#b9b9ba)}.Status .gravestone{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));display:flex;padding:var(--status-margin,.75em)}.Status .gravestone .deleted-text{align-items:center;margin:.5em 0}.Status .status-container{display:flex;padding:var(--status-margin,.75em)}.Status .status-container>*{min-width:0}.Status .status-container.-repeat{padding-top:0}.Status .pin{align-items:center;display:flex;justify-content:flex-end;padding:var(--status-margin,.75em) var(--status-margin,.75em) 0}._misclick-prevention .Status{pointer-events:none}._misclick-prevention .Status .attachments{cursor:auto;pointer-events:auto}.Status .left-side{margin-right:var(--status-margin,.75em)}.Status .right-side{flex:1;min-width:0}.Status .usercard{margin-bottom:var(--status-margin,.75em)}.Status .status-username{--_still_image-label-scale:0.25;--emoji-size:14px;flex-shrink:1;font-weight:700;margin-right:.4em;max-width:85%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .status-favicon{height:18px;margin-right:.4em;width:18px}.Status .status-heading{margin-bottom:.5em}.Status .heading-name-row{display:flex;justify-content:space-between;line-height:1.3}.Status .heading-name-row a{display:inline-block;word-break:break-all}.Status .account-name{flex:1 1 0;margin-right:.4em;min-width:1.6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .heading-left{display:flex;min-width:0}.Status .heading-right{display:flex;flex-shrink:0}.Status .heading-right .button-unstyled{margin:-5px;padding:5px}.Status .heading-right .button-unstyled:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.Status .heading-right .svg-inline--fa{margin-left:.25em}.Status .glued-label{display:inline-flex;white-space:nowrap}.Status .timeago{margin-right:.2em}.Status .heading-edited-row,.Status .heading-reply-row{align-content:baseline;align-items:stretch;font-size:.85em;line-height:130%;margin-top:.2em;max-width:100%;position:relative}.Status .mentions,.Status .reply-to-no-popover,.Status .reply-to-popover{flex-shrink:0;margin-right:.4em;min-width:0}.Status .reply-glued-label{margin-right:.5em}.Status .reply-to-popover .reply-to:hover:before{border-bottom:1px solid var(--faint);bottom:0;content:"";display:block;pointer-events:none;position:absolute;width:100%}.Status .reply-to-popover .faint-link:hover{text-decoration:none}.Status .reply-to-popover.-strikethrough .reply-to:after{border-bottom:1px solid var(--faint);content:"";display:block;pointer-events:none;position:absolute;top:50%;width:100%}.Status .mentions,.Status .reply-to{position:relative;white-space:nowrap}.Status .mentions-text,.Status .reply-to-text{color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .mentions-line{display:inline}.Status .replies{display:flex;flex-wrap:wrap;font-size:.85em;line-height:1.3;margin-top:.25em}.Status .replies>*{margin-right:.4em}.Status .reply-link{height:17px}.Status .repeat-info{padding:.4em var(--status-margin,.75em)}.Status .repeat-info .repeat-icon{color:#0fa00f;color:var(--cGreen,#0fa00f)}.Status .repeater-avatar{border-radius:var(--avatarAltRadius,10px);height:20px;margin-left:28px;width:20px}.Status .repeater-name{margin-right:0;text-overflow:ellipsis}.Status .repeater-name .emoji{height:14px;-o-object-fit:contain;object-fit:contain;vertical-align:middle;width:14px}.Status .status-fadein{animation-duration:.4s;animation-name:fadein}@keyframes fadein{0%{opacity:0}to{opacity:1}}.Status .status-actions{display:flex;margin-top:var(--status-margin,.75em);position:relative;width:100%}.Status .status-actions>*{flex:1;max-width:4em}.Status .muted{display:flex;flex-wrap:nowrap;height:1.2em;line-height:1.2em;overflow:hidden;padding:.25em .6em;text-overflow:ellipsis}.Status .muted .mute-thread,.Status .muted .mute-words,.Status .muted .status-username{word-wrap:normal;white-space:nowrap;word-break:normal}.Status .muted .mute-words,.Status .muted .status-username{overflow:hidden;text-overflow:ellipsis}.Status .muted .status-username{flex:0 1 auto;font-size:smaller;font-weight:400;margin-right:.2em}.Status .muted .mute-thread{flex:0 0 auto}.Status .muted .mute-words{flex:1 0 5em;margin-left:.2em}.Status .muted .mute-words:before{content:" "}.Status .muted .unmute{display:block;flex:0 0 auto;margin-left:auto}.Status .reply-form{padding-bottom:0;padding-top:0}.Status .reply-body{flex:1}.Status .favs-repeated-users{margin-top:var(--status-margin,.75em)}.Status .stats{display:flex;line-height:1em;width:100%}.Status .avatar-row{align-items:center;display:flex;flex:1;overflow:hidden;position:relative}.Status .avatar-row:before{background-color:var(--faint,hsla(240,1%,73%,.5));content:"";height:100%;left:0;position:absolute;width:1px}.Status .stat-count{margin-right:var(--status-margin,.75em);-webkit-user-select:none;-moz-user-select:none;user-select:none}.Status .stat-count .stat-title{color:var(--faint,hsla(240,1%,73%,.5));font-size:.85em;position:relative;text-transform:uppercase}.Status .stat-count .stat-number{font-size:1.1em;font-weight:bolder;line-height:1em}.Status .stat-count:hover .stat-title{text-decoration:underline}@media (max-width:800px){.Status .repeater-avatar{margin-left:20px}.Status .post-avatar{height:40px;width:40px}.Status .post-avatar.-compact{height:32px;width:32px}}.Status .quoted-status{border:1px solid var(--border,#222);border-radius:var(--attachmentRadius,10px);margin-top:.5em}.Status .quoted-status.-unavailable-prompt{padding:.5em}.Status .display-quoted-status-button{margin:.5em}.Status .display-quoted-status-button-icon{color:inherit}.Report .report-content,.Report .report-state{margin:.5em 0 1em}.Report .reported-status{border:1px solid hsla(240,1%,73%,.5);border-color:var(--faint,hsla(240,1%,73%,.5));border-radius:4px;border-radius:var(--inputRadius,4px);color:#b9b9ba;color:var(--text,#b9b9ba);display:block;margin:.5em 0;padding:.5em}.Report .reported-status .status-content{pointer-events:none}.Report .reported-status .reported-status-heading{display:flex;justify-content:space-between;margin-bottom:.2em;width:100%}.Report .reported-status .reported-status-name{font-weight:700}.Report .note{margin-bottom:.5em;width:100%}.Notification{word-wrap:break-word;--emoji-size:14px;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);word-break:break-word}.Notification:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Notification.-muted{display:flex;flex-wrap:nowrap;height:1.2em;line-height:1.2em;overflow:hidden;padding:.25em .6em;text-overflow:ellipsis}.Notification.-muted .mute-thread,.Notification.-muted .mute-words,.Notification.-muted .status-username{word-wrap:normal;white-space:nowrap;word-break:normal}.Notification.-muted .mute-words,.Notification.-muted .status-username{overflow:hidden;text-overflow:ellipsis}.Notification.-muted .status-username{flex:0 1 auto;font-size:smaller;font-weight:400;margin-right:.2em}.Notification.-muted .mute-thread{flex:0 0 auto}.Notification.-muted .mute-words{flex:1 0 5em;margin-left:.2em}.Notification.-muted .mute-words:before{content:" "}.Notification.-muted .unmute{display:block;flex:0 0 auto;margin-left:auto}.Notification .type-icon{margin:0 .1em}.Notification.-type--repeat .type-icon{color:#0fa00f;color:var(--cGreen,#0fa00f)}.Notification.-type--follow .type-icon,.Notification.-type--follow-request .type-icon{color:#0095ff;color:var(--cBlue,#0095ff)}.Notification.-type--like .type-icon{color:orange;color:var(--cOrange,orange)}.Notification.-type--move .type-icon{color:#0095ff;color:var(--cBlue,#0095ff)}.Notifications:not(.minimal){padding-bottom:15em}.Notifications .loadmore-error{color:#b9b9ba;color:var(--text,#b9b9ba)}.Notifications .notification{position:relative}.Notifications .notification .notification-overlay{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.Notifications .notification.unseen .notification-overlay{background-image:linear-gradient(135deg,var(--badgeNotification,red) 4px,transparent 10px)}.notification{box-sizing:border-box}.notification:hover .animated.Avatar canvas{display:none}.notification:hover .animated.Avatar img{visibility:visible}.notification:last-child .Notification{border-bottom:none}.notification .non-mention{display:flex;flex:1;flex-wrap:nowrap;min-width:0;padding:.6em}.notification .non-mention .avatar-container{height:32px;width:32px}.notification .non-mention .faint{--link:var(--faintLink);--text:var(--faint)}.notification .follow-request-accept:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}.notification .follow-request-reject:hover{color:red;color:var(--cRed,red)}.notification .follow-text,.notification .move-text{display:flex;justify-content:space-between;overflow-wrap:break-word;padding:.5em 0}.notification .follow-text .follow-name,.notification .move-text .follow-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification .Status{flex:1}.notification time{white-space:nowrap}.notification .notification-right{flex:1;min-width:0;padding-left:.8em}.notification .notification-right .timeago{min-width:3em;text-align:right}.notification .notification-right .timeago-link{margin-right:.2em}.notification .notification-right .expand-icon .svg-inline--fa{margin-left:.25em}.notification .emoji-reaction-emoji{font-size:1.3em;height:1.25em;max-width:1.25em;width:auto}.notification .emoji-reaction-emoji-image{-o-object-fit:contain;object-fit:contain;vertical-align:middle}.notification .notification-details{word-wrap:break-word;display:flex;flex:1 1 0;flex-wrap:nowrap;justify-content:space-between;line-height:var(--post-line-height);min-width:0;overflow:hidden;position:relative;width:100%}.notification .notification-details .name-and-action{flex:1;overflow:hidden;text-overflow:ellipsis}.notification .notification-details .username{font-weight:bolder;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.notification .notification-details .timeago{margin-right:.2em}.notification .notification-details .status-content{margin:0;max-height:300px}.notification .notification-details h1{font-size:1em;line-height:1.5;margin:0 0 .3em;padding:0;word-break:break-all}.notification .notification-details h1 small{font-weight:lighter}.notification .notification-details p{margin:0 0 .3em}.MobileNav{z-index:var(--ZI_navbar)}.MobileNav .mobile-nav{box-sizing:border-box;display:grid;grid-template-columns:2fr auto;grid-template-rows:50px;line-height:var(--navbar-height);width:100%}.MobileNav .mobile-nav a{color:var(--topBarLink,#d8a070)}.MobileNav .mobile-inner-nav{align-items:center;display:flex;width:100%}.MobileNav .mobile-nav-button{cursor:pointer;display:inline-block;padding:0 1em;position:relative;text-align:center}.MobileNav .site-name{display:inline-block;padding:0 .3em}.MobileNav .item{display:flex}.MobileNav .alert-dot{background-color:red;background-color:var(--badgeNotification,red);border-radius:100%;height:8px;left:calc(50% - 4px);margin-left:6px;margin-top:-6px;position:absolute;top:calc(50% - 4px);width:8px}.MobileNav .mobile-notifications-drawer{-webkit-overflow-scrolling:touch;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);height:100vh;left:0;overflow-x:hidden;position:fixed;top:0;transform:translateX(0);transition-duration:.25s;transition-property:transform;width:100%;z-index:var(--ZI_navbar)}.MobileNav .mobile-notifications-drawer.-closed{box-shadow:none;transform:translateX(100%)}.MobileNav .mobile-notifications-header{align-items:center;background-color:#182230;background-color:var(--topBar,#182230);box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow);color:var(--topBarText);display:flex;height:50px;justify-content:space-between;line-height:50px;position:absolute;width:100%;z-index:calc(var(--ZI_navbar) + 100)}.MobileNav .mobile-notifications-header .spacer{flex:1}.MobileNav .mobile-notifications-header .title{font-size:1.3em;margin-left:.6em}.MobileNav .pins{flex:1}.MobileNav .pins .pinned-item{flex-grow:1}.MobileNav .mobile-notifications{background-color:#121a24;background-color:var(--bg,#121a24);color:#b9b9ba;color:var(--text,#b9b9ba);height:calc(100vh - var(--navbar-height));margin-top:50px;overflow-x:hidden;overflow-y:scroll;width:100vw}.MobileNav .mobile-notifications .notifications{border-radius:0;box-shadow:none;padding:0}.MobileNav .mobile-notifications .notifications .panel{border-radius:0;box-shadow:none;margin:0}.MobileNav .mobile-notifications .notifications .panel:after{border-radius:0}.MobileNav .mobile-notifications .notifications .panel .panel-heading{border-radius:0;box-shadow:none}.MobileNav .confirm-modal.dark-overlay:before{z-index:3000}.MobileNav .confirm-modal.dark-overlay .dialog-modal.panel{z-index:3001}.SearchBar{align-items:baseline;display:inline-flex;justify-content:flex-end;vertical-align:baseline}.SearchBar.-expanded{width:100%}.SearchBar .search-bar-input,.SearchBar .search-button{height:29px}.SearchBar .search-bar-input{flex:1 0 auto}.SearchBar .cancel-search{height:50px}.SearchBar .cancel-icon{color:#b9b9ba;color:var(--btnTopBarText,#b9b9ba)}.DesktopNav{width:100%;z-index:var(--ZI_navbar)}.DesktopNav input{color:var(--inputTopbarText,var(--inputText))}.DesktopNav a{color:var(--topBarLink,#d8a070)}.DesktopNav .inner-nav{box-sizing:border-box;display:grid;grid-template-areas:"sitename logo actions";grid-template-columns:2fr auto 2fr;grid-template-rows:var(--navbar-height);margin:auto;max-width:980px;padding:0 1.2em}.DesktopNav.-column-stretch .inner-nav{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1em;max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--columnGap))}.DesktopNav.-logoLeft .inner-nav{grid-template-areas:"logo sitename actions";grid-template-columns:auto 2fr 2fr}.DesktopNav.-column-stretch.-wide .inner-nav{max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--notifsColumnWidth, var(--miniColumn)) + var(--columnGap))}.DesktopNav .button-default,.DesktopNav .button-default svg{color:#b9b9ba;color:var(--btnTopBarText,#b9b9ba)}.DesktopNav .button-default:active{background-color:#182230;background-color:var(--btnPressedTopBar,#182230);color:#b9b9ba;color:var(--btnPressedTopBarText,#b9b9ba)}.DesktopNav .button-default:disabled{color:#b9b9ba;color:var(--btnDisabledTopBarText,#b9b9ba)}.DesktopNav .button-default.toggled{background-color:#182230;background-color:var(--btnToggledTopBar,#182230);color:#b9b9ba;color:var(--btnToggledTopBarText,#b9b9ba)}.DesktopNav .logo{grid-area:logo;position:relative;transition:opacity;transition-duration:.1s;transition-timing-function:ease-out}@media (min-width:800px){.DesktopNav .logo{opacity:1!important}}.DesktopNav .logo .mask{background-color:#182230;background-color:var(--topBarText,#182230);bottom:0;left:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;right:0;top:0}.DesktopNav .logo img{display:inline-block;height:var(--navbar-height)}.DesktopNav .nav-icon{height:100%;margin-left:.2em;text-align:center;width:2em}.DesktopNav .nav-icon .svg-inline--fa{color:#d8a070;color:var(--topBarLink,#d8a070)}.DesktopNav .sitename{grid-area:sitename}.DesktopNav .actions{grid-area:actions}.DesktopNav .item{display:flex;flex:1;flex-wrap:wrap;height:var(--navbar-height);line-height:var(--navbar-height);overflow:hidden}.DesktopNav .item.right{justify-content:flex-end;text-align:right}.DesktopNav .spacer{width:1em}.list-item:not(:last-child){border-bottom:1px solid #222;border-bottom-color:var(--border,#222)}.list-empty-content{padding:10px;text-align:center}.user-reporting-panel{max-height:80vh;max-width:700px;min-height:20vh;width:90vw}.user-reporting-panel .panel-body{border-color:currentcolor #222 #222;border-top:1px solid #222;border-color:var(--border,#222);display:flex;flex-direction:column-reverse;overflow:hidden}.user-reporting-panel-left{box-sizing:border-box;line-height:var(--post-line-height);padding:1.1em .7em .7em}.user-reporting-panel-left>div{margin-bottom:1em}.user-reporting-panel-left>div:last-child{margin-bottom:0}.user-reporting-panel-left p{margin-top:0}.user-reporting-panel-left textarea.form-control{line-height:16px;min-height:44px;overflow:hidden;resize:none;transition:min-height .2s .1s;width:100%}.user-reporting-panel-left .btn{min-width:10em;padding:0 2em}.user-reporting-panel-left .alert{line-height:1.3em;margin:1em 0 0}.user-reporting-panel-right{display:flex;flex-direction:column;overflow-y:auto}.user-reporting-panel-sitem{display:flex;justify-content:space-between}.user-reporting-panel-sitem>.Status{flex:1}.user-reporting-panel-sitem>.checkbox{margin:.75em}@media (min-width:801px){.user-reporting-panel .panel-body{flex-direction:row}.user-reporting-panel-left{border-right:1px solid;border-color:#222;border-color:var(--border,#222);max-width:320px;padding:1.1em;width:50%}.user-reporting-panel-left>div{margin-bottom:2em}.user-reporting-panel-right{flex:1 1 auto;margin-bottom:12px;width:50%}}.modal-view.edit-form-modal-view{align-items:flex-start}.edit-form-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.edit-form-modal-panel{margin-top:8%}}.edit-form-modal-panel .form-bottom-left{max-width:6.5em}.edit-form-modal-panel .form-bottom-left .emoji-icon{justify-content:right}.modal-view.post-form-modal-view{align-items:flex-start}.post-form-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.post-form-modal-panel{margin-top:8%}}.modal-view.status-history-modal-view{align-items:flex-start}.status-history-modal-panel{flex-shrink:0;margin-bottom:2em;margin-top:25%;max-width:700px;width:100%}@media(orientation:landscape){.status-history-modal-panel{margin-top:8%}}.global-notice-list{align-items:center;display:flex;flex-direction:column;pointer-events:none;position:fixed;top:calc(var(--navbar-height) + .5em);width:100%;z-index:var(--ZI_navbar_popovers)}.global-notice-list .global-notice{display:flex;line-height:2;margin-bottom:.5em;max-width:calc(100% - 3em);padding-left:1.5em;pointer-events:auto;text-align:center;width:40em}.global-notice-list .global-notice .notice-message{flex:1 1 100%}.global-notice-list .global-error{background-color:var(--alertPopupError,red)}.global-notice-list .global-error,.global-notice-list .global-error .svg-inline--fa{color:var(--alertPopupErrorText,#b9b9ba)}.global-notice-list .global-warning{background-color:var(--alertPopupWarning,orange)}.global-notice-list .global-warning,.global-notice-list .global-warning .svg-inline--fa{color:var(--alertPopupWarningText,#b9b9ba)}.global-notice-list .global-success{background-color:var(--alertPopupSuccess,#0fa00f)}.global-notice-list .global-success,.global-notice-list .global-success .svg-inline--fa{color:var(--alertPopupSuccessText,#b9b9ba)}.global-notice-list .global-info{background-color:var(--alertPopupNeutral,#182230)}.global-notice-list .global-info,.global-notice-list .global-info .svg-inline--fa{color:var(--alertPopupNeutralText,#b9b9ba)}.global-notice-list .close-notice{padding-right:.2em}.global-notice-list .close-notice .svg-inline--fa:hover{opacity:.6}.panel{background-color:#121a24;background-color:var(--bg,#121a24);display:flex;flex-direction:column;position:relative}.panel,.panel:after{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel:after{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:5}.panel-body{padding:var(--panel-body-padding,0)}.panel-body:empty:before{content:"¯\\_(ツ)_/¯";display:block;margin:1em;text-align:center}.panel-body>p{line-height:1.3;margin:0;padding:1em}.panel-footer,.panel-heading{--panel-heading-height-padding:0.6em;--__panel-heading-gap:0.5em;--__panel-heading-height:3.2em;--__panel-heading-height-inner:calc(var(--__panel-heading-height) - var(--panel-heading-height-padding, 0)*2);grid-column-gap:var(--__panel-heading-gap);background-size:cover;box-sizing:border-box;display:grid;flex:none;grid-auto-columns:auto;grid-auto-flow:column;grid-template-columns:minmax(50%,1fr);height:var(--__panel-heading-height);line-height:var(--__panel-heading-height-inner);padding:var(--panel-heading-height-padding);position:relative;z-index:4}.panel-footer.-flexible-height,.panel-heading.-flexible-height{--__panel-heading-height:auto}.panel-footer.-flexible-height:after,.panel-footer.-flexible-height:before,.panel-heading.-flexible-height:after,.panel-heading.-flexible-height:before{display:none}.panel-footer.-stub,.panel-footer.-stub:after,.panel-heading.-stub,.panel-heading.-stub:after{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel-footer.-sticky,.panel-heading.-sticky{position:sticky;top:var(--navbar-height)}.panel-footer:after,.panel-footer:before,.panel-heading:after,.panel-heading:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.panel-footer .title,.panel-heading .title{font-size:1.3em}.panel-footer .alert,.panel-heading .alert{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-footer:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.alert,.panel-heading:not(.-flexible-height)>.button-default{align-self:stretch;box-sizing:border-box;height:var(--__panel-heading-height-inner);margin:0;min-height:0;min-width:1px;padding-bottom:0;padding-top:0}.panel-heading{align-items:start;background-color:#121a24;background-color:var(--bg,#121a24);border-width:0 0 1px;color:var(--panelText)}.panel-heading,.panel-heading:after{border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0}.panel-heading:after{background-color:#182230;background-color:var(--panel,#182230);box-shadow:var(--panelHeaderShadow);z-index:-2}.panel-heading .-link,.panel-heading a{color:#d8a070;color:var(--panelLink,#d8a070)}.panel-heading .button-unstyled:hover .iconLetter,.panel-heading .button-unstyled:hover .svg-inline--fa,.panel-heading .button-unstyled:hover i[class*=icon-],.panel-heading a:hover .iconLetter,.panel-heading a:hover .svg-inline--fa,.panel-heading a:hover i[class*=icon-]{color:var(--panelText)}.panel-heading .faint{background-color:transparent;color:hsla(240,1%,73%,.5);color:var(--panelFaint,hsla(240,1%,73%,.5))}.panel-heading .faint-link{color:hsla(240,1%,73%,.5);color:var(--faintLink,hsla(240,1%,73%,.5))}.panel-heading:not(.-flexible-height)>.button-default{flex-shrink:0}.panel-heading:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.button-default i[class*=icon-]{color:#b9b9ba;color:var(--btnPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default:active{background-color:#182230;background-color:var(--btnPressedPanel,#182230);color:#b9b9ba;color:var(--btnPressedPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default:disabled{color:#b9b9ba;color:var(--btnDisabledPanelText,#b9b9ba)}.panel-heading:not(.-flexible-height)>.button-default.toggled{color:#b9b9ba;color:var(--btnToggledPanelText,#b9b9ba)}.panel-heading .rightside-button{align-self:stretch;height:var(--__panel-heading-height);margin:calc(var(--panel-heading-height-padding)*-1) 0;margin-right:calc(var(--__panel-heading-gap)*-1);text-align:center;width:var(--__panel-heading-height)}.panel-heading .rightside-button>button{box-sizing:border-box;height:100%;padding:calc(var(--panel-heading-height-padding)*1) 0;text-align:center;width:100%}.panel-heading .rightside-button>button svg{font-size:1.2em}.panel-heading .rightside-icon{align-self:stretch;margin-right:calc(var(--__panel-heading-gap)*-1);text-align:center;width:var(--__panel-heading-height)}.panel-heading .rightside-icon svg{font-size:1.2em}.panel-footer{align-items:center;border-color:var(--border,#222);border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px);border-style:solid;border-width:1px 0 0}:root{--navbar-height:3.5rem;--post-line-height:1.4;--ZI_media_modal:9000;--ZI_modals_popovers:8500;--ZI_modals:8000;--ZI_navbar_popovers:7500;--ZI_navbar:7000;--ZI_popovers:6000}html{font-size:14px}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#b9b9ba;color:var(--text,#b9b9ba);font-family:sans-serif;font-family:var(--interfaceFont,sans-serif);margin:0;overflow-x:clip;overflow-y:scroll;overscroll-behavior-y:none}body.hidden{display:none}@media(any-pointer:fine){*{scrollbar-color:var(--btn) transparent}::-webkit-scrollbar{background:transparent}::-webkit-scrollbar-button,::-webkit-scrollbar-thumb{background-color:var(--btn);border-radius:var(--btnRadius);box-shadow:var(--buttonShadow)}::-webkit-scrollbar-button{--___bgPadding:2px;background-repeat:no-repeat,no-repeat;color:var(--btnText)}::-webkit-scrollbar-button:horizontal{background-size:50% calc(50% - var(--___bgPadding)),50% calc(50% - var(--___bgPadding))}::-webkit-scrollbar-button:horizontal:increment{background-image:linear-gradient(45deg,var(--btnText) 50%,transparent 51%),linear-gradient(-45deg,transparent 50%,var(--btnText) 51%);background-position:top var(--___bgPadding) left 50%,right 50% bottom var(--___bgPadding)}::-webkit-scrollbar-button:horizontal:decrement{background-image:linear-gradient(45deg,transparent 50%,var(--btnText) 51%),linear-gradient(-45deg,var(--btnText) 50%,transparent 51%);background-position:bottom var(--___bgPadding) right 50%,left 50% top var(--___bgPadding)}::-webkit-scrollbar-button:vertical{background-size:calc(50% - var(--___bgPadding)) 50%,calc(50% - var(--___bgPadding)) 50%}::-webkit-scrollbar-button:vertical:increment{background-image:linear-gradient(-45deg,transparent 50%,var(--btnText) 51%),linear-gradient(45deg,transparent 50%,var(--btnText) 51%);background-position:right var(--___bgPadding) top 50%,left var(--___bgPadding) top 50%}::-webkit-scrollbar-button:vertical:decrement{background-image:linear-gradient(-45deg,var(--btnText) 50%,transparent 51%),linear-gradient(45deg,var(--btnText) 50%,transparent 51%);background-position:left var(--___bgPadding) top 50%,right var(--___bgPadding) top 50%}html{background:var(--wallpaper);scrollbar-color:var(--selectedMenu) var(--wallpaper)}}a{color:#d8a070;color:var(--link,#d8a070);text-decoration:none}h4{margin:0}.iconLetter{display:inline-block;font-weight:1000;text-align:center}.iconLetter,.svg-inline--fa,i[class*=icon-]{color:#666;color:var(--icon,#666)}.button-unstyled:hover>.iconLetter,.button-unstyled:hover>.svg-inline--fa,.button-unstyled:hover>i[class*=icon-],a:hover>.iconLetter,a:hover>.svg-inline--fa,a:hover>i[class*=icon-]{color:var(--text)}nav{background-color:#182230;background-color:var(--topBar,#182230);box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow);box-sizing:border-box;color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));height:var(--navbar-height);position:fixed;z-index:var(--ZI_navbar)}#sidebar{grid-area:sidebar}#modal{position:absolute;z-index:var(--ZI_modals)}.column.-scrollable{position:sticky;top:var(--navbar-height)}#main-scroller{grid-area:content;position:relative}#notifs-column{grid-area:notifs}.app-bg-wrapper{background-color:var(--wallpaper);background-image:var(--body-background-image);background-position:50%;background-repeat:no-repeat;background-size:cover;height:100%;left:0;position:fixed;right:-20px;top:var(--navbar-height);z-index:-1000}.underlay{background-color:rgba(0,0,0,.15);background-color:var(--underlay,rgba(0,0,0,.15));grid-column:1/span 3;grid-row:1/1;pointer-events:none;z-index:-1000}.app-layout{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1em;--status-margin:0.75em;--effectiveSidebarColumnWidth:minmax(var(--miniColumn),var(--sidebarColumnWidth,var(--miniColumn)));--effectiveNotifsColumnWidth:minmax(var(--miniColumn),var(--notifsColumnWidth,var(--miniColumn)));--effectiveContentColumnWidth:minmax(var(--miniColumn),var(--contentColumnWidth,var(--maxiColumn)));align-content:flex-start;flex-wrap:wrap;grid-template-areas:"sidebar content";grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth);grid-template-rows:1fr;justify-content:center;margin:0 auto;min-height:100vh;overflow-x:clip;position:relative}.app-layout,.app-layout .column{box-sizing:border-box;display:grid}.app-layout .column{--___columnMargin:var(--columnGap);align-content:start;grid-row:1/1;grid-template-columns:100%;margin:0 calc(var(--___columnMargin)/2);padding:calc(var(--___columnMargin)) 0;row-gap:var(--___columnMargin)}.app-layout .column:not(.-scrollable){margin-top:var(--navbar-height)}.app-layout .column:hover{z-index:2}.app-layout .column.-full-height{margin-bottom:0;padding-bottom:0;padding-top:0}.app-layout .column.-scrollable{--___paddingIncrease:calc(var(--columnGap)/2);margin-left:calc(var(--___paddingIncrease)*-1);max-height:calc(100vh - var(--navbar-height));overflow-x:hidden;overflow-y:auto;padding-left:calc(var(--___paddingIncrease) + var(--___columnMargin)/2);position:sticky;top:var(--navbar-height)}@supports(scrollbar-width:none) or (-webkit-text-fill-color:initial){.app-layout .column.-scrollable:not(.-show-scrollbar){margin-right:calc(var(--___paddingIncrease)*-1);padding-right:calc(var(--___paddingIncrease) + var(--___columnMargin)/2);scrollbar-width:none}.app-layout .column.-scrollable:not(.-show-scrollbar)::-webkit-scrollbar{display:block;width:0}}.app-layout .column.-scrollable .panel-heading.-sticky{top:calc(var(--columnGap)/-1)}.app-layout.-has-new-post-button .column{padding-bottom:10rem}.app-layout.-no-sticky-headers .column .panel-heading.-sticky{position:relative;top:0}.app-layout .column-inner{align-content:start;box-sizing:border-box;display:grid;grid-template-columns:100%;row-gap:1em}.app-layout.-reverse:not(.-wide,.-mobile){grid-template-areas:"content sidebar";grid-template-columns:var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth)}.app-layout.-wide{grid-template-areas:"sidebar content notifs";grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveNotifsColumnWidth)}.app-layout.-wide.-reverse{grid-template-areas:"notifs content sidebar";grid-template-columns:var(--effectiveNotifsColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth)}.app-layout.-mobile{grid-template-areas:"content";grid-template-columns:100vw;padding:0}.app-layout.-mobile .column{margin:var(--navbar-height) 0 0 0;padding-top:0}.app-layout.-mobile .panel,.app-layout.-mobile .panel-heading,.app-layout.-mobile .panel-heading:after,.app-layout.-mobile .panel-heading:before,.app-layout.-mobile .panel:after{border-top-left-radius:0;border-top-right-radius:0}.app-layout.-mobile #notifs-column,.app-layout.-mobile #sidebar,.app-layout.-normal #notifs-column{display:none}.text-center{text-align:center}.button-default{background-color:#182230;background-color:var(--btn,#182230);border:none;border-radius:4px;border-radius:var(--btnRadius,4px);box-shadow:0 0 2px 0 #000,inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.2);box-shadow:var(--buttonShadow);color:#b9b9ba;color:var(--btnText,#b9b9ba);cursor:pointer;font-family:sans-serif;font-family:var(--interfaceFont,sans-serif);font-size:1em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.button-default.-sublime{background:transparent}.button-default .svg-inline--fa,.button-default i[class*=icon-]{color:#b9b9ba;color:var(--btnText,#b9b9ba)}.button-default::-moz-focus-inner{border:none}.button-default:hover{box-shadow:0 0 4px hsla(0,0%,100%,.3);box-shadow:var(--buttonHoverShadow)}.button-default:active{background-color:#182230;background-color:var(--btnPressed,#182230);box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow)}.button-default:active,.button-default:active i,.button-default:active svg{color:#b9b9ba;color:var(--btnPressedText,#b9b9ba)}.button-default:disabled{background-color:#182230;background-color:var(--btnDisabled,#182230);cursor:not-allowed}.button-default:disabled,.button-default:disabled i,.button-default:disabled svg{color:#b9b9ba;color:var(--btnDisabledText,#b9b9ba)}.button-default.toggled{background-color:#182230;background-color:var(--btnToggled,#182230);box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow)}.button-default.toggled,.button-default.toggled i,.button-default.toggled svg{color:#b9b9ba;color:var(--btnToggledText,#b9b9ba)}.button-default.danger{background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5));color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba)}.button-unstyled{background:none;border:none;box-sizing:content-box;color:inherit;cursor:pointer;display:inline;font-family:inherit;font-size:100%;line-height:unset;outline:none;padding:0;text-align:initial}.button-unstyled.-link{color:#d8a070;color:var(--link,#d8a070)}.button-unstyled.-fullwidth{width:100%}.button-unstyled.-hover-highlight:hover svg{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.input,input,textarea{--_padding:0.5em;background-color:#182230;background-color:var(--input,#182230);border:none;border-radius:4px;border-radius:var(--inputRadius,4px);box-shadow:inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2),inset 0 0 2px 0 #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:#b9b9ba;color:var(--inputText,#b9b9ba);display:inline-block;font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:2;margin:0;padding:0 var(--_padding);position:relative}.input.unstyled,input.unstyled,textarea.unstyled{background:none;border-radius:0;box-shadow:none;height:unset}.input.disabled,.input:disabled,.input[disabled=disabled],input.disabled,input:disabled,input[disabled=disabled],textarea.disabled,textarea:disabled,textarea[disabled=disabled]{cursor:not-allowed;opacity:.5}.input[type=range],input[type=range],textarea[type=range]{background:none;border:none;box-shadow:none;flex:1;margin:0}.input[type=radio],input[type=radio],textarea[type=radio]{display:none}.input[type=radio]:checked+label:before,input[type=radio]:checked+label:before,textarea[type=radio]:checked+label:before{background-color:var(--accent,#d8a070);box-shadow:inset 0 0 2px #000,inset 0 0 0 4px #182230;box-shadow:var(--inputShadow),0 0 0 4px var(--fg,#182230) inset}.input[type=radio]:disabled,.input[type=radio]:disabled+label,.input[type=radio]:disabled+label:before,input[type=radio]:disabled,input[type=radio]:disabled+label,input[type=radio]:disabled+label:before,textarea[type=radio]:disabled,textarea[type=radio]:disabled+label,textarea[type=radio]:disabled+label:before{opacity:.5}.input[type=radio]+label:before,input[type=radio]+label:before,textarea[type=radio]+label:before{background-color:#182230;background-color:var(--input,#182230);border-radius:100%;box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"";display:inline-block;flex-shrink:0;font-size:1.1em;height:1.1em;line-height:1.1;margin-right:.5em;overflow:hidden;text-align:center;transition:box-shadow .2s;vertical-align:top;width:1.1em}.input[type=checkbox]:checked+label:before,input[type=checkbox]:checked+label:before,textarea[type=checkbox]:checked+label:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.input[type=checkbox]:disabled,.input[type=checkbox]:disabled+label,.input[type=checkbox]:disabled+label:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled+label,input[type=checkbox]:disabled+label:before,textarea[type=checkbox]:disabled,textarea[type=checkbox]:disabled+label,textarea[type=checkbox]:disabled+label:before{opacity:.5}.input[type=checkbox]+label:before,input[type=checkbox]+label:before,textarea[type=checkbox]+label:before{background-color:#182230;background-color:var(--input,#182230);border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);box-sizing:border-box;color:transparent;content:"✓";display:inline-block;flex-shrink:0;font-size:1.1em;height:1.1em;line-height:1.1;margin-right:.5em;overflow:hidden;text-align:center;transition:color .2s;vertical-align:top;width:1.1em}.input.resize-height,input.resize-height,textarea.resize-height{resize:vertical}textarea{line-height:var(--post-line-height);padding:var(--_padding)}option{background-color:#121a24;background-color:var(--bg,#121a24);color:#b9b9ba;color:var(--text,#b9b9ba)}.hide-number-spinner{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.hide-number-spinner[type=number]::-webkit-inner-spin-button,.hide-number-spinner[type=number]::-webkit-outer-spin-button{display:none;opacity:0}.cards-list{display:grid;grid-auto-flow:row dense;grid-template-columns:1fr 1fr;list-style:none}.cards-list li{border:1px solid var(--border);border-radius:var(--inputRadius);margin:.25em;padding:.5em}.btn-block{display:block;width:100%}.btn-group{display:inline-flex;position:relative;vertical-align:middle}.btn-group .button-dropdown,.btn-group button{flex:1 1 auto;position:relative}.btn-group .button-dropdown:not(:last-child),.btn-group .button-dropdown:not(:last-child) .button-default,.btn-group button:not(:last-child),.btn-group button:not(:last-child) .button-default{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .button-dropdown:not(:first-child),.btn-group .button-dropdown:not(:first-child) .button-default,.btn-group button:not(:first-child),.btn-group button:not(:first-child) .button-default{border-bottom-left-radius:0;border-top-left-radius:0}.fa{color:gray}.mobile-shown{display:none}.badge{border-radius:99px;box-sizing:border-box;display:inline-block;font-size:.9em;font-style:normal;font-weight:400;height:1.3em;line-height:1;max-width:10em;min-width:1.7em;overflow:hidden;padding:.15em;text-align:center;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.badge.badge-notification{background-color:red;background-color:var(--badgeNotification,red);color:#fff;color:var(--badgeNotificationText,#fff)}.alert{border-radius:5px;border-radius:var(--tooltipRadius,5px);margin:0 .35em;padding:0 .25em}.alert.error{background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5));color:#b9b9ba;color:var(--alertErrorText,#b9b9ba)}.panel-heading .alert.error{color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba)}.alert.warning{background-color:rgba(111,111,20,.5);background-color:var(--alertWarning,rgba(111,111,20,.5));color:#b9b9ba;color:var(--alertWarningText,#b9b9ba)}.panel-heading .alert.warning{color:#b9b9ba;color:var(--alertWarningPanelText,#b9b9ba)}.alert.success{background-color:var(--alertSuccess,rgba(111,111,20,.5));color:var(--alertSuccessText,#b9b9ba)}.panel-heading .alert.success{color:var(--alertSuccessPanelText,#b9b9ba)}.faint,.faint-link{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.faint-link:hover{text-decoration:underline}.visibility-notice{border:1px solid hsla(240,1%,73%,.5);border:1px solid var(--faint,hsla(240,1%,73%,.5));border-radius:4px;border-radius:var(--inputRadius,4px);padding:.5em}.notice-dismissible{padding-right:4rem;position:relative}.notice-dismissible .dismiss{color:inherit;padding:.5em;position:absolute;right:0;top:0}.fa-scale-110.iconLetter,.fa-scale-110.svg-inline--fa{font-size:1.1em}.fa-old-padding-layer,.fa-old-padding.iconLetter,.fa-old-padding.svg-inline--fa{padding:0 .3em}.veryfaint{opacity:.25}.login-hint{text-align:center}@media (min-width:801px){.login-hint{display:none}}.login-hint a{display:inline-block;padding:1em 0;width:100%}.btn.button-default{min-height:2em}.new-status-notification{flex:1;font-size:1.1em;position:relative;z-index:1}@media (max-width:800px){.mobile-hidden{display:none}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes shakeError{0%{transform:translateX(0)}15%{transform:translateX(.375rem)}30%{transform:translateX(-.375rem)}45%{transform:translateX(.375rem)}60%{transform:translateX(-.375rem)}75%{transform:translateX(.375rem)}90%{transform:translateX(-.375rem)}to{transform:translateX(0)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter-from,.fade-leave-active{opacity:0}.visible-for-screenreader-only{clip:rect(0 0 0 0);display:block;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;visibility:visible;width:1px}.thread-tree-replies{border-left:2px solid var(--border,#222);margin-left:var(--status-margin,.75em)}.thread-tree-replies-hidden{align-items:stretch;display:flex;flex-direction:column;padding:var(--status-margin,.75em)}.Conversation{z-index:1}.Conversation .conversation-dive-to-top-level-box{align-items:stretch;border-bottom:1px solid var(--border,#222);border-radius:0;display:flex;flex-direction:column;padding:var(--status-margin,.75em)}.Conversation .thread-ancestors{border-left:2px solid var(--border,#222);margin-left:var(--status-margin,.75em)}.Conversation .thread-ancestor.-faded .StatusContent{--link:var(--faintLink);--text:var(--faint);color:var(--text)}.Conversation .thread-ancestor-dive-box{border-bottom:1px solid var(--border,#222);border-radius:0;padding-left:var(--status-margin,.75em)}.Conversation .thread-ancestor-dive-box,.Conversation .thread-ancestor-dive-box-inner{align-items:stretch;display:flex;flex-direction:column}.Conversation .thread-ancestor-dive-box-inner{padding:var(--status-margin,.75em)}.Conversation .conversation-status{border-bottom:1px solid var(--border,#222);border-radius:0}.Conversation .thread-ancestor-has-other-replies .conversation-status,.Conversation .thread-ancestor:last-child .conversation-status,.Conversation .thread-ancestor:last-child .thread-ancestor-dive-box,.Conversation.-expanded .thread-tree .conversation-status,.Conversation:last-child .conversation-status{border-bottom:none}.Conversation .thread-ancestors+.thread-tree>.conversation-status{border-top:1px solid var(--border,#222)}.Conversation.status-fadein.-expanded .thread-body{border-bottom:1px solid var(--border,#222);border-left:4px solid red;border-left-color:var(--cRed,red);border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px)}.Conversation.-expanded.status-fadein{margin:calc(var(--status-margin, .75em)/2)}.timeline-menu-popover{border-top-left-radius:0;border-top-right-radius:0;font-size:1rem;margin-top:.6rem;max-width:100vw;min-width:24rem}.timeline-menu-popover ul{list-style:none;margin:0;padding:0}.timeline-menu-popover a{display:block;height:3.5em;line-height:3.5em;padding:0 .65em}.timeline-menu-popover a:hover{color:#d8a070;color:var(--selectedMenuText,#d8a070)}.timeline-menu-popover a.router-link-active,.timeline-menu-popover a:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a)}.timeline-menu-popover a.router-link-active{color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba);font-weight:bolder}.timeline-menu-popover a.router-link-active:hover{text-decoration:underline}.timeline-menu-popover a svg{margin-left:-.2em;margin-right:.4em}.timeline-menu-popover li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0}.timeline-menu-popover li:last-child a{border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px);border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px)}.timeline-menu-popover li:last-child{border:none}.TimelineMenu{margin-right:auto;min-width:0}.TimelineMenu .popover-trigger-button{vertical-align:bottom}.TimelineMenu .panel:after{border-top-left-radius:0;border-top-right-radius:0}.TimelineMenu .timeline-menu-title{cursor:pointer;display:flex;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.TimelineMenu .timeline-menu-title .timeline-menu-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.TimelineMenu .timeline-menu-title svg{margin-left:.6em;transition:transform .1s}.TimelineMenu .timeline-menu-title .click-blocker{cursor:default;flex-grow:1}.TimelineMenu.open .timeline-menu-title svg{color:#b9b9ba;color:var(--panelText,#b9b9ba);transform:rotate(180deg)}.TimelineMenu .panel{box-shadow:var(--popoverShadow)}.Timeline .alert-dot{border-radius:100%;height:8px;left:calc(50% - 4px);margin-left:6px;margin-top:-6px;top:calc(50% - 4px);width:8px}.Timeline .alert-badge,.Timeline .alert-dot{background-color:var(--badgeNeutral);position:absolute}.Timeline .alert-badge{border-radius:var(--tooltipRadius);color:var(--badgeNeutralText);font-size:.75em;left:calc(50% - .5em);line-height:1;margin-left:.7em;margin-top:-1em;padding:.2em;text-align:right;top:calc(50% - .4em)}.Timeline .loadmore-button{position:relative}.Timeline.-blocked{cursor:progress}.Timeline .conversation-heading{top:calc(var(--__panel-heading-height)*var(--currentPanelStack, 2));z-index:2}.Timeline.-nonpanel .timeline-heading{line-height:2.75em;padding:0 .5em;text-align:center}.Timeline.-nonpanel .timeline-heading .alert,.Timeline.-nonpanel .timeline-heading .button-default{line-height:2em;width:100%}.tab-switcher{display:flex}.tab-switcher .tab-icon{display:block;margin:.2em auto}.tab-switcher.top-tabs{flex-direction:column}.tab-switcher.top-tabs>.tabs{flex:0 0 auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding-top:5px;width:100%}.tab-switcher.top-tabs>.tabs:after,.tab-switcher.top-tabs>.tabs:before{border-bottom:1px solid #222;border-bottom-color:var(--border,#222);content:"";flex:1 1 auto}.tab-switcher.top-tabs>.tabs .tab-wrapper{height:2em}.tab-switcher.top-tabs>.tabs .tab-wrapper:not(.active):after{border-bottom:1px solid #222;border-bottom-color:var(--border,#222);bottom:0;left:0;right:0}.tab-switcher.top-tabs>.tabs .tab{border-bottom-left-radius:0;border-bottom-right-radius:0;margin-bottom:-93px;min-width:1px;padding-bottom:99px;width:100%}.tab-switcher.top-tabs .contents.scrollable-tabs{flex-basis:0}.tab-switcher.side-tabs{flex-direction:row}@media (max-width:800px){.tab-switcher.side-tabs{overflow-x:auto}}.tab-switcher.side-tabs>.contents{flex:1 1 auto}.tab-switcher.side-tabs>.tabs{flex:0 0 auto;flex-direction:column;overflow-x:hidden;overflow-y:auto}.tab-switcher.side-tabs>.tabs:after,.tab-switcher.side-tabs>.tabs:before{border-right:1px solid #222;border-right-color:var(--border,#222);content:"";flex-basis:.5em;flex-shrink:0}.tab-switcher.side-tabs>.tabs:after{flex-grow:1}.tab-switcher.side-tabs>.tabs:before{flex-grow:0}.tab-switcher.side-tabs>.tabs .tab-wrapper{display:flex;flex-direction:column;min-width:10em}@media (max-width:800px){.tab-switcher.side-tabs>.tabs .tab-wrapper{min-width:4em}}.tab-switcher.side-tabs>.tabs .tab-wrapper:not(.active):after{border-right:1px solid #222;border-right-color:var(--border,#222);bottom:0;right:0;top:0}.tab-switcher.side-tabs>.tabs .tab-wrapper:before{border-right:1px solid #222;border-right-color:var(--border,#222);content:"";flex:0 0 6px}.tab-switcher.side-tabs>.tabs .tab-wrapper:last-child .tab{margin-bottom:0}.tab-switcher.side-tabs>.tabs .tab{border-bottom-right-radius:0;border-top-right-radius:0;box-sizing:content-box;flex:1;margin-left:1em;margin-right:-200px;min-width:10em;min-width:1px;padding-left:1em;padding-right:calc(1em + 200px)}@media (max-width:800px){.tab-switcher.side-tabs>.tabs .tab{margin-left:.25em;margin-right:calc(.25em - 200px);padding-left:.25em;padding-right:calc(.25em + 200px)}.tab-switcher.side-tabs>.tabs .tab .text{display:none}}.tab-switcher .contents{flex:1 0 auto;min-height:0}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents .full-height:not(.hidden){display:flex;flex-direction:column;height:100%}.tab-switcher .contents .full-height:not(.hidden)>:not(.mobile-label){flex:1}.tab-switcher .contents.scrollable-tabs{overflow-y:auto}.tab-switcher .tab{padding:6px 1em;position:relative;white-space:nowrap}.tab-switcher .tab:not(.active){z-index:4}.tab-switcher .tab:not(.active):hover{z-index:6}.tab-switcher .tab.active{background:transparent;color:#b9b9ba;color:var(--tabActiveText,#b9b9ba);z-index:5}.tab-switcher .tab img{margin-top:-5px;max-height:26px;vertical-align:top}.tab-switcher .tabs{box-sizing:border-box;display:flex;position:relative}.tab-switcher .tabs:after,.tab-switcher .tabs:before{display:block;flex:1 1 auto}.tab-switcher .tab-wrapper{display:flex;flex:0 0 auto;position:relative}.tab-switcher .tab-wrapper:not(.active):after{content:"";position:absolute;z-index:7}.tab-switcher .mobile-label{border-bottom:1px solid var(--border,#222);margin-bottom:.25em;margin-left:.2em;margin-top:.5em;padding-bottom:.25em;padding-left:.3em}@media (min-width:800px){.tab-switcher .mobile-label{display:none}}.chat-title{--emoji-size:14px;display:flex}.chat-title,.chat-title .username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-title .username{word-wrap:break-word;display:inline;max-width:100%}.chat-title .avatar-container{align-self:center;line-height:1}.chat-title .titlebar-avatar{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:1.5em;margin-right:.5em;width:1.5em}.chat-title .titlebar-avatar.animated:before{display:none}.chat-list-item{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:row;height:5em;overflow:hidden;padding:.75em}.chat-list-item :focus{outline:none}.chat-list-item:hover{background-color:var(--selectedPost,#151e2a);box-shadow:0 0 3px 1px rgba(0,0,0,.1)}.chat-list-item .chat-list-item-left{margin-right:1em}.chat-list-item .chat-list-item-center{word-wrap:break-word;box-sizing:border-box;overflow:hidden;width:100%}.chat-list-item .heading{display:inline-flex;justify-content:space-between;line-height:1em;width:100%}.chat-list-item .heading-right{white-space:nowrap}.chat-list-item .name-and-account-name{flex-shrink:1;line-height:var(--post-line-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-list-item .chat-preview{color:#b9b9ba;color:var(--faint,#b9b9ba);display:inline-flex;margin:.35em 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.chat-list-item a{color:var(--faintLink,#d8a070);pointer-events:none;text-decoration:none}.chat-list-item:hover .animated.avatar canvas{display:none}.chat-list-item:hover .animated.avatar img{visibility:visible}.chat-list-item .Avatar{border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.chat-list-item .chat-preview-body{--emoji-size:1.4em;padding-right:1em}.chat-list-item .time-wrapper{line-height:var(--post-line-height)}.basic-user-card{--emoji-size:14px;display:flex;flex:1 0;margin:0;padding:.6em 1em}.basic-user-card-collapsed-content{flex:1;margin-left:.7em;min-width:0;text-align:left}.basic-user-card-user-name img{height:16px;-o-object-fit:contain;object-fit:contain;vertical-align:middle;width:16px}.basic-user-card-screen-name,.basic-user-card-user-name-value{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.basic-user-card-expanded-content{flex:1;margin-left:.7em;min-width:0}.chat-new .input-wrap{display:flex;margin:.7em .5em}.chat-new .input-wrap input{width:100%}.chat-new .search-icon{margin-right:.3em}.chat-new .member-list{padding-bottom:.7rem}.chat-new .basic-user-card:hover{background-color:var(--selectedPost,#151e2a);cursor:pointer}.chat-new .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.chat-list{margin-bottom:0;min-height:25em}.emtpy-chat-list-alert{color:#b9b9ba;color:var(--faint,#b9b9ba);display:flex;font-size:1.2em;justify-content:center;padding:3em}.chat-message-wrapper.hovered-message-chain .animated.Avatar canvas{display:none}.chat-message-wrapper.hovered-message-chain .animated.Avatar img{visibility:visible}.chat-message-wrapper .chat-message-menu{opacity:0;position:absolute;top:-.8em;transition:opacity .1s}.chat-message-wrapper .chat-message-menu button{padding-bottom:.2em;padding-top:.2em}.chat-message-wrapper .menu-icon{cursor:pointer}.chat-message-wrapper .menu-icon:hover,.extra-button-popover.open .chat-message-wrapper .menu-icon{color:#b9b9ba;color:var(--text,#b9b9ba)}.chat-message-wrapper .popover{width:12em}.chat-message-wrapper .chat-message{display:flex;padding-bottom:.5em}.chat-message-wrapper .chat-message .status-body:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.chat-message-wrapper .avatar-wrapper{margin-right:.72em;width:32px}.chat-message-wrapper .attachments,.chat-message-wrapper .link-preview{margin-bottom:1em}.chat-message-wrapper .status{border-radius:10px;border-radius:var(--chatMessageRadius,10px);display:flex;padding:.75em}.chat-message-wrapper .created-at{float:right;font-size:.8em;font-style:italic;margin:-1em 0 -.5em;opacity:.8;position:relative}.chat-message-wrapper .without-attachment .message-content .RichContent:after{content:" ";display:inline-block;margin-right:5.4em}.chat-message-wrapper .pending .created-at,.chat-message-wrapper .pending .status-content.media-body{color:var(--faint)}.chat-message-wrapper .error .created-at,.chat-message-wrapper .error .status-content.media-body{color:red;color:var(--badgeNotification,red)}.chat-message-wrapper .chat-message-inner{align-items:flex-start;display:flex;flex-direction:column;max-width:80%;min-width:10em;width:100%}.chat-message-wrapper .outgoing{align-content:end;display:flex;flex-flow:row wrap;justify-content:flex-end}.chat-message-wrapper .outgoing a{color:var(--chatMessageOutgoingLink,#d8a070)}.chat-message-wrapper .outgoing .status{background-color:var(--chatMessageOutgoingBg,#151e2a);border:1px solid var(--chatMessageOutgoingBorder,--lightBg);color:var(--chatMessageOutgoingText,#b9b9ba)}.chat-message-wrapper .outgoing .chat-message-inner{align-items:flex-end}.chat-message-wrapper .outgoing .chat-message-menu{right:.4rem}.chat-message-wrapper .incoming a{color:var(--chatMessageIncomingLink,#d8a070)}.chat-message-wrapper .incoming .status{background-color:var(--chatMessageIncomingBg,#121a24);border:1px solid var(--chatMessageIncomingBorder,--border)}.chat-message-wrapper .incoming .created-at a,.chat-message-wrapper .incoming .status{color:var(--chatMessageIncomingText,#b9b9ba)}.chat-message-wrapper .incoming .chat-message-menu{left:.4rem}.chat-message-wrapper .chat-message-inner.with-media,.chat-message-wrapper .chat-message-inner.with-media .status{width:100%}.chat-message-wrapper .visible{opacity:1}.chat-message-date-separator{color:#b9b9ba;color:var(--faintedText,#b9b9ba);font-size:.9em;margin:1.4em 0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chat-view{display:flex;height:100%}.chat-view .chat-view-inner{display:flex;height:auto;overflow:visible;width:100%}.chat-view .chat-view-body{background-color:var(--chatBg,#121a24);border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0;box-sizing:border-box;display:flex;flex-direction:column;margin:0;min-height:calc(100vh - var(--navbar-height));overflow:visible;width:100%}.chat-view .chat-view-body:after{border-radius:0}.chat-view .message-list{display:flex;flex-direction:column;height:100%;justify-content:end;padding:0 .8em}.chat-view .footer{background-color:#121a24;background-color:var(--bg,#121a24);bottom:0;position:sticky;z-index:1}.chat-view .chat-view-heading{grid-template-columns:auto minmax(50%,1fr)}.chat-view .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.chat-view .jump-to-bottom-button{align-items:center;background-color:#182230;background-color:var(--btn,#182230);border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.3),0 2px 4px rgba(0,0,0,.3);cursor:pointer;display:flex;height:2.5em;justify-content:center;opacity:0;position:absolute;right:1.3em;top:-3.2em;transition:all .35s;transition-timing-function:cubic-bezier(0,1,.5,1);visibility:hidden;width:2.5em;z-index:10}.chat-view .jump-to-bottom-button.visible{opacity:1;visibility:visible}.chat-view .jump-to-bottom-button i{color:#b9b9ba;color:var(--text,#b9b9ba);font-size:1em}.chat-view .jump-to-bottom-button .unread-message-count{border-radius:50px;font-size:.8em;left:50%;margin-top:-1rem;padding:.1em;position:absolute}.chat-view .jump-to-bottom-button .chat-loading-error{align-items:flex-end;display:flex;height:100%;width:100%}.chat-view .jump-to-bottom-button .chat-loading-error .error{width:100%}.follow-card-content-container{display:flex;flex-flow:row wrap;flex-shrink:0;justify-content:space-between;line-height:1.5em}.follow-card-button{margin-left:1em;margin-top:.5em;padding:0 1.5em}.follow-card-follow-button{margin-left:auto;margin-top:.5em;width:10em}.with-load-more-footer{border-top:1px solid #222;border-top-color:var(--border,#222);padding:10px;text-align:center}.with-load-more-footer .error{font-size:1rem}.with-load-more-footer a{cursor:pointer}.user-profile{--currentPanelStack:1;flex:2;flex-basis:500px}.user-profile .user-birthday{margin:0 .75em .5em}.user-profile .user-profile-fields{margin:0 .5em}.user-profile .user-profile-fields img{max-height:400px;max-width:100%;-o-object-fit:contain;object-fit:contain;vertical-align:middle}.user-profile .user-profile-fields img.emoji{height:18px;width:18px}.user-profile .user-profile-fields .user-profile-field{border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);display:flex;margin:.25em}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name{border-right:1px solid var(--border,#222);color:var(--lightText);flex:0 1 30%;font-weight:500;min-width:120px;text-align:right}.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{color:var(--text);flex:1 1 70%;margin:0 0 0 .25em}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name,.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{box-sizing:border-box;line-height:1.3;overflow:hidden;padding:.5em 1.5em;text-overflow:ellipsis;white-space:nowrap}.user-profile .userlist-placeholder{align-items:middle;display:flex;justify-content:center;padding:2em}.user-profile-placeholder .panel-body{align-items:middle;display:flex;justify-content:center;padding:7em}.search-result-heading{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));padding:.75rem;text-align:center}@media (max-width:800px){.search-nav-heading .tab-switcher .tabs .tab-wrapper{display:block;flex:1 1 auto;justify-content:center;text-align:center}}.search-result{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);box-sizing:border-box}.search-result-footer{background-color:#182230;background-color:var(--panel,#182230);border-color:var(--border,#222);border-style:solid;border-width:1px 0 0;padding:10px}.search-input-container{display:flex;justify-content:center;padding:.8rem}.search-input-container .search-input{box-sizing:border-box;font-size:1rem;line-height:1.125rem;padding:.5rem;width:100%}.search-input-container .search-button{margin-left:.5em}.loading-icon{padding:1em}.trend{align-items:center;display:flex}.trend .hashtag{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trend .count,.trend .hashtag{color:#b9b9ba;color:var(--text,#b9b9ba)}.trend .count{flex:0 0 auto;font-size:1.5rem;font-weight:500;line-height:2.25rem;text-align:center;width:2rem}.more-statuses-button{height:3.5em;line-height:3.5em}.interface-language-switcher .language-select{margin-right:1em}.registration-form{display:flex;flex-direction:column;margin:.6em}.registration-form .container{display:flex;flex-direction:row}.registration-form .container>*{min-width:0}.registration-form .terms-of-service{flex:0 1 50%;margin:.8em}.registration-form .text-fields{display:flex;flex:1 0;flex-direction:column;margin-top:.6em}.registration-form textarea{min-height:100px;resize:vertical}.registration-form .form-group{display:flex;flex-direction:column;line-height:2;margin-bottom:1em;padding:.3em 0}.registration-form .form-group--error{animation-duration:.6s;animation-name:shakeError;animation-timing-function:ease-in-out}.registration-form .form-group--error .form--label{color:#f04124;color:var(--cRed,#f04124)}.registration-form .form-error{margin-top:-.7em;text-align:left}.registration-form .form-error span{font-size:.85em}.registration-form .form-error ul{list-style:none;margin-top:0;padding:0 0 0 5px}.registration-form .form-error ul li:before{content:"• "}.registration-form form textarea{line-height:16px;resize:vertical}.registration-form .captcha{margin-bottom:.4em;max-width:350px}.registration-form .btn{height:2em;margin-top:.6em}.registration-form .error{text-align:center}@media (max-width:800px){.registration-form .container{flex-direction:column-reverse}}.password-reset-form{align-items:center;display:flex;flex-direction:column;margin:.6em}.password-reset-form .container{display:flex;flex:1 0;flex-direction:column;margin-top:.6em;max-width:18rem}.password-reset-form .container>*{min-width:0}.password-reset-form .form-group{display:flex;flex-direction:column;line-height:1.85em;margin-bottom:1em;padding:.3em 0}.password-reset-form .error{animation-duration:.4s;animation-name:shakeError;animation-timing-function:ease-in-out;text-align:center}.password-reset-form .alert{margin:.3em 0 1em;padding:.5em}.password-reset-form .password-reset-required{background-color:var(--alertError,rgba(211,16,20,.5));padding:10px 0}.password-reset-form .notice-dismissible{padding-right:2rem}.password-reset-form .dismiss{cursor:pointer}.follow-request-card-content-container{display:flex;flex-flow:row wrap}.follow-request-card-content-container button{flex:1 1;margin-right:.5em;margin-top:.5em;max-width:12em;min-width:8em}.follow-request-card-content-container button:last-child{margin-right:0}.tos-content{margin:1em}.staff-group{padding-left:1em;padding-top:1em}.staff-group .basic-user-card{padding-left:0}.mrf-section{margin:1em}.mrf-section table{padding-bottom:20px;padding-left:10px;text-align:left;width:100%}.mrf-section table td,.mrf-section table th{max-width:360px;overflow:hidden;vertical-align:text-top;width:180px}.mrf-section table td+td,.mrf-section table th+th{width:auto}.list-card{display:flex}.list-name{flex-grow:1}.button-list-edit,.list-name{color:#d8a070;color:var(--link,#d8a070);margin:0;padding:1em}.button-list-edit:hover,.list-name:hover{--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:#d8a070;color:var(--selectedMenuText,#d8a070)}.Lists .new-list-button{padding:0 .5em}.ListsUserSearch .input-wrap{display:flex;margin:.7em .5em}.ListsUserSearch .input-wrap input{width:100%}.ListsUserSearch .search-icon{margin-right:.3em}.panel-loading{align-items:center;color:#b9b9ba;color:var(--text,#b9b9ba);display:flex;font-size:2em;height:100%;justify-content:center}.panel-loading .loading-text svg{color:#b9b9ba;color:var(--text,#b9b9ba);line-height:0;vertical-align:middle}.ListEdit{--panel-body-padding:0.5em;display:flex;flex-direction:column;height:calc(100vh - var(--navbar-height));overflow:hidden}.ListEdit .list-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.ListEdit .panel-body{display:flex;flex:1;flex-direction:column;overflow:hidden}.ListEdit .list-member-management{flex:1 0 auto}.ListEdit .search-icon{margin-right:.3em}.ListEdit .users-list{overflow-y:auto;padding-bottom:.7rem}.ListEdit .members-list,.ListEdit .search-list{flex-direction:column;min-height:0;overflow:hidden}.ListEdit .go-back-button{align-self:start;height:100%;line-height:1;text-align:center;width:var(--__panel-heading-height-inner)}.ListEdit .btn{margin:0 .5em}.ListEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.ListEdit .panel-footer .footer-button{min-width:9em}.announcement-editor{align-items:stretch;display:flex;flex-direction:column}.announcement-editor .announcement-metadata{margin-top:.5em}.announcement-editor .post-textarea{box-sizing:content-box;height:10em;overflow:none;resize:vertical}.announcement{border-bottom:1px solid var(--border,#222);border-radius:0;padding:var(--status-margin,.75em)}.announcement .body,.announcement .heading{margin-bottom:var(--status-margin,.75em)}.announcement .footer,.announcement .footer .times{display:flex;flex-direction:column}.announcement .footer .actions{display:flex;flex-direction:row;justify-content:space-evenly}.announcement .footer .actions .btn{flex:1;margin:1em;max-width:10em}.announcements-page .post-form{padding:var(--status-margin,.75em)}.announcements-page .post-form .body,.announcements-page .post-form .heading{margin-bottom:var(--status-margin,.75em)}.announcements-page .post-form .post-button{min-width:10em} -/*# sourceMappingURL=app.c18a2c80794a1b699a61.css.map*/ -\ No newline at end of file diff --git a/priv/static/static/css/app.c18a2c80794a1b699a61.css.map b/priv/static/static/css/app.c18a2c80794a1b699a61.css.map @@ -1 +0,0 @@ -{"version":3,"file":"static/css/app.c18a2c80794a1b699a61.css","mappings":"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","sources":["webpack://pleroma_fe/./src/components/modal/modal.vue","webpack://pleroma_fe/./node_modules/vue-virtual-scroller/dist/vue-virtual-scroller.css","webpack://pleroma_fe/./src/components/login_form/login_form.vue","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue","webpack://pleroma_fe/./src/_variables.scss","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue","webpack://pleroma_fe/./src/components/popover/popover.vue","webpack://pleroma_fe/./src/components/still-image/still-image.vue","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.scss","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue","webpack://pleroma_fe/./src/components/select/select.vue","webpack://pleroma_fe/./src/components/poll/poll_form.vue","webpack://pleroma_fe/./src/components/flash/flash.vue","webpack://pleroma_fe/./src/components/attachment/attachment.scss","webpack://pleroma_fe/./src/components/gallery/gallery.vue","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.scss","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.scss","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.scss","webpack://pleroma_fe/./src/components/rich_content/rich_content.scss","webpack://pleroma_fe/./src/components/poll/poll.vue","webpack://pleroma_fe/./src/components/status_body/status_body.scss","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue","webpack://pleroma_fe/./src/components/status_content/status_content.vue","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue","webpack://pleroma_fe/./src/components/user_note/user_note.vue","webpack://pleroma_fe/./src/components/user_card/user_card.scss","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue","webpack://pleroma_fe/./src/components/react_button/react_button.vue","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue","webpack://pleroma_fe/./src/components/status/status.scss","webpack://pleroma_fe/./src/components/report/report.scss","webpack://pleroma_fe/./src/components/notification/notification.scss","webpack://pleroma_fe/./src/components/notifications/notifications.scss","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.scss","webpack://pleroma_fe/./src/components/list/list.vue","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue","webpack://pleroma_fe/./src/App.scss","webpack://pleroma_fe/./src/panel.scss","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue","webpack://pleroma_fe/./src/components/conversation/conversation.vue","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue","webpack://pleroma_fe/./src/components/timeline/timeline.scss","webpack://pleroma_fe/./src/components/tab_switcher/tab_switcher.scss","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.scss","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue","webpack://pleroma_fe/./src/components/chat_new/chat_new.scss","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue","webpack://pleroma_fe/./src/components/chat_message/chat_message.scss","webpack://pleroma_fe/./src/components/chat/chat.scss","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue","webpack://pleroma_fe/./src/hocs/with_load_more/with_load_more.scss","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue","webpack://pleroma_fe/./src/components/search/search.vue","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue","webpack://pleroma_fe/./src/components/registration/registration.vue","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.scss","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue","webpack://pleroma_fe/./src/components/lists/lists.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue","webpack://pleroma_fe/./src/components/announcement/announcement.vue","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue"],"sourcesContent":["\n.modal-view {\n z-index: var(--ZI_modals);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n pointer-events: none;\n animation-duration: 0.2s;\n animation-name: modal-background-fadein;\n opacity: 0;\n\n > * {\n pointer-events: initial;\n }\n\n &.modal-background {\n pointer-events: initial;\n background-color: rgb(0 0 0 / 50%);\n }\n\n &.open {\n opacity: 1;\n }\n}\n\n@keyframes modal-background-fadein {\n from {\n background-color: rgb(0 0 0 / 0%);\n }\n\n to {\n background-color: rgb(0 0 0 / 50%);\n }\n}\n",".vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}","\n@import \"../../variables\";\n\n.login-form {\n display: flex;\n flex-direction: column;\n padding: 0.6em;\n\n .btn {\n min-height: 2em;\n width: 10em;\n }\n\n .register {\n flex: 1 1;\n }\n\n .login-bottom {\n margin-top: 1em;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0.5em 0.6em;\n line-height: 24px;\n }\n\n .form-bottom {\n display: flex;\n padding: 0.5em;\n height: 32px;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n}\n","\n@import \"../../variables\";\n\n.media-upload {\n .hidden-input-file {\n display: none;\n }\n}\n\nlabel.media-upload {\n cursor: pointer; // We use <label> for interactivity... i wonder if it's fine\n}\n","\n@import \"../../variables\";\n\n.ScopeSelector {\n .scope {\n display: inline-block;\n cursor: pointer;\n min-width: 1.3em;\n min-height: 1.3em;\n text-align: center;\n\n &.selected svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n","$main-color: #f58d2c;\n$main-background: white;\n$darkened-background: whitesmoke;\n\n$fallback--bg: #121a24;\n$fallback--fg: #182230;\n$fallback--faint: rgb(185 185 186 / 50%);\n$fallback--text: #b9b9ba;\n$fallback--link: #d8a070;\n$fallback--icon: #666;\n$fallback--lightBg: rgb(21 30 42);\n$fallback--lightText: #b9b9ba;\n$fallback--border: #222;\n$fallback--cRed: #f00;\n$fallback--cBlue: #0095ff;\n$fallback--cGreen: #0fa00f;\n$fallback--cOrange: orange;\n\n$fallback--alertError: rgb(211 16 20 / 50%);\n$fallback--alertWarning: rgb(111 111 20 / 50%);\n\n$fallback--panelRadius: 10px;\n$fallback--checkboxRadius: 2px;\n$fallback--btnRadius: 4px;\n$fallback--inputRadius: 4px;\n$fallback--tooltipRadius: 5px;\n$fallback--avatarRadius: 4px;\n$fallback--avatarAltRadius: 10px;\n$fallback--attachmentRadius: 10px;\n$fallback--chatMessageRadius: 10px;\n\n$fallback--buttonShadow: 0 0 2px 0 rgb(0 0 0 / 100%),\n 0 1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 -1px 0 0 rgb(0 0 0 / 20%) inset;\n\n$status-margin: 0.75em;\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.checkbox {\n position: relative;\n display: inline-block;\n min-height: 1.2em;\n\n &-indicator {\n position: relative;\n padding-left: 1.2em;\n }\n\n &-indicator::before {\n position: absolute;\n right: 0;\n top: 0;\n display: block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1em;\n font-size: 1.1em;\n color: transparent;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n &.disabled {\n .checkbox-indicator::before,\n .label {\n opacity: 0.5;\n }\n\n .label {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n input[type=\"checkbox\"] {\n &:checked + .checkbox-indicator::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:indeterminate + .checkbox-indicator::before {\n content: \"–\";\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n }\n\n &.indeterminate-fix {\n input[type=\"checkbox\"] + .checkbox-indicator::before {\n content: \"–\";\n }\n }\n\n & > span {\n margin-left: 0.5em;\n }\n}\n","\n@import \"../../variables\";\n\n.popover-trigger-button {\n display: inline-block;\n}\n\n.popover {\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n position: fixed;\n min-width: 0;\n max-width: calc(100vw - 20px);\n box-shadow: 2px 2px 3px rgb(0 0 0 / 50%);\n box-shadow: var(--popupShadow);\n}\n\n.popover-default {\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 3;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--text;\n color: var(--popoverText, $fallback--text);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --postLink: var(--popoverPostLink, $fallback--link);\n --postFaintLink: var(--popoverPostFaintLink, $fallback--link);\n --icon: var(--popoverIcon, $fallback--icon);\n}\n\n.dropdown-menu {\n display: block;\n padding: 0.5rem 0;\n font-size: 1em;\n text-align: left;\n list-style: none;\n max-width: 100vw;\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n white-space: nowrap;\n\n .dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n .dropdown-item {\n line-height: 21px;\n overflow: hidden;\n display: block;\n padding: 0.5em 0.75em;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: none;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n\n --btnText: var(--popoverText, $fallback--text);\n\n &-icon {\n svg {\n width: 22px;\n margin-right: 0.75rem;\n color: var(--menuPopoverIcon, $fallback--icon);\n }\n }\n\n &.-has-submenu {\n .chevron-icon {\n margin-right: 0.25rem;\n margin-left: 2rem;\n }\n }\n\n &:active,\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n box-shadow: none;\n\n --btnText: var(--selectedMenuPopoverText, $fallback--link);\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n svg {\n color: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n\n .menu-checkbox {\n display: inline-block;\n vertical-align: middle;\n min-width: 22px;\n max-width: 22px;\n min-height: 22px;\n max-height: 22px;\n line-height: 22px;\n text-align: center;\n border-radius: 0;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.75em;\n\n &.menu-checkbox-checked::after {\n font-size: 1.25em;\n content: \"✓\";\n }\n\n &.-radio {\n border-radius: 9999px;\n\n &.menu-checkbox-checked::after {\n font-size: 2em;\n content: \"•\";\n }\n }\n }\n }\n\n .button-default.dropdown-item {\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuPopoverText, $fallback--link);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.still-image {\n position: relative;\n line-height: 0;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n\n canvas {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n visibility: var(--_still-image-canvas-visibility, visible);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n &.animated {\n &::before {\n zoom: var(--_still_image-label-scale, 1);\n content: \"gif\";\n position: absolute;\n line-height: 1;\n font-size: 0.7em;\n top: 0.5em;\n left: 0.5em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n display: block;\n padding: 2px 4px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n z-index: 2;\n visibility: var(--_still-image-label-visibility, visible);\n }\n\n &:hover canvas {\n display: none;\n }\n\n &:hover::before {\n visibility: var(--_still-image-label-visibility, hidden);\n }\n\n img {\n visibility: var(--_still-image-img-visibility, hidden);\n }\n\n &:hover img {\n visibility: visible;\n }\n }\n}\n","@import \"../../variables\";\n\n$emoji-picker-header-height: 36px;\n$emoji-picker-header-picture-width: 32px;\n$emoji-picker-header-picture-height: 32px;\n$emoji-picker-emoji-size: 32px;\n\n.emoji-picker {\n width: 25em;\n max-width: calc(100vw - 20px); // popover gives 10px margin from window edge\n display: flex;\n flex-direction: column;\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n &-header-image {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: $emoji-picker-header-picture-width;\n max-width: $emoji-picker-header-picture-width;\n height: $emoji-picker-header-picture-height;\n max-height: $emoji-picker-header-picture-height;\n\n .still-image {\n max-width: 100%;\n max-height: 100%;\n height: 100%;\n width: 100%;\n object-fit: contain;\n }\n }\n\n .keep-open,\n .too-many-emoji {\n padding: 7px;\n line-height: normal;\n }\n\n .too-many-emoji {\n display: flex;\n flex-direction: column;\n }\n\n .keep-open-label {\n padding: 0 7px;\n display: flex;\n }\n\n .heading {\n display: flex;\n padding: 10px 7px 5px;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n .emoji-tabs {\n flex-grow: 1;\n display: flex;\n flex-flow: row nowrap;\n overflow-x: auto;\n }\n\n .additional-tabs {\n display: flex;\n border-left: 1px solid;\n border-left-color: $fallback--icon;\n border-left-color: var(--icon, $fallback--icon);\n padding-left: 7px;\n flex: 0 0 auto;\n }\n\n .additional-tabs,\n .emoji-tabs {\n flex-basis: auto;\n display: flex;\n align-content: center;\n\n &-item {\n padding: 0 7px;\n cursor: pointer;\n font-size: 1.85em;\n width: $emoji-picker-header-picture-width;\n max-width: $emoji-picker-header-picture-width;\n height: $emoji-picker-header-picture-height;\n max-height: $emoji-picker-header-picture-height;\n display: flex;\n align-items: center;\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &.active {\n border-bottom: 4px solid;\n\n svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n }\n }\n\n .sticker-picker {\n flex: 1 1 auto;\n }\n\n .stickers,\n .emoji {\n &-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n\n &.hidden {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n }\n }\n }\n\n .emoji {\n &-search {\n padding: 5px;\n flex: 0 0 auto;\n\n input {\n width: 100%;\n }\n }\n\n &-groups {\n height: 100%;\n min-height: 200px;\n flex: 1 1 1px;\n position: relative;\n overflow: auto;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n // Autoprefixed seem to ignore this one, and also syntax is different\n mask-composite: xor;\n mask-composite: exclude;\n\n &.scrolled {\n &-top {\n mask-size: 100% 20px, 100% 0, auto;\n }\n\n &-bottom {\n mask-size: 100% 0, 100% 20px, auto;\n }\n }\n }\n\n &-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n padding-left: 5px;\n justify-content: left;\n\n &-title {\n font-size: 0.85em;\n width: 100%;\n margin: 0;\n\n &.disabled {\n display: none;\n }\n }\n }\n\n &-item {\n width: $emoji-picker-emoji-size;\n height: $emoji-picker-emoji-size;\n box-sizing: border-box;\n display: flex;\n line-height: $emoji-picker-emoji-size;\n align-items: center;\n justify-content: center;\n margin: 4px;\n cursor: pointer;\n\n .emoji-picker-emoji.-custom {\n object-fit: contain;\n max-width: 100%;\n max-height: 100%;\n }\n\n .emoji-picker-emoji.-unicode {\n font-size: 24px;\n overflow: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.emoji-input {\n display: flex;\n flex-direction: column;\n position: relative;\n\n .emoji-picker-icon {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0.2em 0.25em;\n font-size: 1.3em;\n cursor: pointer;\n line-height: 24px;\n\n &:hover i {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .emoji-picker-panel {\n position: absolute;\n z-index: 20;\n margin-top: 2px;\n\n &.hide {\n display: none;\n }\n }\n\n input,\n textarea {\n flex: 1 0 auto;\n }\n\n &.with-picker input {\n padding-right: 30px;\n }\n\n .hidden-overlay {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: hidden;\n\n /* DEBUG STUFF */\n color: red;\n\n /* set opacity to non-zero to see the overlay */\n\n .caret {\n width: 0;\n margin-right: calc(-1ch - 1px);\n border: 1px solid red;\n }\n }\n}\n\n.autocomplete {\n &-panel {\n position: absolute;\n }\n\n &-item {\n display: flex;\n cursor: pointer;\n padding: 0.2em 0.4em;\n border-bottom: 1px solid rgb(0 0 0 / 40%);\n height: 32px;\n\n .image {\n width: 32px;\n height: 32px;\n line-height: 32px;\n text-align: center;\n font-size: 32px;\n margin-right: 4px;\n\n img {\n width: 32px;\n height: 32px;\n object-fit: contain;\n }\n }\n\n .label {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 0.1em 0 0.2em;\n\n .displayText {\n line-height: 1.5;\n }\n\n .detailText {\n font-size: 9px;\n line-height: 9px;\n }\n }\n\n &.highlighted {\n background-color: $fallback--fg;\n background-color: var(--selectedMenuPopover, $fallback--fg);\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n","\n@import \"../../variables\";\n\n/* TODO fix order of styles */\nlabel.Select {\n padding: 0;\n\n select {\n appearance: none;\n background: transparent;\n border: none;\n color: $fallback--text;\n color: var(--inputText, --text, $fallback--text);\n margin: 0;\n padding: 0 2em 0 0.2em;\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n width: 100%;\n z-index: 1;\n height: 2em;\n line-height: 16px;\n }\n\n .select-down-icon {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 5px;\n height: 100%;\n width: 0.875em;\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n line-height: 2;\n z-index: 0;\n pointer-events: none;\n }\n}\n","\n@import \"../../variables\";\n\n.poll-form {\n display: flex;\n flex-direction: column;\n padding: 0 0.5em 0.5em;\n\n .add-option {\n align-self: flex-start;\n padding-top: 0.25em;\n padding-left: 0.1em;\n }\n\n .poll-option {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin-bottom: 0.25em;\n }\n\n .input-container {\n width: 100%;\n\n input {\n // Hack: dodge the floating X icon\n padding-right: 2.5em;\n width: 100%;\n }\n }\n\n .delete-option {\n // Hack: Move the icon over the input box\n width: 1.5em;\n margin-left: -1.5em;\n z-index: 1;\n }\n\n .poll-type-expiry {\n margin-top: 0.5em;\n display: flex;\n width: 100%;\n }\n\n .poll-type {\n margin-right: 0.75em;\n flex: 1 1 60%;\n\n .poll-type-select {\n padding-right: 0.75em;\n }\n }\n\n .poll-expiry {\n display: flex;\n\n .expiry-amount {\n width: 3em;\n text-align: right;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Flash {\n display: inline-block;\n width: 100%;\n height: 100%;\n position: relative;\n\n .player {\n height: 100%;\n width: 100%;\n }\n\n .placeholder {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--bg);\n color: var(--link);\n }\n\n .hider {\n top: 0;\n }\n\n .label {\n text-align: center;\n flex: 1 1 0;\n line-height: 1.2;\n white-space: normal;\n word-wrap: normal;\n }\n\n .hidden {\n display: none;\n visibility: \"hidden\";\n }\n}\n","@import \"../../variables\";\n\n.Attachment {\n display: inline-flex;\n flex-direction: column;\n position: relative;\n align-self: flex-start;\n line-height: 0;\n height: 100%;\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n\n .attachment-wrapper {\n flex: 1 1 auto;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n\n .description-container {\n flex: 0 1 0;\n display: flex;\n padding-top: 0.5em;\n z-index: 1;\n\n p {\n flex: 1;\n text-align: center;\n line-height: 1.5;\n padding: 0.5em;\n margin: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n &.-static {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding-top: 0;\n background: var(--popover);\n box-shadow: var(--popupShadow);\n }\n }\n\n .description-field {\n flex: 1;\n min-width: 0;\n }\n\n & .placeholder-container,\n & .image-container,\n & .audio-container,\n & .video-container,\n & .flash-container,\n & .oembed-container {\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .image-container {\n .image {\n width: 100%;\n height: 100%;\n }\n }\n\n & .flash-container,\n & .video-container {\n & .flash,\n & video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n align-self: center;\n }\n }\n\n .audio-container {\n display: flex;\n align-items: flex-end;\n\n audio {\n width: 100%;\n height: 100%;\n }\n }\n\n .placeholder-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 0.5em;\n }\n\n .play-icon {\n position: absolute;\n font-size: 64px;\n top: calc(50% - 32px);\n left: calc(50% - 32px);\n color: rgb(255 255 255 / 75%);\n text-shadow: 0 0 2px rgb(0 0 0 / 40%);\n\n &::before {\n margin: 0;\n }\n }\n\n .attachment-buttons {\n display: flex;\n position: absolute;\n right: 0;\n top: 0;\n margin-top: 0.5em;\n margin-right: 0.5em;\n z-index: 1;\n\n .attachment-button {\n padding: 0;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n text-align: center;\n width: 2em;\n height: 2em;\n margin-left: 0.5em;\n font-size: 1.25em;\n // TODO: theming? hard to theme with unknown background image color\n background: rgb(230 230 230 / 70%);\n\n .svg-inline--fa {\n color: rgb(0 0 0 / 60%);\n }\n\n &:hover .svg-inline--fa {\n color: rgb(0 0 0 / 90%);\n }\n }\n }\n\n &.-contain-fit {\n img,\n canvas {\n object-fit: contain;\n }\n }\n\n &.-cover-fit {\n img,\n canvas {\n object-fit: cover;\n }\n }\n\n .oembed-container {\n line-height: 1.2em;\n flex: 1 0 100%;\n width: 100%;\n margin-right: 15px;\n display: flex;\n\n img {\n width: 100%;\n }\n\n .image {\n flex: 1;\n\n img {\n border: 0;\n border-radius: 5px;\n height: 100%;\n object-fit: cover;\n }\n }\n\n .text {\n flex: 2;\n margin: 8px;\n word-break: break-all;\n\n h1 {\n font-size: 1rem;\n margin: 0;\n }\n }\n }\n\n &.-size-small {\n .play-icon {\n zoom: 0.5;\n opacity: 0.7;\n }\n\n .attachment-buttons {\n zoom: 0.7;\n opacity: 0.5;\n }\n }\n\n &.-editable {\n padding: 0.5em;\n\n & .description-container,\n & .attachment-buttons {\n margin: 0;\n }\n }\n\n &.-placeholder {\n display: inline-block;\n color: $fallback--link;\n color: var(--postLink, $fallback--link);\n overflow: hidden;\n white-space: nowrap;\n height: auto;\n line-height: 1.5;\n\n &:not(.-editable) {\n border: none;\n }\n\n &.-editable {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n\n & .description-container,\n & .attachment-buttons {\n margin: 0;\n padding: 0;\n position: relative;\n }\n\n .description-container {\n flex: 1;\n padding-left: 0.5em;\n }\n\n .attachment-buttons {\n order: 99;\n align-self: center;\n }\n }\n\n a {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n svg {\n color: inherit;\n }\n }\n\n &.-loading {\n cursor: progress;\n }\n\n &.-compact {\n .placeholder-container {\n padding-bottom: 0.5em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Gallery {\n .gallery-rows {\n display: flex;\n flex-direction: column;\n }\n\n .gallery-row {\n position: relative;\n height: 0;\n width: 100%;\n flex-grow: 1;\n\n .gallery-row-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-flow: row wrap;\n align-content: stretch;\n\n .gallery-item {\n margin: 0 0.5em 0 0;\n flex-grow: 1;\n height: 100%;\n box-sizing: border-box;\n // to make failed images a bit more noticeable on chromium\n min-width: 2em;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &.-grid {\n width: 100%;\n height: auto;\n position: relative;\n display: grid;\n grid-gap: 0.5em;\n grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));\n\n .gallery-item {\n margin: 0;\n height: 200px;\n }\n }\n }\n\n &.-grid,\n &.-minimal {\n height: auto;\n\n .gallery-row-inner {\n position: relative;\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.5em;\n }\n }\n\n &.-long {\n .gallery-rows {\n max-height: 25em;\n overflow: hidden;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n\n .many-attachments-text {\n text-align: center;\n line-height: 2;\n }\n\n .many-attachments-buttons {\n display: flex;\n }\n\n .many-attachments-button {\n display: flex;\n flex: 1;\n justify-content: center;\n line-height: 2;\n\n button {\n padding: 0 2em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.Avatar {\n --_avatarShadowBox: var(--avatarStatusShadow);\n --_avatarShadowFilter: var(--avatarStatusShadowFilter);\n --_avatarShadowInset: var(--avatarStatusShadowInset);\n --_still-image-label-visibility: hidden;\n\n display: inline-block;\n position: relative;\n width: 48px;\n height: 48px;\n\n &.-compact {\n width: 32px;\n height: 32px;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .avatar {\n width: 100%;\n height: 100%;\n box-shadow: var(--_avatarShadowBox);\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n\n &.-better-shadow {\n box-shadow: var(--_avatarShadowInset);\n filter: var(--_avatarShadowFilter);\n }\n\n &.-animated::before {\n display: none;\n }\n\n &.-compact {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n &.-placeholder {\n background-color: $fallback--fg;\n background-color: var(--fg, $fallback--fg);\n }\n }\n\n img {\n width: 100%;\n height: 100%;\n }\n\n .bot-indicator {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: -0.2em;\n padding: 0.2em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n border-radius: var(--tooltipRadius);\n }\n}\n","@import \"../../variables\";\n\n.MentionLink {\n position: relative;\n white-space: normal;\n display: inline;\n color: var(--link);\n word-break: normal;\n\n & .new,\n & .original {\n display: inline;\n border-radius: 2px;\n }\n\n .mention-avatar {\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n user-select: none;\n margin-right: 0.2em;\n }\n\n .full {\n position: absolute;\n display: inline-block;\n pointer-events: none;\n opacity: 0;\n top: 100%;\n left: 0;\n height: 100%;\n word-wrap: normal;\n white-space: nowrap;\n transition: opacity 0.2s ease;\n z-index: 1;\n margin-top: 0.25em;\n padding: 0.5em;\n user-select: all;\n }\n\n & .short.-with-tooltip,\n & .you {\n user-select: none;\n }\n\n & .short,\n & .full {\n white-space: nowrap;\n }\n\n .shortName {\n white-space: normal;\n }\n\n .new {\n &.-you {\n .shortName {\n font-weight: 600;\n }\n }\n\n &.-has-selection {\n color: var(--alertNeutralText, $fallback--text);\n background-color: var(--alertNeutral, $fallback--fg);\n }\n\n .at {\n color: var(--link);\n opacity: 0.8;\n display: inline-block;\n line-height: 1;\n padding: 0 0.1em;\n vertical-align: -25%;\n margin: 0;\n }\n\n &.-striped {\n & .shortName {\n background-image:\n repeating-linear-gradient(\n 135deg,\n var(--____highlight-tintColor),\n var(--____highlight-tintColor) 5px,\n var(--____highlight-tintColor2) 5px,\n var(--____highlight-tintColor2) 10px\n );\n }\n }\n\n &.-solid {\n .shortName {\n background-image: linear-gradient(var(--____highlight-tintColor2), var(--____highlight-tintColor2));\n }\n }\n\n &.-side {\n .shortName {\n box-shadow: 0 -5px 3px -4px inset var(--____highlight-solidColor);\n }\n }\n }\n\n .serverName.-faded {\n color: var(--faintLink, $fallback--link);\n }\n}\n\n.mention-link-popover {\n max-width: 70ch;\n max-height: 20rem;\n overflow: hidden;\n}\n",".MentionsLine {\n word-break: break-all;\n\n .mention-link:not(:first-child)::before {\n content: \" \";\n }\n\n .showMoreLess {\n margin-left: 0.5em;\n white-space: normal;\n color: var(--link);\n }\n}\n",".HashtagLink {\n position: relative;\n white-space: normal;\n display: inline-block;\n color: var(--link);\n}\n","@import \"../../variables\";\n\n.RichContent {\n blockquote {\n margin: 0.2em 0 0.2em 0.2em;\n font-style: italic;\n border-left: 0.2em solid var(--faint, $fallback--faint);\n padding-left: 1em;\n }\n\n pre {\n overflow: auto;\n }\n\n code,\n samp,\n kbd,\n var,\n pre {\n font-family: var(--postCodeFont, monospace);\n }\n\n p {\n margin: 0 0 1em;\n }\n\n p:last-child {\n margin: 0;\n }\n\n h1 {\n font-size: 1.1em;\n line-height: 1.2em;\n margin: 1.4em 0;\n }\n\n h2 {\n font-size: 1.1em;\n margin: 1em 0;\n }\n\n h3 {\n font-size: 1em;\n margin: 1.2em 0;\n }\n\n h4 {\n margin: 1.1em 0;\n }\n\n .img {\n display: inline-block;\n }\n\n .emoji {\n display: inline-block;\n width: var(--emoji-size, 32px);\n height: var(--emoji-size, 32px);\n }\n\n .img,\n video {\n max-width: 100%;\n max-height: 400px;\n vertical-align: middle;\n object-fit: contain;\n }\n}\n","\n@import \"../../variables\";\n\n.poll {\n .votes {\n display: flex;\n flex-direction: column;\n margin: 0 0 0.5em;\n }\n\n .poll-option {\n margin: 0.75em 0.5em;\n }\n\n .option-result {\n height: 100%;\n display: flex;\n flex-direction: row;\n position: relative;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n\n .option-result-label {\n display: flex;\n align-items: center;\n padding: 0.1em 0.25em;\n z-index: 1;\n word-break: break-word;\n }\n\n .result-percentage {\n width: 3.5em;\n flex-shrink: 0;\n }\n\n .result-fill {\n height: 100%;\n position: absolute;\n color: $fallback--text;\n color: var(--pollText, $fallback--text);\n background-color: $fallback--lightBg;\n background-color: var(--poll, $fallback--lightBg);\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n top: 0;\n left: 0;\n transition: width 0.5s;\n }\n\n .option-vote {\n display: flex;\n align-items: center;\n }\n\n input {\n width: 3.5em;\n }\n\n .footer {\n display: flex;\n align-items: center;\n }\n\n &.loading * {\n cursor: progress;\n }\n\n .poll-vote-button {\n padding: 0 0.5em;\n margin-right: 0.5em;\n }\n\n .poll-checkbox {\n display: none;\n }\n}\n","@import \"../../variables\";\n\n.StatusBody {\n display: flex;\n flex-direction: column;\n\n .emoji {\n --_still_image-label-scale: 0.5;\n }\n\n .attachments {\n margin-top: 0.5em;\n }\n\n & .text,\n & .summary {\n font-family: var(--postFont, sans-serif);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-word;\n line-height: var(--post-line-height);\n }\n\n .summary {\n display: block;\n font-style: italic;\n padding-bottom: 0.5em;\n }\n\n .text {\n &.-single-line {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n height: 1.4em;\n }\n }\n\n .summary-wrapper {\n margin-bottom: 0.5em;\n border-style: solid;\n border-width: 0 0 1px;\n border-color: var(--border, $fallback--border);\n flex-grow: 0;\n\n &.-tall {\n position: relative;\n\n .summary {\n max-height: 2em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .text-wrapper {\n display: flex;\n flex-flow: column nowrap;\n\n &.-tall-status {\n position: relative;\n height: 220px;\n overflow-x: hidden;\n overflow-y: hidden;\n z-index: 1;\n\n .media-body {\n min-height: 0;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n }\n\n & .tall-status-hider,\n & .tall-subject-hider,\n & .status-unhider,\n & .cw-status-hider {\n display: inline-block;\n word-break: break-all;\n width: 100%;\n text-align: center;\n }\n\n .tall-status-hider {\n position: absolute;\n height: 70px;\n margin-top: 150px;\n line-height: 110px;\n z-index: 2;\n }\n\n .tall-subject-hider {\n // position: absolute;\n padding-bottom: 0.5em;\n }\n\n & .status-unhider,\n & .cw-status-hider {\n word-break: break-all;\n\n svg {\n color: inherit;\n }\n }\n\n .greentext {\n color: $fallback--cGreen;\n color: var(--postGreentext, $fallback--cGreen);\n }\n\n .cyantext {\n color: var(--postCyantext, $fallback--cBlue);\n }\n\n &.-compact {\n align-items: top;\n flex-direction: row;\n\n --emoji-size: 16px;\n\n & .body,\n & .attachments {\n max-height: 3.25em;\n }\n\n .body {\n overflow: hidden;\n white-space: normal;\n min-width: 5em;\n flex: 5 1 auto;\n mask-size: auto 3.5em, auto auto;\n mask-position: 0 0, 0 0;\n mask-repeat: repeat-x, repeat;\n mask-image: linear-gradient(to bottom, white 2em, transparent 3em);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n\n .attachments {\n margin-top: 0;\n flex: 1 1 0;\n min-width: 5em;\n height: 100%;\n margin-left: 0.5em;\n }\n\n .summary-wrapper {\n .summary::after {\n content: \": \";\n }\n\n line-height: inherit;\n margin: 0;\n border: none;\n display: inline-block;\n }\n\n .text-wrapper {\n display: inline-block;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.link-preview-card {\n display: flex;\n flex-direction: row;\n cursor: pointer;\n overflow: hidden;\n margin-top: 0.5em;\n\n .card-image {\n flex-shrink: 0;\n width: 120px;\n max-width: 25%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n }\n }\n\n .card-content {\n max-height: 100%;\n margin: 0.5em;\n display: flex;\n flex-direction: column;\n }\n\n .card-host {\n font-size: 0.85em;\n }\n\n .card-description {\n margin: 0.5em 0 0;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n line-height: 1.2em;\n // cap description at 3 lines, the 1px is to clean up some stray pixels\n // TODO: fancier fade-out at the bottom to show off that it's too long?\n max-height: calc(1.2em * 3 - 1px);\n }\n\n .nsfw-alert {\n margin: 2em 0;\n }\n\n color: $fallback--text;\n color: var(--text, $fallback--text);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n","\n.StatusContent {\n flex: 1;\n min-width: 0;\n}\n","\n@import \"../../variables\";\n\n.post-status-form {\n position: relative;\n\n .attachments {\n margin-bottom: 0.5em;\n }\n\n .form-bottom {\n display: flex;\n justify-content: space-between;\n padding: 0.5em;\n height: 2.5em;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .form-bottom-left {\n display: flex;\n flex: 1;\n padding-right: 7px;\n margin-right: 7px;\n max-width: 10em;\n }\n\n .preview-heading {\n display: flex;\n padding-left: 0.5em;\n }\n\n .preview-toggle {\n flex: 1;\n cursor: pointer;\n user-select: none;\n\n &:hover {\n text-decoration: underline;\n }\n\n svg,\n i {\n margin-left: 0.2em;\n font-size: 0.8em;\n transform: rotate(90deg);\n }\n }\n\n .preview-container {\n margin-bottom: 1em;\n }\n\n .preview-error {\n font-style: italic;\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n\n .preview-status {\n border: 1px solid $fallback--border;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n padding: 0.5em;\n margin: 0;\n }\n\n .reply-or-quote-selector {\n margin-bottom: 0.5em;\n }\n\n .text-format {\n .only-format {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n .visibility-tray {\n display: flex;\n justify-content: space-between;\n padding-top: 5px;\n align-items: baseline;\n }\n\n .visibility-notice.edit-warning {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n // Order is not necessary but a good indicator\n .media-upload-icon {\n order: 1;\n justify-content: left;\n }\n\n .emoji-icon {\n order: 2;\n justify-content: center;\n }\n\n .poll-icon {\n order: 3;\n justify-content: right;\n }\n\n .media-upload-icon,\n .poll-icon,\n .emoji-icon {\n font-size: 1.85em;\n line-height: 1.1;\n flex: 1;\n padding: 0 0.1em;\n display: flex;\n align-items: center;\n\n &.selected,\n &:hover {\n // needs to be specific to override icon default color\n svg,\n i,\n label {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n &.disabled {\n svg,\n i {\n cursor: not-allowed;\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n\n &:hover {\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n }\n }\n }\n }\n\n .error {\n text-align: center;\n }\n\n .media-upload-wrapper {\n margin-right: 0.2em;\n margin-bottom: 0.5em;\n width: 18em;\n\n img,\n video {\n object-fit: contain;\n max-height: 10em;\n }\n\n .video {\n max-height: 10em;\n }\n\n input {\n flex: 1;\n width: 100%;\n }\n }\n\n .status-input-wrapper {\n display: flex;\n position: relative;\n width: 100%;\n flex-direction: column;\n }\n\n .btn[disabled] {\n cursor: not-allowed;\n }\n\n form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n position: relative;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.25em 0.5em 0.5em;\n line-height: 1.85;\n }\n\n .form-post-body {\n // TODO: make a resizable textarea component?\n box-sizing: content-box; // needed for easier computation of dynamic size\n overflow: hidden;\n transition: min-height 200ms 100ms;\n // stock padding + 1 line of text (for counter)\n padding-bottom: calc(var(--_padding) + var(--post-line-height) * 1em);\n // two lines of text\n height: calc(var(--post-line-height) * 1em);\n min-height: calc(var(--post-line-height) * 1em);\n resize: none;\n\n &.scrollable-form {\n overflow-y: auto;\n }\n }\n\n .main-input {\n position: relative;\n }\n\n .character-counter {\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0 0.5em;\n\n &.error {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 0.6; }\n }\n\n @keyframes fade-out {\n from { opacity: 0.6; }\n to { opacity: 0; }\n }\n\n .drop-indicator {\n position: absolute;\n width: 100%;\n height: 100%;\n font-size: 5em;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n border: 2px dashed $fallback--text;\n border: 2px dashed var(--text, $fallback--text);\n }\n}\n","\n.remote-follow {\n max-width: 220px;\n\n .remote-button {\n width: 100%;\n min-height: 2em;\n }\n}\n","\n@import \"../../variables\";\n\n// TODO: unify with other modals.\n.dark-overlay {\n &::before {\n bottom: 0;\n content: \" \";\n display: block;\n cursor: default;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n background: rgb(27 31 35 / 50%);\n z-index: 2000;\n }\n}\n\n.dialog-modal.panel {\n top: 0;\n left: 50%;\n max-height: 80vh;\n max-width: 90vw;\n margin: 15vh auto;\n position: fixed;\n transform: translateX(-50%);\n z-index: 2001;\n cursor: default;\n display: block;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .dialog-modal-heading {\n .title {\n text-align: center;\n }\n }\n\n .dialog-modal-content {\n margin: 0;\n padding: 1rem;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n white-space: normal;\n }\n\n .dialog-modal-footer {\n margin: 0;\n padding: 0.5em;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n display: flex;\n justify-content: flex-end;\n\n button {\n width: auto;\n margin-left: 0.5rem;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.moderation-tools-popover {\n height: 100%;\n\n .trigger {\n /* stylelint-disable-next-line declaration-no-important */\n display: flex !important;\n height: 100%;\n }\n}\n\n.moderation-tools-button {\n svg,\n i {\n font-size: 0.8em;\n }\n}\n","\n@import \"../../variables\";\n\n.AccountActions {\n .ellipsis-button {\n width: 2.5em;\n margin: -0.5em 0;\n padding: 0.5em 0;\n text-align: center;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.user-note {\n display: flex;\n flex-direction: column;\n\n .heading {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75em;\n\n .btn {\n min-width: 95px;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n\n .btn {\n margin-left: 0.5em;\n }\n }\n }\n\n .note-text {\n align-self: stretch;\n }\n\n .note-text.-blank {\n font-style: italic;\n color: var(--faint, $fallback--faint);\n }\n}\n","@import \"../../variables\";\n\n.user-card {\n position: relative;\n z-index: 1;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n .panel-heading {\n padding: 0.5em 0;\n text-align: center;\n box-shadow: none;\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n // create new stacking context\n position: relative;\n }\n\n .panel-body {\n word-wrap: break-word;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n // create new stacking context\n position: relative;\n }\n\n .background-image {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n mask:\n linear-gradient(to top, white, transparent) bottom no-repeat,\n linear-gradient(to top, white, white);\n // Autoprefixer seem to ignore this one, and also syntax is different\n mask-composite: xor;\n mask-composite: exclude;\n background-size: cover;\n mask-size: 100% 60%;\n border-top-left-radius: calc(var(--__roundnessTop, --panelRadius) - 1px);\n border-top-right-radius: calc(var(--__roundnessTop, --panelRadius) - 1px);\n border-bottom-left-radius: calc(var(--__roundnessBottom, --panelRadius) - 1px);\n border-bottom-right-radius: calc(var(--__roundnessBottom, --panelRadius) - 1px);\n background-color: var(--profileBg);\n z-index: -2;\n\n &.hide-bio {\n mask-size: 100% 40px;\n }\n }\n\n &-bio {\n text-align: center;\n display: block;\n line-height: 1.3;\n padding: 1em;\n margin: 0;\n\n a {\n color: $fallback--link;\n color: var(--postLink, $fallback--link);\n }\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n }\n }\n\n &.-rounded-t {\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n\n --__roundnessTop: var(--panelRadius);\n --__roundnessBottom: 0;\n }\n\n &.-rounded {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n\n --__roundnessTop: var(--panelRadius);\n --__roundnessBottom: var(--panelRadius);\n }\n\n &.-popover {\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n --__roundnessTop: var(--tooltipRadius);\n --__roundnessBottom: var(--tooltipRadius);\n }\n\n &.-bordered {\n border-width: 1px;\n border-style: solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n}\n\n.user-info {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n padding: 0 26px;\n\n a {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n\n &:hover {\n color: var(--icon);\n }\n }\n\n .container {\n min-width: 0;\n padding: 16px 0 6px;\n display: flex;\n align-items: flex-start;\n max-height: 56px;\n\n > * {\n min-width: 0;\n }\n\n > a {\n vertical-align: middle;\n display: flex;\n }\n\n .Avatar {\n --_avatarShadowBox: var(--avatarShadow);\n --_avatarShadowFilter: var(--avatarShadowFilter);\n --_avatarShadowInset: var(--avatarShadowInset);\n\n width: 56px;\n height: 56px;\n object-fit: cover;\n }\n }\n\n &-avatar {\n position: relative;\n cursor: pointer;\n\n &.-overlay {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: rgb(0 0 0 / 30%);\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n opacity: 0;\n transition: opacity 0.2s ease;\n\n svg {\n color: #fff;\n }\n }\n\n &:hover &.-overlay {\n opacity: 1;\n }\n }\n\n .external-link-button,\n .edit-profile-button {\n cursor: pointer;\n width: 2.5em;\n text-align: center;\n margin: -0.5em 0;\n padding: 0.5em 0;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n .bottom-line {\n font-weight: light;\n font-size: 1.1em;\n align-items: baseline;\n\n .lock-icon {\n margin-left: 0.5em;\n }\n\n .user-screen-name {\n min-width: 1px;\n flex: 0 1 auto;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .dailyAvg {\n min-width: 1px;\n flex: 0 0 auto;\n margin-left: 1em;\n font-size: 0.7em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .user-role {\n flex: none;\n color: $fallback--text;\n color: var(--alertNeutralText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--alertNeutral, $fallback--fg);\n }\n }\n\n .user-summary {\n display: block;\n margin-left: 0.6em;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1 1 0;\n // This is so that text doesn't get overlapped by avatar's shadow if it has\n // big one\n z-index: 1;\n line-height: 2em;\n\n --emoji-size: 1.7em;\n\n .top-line,\n .bottom-line {\n display: flex;\n }\n }\n\n .user-name {\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1 1 auto;\n margin-right: 1em;\n font-size: 1.1em;\n }\n\n .user-meta {\n margin-bottom: 0.15em;\n display: flex;\n align-items: baseline;\n line-height: 22px;\n flex-wrap: wrap;\n\n .following {\n flex: 1 0 auto;\n margin: 0;\n margin-bottom: 0.25em;\n text-align: left;\n }\n\n .highlighter {\n flex: 0 1 auto;\n display: flex;\n flex-wrap: wrap;\n margin-right: -0.5em;\n align-self: start;\n\n .userHighlightCl {\n padding: 2px 10px;\n flex: 1 0 auto;\n }\n\n .userHighlightSel {\n padding-top: 0;\n padding-bottom: 0;\n flex: 1 0 auto;\n }\n\n .userHighlightText {\n width: 70px;\n flex: 1 0 auto;\n }\n\n .userHighlightCl,\n .userHighlightText,\n .userHighlightSel {\n vertical-align: top;\n margin-right: 0.5em;\n margin-bottom: 0.25em;\n }\n }\n }\n\n .user-interactions {\n position: relative;\n display: flex;\n flex-flow: row wrap;\n margin-right: -0.75em;\n\n > * {\n margin: 0 0.75em 0.6em 0;\n white-space: nowrap;\n min-width: 95px;\n }\n\n button {\n margin: 0;\n }\n }\n\n .user-note {\n margin: 0 0.75em 0.6em 0;\n }\n}\n\n.sidebar .edit-profile-button {\n display: none;\n}\n\n.user-counts {\n display: flex;\n line-height: 16px;\n padding: 0.5em 1.5em 0;\n text-align: center;\n justify-content: space-between;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n flex-wrap: wrap;\n}\n\n.user-count {\n flex: 1 0 auto;\n padding: 0.5em 0;\n margin: 0 0.5em;\n\n h5 {\n font-size: 1em;\n font-weight: bolder;\n margin: 0 0 0.25em;\n }\n\n /* stylelint-disable-next-line no-descending-specificity */\n a {\n text-decoration: none;\n }\n}\n\n.mute-expiry {\n display: flex;\n flex-direction: row;\n}\n","\n.user-panel .signed-in {\n overflow: visible;\n z-index: 10;\n}\n","\n@import \"../../variables\";\n\n.NavigationEntry {\n display: flex;\n box-sizing: border-box;\n align-items: baseline;\n height: 3.5em;\n line-height: 3.5em;\n padding: 0 1em;\n width: 100%;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n .timelines-chevron {\n margin-right: 0;\n }\n\n .main-link {\n flex: 1;\n }\n\n .menu-icon {\n margin-right: 0.8em;\n }\n\n .extra-button {\n width: 3em;\n text-align: center;\n\n &:last-child {\n margin-right: -0.8em;\n }\n }\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n }\n\n &.-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.NavigationPins {\n display: flex;\n flex-wrap: wrap;\n overflow: hidden;\n height: 100%;\n\n .alert-dot {\n border-radius: 100%;\n height: 0.5em;\n width: 0.5em;\n position: absolute;\n right: calc(50% - 0.75em);\n top: calc(50% - 0.5em);\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .pinned-item {\n position: relative;\n flex: 1 0 3em;\n min-width: 2em;\n text-align: center;\n overflow: visible;\n box-sizing: border-box;\n height: 100%;\n\n & .svg-inline--fa,\n & .iconLetter {\n margin: 0;\n }\n\n &.router-link-active {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n border-bottom: 4px solid;\n\n & .svg-inline--fa,\n & .iconLetter {\n color: inherit;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.NavPanel {\n .panel {\n overflow: hidden;\n box-shadow: var(--panelShadow);\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n position: relative;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n > li {\n &:first-child .menu-item {\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child .menu-item {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n li:last-child {\n border: none;\n }\n\n .navigation-chevron {\n margin-left: 0.8em;\n margin-right: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-chevron {\n margin-left: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-background {\n padding: 0 0 0 0.6em;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n .timelines {\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n }\n\n .nav-panel-heading {\n // breaks without a unit\n // stylelint-disable-next-line length-zero-no-unit\n --panel-heading-height-padding: 0px;\n }\n}\n","\n .features-panel li {\n line-height: 24px;\n }\n","\n .who-to-follow * {\n vertical-align: middle;\n }\n\n .who-to-follow img {\n width: 32px;\n height: 32px;\n }\n\n .who-to-follow {\n padding: 0 1em;\n margin: 0;\n }\n\n .who-to-follow-items {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0;\n margin: 1em 0;\n }\n\n .who-to-follow-more {\n padding: 0;\n margin: 1em 0;\n text-align: center;\n }\n","\n@import \"../../variables\";\n\n.floating-shout {\n position: fixed;\n bottom: 0.5em;\n z-index: var(--ZI_popovers);\n max-width: 25em;\n\n &.-left {\n left: 0.5em;\n }\n\n &:not(.-left) {\n right: 0.5em;\n }\n}\n\n.shout-panel {\n .shout-heading {\n cursor: pointer;\n\n .icon {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n margin-right: 0.5em;\n }\n\n .title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n .shout-window {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 20em;\n }\n\n .shout-window-container {\n height: 100%;\n }\n\n .shout-message {\n display: flex;\n padding: 0.2em 0.5em;\n }\n\n .shout-avatar {\n img {\n height: 24px;\n width: 24px;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n margin-right: 0.5em;\n margin-top: 0.25em;\n }\n }\n\n .shout-input {\n display: flex;\n\n textarea {\n flex: 1;\n margin: 0.6em;\n min-height: 3.5em;\n resize: none;\n }\n }\n\n .shout-panel {\n .title {\n display: flex;\n justify-content: space-between;\n }\n }\n}\n","\n$modal-view-button-icon-height: 3em;\n$modal-view-button-icon-half-height: calc(#{$modal-view-button-icon-height} / 2);\n$modal-view-button-icon-width: 3em;\n$modal-view-button-icon-margin: 0.5em;\n\n.media-modal-view {\n @keyframes media-fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .modal-image-container {\n display: flex;\n overflow: hidden;\n align-items: center;\n flex-direction: column;\n max-width: 100%;\n max-height: 100%;\n width: 100%;\n height: 100%;\n flex-grow: 1;\n justify-content: center;\n\n &-inner {\n width: 100%;\n height: 100%;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n }\n\n .description,\n .counter {\n /* Hardcoded since background is also hardcoded */\n color: white;\n margin-top: 1em;\n text-shadow: 0 0 10px black, 0 0 10px black;\n padding: 0.2em 2em;\n }\n\n .description {\n flex: 0 0 auto;\n overflow-y: auto;\n min-height: 1em;\n max-width: 500px;\n max-height: 9.5em;\n word-break: break-all;\n }\n\n .modal-image {\n max-width: 100%;\n max-height: 100%;\n image-orientation: from-image; // NOTE: only FF supports this\n animation: 0.1s cubic-bezier(0.7, 0, 1, 0.6) media-fadein;\n\n &.loading {\n opacity: 0.5;\n }\n }\n\n .loading-spinner {\n width: 100%;\n height: 100%;\n position: absolute;\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n color: white;\n }\n }\n\n .modal-view-button {\n border: 0;\n padding: 0;\n opacity: 0;\n box-shadow: none;\n background: none;\n appearance: none;\n overflow: visible;\n cursor: pointer;\n transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n\n .button-icon {\n position: absolute;\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n font-size: 1rem;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n }\n\n .modal-view-button-arrow {\n position: absolute;\n display: block;\n top: 50%;\n margin-top: $modal-view-button-icon-half-height;\n width: $modal-view-button-icon-width;\n height: $modal-view-button-icon-height;\n\n .arrow-icon {\n position: absolute;\n top: 0;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n\n &--prev {\n left: 0;\n\n .arrow-icon {\n left: $modal-view-button-icon-margin;\n }\n }\n\n &--next {\n right: 0;\n\n .arrow-icon {\n right: $modal-view-button-icon-margin;\n }\n }\n }\n\n .modal-view-button-hide {\n position: absolute;\n top: 0;\n right: 0;\n\n .button-icon {\n top: $modal-view-button-icon-margin;\n right: $modal-view-button-icon-margin;\n }\n }\n}\n\n.modal-view.media-modal-view {\n z-index: var(--ZI_media_modal);\n flex-direction: column;\n\n .modal-view-button-arrow,\n .modal-view-button-hide {\n opacity: 0.75;\n\n &:focus,\n &:hover {\n outline: none;\n box-shadow: none;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n overflow: hidden;\n}\n","\n@import \"../../variables\";\n\n.side-drawer-container {\n position: fixed;\n z-index: var(--ZI_navbar);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: stretch;\n transition-duration: 0s;\n transition-property: transform;\n}\n\n.side-drawer-container-open {\n transform: translate(0%);\n}\n\n.side-drawer-container-closed {\n transition-delay: 0.35s;\n transform: translate(-100%);\n}\n\n.side-drawer-darken {\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n position: fixed;\n z-index: -1;\n transition: 0.35s;\n transition-property: background-color;\n background-color: rgb(0 0 0 / 50%);\n}\n\n.side-drawer-darken-closed {\n background-color: rgb(0 0 0 / 0%);\n}\n\n.side-drawer-click-outside {\n flex: 1 1 100%;\n}\n\n.side-drawer {\n overflow-x: hidden;\n transition: 0.35s;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-property: transform;\n margin: 0 0 0 -100px;\n padding: 0 0 1em 100px;\n width: 80%;\n max-width: 20em;\n flex: 0 0 80%;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n .badge {\n margin-left: 10px;\n }\n}\n\n.side-drawer-logo-wrapper {\n display: flex;\n align-items: center;\n padding: 0.85em;\n\n img {\n flex: none;\n height: 50px;\n margin-right: 0.85em;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.side-drawer-click-outside-closed {\n flex: 0 0 0;\n}\n\n.side-drawer-closed {\n transform: translate(-100%);\n}\n\n.side-drawer-heading {\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n display: flex;\n padding: 0;\n margin: 0;\n}\n\n.side-drawer ul {\n list-style: none;\n margin: 0;\n padding: 0;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.side-drawer ul:last-child {\n border: 0;\n}\n\n.side-drawer li {\n padding: 0;\n\n a,\n button {\n box-sizing: border-box;\n display: block;\n height: 3em;\n line-height: 3em;\n padding: 0 0.7em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n","\n@import \"../../variables\";\n\n.MobilePostButton {\n &.button-default {\n width: 5em;\n height: 5em;\n border-radius: 100%;\n position: fixed;\n bottom: 1.5em;\n right: 1.5em;\n // TODO: this needs its own color, it has to stand out enough and link color\n // is not very optimal for this particular use.\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 2px 2px rgb(0 0 0 / 30%), 0 4px 6px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s transform;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n }\n\n &.hidden {\n transform: translateY(150%);\n }\n\n svg {\n font-size: 1.5em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n@media all and (min-width: 801px) {\n .new-status-button:not(.always-show) {\n display: none;\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReplyButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n &:hover .svg-inline--fa,\n &.-active .svg-inline--fa {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.FavoriteButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-favorited .svg-inline--fa {\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReactButton {\n .reaction-picker-filter {\n padding: 0.5em;\n display: flex;\n\n input {\n flex: 1;\n }\n }\n\n .reaction-picker-divider {\n height: 1px;\n width: 100%;\n margin: 0.5em;\n background-color: var(--border, $fallback--border);\n }\n\n .reaction-picker {\n width: 10em;\n height: 9em;\n font-size: 1.5em;\n overflow-y: scroll;\n display: flex;\n flex-wrap: wrap;\n padding: 0.5em;\n text-align: center;\n align-content: flex-start;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n\n .emoji-button {\n cursor: pointer;\n flex-basis: 20%;\n line-height: 1.5;\n align-content: center;\n\n &:hover {\n transform: scale(1.25);\n }\n }\n }\n\n .popover-trigger {\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.RetweetButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-repeated .svg-inline--fa {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ExtraButtons {\n .popover-trigger {\n position: static;\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover-trigger-button {\n /* override of popover internal stuff */\n width: auto;\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n","\n@import \"../../variables\";\n\n.avatars {\n display: flex;\n margin: 0;\n padding: 0;\n\n // For hiding overflowing elements\n flex-wrap: wrap;\n height: 24px;\n\n .avatars-item {\n margin: 0 0 5px 5px;\n\n &:first-child {\n padding-left: 5px;\n }\n\n .avatar-small {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n height: 24px;\n width: 24px;\n }\n }\n}\n","\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n.status-popover.popover {\n font-size: 1rem;\n min-width: 15em;\n max-width: 95%;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n /* TODO cleanup this */\n .Status.Status {\n border: none;\n }\n\n .status-preview-no-content {\n padding: 1em;\n text-align: center;\n\n i {\n font-size: 2em;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.user-list-popover {\n padding: 0.5em;\n\n --emoji-size: 16px;\n\n .user-list-row {\n padding: 0.25em;\n display: flex;\n flex-direction: row;\n\n .user-list-names {\n display: flex;\n flex-direction: column;\n margin-left: 0.5em;\n min-width: 5em;\n\n img {\n width: 1em;\n height: 1em;\n }\n }\n\n .user-list-screen-name {\n font-size: 0.65em;\n }\n }\n}\n\n","\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.EmojiReactions {\n display: flex;\n margin-top: 0.25em;\n flex-wrap: wrap;\n\n --emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));\n\n .emoji-reaction-container {\n display: flex;\n align-items: stretch;\n margin-top: 0.5em;\n margin-right: 0.5em;\n\n .emoji-reaction-popover {\n padding: 0;\n\n .emoji-reaction-count-button {\n background-color: var(--btn);\n margin: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-sizing: border-box;\n min-width: 2em;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-right: -1px;\n }\n }\n }\n }\n\n .emoji-reaction {\n padding-left: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n\n .reaction-emoji {\n width: var(--emoji-size);\n height: var(--emoji-size);\n margin-right: 0.25em;\n line-height: var(--emoji-size);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .reaction-emoji-content {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n line-height: inherit;\n overflow: hidden;\n font-size: calc(var(--emoji-size) * 0.8);\n margin: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-left: -1px; // offset the border, can't use inset shadows either\n margin-right: -1px;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n\n .emoji-reaction-expand {\n padding: 0 0.5em;\n margin-right: 0.5em;\n margin-top: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n","@import \"../../variables\";\n\n.Status {\n min-width: 0;\n white-space: normal;\n word-wrap: break-word;\n word-break: break-word;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n &.-focused {\n background-color: $fallback--lightBg;\n background-color: var(--selectedPost, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedPostText, $fallback--text);\n\n --lightText: var(--selectedPostLightText, $fallback--light);\n --faint: var(--selectedPostFaintText, $fallback--faint);\n --faintLink: var(--selectedPostFaintLink, $fallback--faint);\n --postLink: var(--selectedPostPostLink, $fallback--faint);\n --postFaintLink: var(--selectedPostFaintPostLink, $fallback--faint);\n --icon: var(--selectedPostIcon, $fallback--icon);\n }\n\n .gravestone {\n padding: var(--status-margin, $status-margin);\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n display: flex;\n\n .deleted-text {\n margin: 0.5em 0;\n align-items: center;\n }\n }\n\n .status-container {\n display: flex;\n padding: var(--status-margin, $status-margin);\n\n > * {\n min-width: 0;\n }\n\n &.-repeat {\n padding-top: 0;\n }\n }\n\n .pin {\n padding: var(--status-margin, $status-margin) var(--status-margin, $status-margin) 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n\n ._misclick-prevention & {\n pointer-events: none;\n\n .attachments {\n pointer-events: initial;\n cursor: initial;\n }\n }\n\n .left-side {\n margin-right: var(--status-margin, $status-margin);\n }\n\n .right-side {\n flex: 1;\n min-width: 0;\n }\n\n .usercard {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .status-username {\n white-space: nowrap;\n overflow: hidden;\n max-width: 85%;\n font-weight: bold;\n flex-shrink: 1;\n margin-right: 0.4em;\n text-overflow: ellipsis;\n\n --_still_image-label-scale: 0.25;\n --emoji-size: 14px;\n }\n\n .status-favicon {\n height: 18px;\n width: 18px;\n margin-right: 0.4em;\n }\n\n .status-heading {\n margin-bottom: 0.5em;\n }\n\n .heading-name-row {\n display: flex;\n justify-content: space-between;\n line-height: 1.3;\n\n a {\n display: inline-block;\n word-break: break-all;\n }\n }\n\n .account-name {\n min-width: 1.6em;\n margin-right: 0.4em;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1 1 0;\n }\n\n .heading-left {\n display: flex;\n min-width: 0;\n }\n\n .heading-right {\n display: flex;\n flex-shrink: 0;\n\n .button-unstyled {\n padding: 5px;\n margin: -5px;\n\n &:hover svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n .svg-inline--fa {\n margin-left: 0.25em;\n }\n }\n\n .glued-label {\n display: inline-flex;\n white-space: nowrap;\n }\n\n .timeago {\n margin-right: 0.2em;\n }\n\n & .heading-reply-row,\n & .heading-edited-row {\n position: relative;\n align-content: baseline;\n font-size: 0.85em;\n margin-top: 0.2em;\n line-height: 130%;\n max-width: 100%;\n align-items: stretch;\n }\n\n & .reply-to-popover,\n & .reply-to-no-popover,\n & .mentions {\n min-width: 0;\n margin-right: 0.4em;\n flex-shrink: 0;\n }\n\n .reply-glued-label {\n margin-right: 0.5em;\n }\n\n .reply-to-popover {\n .reply-to:hover::before {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0;\n width: 100%;\n border-bottom: 1px solid var(--faint);\n pointer-events: none;\n }\n\n .faint-link:hover {\n // override default\n text-decoration: none;\n }\n\n &.-strikethrough {\n .reply-to::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n width: 100%;\n border-bottom: 1px solid var(--faint);\n pointer-events: none;\n }\n }\n }\n\n & .mentions,\n & .reply-to {\n white-space: nowrap;\n position: relative;\n }\n\n & .mentions-text,\n & .reply-to-text {\n color: var(--faint);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .mentions-line {\n display: inline;\n }\n\n .replies {\n margin-top: 0.25em;\n line-height: 1.3;\n font-size: 0.85em;\n display: flex;\n flex-wrap: wrap;\n\n & > * {\n margin-right: 0.4em;\n }\n }\n\n .reply-link {\n height: 17px;\n }\n\n .repeat-info {\n padding: 0.4em var(--status-margin, $status-margin);\n\n .repeat-icon {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n }\n\n .repeater-avatar {\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n margin-left: 28px;\n width: 20px;\n height: 20px;\n }\n\n .repeater-name {\n text-overflow: ellipsis;\n margin-right: 0;\n\n .emoji {\n width: 14px;\n height: 14px;\n vertical-align: middle;\n object-fit: contain;\n }\n }\n\n .status-fadein {\n animation-duration: 0.4s;\n animation-name: fadein;\n }\n\n @keyframes fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .status-actions {\n position: relative;\n width: 100%;\n display: flex;\n margin-top: var(--status-margin, $status-margin);\n\n > * {\n max-width: 4em;\n flex: 1;\n }\n }\n\n .muted {\n padding: 0.25em 0.6em;\n height: 1.2em;\n line-height: 1.2em;\n text-overflow: ellipsis;\n overflow: hidden;\n display: flex;\n flex-wrap: nowrap;\n\n & .status-username,\n & .mute-thread,\n & .mute-words {\n word-wrap: normal;\n word-break: normal;\n white-space: nowrap;\n }\n\n & .status-username,\n & .mute-words {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .status-username {\n font-weight: normal;\n flex: 0 1 auto;\n margin-right: 0.2em;\n font-size: smaller;\n }\n\n .mute-thread {\n flex: 0 0 auto;\n }\n\n .mute-words {\n flex: 1 0 5em;\n margin-left: 0.2em;\n\n &::before {\n content: \" \";\n }\n }\n\n .unmute {\n flex: 0 0 auto;\n margin-left: auto;\n display: block;\n }\n }\n\n .reply-form {\n padding-top: 0;\n padding-bottom: 0;\n }\n\n .reply-body {\n flex: 1;\n }\n\n .favs-repeated-users {\n margin-top: var(--status-margin, $status-margin);\n }\n\n .stats {\n width: 100%;\n display: flex;\n line-height: 1em;\n }\n\n .avatar-row {\n flex: 1;\n overflow: hidden;\n position: relative;\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n position: absolute;\n height: 100%;\n width: 1px;\n left: 0;\n background-color: var(--faint, $fallback--faint);\n }\n }\n\n .stat-count {\n margin-right: var(--status-margin, $status-margin);\n user-select: none;\n\n .stat-title {\n color: var(--faint, $fallback--faint);\n font-size: 0.85em;\n text-transform: uppercase;\n position: relative;\n }\n\n .stat-number {\n font-weight: bolder;\n font-size: 1.1em;\n line-height: 1em;\n }\n\n &:hover .stat-title {\n text-decoration: underline;\n }\n }\n\n @media all and (max-width: 800px) {\n .repeater-avatar {\n margin-left: 20px;\n }\n\n .post-avatar {\n width: 40px;\n height: 40px;\n\n // TODO define those other way somehow?\n // stylelint-disable rscss/class-format\n &.-compact {\n width: 32px;\n height: 32px;\n }\n }\n }\n\n .quoted-status {\n margin-top: 0.5em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n\n &.-unavailable-prompt {\n padding: 0.5em;\n }\n }\n\n .display-quoted-status-button {\n margin: 0.5em;\n\n &-icon {\n color: inherit;\n }\n }\n}\n","@import \"../../variables\";\n\n.Report {\n .report-content {\n margin: 0.5em 0 1em;\n }\n\n .report-state {\n margin: 0.5em 0 1em;\n }\n\n .reported-status {\n border: 1px solid $fallback--faint;\n border-color: var(--faint, $fallback--faint);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n color: $fallback--text;\n color: var(--text, $fallback--text);\n display: block;\n padding: 0.5em;\n margin: 0.5em 0;\n\n .status-content {\n pointer-events: none;\n }\n\n .reported-status-heading {\n display: flex;\n width: 100%;\n justify-content: space-between;\n margin-bottom: 0.2em;\n }\n\n .reported-status-name {\n font-weight: bold;\n }\n }\n\n .note {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n","@import \"../../variables\";\n\n// TODO Copypaste from Status, should unify it somehow\n.Notification {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n word-wrap: break-word;\n word-break: break-word;\n\n --emoji-size: 14px;\n\n &:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n\n &.-muted {\n padding: 0.25em 0.6em;\n height: 1.2em;\n line-height: 1.2em;\n text-overflow: ellipsis;\n overflow: hidden;\n display: flex;\n flex-wrap: nowrap;\n\n & .status-username,\n & .mute-thread,\n & .mute-words {\n word-wrap: normal;\n word-break: normal;\n white-space: nowrap;\n }\n\n & .status-username,\n & .mute-words {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .status-username {\n font-weight: normal;\n flex: 0 1 auto;\n margin-right: 0.2em;\n font-size: smaller;\n }\n\n .mute-thread {\n flex: 0 0 auto;\n }\n\n .mute-words {\n flex: 1 0 5em;\n margin-left: 0.2em;\n\n &::before {\n content: \" \";\n }\n }\n\n .unmute {\n flex: 0 0 auto;\n margin-left: auto;\n display: block;\n }\n }\n\n .type-icon {\n margin: 0 0.1em;\n }\n\n &.-type--repeat .type-icon {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n &.-type--follow .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n &.-type--follow-request .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n &.-type--like .type-icon {\n color: orange;\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n &.-type--move .type-icon {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n}\n","@import \"../../variables\";\n\n.Notifications {\n &:not(.minimal) {\n // a bit of a hack to allow scrolling below notifications\n padding-bottom: 15em;\n }\n\n .loadmore-error {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .notification {\n position: relative;\n\n .notification-overlay {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n &.unseen {\n .notification-overlay {\n background-image: linear-gradient(135deg, var(--badgeNotification, $fallback--cRed) 4px, transparent 10px);\n }\n }\n }\n}\n\n/* stylelint-disable-next-line no-descending-specificity */\n.notification {\n box-sizing: border-box;\n\n &:hover .animated.Avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n\n &:last-child .Notification {\n border-bottom: none;\n }\n\n .non-mention {\n display: flex;\n flex: 1;\n flex-wrap: nowrap;\n padding: 0.6em;\n min-width: 0;\n\n .avatar-container {\n width: 32px;\n height: 32px;\n }\n\n .faint {\n --link: var(--faintLink);\n --text: var(--faint);\n }\n }\n\n .follow-request-accept {\n &:hover {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .follow-request-reject {\n &:hover {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n .follow-text,\n .move-text {\n padding: 0.5em 0;\n overflow-wrap: break-word;\n display: flex;\n justify-content: space-between;\n\n .follow-name {\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n /* TODO cleanup this */\n .Status {\n flex: 1;\n }\n\n time {\n white-space: nowrap;\n }\n\n .notification-right {\n flex: 1;\n padding-left: 0.8em;\n min-width: 0;\n\n .timeago {\n min-width: 3em;\n text-align: right;\n }\n\n .timeago-link {\n margin-right: 0.2em;\n }\n\n .expand-icon {\n .svg-inline--fa {\n margin-left: 0.25em;\n }\n }\n }\n\n .emoji-reaction-emoji {\n font-size: 1.3em;\n max-width: 1.25em;\n height: 1.25em;\n width: auto;\n }\n\n .emoji-reaction-emoji-image {\n vertical-align: middle;\n object-fit: contain;\n }\n\n .notification-details {\n min-width: 0;\n word-wrap: break-word;\n line-height: var(--post-line-height);\n position: relative;\n overflow: hidden;\n width: 100%;\n flex: 1 1 0;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n\n .name-and-action {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .username {\n font-weight: bolder;\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .timeago {\n margin-right: 0.2em;\n }\n\n .status-content {\n margin: 0;\n max-height: 300px;\n }\n\n h1 {\n word-break: break-all;\n margin: 0 0 0.3em;\n padding: 0;\n font-size: 1em;\n line-height: 1.5;\n\n small {\n font-weight: lighter;\n }\n }\n\n p {\n margin: 0;\n margin-top: 0;\n margin-bottom: 0.3em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.MobileNav {\n z-index: var(--ZI_navbar);\n\n .mobile-nav {\n display: grid;\n line-height: var(--navbar-height);\n grid-template-rows: 50px;\n grid-template-columns: 2fr auto;\n width: 100%;\n box-sizing: border-box;\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .mobile-inner-nav {\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .mobile-nav-button {\n display: inline-block;\n text-align: center;\n padding: 0 1em;\n position: relative;\n cursor: pointer;\n }\n\n .site-name {\n padding: 0 0.3em;\n display: inline-block;\n }\n\n .item {\n /* moslty just to get rid of extra whitespaces */\n display: flex;\n }\n\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .mobile-notifications-drawer {\n width: 100%;\n height: 100vh;\n overflow-x: hidden;\n position: fixed;\n top: 0;\n left: 0;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n transition-property: transform;\n transition-duration: 0.25s;\n transform: translateX(0);\n z-index: var(--ZI_navbar);\n -webkit-overflow-scrolling: touch;\n\n &.-closed {\n transform: translateX(100%);\n box-shadow: none;\n }\n }\n\n .mobile-notifications-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: calc(var(--ZI_navbar) + 100);\n width: 100%;\n height: 50px;\n line-height: 50px;\n position: absolute;\n color: var(--topBarText);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n\n .spacer {\n flex: 1;\n }\n\n .title {\n font-size: 1.3em;\n margin-left: 0.6em;\n }\n }\n\n .pins {\n flex: 1;\n\n .pinned-item {\n flex-grow: 1;\n }\n }\n\n .mobile-notifications {\n margin-top: 50px;\n width: 100vw;\n height: calc(100vh - var(--navbar-height));\n overflow-x: hidden;\n overflow-y: scroll;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .notifications {\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n\n .panel {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n }\n\n .panel::after {\n border-radius: 0;\n }\n\n .panel .panel-heading {\n border-radius: 0;\n box-shadow: none;\n }\n }\n }\n\n .confirm-modal.dark-overlay {\n &::before {\n z-index: 3000;\n }\n\n .dialog-modal.panel {\n z-index: 3001;\n }\n }\n}\n\n","\n@import \"../../variables\";\n\n.SearchBar {\n display: inline-flex;\n align-items: baseline;\n vertical-align: baseline;\n justify-content: flex-end;\n\n &.-expanded {\n width: 100%;\n }\n\n .search-bar-input,\n .search-button {\n height: 29px;\n }\n\n .search-bar-input {\n flex: 1 0 auto;\n }\n\n .cancel-search {\n height: 50px;\n }\n\n .cancel-icon {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n}\n\n","@import \"../../variables\";\n\n.DesktopNav {\n width: 100%;\n z-index: var(--ZI_navbar);\n\n input {\n color: var(--inputTopbarText, var(--inputText));\n }\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n\n .inner-nav {\n display: grid;\n grid-template-rows: var(--navbar-height);\n grid-template-columns: 2fr auto 2fr;\n grid-template-areas: \"sitename logo actions\";\n box-sizing: border-box;\n padding: 0 1.2em;\n margin: auto;\n max-width: 980px;\n }\n\n &.-column-stretch .inner-nav {\n --miniColumn: 25rem;\n --maxiColumn: 45rem;\n --columnGap: 1em;\n\n max-width:\n calc(\n var(--sidebarColumnWidth, var(--miniColumn)) +\n var(--contentColumnWidth, var(--maxiColumn)) +\n var(--columnGap)\n );\n }\n\n &.-logoLeft .inner-nav {\n grid-template-columns: auto 2fr 2fr;\n grid-template-areas: \"logo sitename actions\";\n }\n\n &.-column-stretch.-wide .inner-nav {\n max-width:\n calc(\n var(--sidebarColumnWidth, var(--miniColumn)) +\n var(--contentColumnWidth, var(--maxiColumn)) +\n var(--notifsColumnWidth, var(--miniColumn)) +\n var(--columnGap)\n );\n }\n\n .button-default {\n &,\n svg {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--fg;\n background-color: var(--btnPressedTopBar, $fallback--fg);\n color: $fallback--text;\n color: var(--btnPressedTopBarText, $fallback--text);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledTopBarText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledTopBarText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnToggledTopBar, $fallback--fg);\n }\n }\n\n .logo {\n grid-area: logo;\n position: relative;\n transition: opacity;\n transition-timing-function: ease-out;\n transition-duration: 100ms;\n\n @media all and (min-width: 800px) {\n /* stylelint-disable-next-line declaration-no-important */\n opacity: 1 !important;\n }\n\n .mask {\n mask-repeat: no-repeat;\n mask-position: center;\n mask-size: contain;\n background-color: $fallback--fg;\n background-color: var(--topBarText, $fallback--fg);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n img {\n display: inline-block;\n height: var(--navbar-height);\n }\n }\n\n .nav-icon {\n margin-left: 0.2em;\n width: 2em;\n height: 100%;\n text-align: center;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .sitename {\n grid-area: sitename;\n }\n\n .actions {\n grid-area: actions;\n }\n\n .item {\n flex: 1;\n line-height: var(--navbar-height);\n height: var(--navbar-height);\n overflow: hidden;\n display: flex;\n flex-wrap: wrap;\n\n &.right {\n justify-content: flex-end;\n text-align: right;\n }\n }\n\n .spacer {\n width: 1em;\n }\n}\n","\n@import \"../../variables\";\n\n.list {\n &-item:not(:last-child) {\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n &-empty-content {\n text-align: center;\n padding: 10px;\n }\n}\n","\n@import \"../../variables\";\n\n.user-reporting-panel {\n width: 90vw;\n max-width: 700px;\n min-height: 20vh;\n max-height: 80vh;\n\n .panel-body {\n display: flex;\n flex-direction: column-reverse;\n border-top: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n overflow: hidden;\n }\n\n &-left {\n padding: 1.1em 0.7em 0.7em;\n line-height: var(--post-line-height);\n box-sizing: border-box;\n\n > div {\n margin-bottom: 1em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p {\n margin-top: 0;\n }\n\n textarea.form-control {\n line-height: 16px;\n resize: none;\n overflow: hidden;\n transition: min-height 200ms 100ms;\n min-height: 44px;\n width: 100%;\n }\n\n .btn {\n min-width: 10em;\n padding: 0 2em;\n }\n\n .alert {\n margin: 1em 0 0;\n line-height: 1.3em;\n }\n }\n\n &-right {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n &-sitem {\n display: flex;\n justify-content: space-between;\n\n /* TODO cleanup this */\n > .Status {\n flex: 1;\n }\n\n > .checkbox {\n margin: 0.75em;\n }\n }\n\n @media all and (min-width: 801px) {\n .panel-body {\n flex-direction: row;\n }\n\n &-left {\n width: 50%;\n max-width: 320px;\n border-right: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 1.1em;\n\n > div {\n margin-bottom: 2em;\n }\n }\n\n &-right {\n width: 50%;\n flex: 1 1 auto;\n margin-bottom: 12px;\n }\n }\n}\n","\n.modal-view.edit-form-modal-view {\n align-items: flex-start;\n}\n\n.edit-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n\n .form-bottom-left {\n max-width: 6.5em;\n\n .emoji-icon {\n justify-content: right;\n }\n }\n}\n","\n.modal-view.post-form-modal-view {\n align-items: flex-start;\n}\n\n.post-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n","\n.modal-view.status-history-modal-view {\n align-items: flex-start;\n}\n\n.status-history-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n","\n@import \"../../variables\";\n\n.global-notice-list {\n position: fixed;\n top: calc(var(--navbar-height) + 0.5em);\n width: 100%;\n pointer-events: none;\n z-index: var(--ZI_navbar_popovers);\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .global-notice {\n pointer-events: auto;\n text-align: center;\n width: 40em;\n max-width: calc(100% - 3em);\n display: flex;\n padding-left: 1.5em;\n line-height: 2;\n margin-bottom: 0.5em;\n\n .notice-message {\n flex: 1 1 100%;\n }\n }\n\n .global-error {\n background-color: var(--alertPopupError, $fallback--cRed);\n color: var(--alertPopupErrorText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupErrorText, $fallback--text);\n }\n }\n\n .global-warning {\n background-color: var(--alertPopupWarning, $fallback--cOrange);\n color: var(--alertPopupWarningText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupWarningText, $fallback--text);\n }\n }\n\n .global-success {\n background-color: var(--alertPopupSuccess, $fallback--cGreen);\n color: var(--alertPopupSuccessText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupSuccessText, $fallback--text);\n }\n }\n\n .global-info {\n background-color: var(--alertPopupNeutral, $fallback--fg);\n color: var(--alertPopupNeutralText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupNeutralText, $fallback--text);\n }\n }\n\n .close-notice {\n padding-right: 0.2em;\n\n .svg-inline--fa:hover {\n opacity: 0.6;\n }\n }\n}\n","// stylelint-disable rscss/class-format\n/* stylelint-disable no-descending-specificity */\n@import \"./variables\";\n@import \"./panel\";\n\n:root {\n --navbar-height: 3.5rem;\n --post-line-height: 1.4;\n // Z-Index stuff\n --ZI_media_modal: 9000;\n --ZI_modals_popovers: 8500;\n --ZI_modals: 8000;\n --ZI_navbar_popovers: 7500;\n --ZI_navbar: 7000;\n --ZI_popovers: 6000;\n}\n\nhtml {\n font-size: 14px;\n // overflow-x: clip causes my browser's tab to crash with SIGILL lul\n}\n\nbody {\n font-family: sans-serif;\n font-family: var(--interfaceFont, sans-serif);\n margin: 0;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n overscroll-behavior-y: none;\n overflow-x: clip;\n overflow-y: scroll;\n\n &.hidden {\n display: none;\n }\n}\n\n// ## Custom scrollbars\n// Only show custom scrollbars on devices which\n// have a cursor/pointer to operate them\n@media (any-pointer: fine) {\n * {\n scrollbar-color: var(--btn) transparent;\n\n &::-webkit-scrollbar {\n background: transparent;\n }\n\n &::-webkit-scrollbar-button,\n &::-webkit-scrollbar-thumb {\n background-color: var(--btn);\n box-shadow: var(--buttonShadow);\n border-radius: var(--btnRadius);\n }\n\n // horizontal/vertical/increment/decrement are webkit-specific stuff\n // that indicates whether we're affecting vertical scrollbar, increase button etc\n // stylelint-disable selector-pseudo-class-no-unknown\n &::-webkit-scrollbar-button {\n --___bgPadding: 2px;\n\n color: var(--btnText);\n background-repeat: no-repeat, no-repeat;\n\n &:horizontal {\n background-size: 50% calc(50% - var(--___bgPadding)), 50% calc(50% - var(--___bgPadding));\n\n &:increment {\n background-image:\n linear-gradient(45deg, var(--btnText) 50%, transparent 51%),\n linear-gradient(-45deg, transparent 50%, var(--btnText) 51%);\n background-position: top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding);\n }\n\n &:decrement {\n background-image:\n linear-gradient(45deg, transparent 50%, var(--btnText) 51%),\n linear-gradient(-45deg, var(--btnText) 50%, transparent 51%);\n background-position: bottom var(--___bgPadding) right 50%, left 50% top var(--___bgPadding);\n }\n }\n\n &:vertical {\n background-size: calc(50% - var(--___bgPadding)) 50%, calc(50% - var(--___bgPadding)) 50%;\n\n &:increment {\n background-image:\n linear-gradient(-45deg, transparent 50%, var(--btnText) 51%),\n linear-gradient(45deg, transparent 50%, var(--btnText) 51%);\n background-position: right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%;\n }\n\n &:decrement {\n background-image:\n linear-gradient(-45deg, var(--btnText) 50%, transparent 51%),\n linear-gradient(45deg, var(--btnText) 50%, transparent 51%);\n background-position: left var(--___bgPadding) top 50%, right var(--___bgPadding) top 50%;\n }\n }\n }\n // stylelint-enable selector-pseudo-class-no-unknown\n }\n // Body should have background to scrollbar otherwise it will use white (body color?)\n html {\n scrollbar-color: var(--selectedMenu) var(--wallpaper);\n background: var(--wallpaper);\n }\n}\n\na {\n text-decoration: none;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n}\n\nh4 {\n margin: 0;\n}\n\n.iconLetter {\n display: inline-block;\n text-align: center;\n font-weight: 1000;\n}\n\ni[class*=\"icon-\"],\n.svg-inline--fa,\n.iconLetter {\n color: $fallback--icon;\n color: var(--icon, $fallback--icon);\n}\n\n.button-unstyled:hover,\na:hover {\n > i[class*=\"icon-\"],\n > .svg-inline--fa,\n > .iconLetter {\n color: var(--text);\n }\n}\n\nnav {\n z-index: var(--ZI_navbar);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n box-sizing: border-box;\n height: var(--navbar-height);\n position: fixed;\n}\n\n#sidebar {\n grid-area: sidebar;\n}\n\n#modal {\n position: absolute;\n z-index: var(--ZI_modals);\n}\n\n.column.-scrollable {\n top: var(--navbar-height);\n position: sticky;\n}\n\n#main-scroller {\n grid-area: content;\n position: relative;\n}\n\n#notifs-column {\n grid-area: notifs;\n}\n\n.app-bg-wrapper {\n position: fixed;\n height: 100%;\n top: var(--navbar-height);\n z-index: -1000;\n left: 0;\n right: -20px;\n background-size: cover;\n background-repeat: no-repeat;\n background-color: var(--wallpaper);\n background-image: var(--body-background-image);\n background-position: 50%;\n}\n\n.underlay {\n grid-column: 1 / span 3;\n grid-row: 1 / 1;\n pointer-events: none;\n background-color: rgb(0 0 0 / 15%);\n background-color: var(--underlay, rgb(0 0 0 / 15%));\n z-index: -1000;\n}\n\n.app-layout {\n --miniColumn: 25rem;\n --maxiColumn: 45rem;\n --columnGap: 1em;\n --status-margin: 0.75em;\n --effectiveSidebarColumnWidth: minmax(var(--miniColumn), var(--sidebarColumnWidth, var(--miniColumn)));\n --effectiveNotifsColumnWidth: minmax(var(--miniColumn), var(--notifsColumnWidth, var(--miniColumn)));\n --effectiveContentColumnWidth: minmax(var(--miniColumn), var(--contentColumnWidth, var(--maxiColumn)));\n\n position: relative;\n display: grid;\n grid-template-columns:\n var(--effectiveSidebarColumnWidth)\n var(--effectiveContentColumnWidth);\n grid-template-areas: \"sidebar content\";\n grid-template-rows: 1fr;\n box-sizing: border-box;\n margin: 0 auto;\n align-content: flex-start;\n flex-wrap: wrap;\n justify-content: center;\n min-height: 100vh;\n overflow-x: clip;\n\n .column {\n --___columnMargin: var(--columnGap);\n\n display: grid;\n grid-template-columns: 100%;\n box-sizing: border-box;\n grid-row: 1 / 1;\n margin: 0 calc(var(--___columnMargin) / 2);\n padding: calc(var(--___columnMargin)) 0;\n row-gap: var(--___columnMargin);\n align-content: start;\n\n &:not(.-scrollable) {\n margin-top: var(--navbar-height);\n }\n\n &:hover {\n z-index: 2;\n }\n\n &.-full-height {\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n }\n\n &.-scrollable {\n --___paddingIncrease: calc(var(--columnGap) / 2);\n\n position: sticky;\n top: var(--navbar-height);\n max-height: calc(100vh - var(--navbar-height));\n overflow-y: auto;\n overflow-x: hidden;\n margin-left: calc(var(--___paddingIncrease) * -1);\n padding-left: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);\n\n // On browsers that don't support hiding scrollbars we enforce \"show scrolbars\" mode\n // might implement old style of hiding scrollbars later if there's demand\n @supports (scrollbar-width: none) or (-webkit-text-fill-color: initial) {\n &:not(.-show-scrollbar) {\n scrollbar-width: none;\n margin-right: calc(var(--___paddingIncrease) * -1);\n padding-right: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);\n\n &::-webkit-scrollbar {\n display: block;\n width: 0;\n }\n }\n }\n\n .panel-heading.-sticky {\n top: calc(var(--columnGap) / -1);\n }\n }\n }\n\n &.-has-new-post-button {\n .column {\n padding-bottom: 10rem;\n }\n }\n\n &.-no-sticky-headers {\n .column {\n .panel-heading.-sticky {\n position: relative;\n top: 0;\n }\n }\n }\n\n .column-inner {\n display: grid;\n grid-template-columns: 100%;\n box-sizing: border-box;\n row-gap: 1em;\n align-content: start;\n }\n\n &.-reverse:not(.-wide, .-mobile) {\n grid-template-columns:\n var(--effectiveContentColumnWidth)\n var(--effectiveSidebarColumnWidth);\n grid-template-areas: \"content sidebar\";\n }\n\n &.-wide {\n grid-template-columns:\n var(--effectiveSidebarColumnWidth)\n var(--effectiveContentColumnWidth)\n var(--effectiveNotifsColumnWidth);\n grid-template-areas: \"sidebar content notifs\";\n\n &.-reverse {\n grid-template-columns:\n var(--effectiveNotifsColumnWidth)\n var(--effectiveContentColumnWidth)\n var(--effectiveSidebarColumnWidth);\n grid-template-areas: \"notifs content sidebar\";\n }\n }\n\n &.-mobile {\n grid-template-columns: 100vw;\n grid-template-areas: \"content\";\n padding: 0;\n\n .column {\n padding-top: 0;\n margin: var(--navbar-height) 0 0 0;\n }\n\n .panel-heading,\n .panel-heading::after,\n .panel-heading::before,\n .panel,\n .panel::after {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n #sidebar,\n #notifs-column {\n display: none;\n }\n }\n\n &.-normal {\n #notifs-column {\n display: none;\n }\n }\n}\n\n.text-center {\n text-align: center;\n}\n\n.button-default {\n user-select: none;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n border: none;\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n cursor: pointer;\n box-shadow: $fallback--buttonShadow;\n box-shadow: var(--buttonShadow);\n font-size: 1em;\n font-family: sans-serif;\n font-family: var(--interfaceFont, sans-serif);\n\n &.-sublime {\n background: transparent;\n }\n\n i[class*=\"icon-\"],\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &::-moz-focus-inner {\n border: none;\n }\n\n &:hover {\n box-shadow: 0 0 4px rgb(255 255 255 / 30%);\n box-shadow: var(--buttonHoverShadow);\n }\n\n &:active {\n box-shadow:\n 0 0 4px 0 rgb(255 255 255 / 30%),\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset;\n box-shadow: var(--buttonPressedShadow);\n color: $fallback--text;\n color: var(--btnPressedText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnPressed, $fallback--fg);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnPressedText, $fallback--text);\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnDisabled, $fallback--fg);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n background-color: $fallback--fg;\n background-color: var(--btnToggled, $fallback--fg);\n box-shadow:\n 0 0 4px 0 rgb(255 255 255 / 30%),\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset;\n box-shadow: var(--buttonPressedShadow);\n\n svg,\n i {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n\n &.danger {\n // TODO: add better color variable\n color: $fallback--text;\n color: var(--alertErrorPanelText, $fallback--text);\n background-color: $fallback--alertError;\n background-color: var(--alertError, $fallback--alertError);\n }\n}\n\n.button-unstyled {\n background: none;\n border: none;\n outline: none;\n display: inline;\n text-align: initial;\n font-size: 100%;\n font-family: inherit;\n padding: 0;\n line-height: unset;\n cursor: pointer;\n box-sizing: content-box;\n color: inherit;\n\n &.-link {\n color: $fallback--link;\n color: var(--link, $fallback--link);\n }\n\n &.-fullwidth {\n width: 100%;\n }\n\n &.-hover-highlight {\n &:hover svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n\ninput,\ntextarea,\n.input {\n &.unstyled {\n border-radius: 0;\n background: none;\n box-shadow: none;\n height: unset;\n }\n\n --_padding: 0.5em;\n\n border: none;\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n box-shadow:\n 0 1px 0 0 rgb(0 0 0 / 20%) inset,\n 0 -1px 0 0 rgb(255 255 255 / 20%) inset,\n 0 0 2px 0 rgb(0 0 0 / 100%) inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n color: $fallback--lightText;\n color: var(--inputText, $fallback--lightText);\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n margin: 0;\n box-sizing: border-box;\n display: inline-block;\n position: relative;\n line-height: 2;\n hyphens: none;\n padding: 0 var(--_padding);\n\n &:disabled,\n &[disabled=\"disabled\"],\n &.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n &[type=\"range\"] {\n background: none;\n border: none;\n margin: 0;\n box-shadow: none;\n flex: 1;\n }\n\n &[type=\"radio\"] {\n display: none;\n\n &:checked + label::before {\n box-shadow: 0 0 2px black inset, 0 0 0 4px $fallback--fg inset;\n box-shadow: var(--inputShadow), 0 0 0 4px var(--fg, $fallback--fg) inset;\n background-color: var(--accent, $fallback--link);\n }\n\n &:disabled {\n &,\n & + label,\n & + label::before {\n opacity: 0.5;\n }\n }\n\n + label::before {\n flex-shrink: 0;\n display: inline-block;\n content: \"\";\n transition: box-shadow 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: 100%; // Radio buttons should always be circle\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.5em;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1;\n font-size: 1.1em;\n box-sizing: border-box;\n color: transparent;\n overflow: hidden;\n }\n }\n\n &[type=\"checkbox\"] {\n &:checked + label::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:disabled {\n &,\n & + label,\n & + label::before {\n opacity: 0.5;\n }\n }\n\n + label::before {\n flex-shrink: 0;\n display: inline-block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.5em;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1;\n font-size: 1.1em;\n box-sizing: border-box;\n color: transparent;\n overflow: hidden;\n }\n }\n\n &.resize-height {\n resize: vertical;\n }\n}\n\n// Textareas should have stock line-height + vertical padding instead of huge line-height\ntextarea {\n padding: var(--_padding);\n line-height: var(--post-line-height);\n}\n\noption {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n}\n\n.hide-number-spinner {\n appearance: textfield;\n\n &[type=\"number\"]::-webkit-inner-spin-button,\n &[type=\"number\"]::-webkit-outer-spin-button {\n opacity: 0;\n display: none;\n }\n}\n\n.cards-list {\n list-style: none;\n display: grid;\n grid-auto-flow: row dense;\n grid-template-columns: 1fr 1fr;\n\n li {\n border: 1px solid var(--border);\n border-radius: var(--inputRadius);\n padding: 0.5em;\n margin: 0.25em;\n }\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-group {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n\n button,\n .button-dropdown {\n position: relative;\n flex: 1 1 auto;\n\n &:not(:last-child),\n &:not(:last-child) .button-default {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &:not(:first-child),\n &:not(:first-child) .button-default {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n}\n\n.fa {\n color: grey;\n}\n\n.mobile-shown {\n display: none;\n}\n\n.badge {\n box-sizing: border-box;\n display: inline-block;\n border-radius: 99px;\n max-width: 10em;\n min-width: 1.7em;\n height: 1.3em;\n padding: 0.15em;\n vertical-align: middle;\n font-weight: normal;\n font-style: normal;\n font-size: 0.9em;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.badge-notification {\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n color: white;\n color: var(--badgeNotificationText, white);\n }\n}\n\n.alert {\n margin: 0 0.35em;\n padding: 0 0.25em;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n &.error {\n background-color: $fallback--alertError;\n background-color: var(--alertError, $fallback--alertError);\n color: $fallback--text;\n color: var(--alertErrorText, $fallback--text);\n\n .panel-heading & {\n color: $fallback--text;\n color: var(--alertErrorPanelText, $fallback--text);\n }\n }\n\n &.warning {\n background-color: $fallback--alertWarning;\n background-color: var(--alertWarning, $fallback--alertWarning);\n color: $fallback--text;\n color: var(--alertWarningText, $fallback--text);\n\n .panel-heading & {\n color: $fallback--text;\n color: var(--alertWarningPanelText, $fallback--text);\n }\n }\n\n &.success {\n background-color: var(--alertSuccess, $fallback--alertWarning);\n color: var(--alertSuccessText, $fallback--text);\n\n .panel-heading & {\n color: var(--alertSuccessPanelText, $fallback--text);\n }\n }\n}\n\n.faint {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n}\n\n.faint-link {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n\n &:hover {\n text-decoration: underline;\n }\n}\n\n.visibility-notice {\n padding: 0.5em;\n border: 1px solid $fallback--faint;\n border: 1px solid var(--faint, $fallback--faint);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n}\n\n.notice-dismissible {\n padding-right: 4rem;\n position: relative;\n\n .dismiss {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.5em;\n color: inherit;\n }\n}\n\n.fa-scale-110 {\n &.svg-inline--fa,\n &.iconLetter {\n font-size: 1.1em;\n }\n}\n\n.fa-old-padding {\n &.iconLetter,\n &.svg-inline--fa,\n &-layer {\n padding: 0 0.3em;\n }\n}\n\n.veryfaint {\n opacity: 0.25;\n}\n\n.login-hint {\n text-align: center;\n\n @media all and (min-width: 801px) {\n display: none;\n }\n\n a {\n display: inline-block;\n padding: 1em 0;\n width: 100%;\n }\n}\n\n.btn.button-default {\n min-height: 2em;\n}\n\n.new-status-notification {\n position: relative;\n font-size: 1.1em;\n z-index: 1;\n flex: 1;\n}\n\n@media all and (max-width: 800px) {\n .mobile-hidden {\n display: none;\n }\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(359deg);\n }\n}\n\n@keyframes shakeError {\n 0% {\n transform: translateX(0);\n }\n\n 15% {\n transform: translateX(0.375rem);\n }\n\n 30% {\n transform: translateX(-0.375rem);\n }\n\n 45% {\n transform: translateX(0.375rem);\n }\n\n 60% {\n transform: translateX(-0.375rem);\n }\n\n 75% {\n transform: translateX(0.375rem);\n }\n\n 90% {\n transform: translateX(-0.375rem);\n }\n\n 100% {\n transform: translateX(0);\n }\n}\n\n// Vue transitions\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s;\n}\n\n.fade-enter-from,\n.fade-leave-active {\n opacity: 0;\n}\n/* stylelint-enable no-descending-specificity */\n\n.visible-for-screenreader-only {\n display: block;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n visibility: visible;\n clip: rect(0 0 0 0);\n padding: 0;\n position: absolute;\n}\n","/* stylelint-disable no-descending-specificity */\n.panel {\n position: relative;\n display: flex;\n flex-direction: column;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n &::after,\n & {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n}\n\n.panel-body {\n padding: var(--panel-body-padding, 0);\n\n &:empty::before {\n content: \"¯\\\\_(ツ)_/¯\"; // Could use words but it'd require translations\n display: block;\n margin: 1em;\n text-align: center;\n }\n\n > p {\n line-height: 1.3;\n padding: 1em;\n margin: 0;\n }\n}\n\n.panel-heading,\n.panel-footer {\n --panel-heading-height-padding: 0.6em;\n --__panel-heading-gap: 0.5em;\n --__panel-heading-height: 3.2em;\n --__panel-heading-height-inner: calc(var(--__panel-heading-height) - 2 * var(--panel-heading-height-padding, 0));\n\n position: relative;\n box-sizing: border-box;\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: minmax(50%, 1fr);\n grid-auto-columns: auto;\n grid-column-gap: var(--__panel-heading-gap);\n flex: none;\n background-size: cover;\n padding: var(--panel-heading-height-padding);\n height: var(--__panel-heading-height);\n line-height: var(--__panel-heading-height-inner);\n z-index: 4;\n\n &.-flexible-height {\n --__panel-heading-height: auto;\n\n &::after,\n &::before {\n display: none;\n }\n }\n\n &.-stub {\n &,\n &::after {\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n &.-sticky {\n position: sticky;\n top: var(--navbar-height);\n }\n\n &::after,\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n pointer-events: none;\n }\n\n .title {\n font-size: 1.3em;\n }\n\n .alert {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n }\n\n &:not(.-flexible-height) {\n > .button-default,\n > .alert {\n height: var(--__panel-heading-height-inner);\n min-height: 0;\n box-sizing: border-box;\n margin: 0;\n min-width: 1px;\n padding-top: 0;\n padding-bottom: 0;\n align-self: stretch;\n }\n }\n}\n\n// TODO Should refactor panels into separate component and utilize slots\n\n.panel-heading {\n border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;\n border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;\n border-width: 0 0 1px;\n align-items: start;\n // panel theme\n color: var(--panelText);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n &::after {\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n z-index: -2;\n border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;\n border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;\n box-shadow: var(--panelHeaderShadow);\n }\n\n a,\n .-link {\n color: $fallback--link;\n color: var(--panelLink, $fallback--link);\n }\n\n .button-unstyled:hover,\n a:hover {\n i[class*=\"icon-\"],\n .svg-inline--fa,\n .iconLetter {\n color: var(--panelText);\n }\n }\n\n .faint {\n background-color: transparent;\n color: $fallback--faint;\n color: var(--panelFaint, $fallback--faint);\n }\n\n .faint-link {\n color: $fallback--faint;\n color: var(--faintLink, $fallback--faint);\n }\n\n &:not(.-flexible-height) {\n > .button-default {\n flex-shrink: 0;\n\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnPanelText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--fg;\n background-color: var(--btnPressedPanel, $fallback--fg);\n color: $fallback--text;\n color: var(--btnPressedPanelText, $fallback--text);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledPanelText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledPanelText, $fallback--text);\n }\n }\n }\n\n .rightside-button {\n align-self: stretch;\n text-align: center;\n width: var(--__panel-heading-height);\n height: var(--__panel-heading-height);\n margin: calc(-1 * var(--panel-heading-height-padding)) 0;\n margin-right: calc(-1 * var(--__panel-heading-gap));\n\n > button {\n box-sizing: border-box;\n padding: calc(1 * var(--panel-heading-height-padding)) 0;\n height: 100%;\n width: 100%;\n text-align: center;\n\n svg {\n font-size: 1.2em;\n }\n }\n }\n\n .rightside-icon {\n align-self: stretch;\n text-align: center;\n width: var(--__panel-heading-height);\n margin-right: calc(-1 * var(--__panel-heading-gap));\n\n svg {\n font-size: 1.2em;\n }\n }\n}\n\n.panel-footer {\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n align-items: center;\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n}\n/* stylelint-enable no-descending-specificity */\n","\n@import \"../../variables\";\n\n.thread-tree-replies {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n}\n\n.thread-tree-replies-hidden {\n padding: var(--status-margin, $status-margin);\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n}\n","\n@import \"../../variables\";\n\n.Conversation {\n z-index: 1;\n\n .conversation-dive-to-top-level-box {\n padding: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n\n .thread-ancestors {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n }\n\n .thread-ancestor.-faded .StatusContent {\n --link: var(--faintLink);\n --text: var(--faint);\n\n color: var(--text);\n }\n\n .thread-ancestor-dive-box {\n padding-left: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n &,\n &-inner {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n }\n\n .thread-ancestor-dive-box-inner {\n padding: var(--status-margin, $status-margin);\n }\n\n .conversation-status {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n }\n\n .thread-ancestor-has-other-replies .conversation-status,\n &:last-child .conversation-status,\n .thread-ancestor:last-child .conversation-status,\n .thread-ancestor:last-child .thread-ancestor-dive-box,\n &.-expanded .thread-tree .conversation-status {\n border-bottom: none;\n }\n\n .thread-ancestors + .thread-tree > .conversation-status {\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n /* expanded conversation in timeline */\n &.status-fadein.-expanded .thread-body {\n border-left: 4px solid $fallback--cRed;\n border-left-color: var(--cRed, $fallback--cRed);\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n border-bottom: 1px solid var(--border, $fallback--border);\n }\n\n &.-expanded.status-fadein {\n margin: calc(var(--status-margin, $status-margin) / 2);\n }\n}\n","\n@import \"../../variables\";\n\n.timeline-menu-popover {\n min-width: 24rem;\n max-width: 100vw;\n margin-top: 0.6rem;\n font-size: 1rem;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n a {\n display: block;\n padding: 0 0.65em;\n height: 3.5em;\n line-height: 3.5em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n }\n\n &.router-link-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n svg {\n margin-right: 0.4em;\n margin-left: -0.2em;\n }\n }\n\n li {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 0;\n\n &:last-child a {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child {\n border: none;\n }\n }\n}\n\n.TimelineMenu {\n margin-right: auto;\n min-width: 0;\n\n .popover-trigger-button {\n vertical-align: bottom;\n }\n\n .panel::after {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n }\n\n .timeline-menu-title {\n margin: 0;\n cursor: pointer;\n user-select: none;\n width: 100%;\n display: flex;\n\n .timeline-menu-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n svg {\n margin-left: 0.6em;\n transition: transform 100ms;\n }\n\n .click-blocker {\n cursor: default;\n flex-grow: 1;\n }\n }\n\n &.open .timeline-menu-title svg {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n transform: rotate(180deg);\n }\n\n .panel {\n box-shadow: var(--popoverShadow);\n }\n}\n","@import \"../../variables\";\n\n.Timeline {\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: var(--badgeNeutral);\n }\n\n .alert-badge {\n font-size: 0.75em;\n line-height: 1;\n text-align: right;\n border-radius: var(--tooltipRadius);\n position: absolute;\n left: calc(50% - 0.5em);\n top: calc(50% - 0.4em);\n padding: 0.2em;\n margin-left: 0.7em;\n margin-top: -1em;\n background-color: var(--badgeNeutral);\n color: var(--badgeNeutralText);\n }\n\n .loadmore-button {\n position: relative;\n }\n\n &.-blocked {\n cursor: progress;\n }\n\n .conversation-heading {\n top: calc(var(--__panel-heading-height) * var(--currentPanelStack, 2));\n z-index: 2;\n }\n\n &.-nonpanel {\n .timeline-heading {\n text-align: center;\n line-height: 2.75em;\n padding: 0 0.5em;\n\n .button-default,\n .alert {\n line-height: 2em;\n width: 100%;\n }\n }\n }\n}\n","@import \"../../variables\";\n\n/* stylelint-disable no-descending-specificity */\n.tab-switcher {\n display: flex;\n\n .tab-icon {\n margin: 0.2em auto;\n display: block;\n }\n\n &.top-tabs {\n flex-direction: column;\n\n > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n flex-direction: row;\n flex: 0 0 auto;\n\n &::after,\n &::before {\n content: \"\";\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n .tab-wrapper {\n height: 2em;\n\n &:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n }\n\n .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: 6px - 99px;\n }\n }\n\n .contents.scrollable-tabs {\n flex-basis: 0;\n }\n }\n\n &.side-tabs {\n flex-direction: row;\n\n @media all and (max-width: 800px) {\n overflow-x: auto;\n }\n\n > .contents {\n flex: 1 1 auto;\n }\n\n > .tabs {\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n flex-direction: column;\n\n &::after,\n &::before {\n flex-shrink: 0;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &::after {\n flex-grow: 1;\n }\n\n &::before {\n flex-grow: 0;\n }\n\n .tab-wrapper {\n min-width: 10em;\n display: flex;\n flex-direction: column;\n\n @media all and (max-width: 800px) {\n min-width: 4em;\n }\n\n &:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &::before {\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: $fallback--border;\n border-right-color: var(--border, $fallback--border);\n }\n\n &:last-child .tab {\n margin-bottom: 0;\n }\n }\n\n .tab {\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 padding-left: 0.25em;\n padding-right: calc(0.25em + 200px);\n margin-right: calc(0.25em - 200px);\n margin-left: 0.25em;\n\n .text {\n display: none;\n }\n }\n }\n }\n }\n\n .contents {\n flex: 1 0 auto;\n min-height: 0;\n\n .hidden {\n display: none;\n }\n\n .full-height:not(.hidden) {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n > *:not(.mobile-label) {\n flex: 1;\n }\n }\n\n &.scrollable-tabs {\n overflow-y: auto;\n }\n }\n\n .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n\n &:not(.active) {\n z-index: 4;\n\n &:hover {\n z-index: 6;\n }\n }\n\n &.active {\n background: transparent;\n z-index: 5;\n color: $fallback--text;\n color: var(--tabActiveText, $fallback--text);\n }\n\n img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n }\n }\n\n .tabs {\n display: flex;\n position: relative;\n box-sizing: border-box;\n\n &::after,\n &::before {\n display: block;\n flex: 1 1 auto;\n }\n }\n\n .tab-wrapper {\n position: relative;\n display: flex;\n flex: 0 0 auto;\n\n &:not(.active) {\n &::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n }\n }\n }\n\n .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, $fallback--border);\n\n @media all and (min-width: 800px) {\n display: none;\n }\n }\n}\n/* stylelint-enable no-descending-specificity */\n","\n@import \"../../variables\";\n\n.chat-title {\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n --emoji-size: 14px;\n\n .username {\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: inline;\n word-wrap: break-word;\n overflow: hidden;\n }\n\n .avatar-container {\n align-self: center;\n line-height: 1;\n }\n\n .titlebar-avatar {\n margin-right: 0.5em;\n height: 1.5em;\n width: 1.5em;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n\n &.animated::before {\n display: none;\n }\n }\n}\n",".chat-list-item {\n display: flex;\n flex-direction: row;\n padding: 0.75em;\n height: 5em;\n overflow: hidden;\n box-sizing: border-box;\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n &:hover {\n background-color: var(--selectedPost, $fallback--lightBg);\n box-shadow: 0 0 3px 1px rgb(0 0 0 / 10%);\n }\n\n .chat-list-item-left {\n margin-right: 1em;\n }\n\n .chat-list-item-center {\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n word-wrap: break-word;\n }\n\n .heading {\n width: 100%;\n display: inline-flex;\n justify-content: space-between;\n line-height: 1em;\n }\n\n .heading-right {\n white-space: nowrap;\n }\n\n .name-and-account-name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n flex-shrink: 1;\n line-height: var(--post-line-height);\n }\n\n .chat-preview {\n display: inline-flex;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0.35em 0;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n width: 100%;\n }\n\n a {\n color: var(--faintLink, $fallback--link);\n text-decoration: none;\n pointer-events: none;\n }\n\n &:hover .animated.avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n\n .Avatar {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .chat-preview-body {\n --emoji-size: 1.4em;\n\n padding-right: 1em;\n }\n\n .time-wrapper {\n line-height: var(--post-line-height);\n }\n}\n","\n.basic-user-card {\n display: flex;\n flex: 1 0;\n margin: 0;\n padding: 0.6em 1em;\n\n --emoji-size: 14px;\n\n &-collapsed-content {\n margin-left: 0.7em;\n text-align: left;\n flex: 1;\n min-width: 0;\n }\n\n &-user-name {\n img {\n object-fit: contain;\n height: 16px;\n width: 16px;\n vertical-align: middle;\n }\n }\n\n &-user-name-value,\n &-screen-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-expanded-content {\n flex: 1;\n margin-left: 0.7em;\n min-width: 0;\n }\n}\n",".chat-new {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .member-list {\n padding-bottom: 0.7rem;\n }\n\n .basic-user-card:hover {\n cursor: pointer;\n background-color: var(--selectedPost, $fallback--lightBg);\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n}\n","\n@import \"../../variables\";\n\n.chat-list {\n min-height: 25em;\n margin-bottom: 0;\n}\n\n.emtpy-chat-list-alert {\n padding: 3em;\n font-size: 1.2em;\n display: flex;\n justify-content: center;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n}\n\n","@import \"../../variables\";\n\n.chat-message-wrapper {\n &.hovered-message-chain {\n .animated.Avatar {\n canvas {\n display: none;\n }\n\n img {\n visibility: visible;\n }\n }\n }\n\n .chat-message-menu {\n transition: opacity 0.1s;\n opacity: 0;\n position: absolute;\n top: -0.8em;\n\n button {\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n }\n }\n\n .menu-icon {\n cursor: pointer;\n\n &:hover,\n .extra-button-popover.open & {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover {\n width: 12em;\n }\n\n .chat-message {\n display: flex;\n padding-bottom: 0.5em;\n\n .status-body:hover {\n --_still-image-img-visibility: visible;\n --_still-image-canvas-visibility: hidden;\n --_still-image-label-visibility: hidden;\n }\n }\n\n .avatar-wrapper {\n margin-right: 0.72em;\n width: 32px;\n }\n\n .link-preview,\n .attachments {\n margin-bottom: 1em;\n }\n\n .status {\n border-radius: $fallback--chatMessageRadius;\n border-radius: var(--chatMessageRadius, $fallback--chatMessageRadius);\n display: flex;\n padding: 0.75em;\n }\n\n .created-at {\n position: relative;\n float: right;\n font-size: 0.8em;\n margin: -1em 0 -0.5em;\n font-style: italic;\n opacity: 0.8;\n }\n\n .without-attachment {\n .message-content {\n // TODO figure out how to do it properly\n .RichContent::after {\n margin-right: 5.4em;\n content: \" \";\n display: inline-block;\n }\n }\n }\n\n .pending {\n .status-content.media-body,\n .created-at {\n color: var(--faint);\n }\n }\n\n .error {\n .status-content.media-body,\n .created-at {\n color: $fallback--cRed;\n color: var(--badgeNotification, $fallback--cRed);\n }\n }\n\n .chat-message-inner {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-width: 80%;\n min-width: 10em;\n width: 100%;\n }\n\n .outgoing {\n display: flex;\n flex-flow: row wrap;\n align-content: end;\n justify-content: flex-end;\n\n a {\n color: var(--chatMessageOutgoingLink, $fallback--link);\n }\n\n .status {\n color: var(--chatMessageOutgoingText, $fallback--text);\n background-color: var(--chatMessageOutgoingBg, $fallback--lightBg);\n border: 1px solid var(--chatMessageOutgoingBorder, --lightBg);\n }\n\n .chat-message-inner {\n align-items: flex-end;\n }\n\n .chat-message-menu {\n right: 0.4rem;\n }\n }\n\n .incoming {\n a {\n color: var(--chatMessageIncomingLink, $fallback--link);\n }\n\n .status {\n color: var(--chatMessageIncomingText, $fallback--text);\n background-color: var(--chatMessageIncomingBg, $fallback--bg);\n border: 1px solid var(--chatMessageIncomingBorder, --border);\n }\n\n .created-at {\n a {\n color: var(--chatMessageIncomingText, $fallback--text);\n }\n }\n\n .chat-message-menu {\n left: 0.4rem;\n }\n }\n\n .chat-message-inner.with-media {\n width: 100%;\n\n .status {\n width: 100%;\n }\n }\n\n .visible {\n opacity: 1;\n }\n}\n\n.chat-message-date-separator {\n text-align: center;\n margin: 1.4em 0;\n font-size: 0.9em;\n user-select: none;\n color: $fallback--text;\n color: var(--faintedText, $fallback--text);\n}\n",".chat-view {\n display: flex;\n height: 100%;\n\n .chat-view-inner {\n height: auto;\n width: 100%;\n overflow: visible;\n display: flex;\n }\n\n .chat-view-body {\n box-sizing: border-box;\n background-color: var(--chatBg, $fallback--bg);\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: visible;\n min-height: calc(100vh - var(--navbar-height));\n margin: 0;\n border-radius: 10px 10px 0 0;\n border-radius: var(--panelRadius, 10px) var(--panelRadius, 10px) 0 0;\n\n &::after {\n border-radius: 0;\n }\n }\n\n .message-list {\n padding: 0 0.8em;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: end;\n }\n\n .footer {\n position: sticky;\n bottom: 0;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n z-index: 1;\n }\n\n .chat-view-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .jump-to-bottom-button {\n width: 2.5em;\n height: 2.5em;\n border-radius: 100%;\n position: absolute;\n right: 1.3em;\n top: -3.2em;\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 1px 1px rgb(0 0 0 / 30%), 0 2px 4px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s all;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n opacity: 0;\n visibility: hidden;\n cursor: pointer;\n\n &.visible {\n opacity: 1;\n visibility: visible;\n }\n\n i {\n font-size: 1em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n .unread-message-count {\n font-size: 0.8em;\n left: 50%;\n margin-top: -1rem;\n padding: 0.1em;\n border-radius: 50px;\n position: absolute;\n }\n\n .chat-loading-error {\n width: 100%;\n display: flex;\n align-items: flex-end;\n height: 100%;\n\n .error {\n width: 100%;\n }\n }\n }\n}\n","\n.follow-card {\n &-content-container {\n flex-shrink: 0;\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n line-height: 1.5em;\n }\n\n &-button {\n margin-top: 0.5em;\n padding: 0 1.5em;\n margin-left: 1em;\n }\n\n &-follow-button {\n margin-top: 0.5em;\n margin-left: auto;\n width: 10em;\n }\n}\n","@import \"../../variables\";\n\n.with-load-more {\n &-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: $fallback--border;\n border-top-color: var(--border, $fallback--border);\n\n .error {\n font-size: 1rem;\n }\n\n a {\n cursor: pointer;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.user-profile {\n flex: 2;\n flex-basis: 500px;\n\n // No sticky header on user profile\n --currentPanelStack: 1;\n\n .user-birthday {\n margin: 0 0.75em 0.5em;\n }\n\n .user-profile-fields {\n margin: 0 0.5em;\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n\n &.emoji {\n width: 18px;\n height: 18px;\n }\n }\n\n .user-profile-field {\n display: flex;\n margin: 0.25em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n\n .user-profile-field-name {\n flex: 0 1 30%;\n font-weight: 500;\n text-align: right;\n color: var(--lightText);\n min-width: 120px;\n border-right: 1px solid var(--border, $fallback--border);\n }\n\n .user-profile-field-value {\n flex: 1 1 70%;\n color: var(--text);\n margin: 0 0 0 0.25em;\n }\n\n .user-profile-field-name,\n .user-profile-field-value {\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n padding: 0.5em 1.5em;\n box-sizing: border-box;\n }\n }\n }\n\n .userlist-placeholder {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 2em;\n }\n}\n\n.user-profile-placeholder {\n .panel-body {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 7em;\n }\n}\n","\n@import \"../../variables\";\n\n.search-result-heading {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n padding: 0.75rem;\n text-align: center;\n}\n\n@media all and (max-width: 800px) {\n .search-nav-heading {\n .tab-switcher .tabs .tab-wrapper {\n display: block;\n justify-content: center;\n flex: 1 1 auto;\n text-align: center;\n }\n }\n}\n\n.search-result {\n box-sizing: border-box;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.search-result-footer {\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n padding: 10px;\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n}\n\n.search-input-container {\n padding: 0.8rem;\n display: flex;\n justify-content: center;\n\n .search-input {\n width: 100%;\n line-height: 1.125rem;\n font-size: 1rem;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n\n .search-button {\n margin-left: 0.5em;\n }\n}\n\n.loading-icon {\n padding: 1em;\n}\n\n.trend {\n display: flex;\n align-items: center;\n\n .hashtag {\n flex: 1 1 auto;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .count {\n flex: 0 0 auto;\n width: 2rem;\n font-size: 1.5rem;\n line-height: 2.25rem;\n font-weight: 500;\n text-align: center;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n.more-statuses-button {\n height: 3.5em;\n line-height: 3.5em;\n}\n\n","\n@import \"../../variables\";\n\n.interface-language-switcher {\n .language-select {\n margin-right: 1em;\n }\n}\n","\n@import \"../../variables\";\n$validations-cRed: #f04124;\n\n.registration-form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex-direction: row;\n\n > * {\n min-width: 0;\n }\n }\n\n .terms-of-service {\n flex: 0 1 50%;\n margin: 0.8em;\n }\n\n .text-fields {\n margin-top: 0.6em;\n flex: 1 0;\n display: flex;\n flex-direction: column;\n }\n\n textarea {\n min-height: 100px;\n resize: vertical;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0;\n line-height: 2;\n margin-bottom: 1em;\n }\n\n .form-group--error {\n animation-name: shakeError;\n animation-duration: 0.6s;\n animation-timing-function: ease-in-out;\n }\n\n .form-group--error .form--label {\n color: $validations-cRed;\n color: var(--cRed, $validations-cRed);\n }\n\n .form-error {\n margin-top: -0.7em;\n text-align: left;\n\n span {\n font-size: 0.85em;\n }\n }\n\n .form-error ul {\n list-style: none;\n padding: 0 0 0 5px;\n margin-top: 0;\n\n li::before {\n content: \"• \";\n }\n }\n\n form textarea {\n line-height: 16px;\n resize: vertical;\n }\n\n .captcha {\n max-width: 350px;\n margin-bottom: 0.4em;\n }\n\n .btn {\n margin-top: 0.6em;\n height: 2em;\n }\n\n .error {\n text-align: center;\n }\n}\n\n@media all and (max-width: 800px) {\n .registration-form .container {\n flex-direction: column-reverse;\n }\n}\n","\n@import \"../../variables\";\n\n.password-reset-form {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex: 1 0;\n flex-direction: column;\n margin-top: 0.6em;\n max-width: 18rem;\n\n > * {\n min-width: 0;\n }\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 1em;\n padding: 0.3em 0;\n line-height: 1.85em;\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n\n .alert {\n padding: 0.5em;\n margin: 0.3em 0 1em;\n }\n\n .password-reset-required {\n background-color: var(--alertError, $fallback--alertError);\n padding: 10px 0;\n }\n\n .notice-dismissible {\n padding-right: 2rem;\n }\n\n .dismiss {\n cursor: pointer;\n }\n}\n\n","\n.follow-request-card-content-container {\n display: flex;\n flex-flow: row wrap;\n\n button {\n margin-top: 0.5em;\n margin-right: 0.5em;\n flex: 1 1;\n max-width: 12em;\n min-width: 8em;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n","\n.tos-content {\n margin: 1em;\n}\n","\n.staff-group {\n padding-left: 1em;\n padding-top: 1em;\n\n .basic-user-card {\n padding-left: 0;\n }\n}\n\n",".mrf-section {\n margin: 1em;\n\n table {\n width: 100%;\n text-align: left;\n padding-left: 10px;\n padding-bottom: 20px;\n\n th,\n td {\n width: 180px;\n max-width: 360px;\n overflow: hidden;\n vertical-align: text-top;\n }\n\n th + th,\n td + td {\n width: auto;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.list-card {\n display: flex;\n}\n\n.list-name {\n flex-grow: 1;\n}\n\n.list-name,\n.button-list-edit {\n margin: 0;\n padding: 1em;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n }\n}\n","\n.Lists {\n .new-list-button {\n padding: 0 0.5em;\n }\n}\n","\n@import \"../../variables\";\n\n.ListsUserSearch {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n}\n\n","\n@import \"src/variables\";\n\n.panel-loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n\n .loading-text svg {\n line-height: 0;\n vertical-align: middle;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n","\n@import \"../../variables\";\n\n.ListEdit {\n --panel-body-padding: 0.5em;\n\n height: calc(100vh - var(--navbar-height));\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .list-edit-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .panel-body {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n }\n\n .list-member-management {\n flex: 1 0 auto;\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .users-list {\n padding-bottom: 0.7rem;\n overflow-y: auto;\n }\n\n & .search-list,\n & .members-list {\n overflow: hidden;\n flex-direction: column;\n min-height: 0;\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .btn {\n margin: 0 0.5em;\n }\n\n .panel-footer {\n grid-template-columns: minmax(10%, 1fr);\n\n .footer-button {\n min-width: 9em;\n }\n }\n}\n","\n.announcement-editor {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n\n .announcement-metadata {\n margin-top: 0.5em;\n }\n\n .post-textarea {\n resize: vertical;\n height: 10em;\n overflow: none;\n box-sizing: content-box;\n }\n}\n","\n@import \"../../variables\";\n\n.announcement {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .footer {\n display: flex;\n flex-direction: column;\n\n .times {\n display: flex;\n flex-direction: column;\n }\n }\n\n .footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n\n .btn {\n flex: 1;\n margin: 1em;\n max-width: 10em;\n }\n }\n}\n","\n@import \"../../variables\";\n\n.announcements-page {\n .post-form {\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .post-button {\n min-width: 10em;\n }\n }\n}\n"],"names":[],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/js/7586.628f729b9c8b2e6f4e1f.js b/priv/static/static/js/7586.628f729b9c8b2e6f4e1f.js @@ -0,0 +1,2 @@ +(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[7586],{25771:(t,e,n)=>{"use strict";n.d(e,{M:()=>i,i:()=>a});var r=n(57458),o=n.n(r),i=function(t){var e=t.filename,n=void 0===e?"data":e,r=t.getExportedObject;return{exportData:function(){var t=o().encode(JSON.stringify(r(),null,2)),e=document.createElement("a");e.setAttribute("download","".concat(n,".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)}}},a=function(t){var e=t.onImport,n=t.onImportFailure,r=t.validator,o=void 0===r?function(){return!0}:r;return{importData:function(){var t=document.createElement("input");t.setAttribute("type","file"),t.setAttribute("accept",".json"),t.addEventListener("change",(function(t){if(t.target.files[0]){var r=new FileReader;r.onload=function(t){var r=t.target;try{var i=JSON.parse(r.result),a=o(i);!0===a?e(i):n({validationResult:a})}catch(t){n({error:t})}},r.readAsText(t.target.files[0])}})),document.body.appendChild(t),t.click(),document.body.removeChild(t)}}}},57458:(t,e)=>{!function(t){var e,n,r,o=String.fromCharCode;function i(t){for(var e,n,r=[],o=0,i=t.length;o<i;)(e=t.charCodeAt(o++))>=55296&&e<=56319&&o<i?56320==(64512&(n=t.charCodeAt(o++)))?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--):r.push(e);return r}function a(t){if(t>=55296&&t<=57343)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function s(t,e){return o(t>>e&63|128)}function l(t){if(0==(4294967168&t))return o(t);var e="";return 0==(4294965248&t)?e=o(t>>6&31|192):0==(4294901760&t)?(a(t),e=o(t>>12&15|224),e+=s(t,6)):0==(4292870144&t)&&(e=o(t>>18&7|240),e+=s(t,12),e+=s(t,6)),e+o(63&t|128)}function c(){if(r>=n)throw Error("Invalid byte index");var t=255&e[r];if(r++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function d(){var t,o;if(r>n)throw Error("Invalid byte index");if(r==n)return!1;if(t=255&e[r],r++,0==(128&t))return t;if(192==(224&t)){if((o=(31&t)<<6|c())>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if((o=(15&t)<<12|c()<<6|c())>=2048)return a(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(o=(7&t)<<18|c()<<12|c()<<6|c())>=65536&&o<=1114111)return o;throw Error("Invalid UTF-8 detected")}t.version="3.0.0",t.encode=function(t){for(var e=i(t),n=e.length,r=-1,o="";++r<n;)o+=l(e[r]);return o},t.decode=function(t){e=i(t),n=e.length,r=0;for(var a,s=[];!1!==(a=d());)s.push(a);return function(t){for(var e,n=t.length,r=-1,i="";++r<n;)(e=t[r])>65535&&(i+=o((e-=65536)>>>10&1023|55296),e=56320|1023&e),i+=o(e);return i}(s)}}(e)},27586:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>J});var r=n(66252),o=n(3577),i=n(49963),a={class:"settings-modal-panel panel"},s={class:"panel-heading"},l={class:"title"},c=["title"],d=["title"],u={class:"panel-body"},p={class:"panel-footer settings-footer -flexible-height"},f=["title"],m={class:"dropdown-menu"},g=["onClick"],h=["onClick"],b=["onClick"],v={key:1},_={href:"/pleroma/admin/#/login-pleroma",target:"_blank"},w=(0,r._)("span",{id:"unscrolled-content",class:"extra-content"},null,-1),y={key:2,class:"admin-buttons"},k=["disabled"],O=["disabled"],x=n(4942),C=n(29439),j=n(18446),M=n.n(j),$=n(50361),A=n.n($),S=n(48328),D=n(29187),E={class:"async-component-error"};const P={emits:["resetAsyncComponent"],methods:{retry:function(){this.$emit("resetAsyncComponent")}}};var I=n(83744);const z=(0,I.Z)(P,[["render",function(t,e,n,i,a,s){return(0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("div",null,[(0,r._)("h4",null,(0,o.zw)(t.$t("general.generic_error")),1),(0,r._)("p",null,(0,o.zw)(t.$t("general.error_retry")),1),(0,r._)("button",{class:"btn button-default",onClick:e[0]||(e[0]=function(){return s.retry&&s.retry.apply(s,arguments)})},(0,o.zw)(t.$t("general.retry")),1)])])}]]);var N=n(2262);function U(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}const W=function(t,e){var n=function(){return function(){return(0,r.RC)(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?U(Object(n),!0).forEach((function(e){(0,x.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):U(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({loader:t},e))}},o=(0,N.Um)({c:n()});return{render:function(){return(0,r.h)(o.c(),{onResetAsyncComponent:function(){o.c=n()}})}}};var L=n(84535),T=n(66141),Z=n(9382),F=n(25771),q=n(84131),K=n(5737);function R(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function G(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?R(Object(n),!0).forEach((function(e){(0,x.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}Z.vI.add(q.NBC,K.IQi,q.Y9i,q.kwI,q.ptq);const V={data:function(){var t=this;return{dataImporter:(0,F.i)({validator:this.importValidator,onImport:this.onImport,onImportFailure:this.onImportFailure}),dataThemeExporter:(0,F.M)({filename:"pleromafe_settings.full",getExportedObject:function(){return t.generateExport(!0)}}),dataExporter:(0,F.M)({filename:"pleromafe_settings",getExportedObject:function(){return t.generateExport()}})}},components:{Modal:S.Z,Popover:L.default,Checkbox:T.Z,SettingsModalUserContent:W((function(){return Promise.all([n.e(48),n.e(9060),n.e(7962)]).then(n.bind(n,62691))}),{loadingComponent:D.Z,errorComponent:z,delay:0}),SettingsModalAdminContent:W((function(){return Promise.all([n.e(9060),n.e(8859)]).then(n.bind(n,17135))}),{loadingComponent:D.Z,errorComponent:z,delay:0})},methods:{closeModal:function(){this.$store.dispatch("closeSettingsModal")},peekModal:function(){this.$store.dispatch("togglePeekSettingsModal")},importValidator:function(t){if(!Array.isArray(t._pleroma_settings_version))return{messageKey:"settings.file_import_export.invalid_file"};var e=(0,C.Z)(t._pleroma_settings_version,2),n=e[0],r=e[1];return n>1?{messageKey:"settings.file_export_import.errors.file_too_new",messageArgs:{fileMajor:n,feMajor:1}}:n<1?{messageKey:"settings.file_export_import.errors.file_too_old",messageArgs:{fileMajor:n,feMajor:1}}:(r>0&&this.$store.dispatch("pushGlobalNotice",{level:"warning",messageKey:"settings.file_export_import.errors.file_slightly_new"}),!0)},onImportFailure:function(t){t.error?this.$store.dispatch("pushGlobalNotice",{messageKey:"settings.invalid_settings_imported",level:"error"}):this.$store.dispatch("pushGlobalNotice",G(G({},t.validationResult),{},{level:"error"}))},onImport:function(t){t&&this.$store.dispatch("loadSettings",t)},restore:function(){this.dataImporter.importData()},backup:function(){this.dataExporter.exportData()},backupWithTheme:function(){this.dataThemeExporter.exportData()},generateExport:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.$store.state.config,n=e;if(!t){var r=new Set(["customTheme","customThemeSource","colors"]);n=Object.fromEntries(Object.entries(n).filter((function(t){var e=(0,C.Z)(t,1)[0];return!r.has(e)})))}var o=A()(n);return o._pleroma_settings_version=[1,0],o},resetAdminDraft:function(){this.$store.commit("resetAdminDraft")},pushAdminDraft:function(){this.$store.dispatch("pushAdminDraft")}},computed:{currentSaveStateNotice:function(){return this.$store.state.interface.settings.currentSaveStateNotice},modalActivated:function(){return"hidden"!==this.$store.state.interface.settingsModalState},modalMode:function(){return this.$store.state.interface.settingsModalMode},modalOpenedOnceUser:function(){return this.$store.state.interface.settingsModalLoadedUser},modalOpenedOnceAdmin:function(){return this.$store.state.interface.settingsModalLoadedAdmin},modalPeeked:function(){return"minimized"===this.$store.state.interface.settingsModalState},expertLevel:{get:function(){return this.$store.state.config.expertLevel>0},set:function(t){this.$store.dispatch("setOption",{name:"expertLevel",value:t?1:0})}},adminDraftAny:function(){return!M()(this.$store.state.adminSettings.config,this.$store.state.adminSettings.draft)}}},J=(0,I.Z)(V,[["render",function(t,e,n,x,C,j){var M=(0,r.up)("FAIcon"),$=(0,r.up)("SettingsModalUserContent"),A=(0,r.up)("SettingsModalAdminContent"),S=(0,r.up)("Popover"),D=(0,r.up)("Checkbox"),E=(0,r.up)("i18n-t"),P=(0,r.up)("Modal");return(0,r.wg)(),(0,r.j4)(P,{"is-open":t.modalActivated,class:(0,o.C_)(["settings-modal",{peek:t.modalPeeked}]),"no-background":t.modalPeeked},{default:(0,r.w5)((function(){return[(0,r._)("div",a,[(0,r._)("div",s,[(0,r._)("span",l,(0,o.zw)("user"===t.modalMode?t.$t("settings.settings"):t.$t("admin_dash.window_title")),1),(0,r.Wm)(i.uT,{name:"fade"},{default:(0,r.w5)((function(){return[t.currentSaveStateNotice?((0,r.wg)(),(0,r.iD)("div",{key:0,class:(0,o.C_)(["alert",{transparent:!t.currentSaveStateNotice.error,error:t.currentSaveStateNotice.error}]),onClick:e[0]||(e[0]=(0,i.iM)((function(){}),["prevent"]))},(0,o.zw)(t.currentSaveStateNotice.error?t.$t("settings.saving_err"):t.$t("settings.saving_ok")),3)):(0,r.kq)("",!0)]})),_:1}),(0,r._)("button",{class:"btn button-default",title:t.$t("general.peek"),onClick:e[1]||(e[1]=function(){return t.peekModal&&t.peekModal.apply(t,arguments)})},[(0,r.Wm)(M,{icon:["far","window-minimize"],"fixed-width":""})],8,c),(0,r._)("button",{class:"btn button-default",title:t.$t("general.close"),onClick:e[2]||(e[2]=function(){return t.closeModal&&t.closeModal.apply(t,arguments)})},[(0,r.Wm)(M,{icon:"times","fixed-width":""})],8,d)]),(0,r._)("div",u,["user"===t.modalMode&&t.modalOpenedOnceUser?((0,r.wg)(),(0,r.j4)($,{key:0})):(0,r.kq)("",!0),"admin"===t.modalMode&&t.modalOpenedOnceAdmin?((0,r.wg)(),(0,r.j4)(A,{key:1})):(0,r.kq)("",!0)]),(0,r._)("div",p,["user"===t.modalMode?((0,r.wg)(),(0,r.j4)(S,{key:0,class:"export",trigger:"click",placement:"top",offset:{y:5,x:5},"bound-to":{x:"container"},"remove-padding":""},{trigger:(0,r.w5)((function(){return[(0,r._)("button",{class:"btn button-default",title:t.$t("general.close")},[(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_restore")),1),(0,r.Uk)(" "+(0,o.zw)(" ")+" "),(0,r.Wm)(M,{icon:"chevron-down"})],8,f)]})),content:(0,r.w5)((function(n){var a=n.close;return[(0,r._)("div",m,[(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[3]||(e[3]=(0,i.iM)((function(){return t.backup&&t.backup.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-download","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_settings")),1)],8,g),(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[4]||(e[4]=(0,i.iM)((function(){return t.backupWithTheme&&t.backupWithTheme.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-download","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_settings_theme")),1)],8,h),(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[5]||(e[5]=(0,i.iM)((function(){return t.restore&&t.restore.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-upload","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.restore_settings")),1)],8,b)])]})),_:1})):(0,r.kq)("",!0),(0,r.Wm)(D,{"model-value":!!t.expertLevel,"onUpdate:modelValue":e[6]||(e[6]=function(e){return t.expertLevel=Number(e)})},{default:(0,r.w5)((function(){return[(0,r.Uk)((0,o.zw)(t.$t("settings.expert_mode")),1)]})),_:1},8,["model-value"]),"admin"===t.modalMode?((0,r.wg)(),(0,r.iD)("span",v,[(0,r.Wm)(E,{keypath:"admin_dash.wip_notice"},{adminFeLink:(0,r.w5)((function(){return[(0,r._)("a",_,(0,o.zw)(t.$t("admin_dash.old_ui_link")),1)]})),_:1})])):(0,r.kq)("",!0),w,"admin"===t.modalMode?((0,r.wg)(),(0,r.iD)("span",y,[(0,r._)("button",{class:"button-default btn",disabled:!t.adminDraftAny,onClick:e[7]||(e[7]=function(){return t.resetAdminDraft&&t.resetAdminDraft.apply(t,arguments)})},(0,o.zw)(t.$t("admin_dash.reset_all")),9,k),(0,r.Uk)(" "+(0,o.zw)(" ")+" "),(0,r._)("button",{class:"button-default btn",disabled:!t.adminDraftAny,onClick:e[8]||(e[8]=function(){return t.pushAdminDraft&&t.pushAdminDraft.apply(t,arguments)})},(0,o.zw)(t.$t("admin_dash.commit_all")),9,O)])):(0,r.kq)("",!0)])])]})),_:1},8,["is-open","class","no-background"])}]])}}]); +//# sourceMappingURL=7586.628f729b9c8b2e6f4e1f.js.map +\ No newline at end of file diff --git a/priv/static/static/js/7586.628f729b9c8b2e6f4e1f.js.map b/priv/static/static/js/7586.628f729b9c8b2e6f4e1f.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/7586.628f729b9c8b2e6f4e1f.js","mappings":"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","sources":["webpack://pleroma_fe/./src/services/export_import/export_import.js","webpack://pleroma_fe/./node_modules/utf8/utf8.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.vue","webpack://pleroma_fe/./src/components/async_component_error/async_component_error.vue","webpack://pleroma_fe/./src/components/async_component_error/async_component_error.vue?c151","webpack://pleroma_fe/./src/services/resettable_async_component.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.vue?2a2f"],"sourcesContent":["import utf8 from 'utf8'\n\nexport const newExporter = ({\n filename = 'data',\n getExportedObject\n}) => ({\n exportData () {\n const stringified = utf8.encode(JSON.stringify(getExportedObject(), null, 2)) // Pretty-print and indent with 2 spaces\n\n // Create an invisible link with a data url and simulate a click\n const e = document.createElement('a')\n e.setAttribute('download', `${filename}.json`)\n e.setAttribute('href', 'data:application/json;base64,' + window.btoa(stringified))\n e.style.display = 'none'\n\n document.body.appendChild(e)\n e.click()\n document.body.removeChild(e)\n }\n})\n\nexport const newImporter = ({\n onImport,\n onImportFailure,\n validator = () => true\n}) => ({\n importData () {\n const filePicker = document.createElement('input')\n filePicker.setAttribute('type', 'file')\n filePicker.setAttribute('accept', '.json')\n\n filePicker.addEventListener('change', event => {\n if (event.target.files[0]) {\n // eslint-disable-next-line no-undef\n const reader = new FileReader()\n reader.onload = ({ target }) => {\n try {\n const parsed = JSON.parse(target.result)\n const validationResult = validator(parsed)\n if (validationResult === true) {\n onImport(parsed)\n } else {\n onImportFailure({ validationResult })\n }\n } catch (error) {\n onImportFailure({ error })\n }\n }\n reader.readAsText(event.target.files[0])\n }\n })\n\n document.body.appendChild(filePicker)\n filePicker.click()\n document.body.removeChild(filePicker)\n }\n})\n","/*! https://mths.be/utf8js v3.0.0 by @mathias */\n;(function(root) {\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\troot.version = '3.0.0';\n\troot.encode = utf8encode;\n\troot.decode = utf8decode;\n\n}(typeof exports === 'undefined' ? this.utf8 = {} : exports));\n","<template>\n <Modal\n :is-open=\"modalActivated\"\n class=\"settings-modal\"\n :class=\"{ peek: modalPeeked }\"\n :no-background=\"modalPeeked\"\n >\n <div class=\"settings-modal-panel panel\">\n <div class=\"panel-heading\">\n <span class=\"title\">\n {{ modalMode === 'user' ? $t('settings.settings') : $t('admin_dash.window_title') }}\n </span>\n <transition name=\"fade\">\n <div\n v-if=\"currentSaveStateNotice\"\n class=\"alert\"\n :class=\"{ transparent: !currentSaveStateNotice.error, error: currentSaveStateNotice.error}\"\n @click.prevent\n >\n {{ currentSaveStateNotice.error ? $t('settings.saving_err') : $t('settings.saving_ok') }}\n </div>\n </transition>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.peek')\"\n @click=\"peekModal\"\n >\n <FAIcon\n :icon=\"['far', 'window-minimize']\"\n fixed-width\n />\n </button>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.close')\"\n @click=\"closeModal\"\n >\n <FAIcon\n icon=\"times\"\n fixed-width\n />\n </button>\n </div>\n <div class=\"panel-body\">\n <SettingsModalUserContent v-if=\"modalMode === 'user' && modalOpenedOnceUser\" />\n <SettingsModalAdminContent v-if=\"modalMode === 'admin' && modalOpenedOnceAdmin\" />\n </div>\n <div class=\"panel-footer settings-footer -flexible-height\">\n <Popover\n v-if=\"modalMode === 'user'\"\n class=\"export\"\n trigger=\"click\"\n placement=\"top\"\n :offset=\"{ y: 5, x: 5 }\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n >\n <template #trigger>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.close')\"\n >\n <span>{{ $t(\"settings.file_export_import.backup_restore\") }}</span>\n {{ ' ' }}\n <FAIcon\n icon=\"chevron-down\"\n />\n </button>\n </template>\n <template #content=\"{close}\">\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"backup\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-download\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.backup_settings\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"backupWithTheme\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-download\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.backup_settings_theme\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"restore\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-upload\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.restore_settings\") }}</span>\n </button>\n </div>\n </template>\n </Popover>\n\n <Checkbox\n :model-value=\"!!expertLevel\"\n @update:modelValue=\"expertLevel = Number($event)\"\n >\n {{ $t(\"settings.expert_mode\") }}\n </Checkbox>\n <span v-if=\"modalMode === 'admin'\">\n <i18n-t keypath=\"admin_dash.wip_notice\">\n <template #adminFeLink>\n <a\n href=\"/pleroma/admin/#/login-pleroma\"\n target=\"_blank\"\n >\n {{ $t(\"admin_dash.old_ui_link\") }}\n </a>\n </template>\n </i18n-t>\n </span>\n <span\n id=\"unscrolled-content\"\n class=\"extra-content\"\n />\n <span\n v-if=\"modalMode === 'admin'\"\n class=\"admin-buttons\"\n >\n <button\n class=\"button-default btn\"\n :disabled=\"!adminDraftAny\"\n @click=\"resetAdminDraft\"\n >\n {{ $t(\"admin_dash.reset_all\") }}\n </button>\n {{ ' ' }}\n <button\n class=\"button-default btn\"\n :disabled=\"!adminDraftAny\"\n @click=\"pushAdminDraft\"\n >\n {{ $t(\"admin_dash.commit_all\") }}\n </button>\n </span>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./settings_modal.js\"></script>\n\n<style src=\"./settings_modal.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"async-component-error\">\n <div>\n <h4>\n {{ $t('general.generic_error') }}\n </h4>\n <p>\n {{ $t('general.error_retry') }}\n </p>\n <button\n class=\"btn button-default\"\n @click=\"retry\"\n >\n {{ $t('general.retry') }}\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n emits: ['resetAsyncComponent'],\n methods: {\n retry () {\n this.$emit('resetAsyncComponent')\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.async-component-error {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n .btn {\n margin: 0.5em;\n padding: 0.5em 2em;\n }\n}\n</style>\n","import { render } from \"./async_component_error.vue?vue&type=template&id=0e326028\"\nimport script from \"./async_component_error.vue?vue&type=script&lang=js\"\nexport * from \"./async_component_error.vue?vue&type=script&lang=js\"\n\nimport \"./async_component_error.vue?vue&type=style&index=0&id=0e326028&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineAsyncComponent, shallowReactive, h } from 'vue'\n\n/* By default async components don't have any way to recover, if component is\n * failed, it is failed forever. This helper tries to remedy that by recreating\n * async component when retry is requested (by user). You need to emit the\n * `resetAsyncComponent` event from child to reset the component. Generally,\n * this should be done from error component but could be done from loading or\n * actual target component itself if needs to be.\n */\nfunction getResettableAsyncComponent (asyncComponent, options) {\n const asyncComponentFactory = () => () => defineAsyncComponent({\n loader: asyncComponent,\n ...options\n })\n\n const observe = shallowReactive({ c: asyncComponentFactory() })\n\n return {\n render () {\n // emit event resetAsyncComponent to reloading\n return h(observe.c(), {\n onResetAsyncComponent () {\n observe.c = asyncComponentFactory()\n }\n })\n }\n }\n}\n\nexport default getResettableAsyncComponent\n","import Modal from 'src/components/modal/modal.vue'\nimport PanelLoading from 'src/components/panel_loading/panel_loading.vue'\nimport AsyncComponentError from 'src/components/async_component_error/async_component_error.vue'\nimport getResettableAsyncComponent from 'src/services/resettable_async_component.js'\nimport Popover from '../popover/popover.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { cloneDeep, isEqual } from 'lodash'\nimport {\n newImporter,\n newExporter\n} from 'src/services/export_import/export_import.js'\nimport {\n faTimes,\n faFileUpload,\n faFileDownload,\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faWindowMinimize\n} from '@fortawesome/free-regular-svg-icons'\n\nconst PLEROMAFE_SETTINGS_MAJOR_VERSION = 1\nconst PLEROMAFE_SETTINGS_MINOR_VERSION = 0\n\nlibrary.add(\n faTimes,\n faWindowMinimize,\n faFileUpload,\n faFileDownload,\n faChevronDown\n)\n\nconst SettingsModal = {\n data () {\n return {\n dataImporter: newImporter({\n validator: this.importValidator,\n onImport: this.onImport,\n onImportFailure: this.onImportFailure\n }),\n dataThemeExporter: newExporter({\n filename: 'pleromafe_settings.full',\n getExportedObject: () => this.generateExport(true)\n }),\n dataExporter: newExporter({\n filename: 'pleromafe_settings',\n getExportedObject: () => this.generateExport()\n })\n }\n },\n components: {\n Modal,\n Popover,\n Checkbox,\n SettingsModalUserContent: getResettableAsyncComponent(\n () => import('./settings_modal_user_content.vue'),\n {\n loadingComponent: PanelLoading,\n errorComponent: AsyncComponentError,\n delay: 0\n }\n ),\n SettingsModalAdminContent: getResettableAsyncComponent(\n () => import('./settings_modal_admin_content.vue'),\n {\n loadingComponent: PanelLoading,\n errorComponent: AsyncComponentError,\n delay: 0\n }\n )\n },\n methods: {\n closeModal () {\n this.$store.dispatch('closeSettingsModal')\n },\n peekModal () {\n this.$store.dispatch('togglePeekSettingsModal')\n },\n importValidator (data) {\n if (!Array.isArray(data._pleroma_settings_version)) {\n return {\n messageKey: 'settings.file_import_export.invalid_file'\n }\n }\n\n const [major, minor] = data._pleroma_settings_version\n\n if (major > PLEROMAFE_SETTINGS_MAJOR_VERSION) {\n return {\n messageKey: 'settings.file_export_import.errors.file_too_new',\n messageArgs: {\n fileMajor: major,\n feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION\n }\n }\n }\n\n if (major < PLEROMAFE_SETTINGS_MAJOR_VERSION) {\n return {\n messageKey: 'settings.file_export_import.errors.file_too_old',\n messageArgs: {\n fileMajor: major,\n feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION\n }\n }\n }\n\n if (minor > PLEROMAFE_SETTINGS_MINOR_VERSION) {\n this.$store.dispatch('pushGlobalNotice', {\n level: 'warning',\n messageKey: 'settings.file_export_import.errors.file_slightly_new'\n })\n }\n\n return true\n },\n onImportFailure (result) {\n if (result.error) {\n this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_settings_imported', level: 'error' })\n } else {\n this.$store.dispatch('pushGlobalNotice', { ...result.validationResult, level: 'error' })\n }\n },\n onImport (data) {\n if (data) { this.$store.dispatch('loadSettings', data) }\n },\n restore () {\n this.dataImporter.importData()\n },\n backup () {\n this.dataExporter.exportData()\n },\n backupWithTheme () {\n this.dataThemeExporter.exportData()\n },\n generateExport (theme = false) {\n const { config } = this.$store.state\n let sample = config\n if (!theme) {\n const ignoreList = new Set([\n 'customTheme',\n 'customThemeSource',\n 'colors'\n ])\n sample = Object.fromEntries(\n Object\n .entries(sample)\n .filter(([key]) => !ignoreList.has(key))\n )\n }\n const clone = cloneDeep(sample)\n clone._pleroma_settings_version = [\n PLEROMAFE_SETTINGS_MAJOR_VERSION,\n PLEROMAFE_SETTINGS_MINOR_VERSION\n ]\n return clone\n },\n resetAdminDraft () {\n this.$store.commit('resetAdminDraft')\n },\n pushAdminDraft () {\n this.$store.dispatch('pushAdminDraft')\n }\n },\n computed: {\n currentSaveStateNotice () {\n return this.$store.state.interface.settings.currentSaveStateNotice\n },\n modalActivated () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n },\n modalMode () {\n return this.$store.state.interface.settingsModalMode\n },\n modalOpenedOnceUser () {\n return this.$store.state.interface.settingsModalLoadedUser\n },\n modalOpenedOnceAdmin () {\n return this.$store.state.interface.settingsModalLoadedAdmin\n },\n modalPeeked () {\n return this.$store.state.interface.settingsModalState === 'minimized'\n },\n expertLevel: {\n get () {\n return this.$store.state.config.expertLevel > 0\n },\n set (value) {\n this.$store.dispatch('setOption', { name: 'expertLevel', value: value ? 1 : 0 })\n }\n },\n adminDraftAny () {\n return !isEqual(\n this.$store.state.adminSettings.config,\n this.$store.state.adminSettings.draft\n )\n }\n }\n}\n\nexport default SettingsModal\n","import { render } from \"./settings_modal.vue?vue&type=template&id=e07b3cd0\"\nimport script from \"./settings_modal.js?vue&type=script&lang=js\"\nexport * from \"./settings_modal.js?vue&type=script&lang=js\"\n\nimport \"./settings_modal.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["newExporter","_ref","_ref$filename","filename","getExportedObject","exportData","stringified","utf8","JSON","stringify","e","document","createElement","setAttribute","concat","window","btoa","style","display","body","appendChild","click","removeChild","newImporter","_ref2","onImport","onImportFailure","_ref2$validator","validator","importData","filePicker","addEventListener","event","target","files","reader","FileReader","onload","_ref3","parsed","parse","result","validationResult","error","readAsText","root","byteArray","byteCount","byteIndex","stringFromCharCode","String","fromCharCode","ucs2decode","string","value","extra","output","counter","length","charCodeAt","push","checkScalarValue","codePoint","Error","toString","toUpperCase","createByte","shift","encodeCodePoint","symbol","readContinuationByte","continuationByte","decodeSymbol","byte1","version","encode","codePoints","index","byteString","decode","tmp","array","ucs2encode","exports","class","href","_createElementVNode","id","emits","methods","retry","this","$emit","_createElementBlock","_hoisted_1","_toDisplayString","_ctx","$t","onClick","_cache","$options","apply","arguments","asyncComponent","options","asyncComponentFactory","defineAsyncComponent","_objectSpread","loader","observe","shallowReactive","c","render","h","onResetAsyncComponent","library","faTimes","faWindowMinimize","faFileUpload","faFileDownload","faChevronDown","data","_this","dataImporter","importValidator","dataThemeExporter","generateExport","dataExporter","components","Modal","Popover","Checkbox","SettingsModalUserContent","getResettableAsyncComponent","loadingComponent","PanelLoading","errorComponent","AsyncComponentError","delay","SettingsModalAdminContent","closeModal","$store","dispatch","peekModal","Array","isArray","_pleroma_settings_version","messageKey","_data$_pleroma_settin","_slicedToArray","major","minor","messageArgs","fileMajor","feMajor","level","restore","backup","backupWithTheme","theme","undefined","config","state","sample","ignoreList","Set","Object","fromEntries","entries","filter","key","has","clone","_cloneDeep","resetAdminDraft","commit","pushAdminDraft","computed","currentSaveStateNotice","settings","modalActivated","settingsModalState","modalMode","settingsModalMode","modalOpenedOnceUser","settingsModalLoadedUser","modalOpenedOnceAdmin","settingsModalLoadedAdmin","modalPeeked","expertLevel","get","set","name","adminDraftAny","_isEqual","adminSettings","draft","_createBlock","_component_Modal","_normalizeClass","peek","_hoisted_2","_hoisted_3","_createVNode","_Transition","transparent","_withModifiers","title","_component_FAIcon","icon","_hoisted_6","_component_SettingsModalUserContent","_component_SettingsModalAdminContent","_hoisted_7","_component_Popover","trigger","placement","offset","y","x","_withCtx","content","close","_hoisted_9","_component_Checkbox","$event","Number","_hoisted_13","_component_i18n_t","keypath","adminFeLink","_hoisted_14","_hoisted_15","_hoisted_16","disabled","_hoisted_17","_hoisted_18"],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/static/js/7586.981b2305a0019f6042a5.js b/priv/static/static/js/7586.981b2305a0019f6042a5.js @@ -1,2 +0,0 @@ -(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[7586],{25771:(t,e,n)=>{"use strict";n.d(e,{M:()=>i,i:()=>a});var r=n(57458),o=n.n(r),i=function(t){var e=t.filename,n=void 0===e?"data":e,r=t.getExportedObject;return{exportData:function(){var t=o().encode(JSON.stringify(r(),null,2)),e=document.createElement("a");e.setAttribute("download","".concat(n,".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)}}},a=function(t){var e=t.onImport,n=t.onImportFailure,r=t.validator,o=void 0===r?function(){return!0}:r;return{importData:function(){var t=document.createElement("input");t.setAttribute("type","file"),t.setAttribute("accept",".json"),t.addEventListener("change",(function(t){if(t.target.files[0]){var r=new FileReader;r.onload=function(t){var r=t.target;try{var i=JSON.parse(r.result),a=o(i);!0===a?e(i):n({validationResult:a})}catch(t){n({error:t})}},r.readAsText(t.target.files[0])}})),document.body.appendChild(t),t.click(),document.body.removeChild(t)}}}},57458:(t,e)=>{!function(t){var e,n,r,o=String.fromCharCode;function i(t){for(var e,n,r=[],o=0,i=t.length;o<i;)(e=t.charCodeAt(o++))>=55296&&e<=56319&&o<i?56320==(64512&(n=t.charCodeAt(o++)))?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--):r.push(e);return r}function a(t){if(t>=55296&&t<=57343)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function s(t,e){return o(t>>e&63|128)}function l(t){if(0==(4294967168&t))return o(t);var e="";return 0==(4294965248&t)?e=o(t>>6&31|192):0==(4294901760&t)?(a(t),e=o(t>>12&15|224),e+=s(t,6)):0==(4292870144&t)&&(e=o(t>>18&7|240),e+=s(t,12),e+=s(t,6)),e+o(63&t|128)}function c(){if(r>=n)throw Error("Invalid byte index");var t=255&e[r];if(r++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function d(){var t,o;if(r>n)throw Error("Invalid byte index");if(r==n)return!1;if(t=255&e[r],r++,0==(128&t))return t;if(192==(224&t)){if((o=(31&t)<<6|c())>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if((o=(15&t)<<12|c()<<6|c())>=2048)return a(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(o=(7&t)<<18|c()<<12|c()<<6|c())>=65536&&o<=1114111)return o;throw Error("Invalid UTF-8 detected")}t.version="3.0.0",t.encode=function(t){for(var e=i(t),n=e.length,r=-1,o="";++r<n;)o+=l(e[r]);return o},t.decode=function(t){e=i(t),n=e.length,r=0;for(var a,s=[];!1!==(a=d());)s.push(a);return function(t){for(var e,n=t.length,r=-1,i="";++r<n;)(e=t[r])>65535&&(i+=o((e-=65536)>>>10&1023|55296),e=56320|1023&e),i+=o(e);return i}(s)}}(e)},27586:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>J});var r=n(66252),o=n(3577),i=n(49963),a={class:"settings-modal-panel panel"},s={class:"panel-heading"},l={class:"title"},c=["title"],d=["title"],u={class:"panel-body"},p={class:"panel-footer settings-footer -flexible-height"},f=["title"],m={class:"dropdown-menu"},g=["onClick"],h=["onClick"],b=["onClick"],v={key:1},_={href:"/pleroma/admin/#/login-pleroma",target:"_blank"},w=(0,r._)("span",{id:"unscrolled-content",class:"extra-content"},null,-1),y={key:2,class:"admin-buttons"},k=["disabled"],O=["disabled"],x=n(4942),C=n(29439),j=n(18446),M=n.n(j),$=n(50361),A=n.n($),S=n(48328),D=n(29187),E={class:"async-component-error"};const P={emits:["resetAsyncComponent"],methods:{retry:function(){this.$emit("resetAsyncComponent")}}};var I=n(83744);const z=(0,I.Z)(P,[["render",function(t,e,n,i,a,s){return(0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("div",null,[(0,r._)("h4",null,(0,o.zw)(t.$t("general.generic_error")),1),(0,r._)("p",null,(0,o.zw)(t.$t("general.error_retry")),1),(0,r._)("button",{class:"btn button-default",onClick:e[0]||(e[0]=function(){return s.retry&&s.retry.apply(s,arguments)})},(0,o.zw)(t.$t("general.retry")),1)])])}]]);var N=n(2262);function U(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}const W=function(t,e){var n=function(){return function(){return(0,r.RC)(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?U(Object(n),!0).forEach((function(e){(0,x.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):U(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({loader:t},e))}},o=(0,N.Um)({c:n()});return{render:function(){return(0,r.h)(o.c(),{onResetAsyncComponent:function(){o.c=n()}})}}};var L=n(84535),T=n(66141),Z=n(9382),F=n(25771),q=n(84131),K=n(5737);function R(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function G(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?R(Object(n),!0).forEach((function(e){(0,x.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}Z.vI.add(q.NBC,K.IQi,q.Y9i,q.kwI,q.ptq);const V={data:function(){var t=this;return{dataImporter:(0,F.i)({validator:this.importValidator,onImport:this.onImport,onImportFailure:this.onImportFailure}),dataThemeExporter:(0,F.M)({filename:"pleromafe_settings.full",getExportedObject:function(){return t.generateExport(!0)}}),dataExporter:(0,F.M)({filename:"pleromafe_settings",getExportedObject:function(){return t.generateExport()}})}},components:{Modal:S.Z,Popover:L.default,Checkbox:T.Z,SettingsModalUserContent:W((function(){return Promise.all([n.e(48),n.e(9060),n.e(7962)]).then(n.bind(n,62691))}),{loadingComponent:D.Z,errorComponent:z,delay:0}),SettingsModalAdminContent:W((function(){return Promise.all([n.e(9060),n.e(9801)]).then(n.bind(n,9541))}),{loadingComponent:D.Z,errorComponent:z,delay:0})},methods:{closeModal:function(){this.$store.dispatch("closeSettingsModal")},peekModal:function(){this.$store.dispatch("togglePeekSettingsModal")},importValidator:function(t){if(!Array.isArray(t._pleroma_settings_version))return{messageKey:"settings.file_import_export.invalid_file"};var e=(0,C.Z)(t._pleroma_settings_version,2),n=e[0],r=e[1];return n>1?{messageKey:"settings.file_export_import.errors.file_too_new",messageArgs:{fileMajor:n,feMajor:1}}:n<1?{messageKey:"settings.file_export_import.errors.file_too_old",messageArgs:{fileMajor:n,feMajor:1}}:(r>0&&this.$store.dispatch("pushGlobalNotice",{level:"warning",messageKey:"settings.file_export_import.errors.file_slightly_new"}),!0)},onImportFailure:function(t){t.error?this.$store.dispatch("pushGlobalNotice",{messageKey:"settings.invalid_settings_imported",level:"error"}):this.$store.dispatch("pushGlobalNotice",G(G({},t.validationResult),{},{level:"error"}))},onImport:function(t){t&&this.$store.dispatch("loadSettings",t)},restore:function(){this.dataImporter.importData()},backup:function(){this.dataExporter.exportData()},backupWithTheme:function(){this.dataThemeExporter.exportData()},generateExport:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.$store.state.config,n=e;if(!t){var r=new Set(["customTheme","customThemeSource","colors"]);n=Object.fromEntries(Object.entries(n).filter((function(t){var e=(0,C.Z)(t,1)[0];return!r.has(e)})))}var o=A()(n);return o._pleroma_settings_version=[1,0],o},resetAdminDraft:function(){this.$store.commit("resetAdminDraft")},pushAdminDraft:function(){this.$store.dispatch("pushAdminDraft")}},computed:{currentSaveStateNotice:function(){return this.$store.state.interface.settings.currentSaveStateNotice},modalActivated:function(){return"hidden"!==this.$store.state.interface.settingsModalState},modalMode:function(){return this.$store.state.interface.settingsModalMode},modalOpenedOnceUser:function(){return this.$store.state.interface.settingsModalLoadedUser},modalOpenedOnceAdmin:function(){return this.$store.state.interface.settingsModalLoadedAdmin},modalPeeked:function(){return"minimized"===this.$store.state.interface.settingsModalState},expertLevel:{get:function(){return this.$store.state.config.expertLevel>0},set:function(t){this.$store.dispatch("setOption",{name:"expertLevel",value:t?1:0})}},adminDraftAny:function(){return!M()(this.$store.state.adminSettings.config,this.$store.state.adminSettings.draft)}}},J=(0,I.Z)(V,[["render",function(t,e,n,x,C,j){var M=(0,r.up)("FAIcon"),$=(0,r.up)("SettingsModalUserContent"),A=(0,r.up)("SettingsModalAdminContent"),S=(0,r.up)("Popover"),D=(0,r.up)("Checkbox"),E=(0,r.up)("i18n-t"),P=(0,r.up)("Modal");return(0,r.wg)(),(0,r.j4)(P,{"is-open":t.modalActivated,class:(0,o.C_)(["settings-modal",{peek:t.modalPeeked}]),"no-background":t.modalPeeked},{default:(0,r.w5)((function(){return[(0,r._)("div",a,[(0,r._)("div",s,[(0,r._)("span",l,(0,o.zw)("user"===t.modalMode?t.$t("settings.settings"):t.$t("admin_dash.window_title")),1),(0,r.Wm)(i.uT,{name:"fade"},{default:(0,r.w5)((function(){return[t.currentSaveStateNotice?((0,r.wg)(),(0,r.iD)("div",{key:0,class:(0,o.C_)(["alert",{transparent:!t.currentSaveStateNotice.error,error:t.currentSaveStateNotice.error}]),onClick:e[0]||(e[0]=(0,i.iM)((function(){}),["prevent"]))},(0,o.zw)(t.currentSaveStateNotice.error?t.$t("settings.saving_err"):t.$t("settings.saving_ok")),3)):(0,r.kq)("",!0)]})),_:1}),(0,r._)("button",{class:"btn button-default",title:t.$t("general.peek"),onClick:e[1]||(e[1]=function(){return t.peekModal&&t.peekModal.apply(t,arguments)})},[(0,r.Wm)(M,{icon:["far","window-minimize"],"fixed-width":""})],8,c),(0,r._)("button",{class:"btn button-default",title:t.$t("general.close"),onClick:e[2]||(e[2]=function(){return t.closeModal&&t.closeModal.apply(t,arguments)})},[(0,r.Wm)(M,{icon:"times","fixed-width":""})],8,d)]),(0,r._)("div",u,["user"===t.modalMode&&t.modalOpenedOnceUser?((0,r.wg)(),(0,r.j4)($,{key:0})):(0,r.kq)("",!0),"admin"===t.modalMode&&t.modalOpenedOnceAdmin?((0,r.wg)(),(0,r.j4)(A,{key:1})):(0,r.kq)("",!0)]),(0,r._)("div",p,["user"===t.modalMode?((0,r.wg)(),(0,r.j4)(S,{key:0,class:"export",trigger:"click",placement:"top",offset:{y:5,x:5},"bound-to":{x:"container"},"remove-padding":""},{trigger:(0,r.w5)((function(){return[(0,r._)("button",{class:"btn button-default",title:t.$t("general.close")},[(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_restore")),1),(0,r.Uk)(" "+(0,o.zw)(" ")+" "),(0,r.Wm)(M,{icon:"chevron-down"})],8,f)]})),content:(0,r.w5)((function(n){var a=n.close;return[(0,r._)("div",m,[(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[3]||(e[3]=(0,i.iM)((function(){return t.backup&&t.backup.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-download","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_settings")),1)],8,g),(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[4]||(e[4]=(0,i.iM)((function(){return t.backupWithTheme&&t.backupWithTheme.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-download","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.backup_settings_theme")),1)],8,h),(0,r._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[e[5]||(e[5]=(0,i.iM)((function(){return t.restore&&t.restore.apply(t,arguments)}),["prevent"])),a]},[(0,r.Wm)(M,{icon:"file-upload","fixed-width":""}),(0,r._)("span",null,(0,o.zw)(t.$t("settings.file_export_import.restore_settings")),1)],8,b)])]})),_:1})):(0,r.kq)("",!0),(0,r.Wm)(D,{"model-value":!!t.expertLevel,"onUpdate:modelValue":e[6]||(e[6]=function(e){return t.expertLevel=Number(e)})},{default:(0,r.w5)((function(){return[(0,r.Uk)((0,o.zw)(t.$t("settings.expert_mode")),1)]})),_:1},8,["model-value"]),"admin"===t.modalMode?((0,r.wg)(),(0,r.iD)("span",v,[(0,r.Wm)(E,{keypath:"admin_dash.wip_notice"},{adminFeLink:(0,r.w5)((function(){return[(0,r._)("a",_,(0,o.zw)(t.$t("admin_dash.old_ui_link")),1)]})),_:1})])):(0,r.kq)("",!0),w,"admin"===t.modalMode?((0,r.wg)(),(0,r.iD)("span",y,[(0,r._)("button",{class:"button-default btn",disabled:!t.adminDraftAny,onClick:e[7]||(e[7]=function(){return t.resetAdminDraft&&t.resetAdminDraft.apply(t,arguments)})},(0,o.zw)(t.$t("admin_dash.reset_all")),9,k),(0,r.Uk)(" "+(0,o.zw)(" ")+" "),(0,r._)("button",{class:"button-default btn",disabled:!t.adminDraftAny,onClick:e[8]||(e[8]=function(){return t.pushAdminDraft&&t.pushAdminDraft.apply(t,arguments)})},(0,o.zw)(t.$t("admin_dash.commit_all")),9,O)])):(0,r.kq)("",!0)])])]})),_:1},8,["is-open","class","no-background"])}]])}}]); -//# sourceMappingURL=7586.981b2305a0019f6042a5.js.map -\ No newline at end of file diff --git a/priv/static/static/js/7586.981b2305a0019f6042a5.js.map b/priv/static/static/js/7586.981b2305a0019f6042a5.js.map @@ -1 +0,0 @@ -{"version":3,"file":"static/js/7586.981b2305a0019f6042a5.js","mappings":"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","sources":["webpack://pleroma_fe/./src/services/export_import/export_import.js","webpack://pleroma_fe/./node_modules/utf8/utf8.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.vue","webpack://pleroma_fe/./src/components/async_component_error/async_component_error.vue","webpack://pleroma_fe/./src/components/async_component_error/async_component_error.vue?c151","webpack://pleroma_fe/./src/services/resettable_async_component.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal.vue?2a2f"],"sourcesContent":["import utf8 from 'utf8'\n\nexport const newExporter = ({\n filename = 'data',\n getExportedObject\n}) => ({\n exportData () {\n const stringified = utf8.encode(JSON.stringify(getExportedObject(), null, 2)) // Pretty-print and indent with 2 spaces\n\n // Create an invisible link with a data url and simulate a click\n const e = document.createElement('a')\n e.setAttribute('download', `${filename}.json`)\n e.setAttribute('href', 'data:application/json;base64,' + window.btoa(stringified))\n e.style.display = 'none'\n\n document.body.appendChild(e)\n e.click()\n document.body.removeChild(e)\n }\n})\n\nexport const newImporter = ({\n onImport,\n onImportFailure,\n validator = () => true\n}) => ({\n importData () {\n const filePicker = document.createElement('input')\n filePicker.setAttribute('type', 'file')\n filePicker.setAttribute('accept', '.json')\n\n filePicker.addEventListener('change', event => {\n if (event.target.files[0]) {\n // eslint-disable-next-line no-undef\n const reader = new FileReader()\n reader.onload = ({ target }) => {\n try {\n const parsed = JSON.parse(target.result)\n const validationResult = validator(parsed)\n if (validationResult === true) {\n onImport(parsed)\n } else {\n onImportFailure({ validationResult })\n }\n } catch (error) {\n onImportFailure({ error })\n }\n }\n reader.readAsText(event.target.files[0])\n }\n })\n\n document.body.appendChild(filePicker)\n filePicker.click()\n document.body.removeChild(filePicker)\n }\n})\n","/*! https://mths.be/utf8js v3.0.0 by @mathias */\n;(function(root) {\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\troot.version = '3.0.0';\n\troot.encode = utf8encode;\n\troot.decode = utf8decode;\n\n}(typeof exports === 'undefined' ? this.utf8 = {} : exports));\n","<template>\n <Modal\n :is-open=\"modalActivated\"\n class=\"settings-modal\"\n :class=\"{ peek: modalPeeked }\"\n :no-background=\"modalPeeked\"\n >\n <div class=\"settings-modal-panel panel\">\n <div class=\"panel-heading\">\n <span class=\"title\">\n {{ modalMode === 'user' ? $t('settings.settings') : $t('admin_dash.window_title') }}\n </span>\n <transition name=\"fade\">\n <div\n v-if=\"currentSaveStateNotice\"\n class=\"alert\"\n :class=\"{ transparent: !currentSaveStateNotice.error, error: currentSaveStateNotice.error}\"\n @click.prevent\n >\n {{ currentSaveStateNotice.error ? $t('settings.saving_err') : $t('settings.saving_ok') }}\n </div>\n </transition>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.peek')\"\n @click=\"peekModal\"\n >\n <FAIcon\n :icon=\"['far', 'window-minimize']\"\n fixed-width\n />\n </button>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.close')\"\n @click=\"closeModal\"\n >\n <FAIcon\n icon=\"times\"\n fixed-width\n />\n </button>\n </div>\n <div class=\"panel-body\">\n <SettingsModalUserContent v-if=\"modalMode === 'user' && modalOpenedOnceUser\" />\n <SettingsModalAdminContent v-if=\"modalMode === 'admin' && modalOpenedOnceAdmin\" />\n </div>\n <div class=\"panel-footer settings-footer -flexible-height\">\n <Popover\n v-if=\"modalMode === 'user'\"\n class=\"export\"\n trigger=\"click\"\n placement=\"top\"\n :offset=\"{ y: 5, x: 5 }\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n >\n <template #trigger>\n <button\n class=\"btn button-default\"\n :title=\"$t('general.close')\"\n >\n <span>{{ $t(\"settings.file_export_import.backup_restore\") }}</span>\n {{ ' ' }}\n <FAIcon\n icon=\"chevron-down\"\n />\n </button>\n </template>\n <template #content=\"{close}\">\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"backup\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-download\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.backup_settings\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"backupWithTheme\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-download\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.backup_settings_theme\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"restore\"\n @click=\"close\"\n >\n <FAIcon\n icon=\"file-upload\"\n fixed-width\n /><span>{{ $t(\"settings.file_export_import.restore_settings\") }}</span>\n </button>\n </div>\n </template>\n </Popover>\n\n <Checkbox\n :model-value=\"!!expertLevel\"\n @update:modelValue=\"expertLevel = Number($event)\"\n >\n {{ $t(\"settings.expert_mode\") }}\n </Checkbox>\n <span v-if=\"modalMode === 'admin'\">\n <i18n-t keypath=\"admin_dash.wip_notice\">\n <template #adminFeLink>\n <a\n href=\"/pleroma/admin/#/login-pleroma\"\n target=\"_blank\"\n >\n {{ $t(\"admin_dash.old_ui_link\") }}\n </a>\n </template>\n </i18n-t>\n </span>\n <span\n id=\"unscrolled-content\"\n class=\"extra-content\"\n />\n <span\n v-if=\"modalMode === 'admin'\"\n class=\"admin-buttons\"\n >\n <button\n class=\"button-default btn\"\n :disabled=\"!adminDraftAny\"\n @click=\"resetAdminDraft\"\n >\n {{ $t(\"admin_dash.reset_all\") }}\n </button>\n {{ ' ' }}\n <button\n class=\"button-default btn\"\n :disabled=\"!adminDraftAny\"\n @click=\"pushAdminDraft\"\n >\n {{ $t(\"admin_dash.commit_all\") }}\n </button>\n </span>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./settings_modal.js\"></script>\n\n<style src=\"./settings_modal.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"async-component-error\">\n <div>\n <h4>\n {{ $t('general.generic_error') }}\n </h4>\n <p>\n {{ $t('general.error_retry') }}\n </p>\n <button\n class=\"btn button-default\"\n @click=\"retry\"\n >\n {{ $t('general.retry') }}\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n emits: ['resetAsyncComponent'],\n methods: {\n retry () {\n this.$emit('resetAsyncComponent')\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.async-component-error {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n .btn {\n margin: 0.5em;\n padding: 0.5em 2em;\n }\n}\n</style>\n","import { render } from \"./async_component_error.vue?vue&type=template&id=0e326028\"\nimport script from \"./async_component_error.vue?vue&type=script&lang=js\"\nexport * from \"./async_component_error.vue?vue&type=script&lang=js\"\n\nimport \"./async_component_error.vue?vue&type=style&index=0&id=0e326028&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineAsyncComponent, shallowReactive, h } from 'vue'\n\n/* By default async components don't have any way to recover, if component is\n * failed, it is failed forever. This helper tries to remedy that by recreating\n * async component when retry is requested (by user). You need to emit the\n * `resetAsyncComponent` event from child to reset the component. Generally,\n * this should be done from error component but could be done from loading or\n * actual target component itself if needs to be.\n */\nfunction getResettableAsyncComponent (asyncComponent, options) {\n const asyncComponentFactory = () => () => defineAsyncComponent({\n loader: asyncComponent,\n ...options\n })\n\n const observe = shallowReactive({ c: asyncComponentFactory() })\n\n return {\n render () {\n // emit event resetAsyncComponent to reloading\n return h(observe.c(), {\n onResetAsyncComponent () {\n observe.c = asyncComponentFactory()\n }\n })\n }\n }\n}\n\nexport default getResettableAsyncComponent\n","import Modal from 'src/components/modal/modal.vue'\nimport PanelLoading from 'src/components/panel_loading/panel_loading.vue'\nimport AsyncComponentError from 'src/components/async_component_error/async_component_error.vue'\nimport getResettableAsyncComponent from 'src/services/resettable_async_component.js'\nimport Popover from '../popover/popover.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { cloneDeep, isEqual } from 'lodash'\nimport {\n newImporter,\n newExporter\n} from 'src/services/export_import/export_import.js'\nimport {\n faTimes,\n faFileUpload,\n faFileDownload,\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faWindowMinimize\n} from '@fortawesome/free-regular-svg-icons'\n\nconst PLEROMAFE_SETTINGS_MAJOR_VERSION = 1\nconst PLEROMAFE_SETTINGS_MINOR_VERSION = 0\n\nlibrary.add(\n faTimes,\n faWindowMinimize,\n faFileUpload,\n faFileDownload,\n faChevronDown\n)\n\nconst SettingsModal = {\n data () {\n return {\n dataImporter: newImporter({\n validator: this.importValidator,\n onImport: this.onImport,\n onImportFailure: this.onImportFailure\n }),\n dataThemeExporter: newExporter({\n filename: 'pleromafe_settings.full',\n getExportedObject: () => this.generateExport(true)\n }),\n dataExporter: newExporter({\n filename: 'pleromafe_settings',\n getExportedObject: () => this.generateExport()\n })\n }\n },\n components: {\n Modal,\n Popover,\n Checkbox,\n SettingsModalUserContent: getResettableAsyncComponent(\n () => import('./settings_modal_user_content.vue'),\n {\n loadingComponent: PanelLoading,\n errorComponent: AsyncComponentError,\n delay: 0\n }\n ),\n SettingsModalAdminContent: getResettableAsyncComponent(\n () => import('./settings_modal_admin_content.vue'),\n {\n loadingComponent: PanelLoading,\n errorComponent: AsyncComponentError,\n delay: 0\n }\n )\n },\n methods: {\n closeModal () {\n this.$store.dispatch('closeSettingsModal')\n },\n peekModal () {\n this.$store.dispatch('togglePeekSettingsModal')\n },\n importValidator (data) {\n if (!Array.isArray(data._pleroma_settings_version)) {\n return {\n messageKey: 'settings.file_import_export.invalid_file'\n }\n }\n\n const [major, minor] = data._pleroma_settings_version\n\n if (major > PLEROMAFE_SETTINGS_MAJOR_VERSION) {\n return {\n messageKey: 'settings.file_export_import.errors.file_too_new',\n messageArgs: {\n fileMajor: major,\n feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION\n }\n }\n }\n\n if (major < PLEROMAFE_SETTINGS_MAJOR_VERSION) {\n return {\n messageKey: 'settings.file_export_import.errors.file_too_old',\n messageArgs: {\n fileMajor: major,\n feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION\n }\n }\n }\n\n if (minor > PLEROMAFE_SETTINGS_MINOR_VERSION) {\n this.$store.dispatch('pushGlobalNotice', {\n level: 'warning',\n messageKey: 'settings.file_export_import.errors.file_slightly_new'\n })\n }\n\n return true\n },\n onImportFailure (result) {\n if (result.error) {\n this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_settings_imported', level: 'error' })\n } else {\n this.$store.dispatch('pushGlobalNotice', { ...result.validationResult, level: 'error' })\n }\n },\n onImport (data) {\n if (data) { this.$store.dispatch('loadSettings', data) }\n },\n restore () {\n this.dataImporter.importData()\n },\n backup () {\n this.dataExporter.exportData()\n },\n backupWithTheme () {\n this.dataThemeExporter.exportData()\n },\n generateExport (theme = false) {\n const { config } = this.$store.state\n let sample = config\n if (!theme) {\n const ignoreList = new Set([\n 'customTheme',\n 'customThemeSource',\n 'colors'\n ])\n sample = Object.fromEntries(\n Object\n .entries(sample)\n .filter(([key]) => !ignoreList.has(key))\n )\n }\n const clone = cloneDeep(sample)\n clone._pleroma_settings_version = [\n PLEROMAFE_SETTINGS_MAJOR_VERSION,\n PLEROMAFE_SETTINGS_MINOR_VERSION\n ]\n return clone\n },\n resetAdminDraft () {\n this.$store.commit('resetAdminDraft')\n },\n pushAdminDraft () {\n this.$store.dispatch('pushAdminDraft')\n }\n },\n computed: {\n currentSaveStateNotice () {\n return this.$store.state.interface.settings.currentSaveStateNotice\n },\n modalActivated () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n },\n modalMode () {\n return this.$store.state.interface.settingsModalMode\n },\n modalOpenedOnceUser () {\n return this.$store.state.interface.settingsModalLoadedUser\n },\n modalOpenedOnceAdmin () {\n return this.$store.state.interface.settingsModalLoadedAdmin\n },\n modalPeeked () {\n return this.$store.state.interface.settingsModalState === 'minimized'\n },\n expertLevel: {\n get () {\n return this.$store.state.config.expertLevel > 0\n },\n set (value) {\n this.$store.dispatch('setOption', { name: 'expertLevel', value: value ? 1 : 0 })\n }\n },\n adminDraftAny () {\n return !isEqual(\n this.$store.state.adminSettings.config,\n this.$store.state.adminSettings.draft\n )\n }\n }\n}\n\nexport default SettingsModal\n","import { render } from \"./settings_modal.vue?vue&type=template&id=e07b3cd0\"\nimport script from \"./settings_modal.js?vue&type=script&lang=js\"\nexport * from \"./settings_modal.js?vue&type=script&lang=js\"\n\nimport \"./settings_modal.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["newExporter","_ref","_ref$filename","filename","getExportedObject","exportData","stringified","utf8","JSON","stringify","e","document","createElement","setAttribute","concat","window","btoa","style","display","body","appendChild","click","removeChild","newImporter","_ref2","onImport","onImportFailure","_ref2$validator","validator","importData","filePicker","addEventListener","event","target","files","reader","FileReader","onload","_ref3","parsed","parse","result","validationResult","error","readAsText","root","byteArray","byteCount","byteIndex","stringFromCharCode","String","fromCharCode","ucs2decode","string","value","extra","output","counter","length","charCodeAt","push","checkScalarValue","codePoint","Error","toString","toUpperCase","createByte","shift","encodeCodePoint","symbol","readContinuationByte","continuationByte","decodeSymbol","byte1","version","encode","codePoints","index","byteString","decode","tmp","array","ucs2encode","exports","class","href","_createElementVNode","id","emits","methods","retry","this","$emit","_createElementBlock","_hoisted_1","_toDisplayString","_ctx","$t","onClick","_cache","$options","apply","arguments","asyncComponent","options","asyncComponentFactory","defineAsyncComponent","_objectSpread","loader","observe","shallowReactive","c","render","h","onResetAsyncComponent","library","faTimes","faWindowMinimize","faFileUpload","faFileDownload","faChevronDown","data","_this","dataImporter","importValidator","dataThemeExporter","generateExport","dataExporter","components","Modal","Popover","Checkbox","SettingsModalUserContent","getResettableAsyncComponent","loadingComponent","PanelLoading","errorComponent","AsyncComponentError","delay","SettingsModalAdminContent","closeModal","$store","dispatch","peekModal","Array","isArray","_pleroma_settings_version","messageKey","_data$_pleroma_settin","_slicedToArray","major","minor","messageArgs","fileMajor","feMajor","level","restore","backup","backupWithTheme","theme","undefined","config","state","sample","ignoreList","Set","Object","fromEntries","entries","filter","key","has","clone","_cloneDeep","resetAdminDraft","commit","pushAdminDraft","computed","currentSaveStateNotice","settings","modalActivated","settingsModalState","modalMode","settingsModalMode","modalOpenedOnceUser","settingsModalLoadedUser","modalOpenedOnceAdmin","settingsModalLoadedAdmin","modalPeeked","expertLevel","get","set","name","adminDraftAny","_isEqual","adminSettings","draft","_createBlock","_component_Modal","_normalizeClass","peek","_hoisted_2","_hoisted_3","_createVNode","_Transition","transparent","_withModifiers","title","_component_FAIcon","icon","_hoisted_6","_component_SettingsModalUserContent","_component_SettingsModalAdminContent","_hoisted_7","_component_Popover","trigger","placement","offset","y","x","_withCtx","content","close","_hoisted_9","_component_Checkbox","$event","Number","_hoisted_13","_component_i18n_t","keypath","adminFeLink","_hoisted_14","_hoisted_15","_hoisted_16","disabled","_hoisted_17","_hoisted_18"],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/js/8859.c76b0a0c3a4b5acbef11.js b/priv/static/static/js/8859.c76b0a0c3a4b5acbef11.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[8859],{17135:(t,e,n)=>{n.r(e),n.d(e,{default:()=>oe});var a=n(66252),i=n(3577),r=["label"],l=["label"],o={class:"setting-item"},s={href:"https://docs-develop.pleroma.social/backend/configuration/howto_database_config/",target:"_blank"},c=(0,a._)("code",null,"config :pleroma, configurable_from_database",-1),d=(0,a._)("code",null,"true",-1),u=["label"],p=["label"],m=["label"],f=n(79354),h=["label"],_={class:"setting-item"},b={class:"setting-list"},g={key:0},w={class:"setting-item"},v={class:"setting-list"},y={class:"setting-list suboptions"},k={class:"setting-list suboptions"},O={class:"setting-list"},D={class:"setting-list suboptions"},S={key:0},j={class:"setting-list"},P={class:"setting-item"},$={class:"setting-list"},W={key:0},z={class:"setting-list"},Z={class:"setting-list"},C={class:"setting-list"},L={class:"setting-list"},q=n(4942),I=n(59236),M=n(77218),x=n(87449),U={key:0,class:"StringSetting"},E=["for"],A=["id","disabled","value"],B=n(7761);function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}const T=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?F(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):F(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},B.Z);var Y=n(83744);const H=(0,Y.Z)(T,[["render",function(t,e,n,r,l,o){var s=(0,a.up)("ModifiedIndicator"),c=(0,a.up)("ProfileSettingIndicator"),d=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("label",U,[(0,a._)("label",{for:t.path,class:(0,i.C_)({faint:t.shouldBeDisabled})},[t.backendDescriptionLabel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a.Uk)((0,i.zw)(t.backendDescriptionLabel+" "),1)],64)):"admin"===t.source?((0,a.wg)(),(0,a.iD)(a.HY,{key:1},[(0,a.Uk)(" MISSING LABEL FOR "+(0,i.zw)(t.path),1)],64)):(0,a.WI)(t.$slots,"default",{key:2})],10,E),(0,a._)("input",{id:t.path,class:"string-input",disabled:t.shouldBeDisabled,value:t.realDraftMode?t.draft:t.state,onChange:e[0]||(e[0]=function(){return t.update&&t.update.apply(t,arguments)})},null,40,A),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),(0,a.Wm)(s,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(c,{"is-profile":t.isProfileSetting},null,8,["is-profile"]),(0,a.Wm)(d),t.backendDescriptionDescription?((0,a.wg)(),(0,a.iD)("p",{key:0,class:(0,i.C_)(["setting-description",{faint:t.shouldBeDisabled}])},(0,i.zw)(t.backendDescriptionDescription+" "),3)):(0,a.kq)("",!0)])):(0,a.kq)("",!0)}]]);var G={key:0,class:"GroupSetting"},K=n(18446),N=n.n(K);function R(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function V(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?R(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}const X=V(V({},B.Z),{},{computed:V(V({},B.Z.computed),{},{isDirty:function(){return!N()(this.state,this.draft)}})}),J=(0,Y.Z)(X,[["render",function(t,e,n,i,r,l){var o=(0,a.up)("ModifiedIndicator"),s=(0,a.up)("ProfileSettingIndicator"),c=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("span",G,[(0,a.Wm)(o,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(s,{"is-profile":t.isProfileSetting},null,8,["is-profile"]),(0,a.Wm)(c)])):(0,a.kq)("",!0)}]]);var Q=["for"],tt={class:"attachment-input"},et={class:"controls control-field"},nt={for:"path"},at=["id","disabled","value"],it={key:0},rt={class:"controls control-upload"},lt=n(58394),ot=n(37804),st=n(66596);function ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function dt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ct(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ct(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}const ut=dt(dt({},B.Z),{},{props:dt(dt({},B.Z.props),{},{compact:Boolean,acceptTypes:{type:String,required:!1,default:"image/*"}}),components:dt(dt({},B.Z.components),{},{MediaUpload:ot.Z,Attachment:st.Z}),computed:dt(dt({},B.Z.computed),{},{attachment:function(){var t=this.realDraftMode?this.draft:this.state,e=t.includes("://")?t:this.$store.state.instance.server+t;return{mimetype:(0,lt.iL)(e),url:e}}}),methods:dt(dt({},B.Z.methods),{},{setMediaFile:function(t){this.realDraftMode?this.draft=t.url:this.configSink(this.path,t.url)}})}),pt=(0,Y.Z)(ut,[["render",function(t,e,n,r,l,o){var s=(0,a.up)("ModifiedIndicator"),c=(0,a.up)("ProfileSettingIndicator"),d=(0,a.up)("Attachment"),u=(0,a.up)("MediaUpload"),p=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("span",{key:0,class:(0,i.C_)(["AttachmentSetting",{"-compact":t.compact}])},[(0,a._)("label",{for:t.path,class:(0,i.C_)({faint:t.shouldBeDisabled})},[t.backendDescriptionLabel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a.Uk)((0,i.zw)(t.backendDescriptionLabel+" "),1)],64)):"admin"===t.source?((0,a.wg)(),(0,a.iD)(a.HY,{key:1},[(0,a.Uk)(" MISSING LABEL FOR "+(0,i.zw)(t.path),1)],64)):(0,a.WI)(t.$slots,"default",{key:2})],10,Q),t.backendDescriptionDescription?((0,a.wg)(),(0,a.iD)("p",{key:0,class:(0,i.C_)(["setting-description",{faint:t.shouldBeDisabled}])},(0,i.zw)(t.backendDescriptionDescription+" "),3)):(0,a.kq)("",!0),(0,a._)("div",tt,[(0,a._)("div",et,[(0,a._)("label",nt,(0,i.zw)(t.$t("settings.url")),1),(0,a._)("input",{id:t.path,class:"string-input",disabled:t.shouldBeDisabled,value:t.realDraftMode?t.draft:t.state,onChange:e[0]||(e[0]=function(){return t.update&&t.update.apply(t,arguments)})},null,40,at),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),(0,a.Wm)(s,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(c,{"is-profile":t.isProfileSetting},null,8,["is-profile"])]),t.compact?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",it,(0,i.zw)(t.$t("settings.preview")),1)),(0,a.Wm)(d,{class:"attachment",compact:t.compact,attachment:t.attachment,size:"small","hide-description":"",onSetMedia:t.onMedia,onNaturalSizeLoad:t.onNaturalSizeLoad},null,8,["compact","attachment","onSetMedia","onNaturalSizeLoad"]),(0,a._)("div",rt,[(0,a.Wm)(u,{ref:"mediaUpload",class:"media-upload-icon","drop-files":t.dropFiles,"normal-button":"","accept-types":t.acceptTypes,onUploaded:t.setMediaFile,onUploadFailed:t.uploadFailed},null,8,["drop-files","accept-types","onUploaded","onUploadFailed"])])]),(0,a.Wm)(p)],2)):(0,a.kq)("",!0)}]]);var mt=n(76875),ft=n(9382),ht=n(84131);function _t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}ft.vI.add(ht.g4A);const bt={provide:function(){return{defaultDraftMode:!0,defaultSource:"admin"}},components:{BooleanSetting:I.Z,ChoiceSetting:M.Z,IntegerSetting:x.Z,StringSetting:H,AttachmentSetting:pt,GroupSetting:J},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_t(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_t(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},(0,mt.Z)())},gt=(0,Y.Z)(bt,[["render",function(t,e,n,r,l,o){var s=(0,a.up)("StringSetting"),c=(0,a.up)("AttachmentSetting"),d=(0,a.up)("BooleanSetting"),u=(0,a.up)("IntegerSetting"),p=(0,a.up)("ChoiceSetting"),m=(0,a.up)("GroupSetting");return(0,a.wg)(),(0,a.iD)("div",{label:t.$t("admin_dash.tabs.instance")},[(0,a._)("div",_,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.instance")),1),(0,a._)("ul",b,[(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:instance.:name"})]),void 0!==t.adminDraft[":pleroma"][":instance"][":favicon"]?((0,a.wg)(),(0,a.iD)("li",g,[(0,a.Wm)(c,{compact:"",path:":pleroma.:instance.:favicon"})])):(0,a.kq)("",!0),(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:instance.:email"})]),(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:instance.:description"})]),(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:instance.:short_description"})]),(0,a._)("li",null,[(0,a.Wm)(c,{compact:"",path:":pleroma.:instance.:instance_thumbnail"})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:background_image"})])])]),(0,a._)("div",w,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.registrations")),1),(0,a._)("ul",v,[(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:registrations_open"}),(0,a._)("ul",y,[(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:invites_enabled","parent-path":":pleroma.:instance.:registrations_open","parent-invert":""})])])]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:birthday_required"}),(0,a._)("ul",k,[(0,a._)("li",null,[(0,a.Wm)(u,{path:":pleroma.:instance.:birthday_min_age","parent-path":":pleroma.:instance.:birthday_required"})])])]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:account_activation_required"})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:account_approval_required"})]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.instance.captcha_header")),1),(0,a._)("ul",O,[(0,a._)("li",null,[(0,a.Wm)(d,{path:[":pleroma","Pleroma.Captcha",":enabled"]},null,8,["path"]),(0,a._)("ul",D,[(0,a._)("li",null,[(0,a.Wm)(p,{path:[":pleroma","Pleroma.Captcha",":method"],"parent-path":[":pleroma","Pleroma.Captcha",":enabled"],"option-label-map":{"Pleroma.Captcha.Native":t.$t("admin_dash.captcha.native"),"Pleroma.Captcha.Kocaptcha":t.$t("admin_dash.captcha.kocaptcha")}},null,8,["path","parent-path","option-label-map"]),(0,a.Wm)(u,{path:[":pleroma","Pleroma.Captcha",":seconds_valid"],"parent-path":[":pleroma","Pleroma.Captcha",":enabled"]},null,8,["path","parent-path"])]),t.adminDraft[":pleroma"]["Pleroma.Captcha"][":enabled"]&&"Pleroma.Captcha.Kocaptcha"===t.adminDraft[":pleroma"]["Pleroma.Captcha"][":method"]?((0,a.wg)(),(0,a.iD)("li",S,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.kocaptcha")),1),(0,a._)("ul",j,[(0,a._)("li",null,[(0,a.Wm)(s,{path:[":pleroma","Pleroma.Captcha.Kocaptcha",":endpoint"]},null,8,["path"])])])])):(0,a.kq)("",!0)])])])])])]),(0,a._)("div",P,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.access")),1),(0,a._)("ul",$,[(0,a._)("li",null,[(0,a.Wm)(d,{"override-backend-description":"","override-backend-description-label":"",path:":pleroma.:instance.:public"})]),(0,a._)("li",null,[(0,a.Wm)(p,{"override-backend-description":"","override-backend-description-label":"",path:":pleroma.:instance.:limit_to_local_content"})]),t.expertLevel?((0,a.wg)(),(0,a.iD)("li",W,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.header")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.description")),1),(0,a._)("ul",z,[(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.timelines")),1),(0,a._)("ul",Z,[(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:timelines.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:timelines.:federated","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:timelines"})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.profiles")),1),(0,a._)("ul",C,[(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:profiles.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:profiles.:remote","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:profiles"})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.activities")),1),(0,a._)("ul",L,[(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:activities.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:restrict_unauthenticated.:activities.:remote","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:activities"})])])])])])):(0,a.kq)("",!0)])])],8,h)}]]);var wt=["label"],vt={class:"setting-item"},yt={class:"setting-list"},kt={class:"setting-list"},Ot={class:"setting-list"},Dt={class:"setting-list"},St={class:"setting-list"},jt={class:"setting-list"};function Pt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}ft.vI.add(ht.g4A);const $t={data:function(){},components:{BooleanSetting:I.Z,ChoiceSetting:M.Z,IntegerSetting:x.Z,StringSetting:H},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Pt(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Pt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},(0,mt.Z)())},Wt=(0,Y.Z)($t,[["render",function(t,e,n,r,l,o){var s=(0,a.up)("IntegerSetting");return(0,a.wg)(),(0,a.iD)("div",{label:t.$t("admin_dash.tabs.limits")},[(0,a._)("div",vt,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.limits.arbitrary_limits")),1),(0,a._)("ul",yt,[(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.posts")),1),(0,a._)("ul",kt,[(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:remote_limit",expert:"1","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.uploads")),1),(0,a._)("ul",Ot,[(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:description_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:upload_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:max_media_attachments","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.users")),1),(0,a._)("ul",Dt,[(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:max_pinned_statuses","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:user_bio_length","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:user_name_length","draft-mode":""})]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.limits.profile_fields")),1),(0,a._)("ul",St,[(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:max_account_fields","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:max_remote_account_fields","draft-mode":"",expert:"1"})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:account_field_name_length","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:account_field_value_length","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.limits.user_uploads")),1),(0,a._)("ul",jt,[(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:avatar_upload_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(s,{source:"admin",path:":pleroma.:instance.:banner_upload_limit","draft-mode":""})])])])])])])])],8,wt)}]]);var zt=n(49963),Zt=["label"],Ct={class:"setting-item"},Lt={class:"setting-list"},qt={class:"setting-list"},It={class:"setting-list relative"},Mt={class:"cards-list"},xt={key:0},Ut=["href"],Et={key:1},At={key:2},Bt=["href"],Ft={class:"btn-group"},Tt=["onClick"],Yt={class:"dropdown-menu"},Ht=["onClick"],Gt=["title"],Kt={key:0,class:"btn-group"},Nt=["disabled","onClick"],Rt={class:"dropdown-menu"},Vt=["onClick"],Xt=["title"],Jt=n(15861),Qt=n(64687),te=n.n(Qt),ee=n(84535),ne=n(29187);function ae(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}ft.vI.add(ht.g4A);const ie={provide:function(){return{defaultDraftMode:!0,defaultSource:"admin"}},data:function(){return{working:!1}},components:{BooleanSetting:I.Z,ChoiceSetting:M.Z,IntegerSetting:x.Z,StringSetting:H,GroupSetting:J,PanelLoading:ne.Z,Popover:ee.default},created:function(){this.user.rights.admin&&this.$store.dispatch("loadFrontendsStuff")},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ae(Object(n),!0).forEach((function(e){(0,q.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ae(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({frontends:function(){return this.$store.state.adminSettings.frontends}},(0,mt.Z)()),methods:{canInstall:function(t){var e=this.frontends.find((function(e){return e.name===t.name}));return!!e&&e.refs.includes(t.ref)},getSuggestedRef:function(t){var e=this.adminDraft[":pleroma"][":frontends"][":primary"];return(null==e?void 0:e.name)===t.name&&this.canInstall(e)?e.ref:t.refs[0]},update:function(t,e){var n=this,a=e||this.getSuggestedRef(t),i=t.name,r={name:i,ref:a};this.working=!0,this.$store.state.api.backendInteractor.installFrontend({payload:r}).finally((function(){n.working=!1})).then(function(){var t=(0,Jt.Z)(te().mark((function t(e){var r;return te().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.$store.dispatch("loadFrontendsStuff"),!e.error){t.next=8;break}return t.next=4,e.error.json();case 4:r=t.sent,n.$store.dispatch("pushGlobalNotice",{level:"error",messageKey:"admin_dash.frontend.failure_installing_frontend",messageArgs:{version:i+"/"+a,reason:r.error},timeout:5e3}),t.next=9;break;case 8:n.$store.dispatch("pushGlobalNotice",{level:"success",messageKey:"admin_dash.frontend.success_installing_frontend",messageArgs:{version:i+"/"+a},timeout:2e3});case 9:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())},setDefault:function(t,e){var n=e||this.getSuggestedRef(t),a=t.name;this.$store.commit("updateAdminDraft",{path:[":pleroma",":frontends",":primary"],value:{name:a,ref:n}})}}},re=(0,Y.Z)(ie,[["render",function(t,e,n,r,l,o){var s=(0,a.up)("StringSetting"),c=(0,a.up)("GroupSetting"),d=(0,a.up)("PanelLoading"),u=(0,a.up)("i18n-t"),p=(0,a.up)("FAIcon"),m=(0,a.up)("Popover");return(0,a.wg)(),(0,a.iD)("div",{class:"frontends-tab",label:t.$t("admin_dash.tabs.frontends")},[(0,a._)("div",Ct,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.tabs.frontends")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.frontend.wip_notice")),1),(0,a._)("ul",Lt,[(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.frontend.default_frontend")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.frontend.default_frontend_tip")),1),(0,a._)("ul",qt,[(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:frontends.:primary.name"})]),(0,a._)("li",null,[(0,a.Wm)(s,{path:":pleroma.:frontends.:primary.ref"})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:frontends.:primary"})])])])]),(0,a._)("div",It,[t.working?((0,a.wg)(),(0,a.j4)(d,{key:0,class:"overlay"})):(0,a.kq)("",!0),(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.frontend.available_frontends")),1),(0,a._)("ul",Mt,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(t.frontends,(function(e){var n,r,l,o;return(0,a.wg)(),(0,a.iD)("li",{key:e.name},[(0,a._)("strong",null,(0,i.zw)(e.name),1),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),(null===(n=t.adminDraft[":pleroma"][":frontends"][":primary"])||void 0===n?void 0:n.name)===e.name?((0,a.wg)(),(0,a.iD)("span",xt,[(null===(r=t.adminDraft[":pleroma"][":frontends"][":primary"])||void 0===r?void 0:r.ref)===e.refs[0]?((0,a.wg)(),(0,a.j4)(u,{key:0,keypath:"admin_dash.frontend.is_default"})):((0,a.wg)(),(0,a.j4)(u,{key:1,keypath:"admin_dash.frontend.is_default_custom"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(t.adminDraft[":pleroma"][":frontends"][":primary"].ref),1)]})),_:1}))])):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,i.zw)(t.$t("admin_dash.frontend.repository")),1),(0,a._)("dd",null,[(0,a._)("a",{href:e.git,target:"_blank"},(0,i.zw)(e.git),9,Ut)]),t.expertLevel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a._)("dt",null,(0,i.zw)(t.$t("admin_dash.frontend.versions")),1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.refs,(function(t){return(0,a.wg)(),(0,a.iD)("dd",{key:t},[(0,a._)("code",null,(0,i.zw)(t),1)])})),128))],64)):(0,a.kq)("",!0),t.expertLevel?((0,a.wg)(),(0,a.iD)("dt",Et,(0,i.zw)(t.$t("admin_dash.frontend.build_url")),1)):(0,a.kq)("",!0),t.expertLevel?((0,a.wg)(),(0,a.iD)("dd",At,[(0,a._)("a",{href:e.build_url,target:"_blank"},(0,i.zw)(e.build_url),9,Bt)])):(0,a.kq)("",!0)]),(0,a._)("div",null,[(0,a._)("span",Ft,[(0,a._)("button",{class:"button button-default btn",type:"button",onClick:function(n){return t.update(e)}},[(0,a.Uk)((0,i.zw)(e.installed?t.$t("admin_dash.frontend.reinstall"):t.$t("admin_dash.frontend.install"))+" ",1),(0,a._)("code",null,(0,i.zw)(t.getSuggestedRef(e)),1)],8,Tt),e.refs.length>1?((0,a.wg)(),(0,a.j4)(m,{key:0,trigger:"click",class:"button-dropdown",placement:"bottom"},{content:(0,a.w5)((function(n){var r=n.close;return[(0,a._)("div",Yt,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.refs,(function(n){return(0,a.wg)(),(0,a.iD)("button",{key:n,class:"button-default dropdown-item",onClick:[(0,zt.iM)((function(a){return t.update(e,n)}),["prevent"]),r]},[(0,a.Wm)(u,{keypath:"admin_dash.frontend.install_version"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(n),1)]})),_:2},1024)],8,Ht)})),128))])]})),trigger:(0,a.w5)((function(){return[(0,a._)("button",{class:"button button-default btn dropdown-button",type:"button",title:t.$t("admin_dash.frontend.more_install_options")},[(0,a.Wm)(p,{icon:"chevron-down"})],8,Gt)]})),_:2},1024)):(0,a.kq)("",!0)]),e.installed&&"admin-fe"!==e.name?((0,a.wg)(),(0,a.iD)("span",Kt,[(0,a._)("button",{class:"button button-default btn",type:"button",disabled:(null===(l=t.adminDraft[":pleroma"][":frontends"][":primary"])||void 0===l?void 0:l.name)===e.name&&(null===(o=t.adminDraft[":pleroma"][":frontends"][":primary"])||void 0===o?void 0:o.ref)===e.refs[0],onClick:function(n){return t.setDefault(e)}},[(0,a.Uk)((0,i.zw)(t.$t("admin_dash.frontend.set_default"))+" ",1),(0,a._)("code",null,(0,i.zw)(t.getSuggestedRef(e)),1)],8,Nt),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),e.refs.length>1?((0,a.wg)(),(0,a.j4)(m,{key:0,trigger:"click",class:"button-dropdown",placement:"bottom"},{content:(0,a.w5)((function(n){var r=n.close;return[(0,a._)("div",Rt,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.installedRefs||e.refs,(function(n){return(0,a.wg)(),(0,a.iD)("button",{key:n,class:"button-default dropdown-item",onClick:[(0,zt.iM)((function(a){return t.setDefault(e,n)}),["prevent"]),r]},[(0,a.Wm)(u,{keypath:"admin_dash.frontend.set_default_version"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(n),1)]})),_:2},1024)],8,Vt)})),128))])]})),trigger:(0,a.w5)((function(){return[(0,a._)("button",{class:"button button-default btn dropdown-button",type:"button",title:t.$t("admin_dash.frontend.more_default_options")},[(0,a.Wm)(p,{icon:"chevron-down"})],8,Xt)]})),_:2},1024)):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])])})),128))])])])],8,Zt)}]]);ft.vI.add(ht.klh,ht.ioV,ht.py1,ht.XsY,ht.qmU,ht.q7m,ht.Aq,ht.YHc);const le={components:{TabSwitcher:f.Z,InstanceTab:gt,LimitsTab:Wt,FrontendsTab:re},computed:{user:function(){return this.$store.state.users.currentUser},isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState},bodyLock:function(){return"visible"===this.$store.state.interface.settingsModalState},adminDbLoaded:function(){return this.$store.state.adminSettings.loaded},adminDescriptionsLoaded:function(){return null!==this.$store.state.adminSettings.descriptions},noDb:function(){return!1===this.$store.state.adminSettings.dbConfigEnabled}},created:function(){this.user.rights.admin&&this.$store.dispatch("loadAdminStuff")},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default().findIndex((function(e){return e.props&&e.props["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()}}},oe=(0,Y.Z)(le,[["render",function(t,e,n,f,h,_){var b=(0,a.up)("i18n-t"),g=(0,a.up)("InstanceTab"),w=(0,a.up)("LimitsTab"),v=(0,a.up)("FrontendsTab"),y=(0,a.up)("tab-switcher");return t.adminDescriptionsLoaded&&(t.noDb||t.adminDbLoaded)?((0,a.wg)(),(0,a.j4)(y,{key:0,ref:"tabSwitcher",class:"settings_tab-switcher","side-tab-bar":!0,"scrollable-tabs":!0,"render-only-focused":!0,"body-scroll-lock":t.bodyLock},{default:(0,a.w5)((function(){return[t.noDb?((0,a.wg)(),(0,a.iD)("div",{key:0,label:t.$t("admin_dash.tabs.nodb"),icon:"exclamation-triangle","data-tab-name":"nodb-notice"},[(0,a._)("div",{label:t.$t("admin_dash.tabs.nodb")},[(0,a._)("div",o,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.nodb.heading")),1),(0,a.Wm)(b,{keypath:"admin_dash.nodb.text"},{documentation:(0,a.w5)((function(){return[(0,a._)("a",s,(0,i.zw)(t.$t("admin_dash.nodb.documentation")),1)]})),property:(0,a.w5)((function(){return[c]})),value:(0,a.w5)((function(){return[d]})),_:1}),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.nodb.text2")),1)])],8,l)],8,r)):(0,a.kq)("",!0),t.adminDbLoaded?((0,a.wg)(),(0,a.iD)("div",{key:1,label:t.$t("admin_dash.tabs.instance"),icon:"wrench","data-tab-name":"general"},[(0,a.Wm)(g)],8,u)):(0,a.kq)("",!0),t.adminDbLoaded?((0,a.wg)(),(0,a.iD)("div",{key:2,label:t.$t("admin_dash.tabs.limits"),icon:"hand","data-tab-name":"limits"},[(0,a.Wm)(w)],8,p)):(0,a.kq)("",!0),(0,a._)("div",{label:t.$t("admin_dash.tabs.frontends"),icon:"laptop-code","data-tab-name":"frontends"},[(0,a.Wm)(v)],8,m)]})),_:1},8,["body-scroll-lock"])):(0,a.kq)("",!0)}]])}}]); +//# sourceMappingURL=8859.c76b0a0c3a4b5acbef11.js.map +\ No newline at end of file diff --git a/priv/static/static/js/8859.c76b0a0c3a4b5acbef11.js.map b/priv/static/static/js/8859.c76b0a0c3a4b5acbef11.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/8859.c76b0a0c3a4b5acbef11.js","mappings":"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","sources":["webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.vue?3ee8","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.vue?7ac1","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue?5a3a","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.vue?14f3","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.vue?14a2","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.vue?a9d3","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.vue?3247"],"sourcesContent":["<template>\n <tab-switcher\n v-if=\"adminDescriptionsLoaded && (noDb || adminDbLoaded)\"\n ref=\"tabSwitcher\"\n class=\"settings_tab-switcher\"\n :side-tab-bar=\"true\"\n :scrollable-tabs=\"true\"\n :render-only-focused=\"true\"\n :body-scroll-lock=\"bodyLock\"\n >\n <div\n v-if=\"noDb\"\n :label=\"$t('admin_dash.tabs.nodb')\"\n icon=\"exclamation-triangle\"\n data-tab-name=\"nodb-notice\"\n >\n <div :label=\"$t('admin_dash.tabs.nodb')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.nodb.heading') }}</h2>\n <i18n-t keypath=\"admin_dash.nodb.text\">\n <template #documentation>\n <a\n href=\"https://docs-develop.pleroma.social/backend/configuration/howto_database_config/\"\n target=\"_blank\"\n >\n {{ $t(\"admin_dash.nodb.documentation\") }}\n </a>\n </template>\n <template #property>\n <code>config :pleroma, configurable_from_database</code>\n </template>\n <template #value>\n <code>true</code>\n </template>\n </i18n-t>\n <p>{{ $t('admin_dash.nodb.text2') }}</p>\n </div>\n </div>\n </div>\n <div\n v-if=\"adminDbLoaded\"\n :label=\"$t('admin_dash.tabs.instance')\"\n icon=\"wrench\"\n data-tab-name=\"general\"\n >\n <InstanceTab />\n </div>\n <div\n v-if=\"adminDbLoaded\"\n :label=\"$t('admin_dash.tabs.limits')\"\n icon=\"hand\"\n data-tab-name=\"limits\"\n >\n <LimitsTab />\n </div>\n <div\n :label=\"$t('admin_dash.tabs.frontends')\"\n icon=\"laptop-code\"\n data-tab-name=\"frontends\"\n >\n <FrontendsTab />\n </div>\n </tab-switcher>\n</template>\n\n<script src=\"./settings_modal_admin_content.js\"></script>\n\n<style src=\"./settings_modal_admin_content.scss\" lang=\"scss\"></style>\n","<template>\n <div :label=\"$t('admin_dash.tabs.instance')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.instance') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <StringSetting path=\":pleroma.:instance.:name\" />\n </li>\n <!-- See https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3963 -->\n <li v-if=\"adminDraft[':pleroma'][':instance'][':favicon'] !== undefined\">\n <AttachmentSetting compact path=\":pleroma.:instance.:favicon\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:email\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:description\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:short_description\" />\n </li>\n <li>\n <AttachmentSetting compact path=\":pleroma.:instance.:instance_thumbnail\" />\n </li>\n <li>\n <AttachmentSetting path=\":pleroma.:instance.:background_image\" />\n </li>\n </ul>\n </div>\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.registrations') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting path=\":pleroma.:instance.:registrations_open\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <BooleanSetting\n path=\":pleroma.:instance.:invites_enabled\"\n parent-path=\":pleroma.:instance.:registrations_open\"\n parent-invert\n />\n </li>\n </ul>\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:birthday_required\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <IntegerSetting\n path=\":pleroma.:instance.:birthday_min_age\"\n parent-path=\":pleroma.:instance.:birthday_required\"\n />\n </li>\n </ul>\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:account_activation_required\" />\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:account_approval_required\" />\n </li>\n <li>\n <h3>{{ $t('admin_dash.instance.captcha_header') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting :path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <ChoiceSetting\n :path=\"[':pleroma', 'Pleroma.Captcha', ':method']\"\n :parent-path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\"\n :option-label-map=\"{\n 'Pleroma.Captcha.Native': $t('admin_dash.captcha.native'),\n 'Pleroma.Captcha.Kocaptcha': $t('admin_dash.captcha.kocaptcha')\n }\"\n />\n <IntegerSetting\n :path=\"[':pleroma', 'Pleroma.Captcha', ':seconds_valid']\"\n :parent-path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\"\n />\n </li>\n <li\n v-if=\"adminDraft[':pleroma']['Pleroma.Captcha'][':enabled'] && adminDraft[':pleroma']['Pleroma.Captcha'][':method'] === 'Pleroma.Captcha.Kocaptcha'\"\n >\n <h4>{{ $t('admin_dash.instance.kocaptcha') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <StringSetting :path=\"[':pleroma', 'Pleroma.Captcha.Kocaptcha', ':endpoint']\" />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.access') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n override-backend-description\n override-backend-description-label\n path=\":pleroma.:instance.:public\"\n />\n </li>\n <li>\n <ChoiceSetting\n override-backend-description\n override-backend-description-label\n path=\":pleroma.:instance.:limit_to_local_content\"\n />\n </li>\n <li v-if=\"expertLevel\">\n <h3>{{ $t('admin_dash.instance.restrict.header') }}</h3>\n <p>\n {{ $t('admin_dash.instance.restrict.description') }}\n </p>\n <ul class=\"setting-list\">\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.timelines') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:timelines.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:timelines.:federated\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:timelines\" />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.profiles') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:profiles.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:profiles.:remote\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:profiles\" />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.activities') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:activities.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:activities.:remote\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:activities\" />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./instance_tab.js\"></script>\n","<template>\n <label\n v-if=\"matchesExpertLevel\"\n class=\"StringSetting\"\n >\n <label\n :for=\"path\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n <template v-if=\"backendDescriptionLabel\">\n {{ backendDescriptionLabel + ' ' }}\n </template>\n <template v-else-if=\"source === 'admin'\">\n MISSING LABEL FOR {{ path }}\n </template>\n <slot v-else />\n </label>\n <input\n :id=\"path\"\n class=\"string-input\"\n :disabled=\"shouldBeDisabled\"\n :value=\"realDraftMode ? draft : state\"\n @change=\"update\"\n >\n {{ ' ' }}\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n <DraftButtons />\n <p\n v-if=\"backendDescriptionDescription\"\n class=\"setting-description\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n {{ backendDescriptionDescription + ' ' }}\n </p>\n </label>\n</template>\n\n<script src=\"./string_setting.js\"></script>\n","import Setting from './setting.js'\n\nexport default {\n ...Setting\n}\n","import { render } from \"./string_setting.vue?vue&type=template&id=77b0b493\"\nimport script from \"./string_setting.js?vue&type=script&lang=js\"\nexport * from \"./string_setting.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n v-if=\"matchesExpertLevel\"\n class=\"GroupSetting\"\n >\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n <DraftButtons />\n </span>\n</template>\n\n<script src=\"./group_setting.js\"></script>\n","import { isEqual } from 'lodash'\n\nimport Setting from './setting.js'\n\nexport default {\n ...Setting,\n computed: {\n ...Setting.computed,\n isDirty () {\n return !isEqual(this.state, this.draft)\n }\n }\n}\n","import { render } from \"./group_setting.vue?vue&type=template&id=19cb3543\"\nimport script from \"./group_setting.js?vue&type=script&lang=js\"\nexport * from \"./group_setting.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n v-if=\"matchesExpertLevel\"\n class=\"AttachmentSetting\"\n :class=\"{ '-compact': compact }\"\n >\n <label\n :for=\"path\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n <template v-if=\"backendDescriptionLabel\">\n {{ backendDescriptionLabel + ' ' }}\n </template>\n <template v-else-if=\"source === 'admin'\">\n MISSING LABEL FOR {{ path }}\n </template>\n <slot v-else />\n\n </label>\n <p\n v-if=\"backendDescriptionDescription\"\n class=\"setting-description\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n {{ backendDescriptionDescription + ' ' }}\n </p>\n <div class=\"attachment-input\">\n <div class=\"controls control-field\">\n <label for=\"path\">{{ $t('settings.url') }}</label>\n <input\n :id=\"path\"\n class=\"string-input\"\n :disabled=\"shouldBeDisabled\"\n :value=\"realDraftMode ? draft : state\"\n @change=\"update\"\n >\n {{ ' ' }}\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n </div>\n <div v-if=\"!compact\">{{ $t('settings.preview') }}</div>\n <Attachment\n class=\"attachment\"\n :compact=\"compact\"\n :attachment=\"attachment\"\n size=\"small\"\n hide-description\n @setMedia=\"onMedia\"\n @naturalSizeLoad=\"onNaturalSizeLoad\"\n />\n <div class=\"controls control-upload\">\n <MediaUpload\n ref=\"mediaUpload\"\n class=\"media-upload-icon\"\n :drop-files=\"dropFiles\"\n normal-button\n :accept-types=\"acceptTypes\"\n @uploaded=\"setMediaFile\"\n @upload-failed=\"uploadFailed\"\n />\n </div>\n </div>\n <DraftButtons />\n </span>\n</template>\n\n<script src=\"./attachment_setting.js\"></script>\n\n<style lang=\"scss\">\n.AttachmentSetting {\n .attachment {\n display: block;\n width: 100%;\n height: 15em;\n margin-bottom: 0.5em;\n }\n\n .attachment-input {\n margin-left: 1em;\n display: flex;\n flex-direction: column;\n width: 20em;\n }\n\n &.-compact {\n .attachment-input {\n flex-direction: row;\n align-items: flex-end;\n }\n\n .attachment {\n flex: 0;\n order: 0;\n display: block;\n min-width: 4em;\n height: 4em;\n align-self: center;\n margin-bottom: 0;\n }\n\n .control-field {\n order: 1;\n min-width: 12em;\n margin-left: 0.5em;\n }\n\n .control-upload {\n order: 2;\n min-width: 12em;\n padding: 0 0.5em;\n }\n }\n\n .controls {\n margin-bottom: 0.5em;\n\n input,\n button {\n width: 100%;\n }\n }\n}\n</style>\n","import Setting from './setting.js'\nimport { fileTypeExt } from 'src/services/file_type/file_type.service.js'\nimport MediaUpload from 'src/components/media_upload/media_upload.vue'\nimport Attachment from 'src/components/attachment/attachment.vue'\n\nexport default {\n ...Setting,\n props: {\n ...Setting.props,\n compact: Boolean,\n acceptTypes: {\n type: String,\n required: false,\n default: 'image/*'\n }\n },\n components: {\n ...Setting.components,\n MediaUpload,\n Attachment\n },\n computed: {\n ...Setting.computed,\n attachment () {\n const path = this.realDraftMode ? this.draft : this.state\n // The \"server\" part is primarily for local dev, but could be useful for alt-domain or multiuser usage.\n const url = path.includes('://') ? path : this.$store.state.instance.server + path\n return {\n mimetype: fileTypeExt(url),\n url\n }\n }\n },\n methods: {\n ...Setting.methods,\n setMediaFile (fileInfo) {\n if (this.realDraftMode) {\n this.draft = fileInfo.url\n } else {\n this.configSink(this.path, fileInfo.url)\n }\n }\n }\n}\n","import { render } from \"./attachment_setting.vue?vue&type=template&id=01b5193b\"\nimport script from \"./attachment_setting.js?vue&type=script&lang=js\"\nexport * from \"./attachment_setting.js?vue&type=script&lang=js\"\n\nimport \"./attachment_setting.vue?vue&type=style&index=0&id=01b5193b&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\nimport GroupSetting from '../helpers/group_setting.vue'\nimport AttachmentSetting from '../helpers/attachment_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst InstanceTab = {\n provide () {\n return {\n defaultDraftMode: true,\n defaultSource: 'admin'\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting,\n AttachmentSetting,\n GroupSetting\n },\n computed: {\n ...SharedComputedObject()\n }\n}\n\nexport default InstanceTab\n","import { render } from \"./instance_tab.vue?vue&type=template&id=a448cf80\"\nimport script from \"./instance_tab.js?vue&type=script&lang=js\"\nexport * from \"./instance_tab.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div :label=\"$t('admin_dash.tabs.limits')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.limits.arbitrary_limits') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <h3>{{ $t('admin_dash.limits.posts') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:remote_limit\"\n expert=\"1\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h3>{{ $t('admin_dash.limits.uploads') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:description_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:upload_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_media_attachments\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h3>{{ $t('admin_dash.limits.users') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_pinned_statuses\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:user_bio_length\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:user_name_length\"\n draft-mode\n />\n </li>\n <li>\n <h4>{{ $t('admin_dash.limits.profile_fields') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_account_fields\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_remote_account_fields\"\n draft-mode\n expert=\"1\"\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:account_field_name_length\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:account_field_value_length\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.limits.user_uploads') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:avatar_upload_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:banner_upload_limit\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./limits_tab.js\"></script>\n","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst LimitsTab = {\n data () {},\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting\n },\n computed: {\n ...SharedComputedObject()\n }\n}\n\nexport default LimitsTab\n","import { render } from \"./limits_tab.vue?vue&type=template&id=04194dfc\"\nimport script from \"./limits_tab.js?vue&type=script&lang=js\"\nexport * from \"./limits_tab.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"frontends-tab\"\n :label=\"$t('admin_dash.tabs.frontends')\"\n >\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.tabs.frontends') }}</h2>\n <p>{{ $t('admin_dash.frontend.wip_notice') }}</p>\n <ul class=\"setting-list\">\n <li>\n <h3>{{ $t('admin_dash.frontend.default_frontend') }}</h3>\n <p>{{ $t('admin_dash.frontend.default_frontend_tip') }}</p>\n <ul class=\"setting-list\">\n <li>\n <StringSetting path=\":pleroma.:frontends.:primary.name\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:frontends.:primary.ref\" />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:frontends.:primary\" />\n </li>\n </ul>\n </li>\n </ul>\n <div class=\"setting-list relative\">\n <PanelLoading class=\"overlay\" v-if=\"working\"/>\n <h3>{{ $t('admin_dash.frontend.available_frontends') }}</h3>\n <ul class=\"cards-list\">\n <li\n v-for=\"frontend in frontends\"\n :key=\"frontend.name\"\n >\n <strong>{{ frontend.name }}</strong>\n {{ ' ' }}\n <span v-if=\"adminDraft[':pleroma'][':frontends'][':primary']?.name === frontend.name\">\n <i18n-t\n v-if=\"adminDraft[':pleroma'][':frontends'][':primary']?.ref === frontend.refs[0]\"\n keypath=\"admin_dash.frontend.is_default\"\n />\n <i18n-t\n v-else\n keypath=\"admin_dash.frontend.is_default_custom\"\n >\n <template #version>\n <code>{{ adminDraft[':pleroma'][':frontends'][':primary'].ref }}</code>\n </template>\n </i18n-t>\n </span>\n <dl>\n <dt>{{ $t('admin_dash.frontend.repository') }}</dt>\n <dd>\n <a\n :href=\"frontend.git\"\n target=\"_blank\"\n >{{ frontend.git }}</a>\n </dd>\n <template v-if=\"expertLevel\">\n <dt>{{ $t('admin_dash.frontend.versions') }}</dt>\n <dd\n v-for=\"ref in frontend.refs\"\n :key=\"ref\"\n >\n <code>{{ ref }}</code>\n </dd>\n </template>\n <dt v-if=\"expertLevel\">\n {{ $t('admin_dash.frontend.build_url') }}\n </dt>\n <dd v-if=\"expertLevel\">\n <a\n :href=\"frontend.build_url\"\n target=\"_blank\"\n >{{ frontend.build_url }}</a>\n </dd>\n </dl>\n <div>\n <span class=\"btn-group\">\n <button\n class=\"button button-default btn\"\n type=\"button\"\n @click=\"update(frontend)\"\n >\n {{\n frontend.installed\n ? $t('admin_dash.frontend.reinstall')\n : $t('admin_dash.frontend.install')\n }}\n <code>\n {{\n getSuggestedRef(frontend)\n }}\n </code>\n </button>\n <Popover\n v-if=\"frontend.refs.length > 1\"\n trigger=\"click\"\n class=\"button-dropdown\"\n placement=\"bottom\"\n >\n <template #content=\"{close}\">\n <div class=\"dropdown-menu\">\n <button\n v-for=\"ref in frontend.refs\"\n :key=\"ref\"\n class=\"button-default dropdown-item\"\n @click.prevent=\"update(frontend, ref)\"\n @click=\"close\"\n >\n <i18n-t keypath=\"admin_dash.frontend.install_version\">\n <template #version>\n <code>{{ ref }}</code>\n </template>\n </i18n-t>\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button button-default btn dropdown-button\"\n type=\"button\"\n :title=\"$t('admin_dash.frontend.more_install_options')\"\n >\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n </span>\n <span\n v-if=\"frontend.installed && frontend.name !== 'admin-fe'\"\n class=\"btn-group\"\n >\n <button\n class=\"button button-default btn\"\n type=\"button\"\n :disabled=\"\n adminDraft[':pleroma'][':frontends'][':primary']?.name === frontend.name &&\n adminDraft[':pleroma'][':frontends'][':primary']?.ref === frontend.refs[0]\n \"\n @click=\"setDefault(frontend)\"\n >\n {{\n $t('admin_dash.frontend.set_default')\n }}\n <code>\n {{\n getSuggestedRef(frontend)\n }}\n </code>\n </button>\n {{ ' ' }}\n <Popover\n v-if=\"frontend.refs.length > 1\"\n trigger=\"click\"\n class=\"button-dropdown\"\n placement=\"bottom\"\n >\n <template #content=\"{close}\">\n <div class=\"dropdown-menu\">\n <button\n v-for=\"ref in frontend.installedRefs || frontend.refs\"\n :key=\"ref\"\n class=\"button-default dropdown-item\"\n @click.prevent=\"setDefault(frontend, ref)\"\n @click=\"close\"\n >\n <i18n-t keypath=\"admin_dash.frontend.set_default_version\">\n <template #version>\n <code>{{ ref }}</code>\n </template>\n </i18n-t>\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button button-default btn dropdown-button\"\n type=\"button\"\n :title=\"$t('admin_dash.frontend.more_default_options')\"\n >\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n </span>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./frontends_tab.js\"></script>\n\n<style lang=\"scss\" src=\"./frontends_tab.scss\"></style>\n","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\nimport GroupSetting from '../helpers/group_setting.vue'\nimport Popover from 'src/components/popover/popover.vue'\nimport PanelLoading from 'src/components/panel_loading/panel_loading.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst FrontendsTab = {\n provide () {\n return {\n defaultDraftMode: true,\n defaultSource: 'admin'\n }\n },\n data () {\n return {\n working: false\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting,\n GroupSetting,\n PanelLoading,\n Popover\n },\n created () {\n if (this.user.rights.admin) {\n this.$store.dispatch('loadFrontendsStuff')\n }\n },\n computed: {\n frontends () {\n return this.$store.state.adminSettings.frontends\n },\n ...SharedComputedObject()\n },\n methods: {\n canInstall (frontend) {\n const fe = this.frontends.find(f => f.name === frontend.name)\n if (!fe) return false\n return fe.refs.includes(frontend.ref)\n },\n getSuggestedRef (frontend) {\n const defaultFe = this.adminDraft[':pleroma'][':frontends'][':primary']\n if (defaultFe?.name === frontend.name && this.canInstall(defaultFe)) {\n return defaultFe.ref\n } else {\n return frontend.refs[0]\n }\n },\n update (frontend, suggestRef) {\n const ref = suggestRef || this.getSuggestedRef(frontend)\n const { name } = frontend\n const payload = { name, ref }\n\n this.working = true\n this.$store.state.api.backendInteractor.installFrontend({ payload })\n .finally(() => {\n this.working = false\n })\n .then(async (response) => {\n this.$store.dispatch('loadFrontendsStuff')\n if (response.error) {\n const reason = await response.error.json()\n this.$store.dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'admin_dash.frontend.failure_installing_frontend',\n messageArgs: {\n version: name + '/' + ref,\n reason: reason.error\n },\n timeout: 5000\n })\n } else {\n this.$store.dispatch('pushGlobalNotice', {\n level: 'success',\n messageKey: 'admin_dash.frontend.success_installing_frontend',\n messageArgs: {\n version: name + '/' + ref\n },\n timeout: 2000\n })\n }\n })\n },\n setDefault (frontend, suggestRef) {\n const ref = suggestRef || this.getSuggestedRef(frontend)\n const { name } = frontend\n\n this.$store.commit('updateAdminDraft', { path: [':pleroma', ':frontends', ':primary'], value: { name, ref } })\n }\n }\n}\n\nexport default FrontendsTab\n","import { render } from \"./frontends_tab.vue?vue&type=template&id=57d082ef\"\nimport script from \"./frontends_tab.js?vue&type=script&lang=js\"\nexport * from \"./frontends_tab.js?vue&type=script&lang=js\"\n\nimport \"./frontends_tab.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\n\nimport InstanceTab from './admin_tabs/instance_tab.vue'\nimport LimitsTab from './admin_tabs/limits_tab.vue'\nimport FrontendsTab from './admin_tabs/frontends_tab.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faWrench,\n faHand,\n faLaptopCode,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faWrench,\n faHand,\n faLaptopCode,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n)\n\nconst SettingsModalAdminContent = {\n components: {\n TabSwitcher,\n\n InstanceTab,\n LimitsTab,\n FrontendsTab\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n },\n bodyLock () {\n return this.$store.state.interface.settingsModalState === 'visible'\n },\n adminDbLoaded () {\n return this.$store.state.adminSettings.loaded\n },\n adminDescriptionsLoaded () {\n return this.$store.state.adminSettings.descriptions !== null\n },\n noDb () {\n return this.$store.state.adminSettings.dbConfigEnabled === false\n }\n },\n created () {\n if (this.user.rights.admin) {\n this.$store.dispatch('loadAdminStuff')\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.props && elm.props['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 SettingsModalAdminContent\n","import { render } from \"./settings_modal_admin_content.vue?vue&type=template&id=43a9ece4\"\nimport script from \"./settings_modal_admin_content.js?vue&type=script&lang=js\"\nexport * from \"./settings_modal_admin_content.js?vue&type=script&lang=js\"\n\nimport \"./settings_modal_admin_content.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["class","href","target","_createElementVNode","Setting","_ctx","matchesExpertLevel","_createElementBlock","_hoisted_1","for","path","_normalizeClass","shouldBeDisabled","backendDescriptionLabel","_Fragment","key","source","_toDisplayString","_renderSlot","$slots","id","disabled","value","realDraftMode","draft","state","onChange","_cache","update","apply","arguments","_createVNode","_component_ModifiedIndicator","changed","isChanged","onclick","reset","_component_ProfileSettingIndicator","isProfileSetting","_component_DraftButtons","backendDescriptionDescription","_objectSpread","computed","isDirty","_isEqual","this","props","compact","Boolean","acceptTypes","type","String","required","default","components","MediaUpload","Attachment","attachment","url","includes","$store","instance","server","mimetype","fileTypeExt","methods","setMediaFile","fileInfo","configSink","_hoisted_2","_hoisted_3","_hoisted_4","$t","_hoisted_6","_component_Attachment","size","onSetMedia","onMedia","onNaturalSizeLoad","_hoisted_7","_component_MediaUpload","ref","dropFiles","onUploaded","onUploadFailed","uploadFailed","library","faGlobe","provide","defaultDraftMode","defaultSource","BooleanSetting","ChoiceSetting","IntegerSetting","StringSetting","AttachmentSetting","GroupSetting","SharedComputedObject","label","_component_StringSetting","undefined","adminDraft","_component_AttachmentSetting","_hoisted_5","_component_BooleanSetting","_hoisted_8","_component_IntegerSetting","_hoisted_9","_hoisted_10","_component_ChoiceSetting","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","expertLevel","_hoisted_15","_hoisted_16","_hoisted_17","_component_GroupSetting","_hoisted_18","_hoisted_19","data","expert","working","PanelLoading","Popover","created","user","rights","admin","dispatch","frontends","adminSettings","canInstall","frontend","fe","find","f","name","refs","getSuggestedRef","defaultFe","suggestRef","_this","payload","api","backendInteractor","installFrontend","then","_ref","_asyncToGenerator","_regeneratorRuntime","_callee","response","reason","_context","prev","next","error","json","sent","level","messageKey","messageArgs","version","timeout","stop","_x","setDefault","commit","_createBlock","_component_PanelLoading","_renderList","_ctx$adminDraft$Pler","_ctx$adminDraft$Pler2","_ctx$adminDraft$Pler3","_ctx$adminDraft$Pler4","_component_i18n_t","keypath","_withCtx","git","build_url","onClick","$event","installed","length","_component_Popover","trigger","placement","content","close","title","_component_FAIcon","icon","_ref2","installedRefs","faWrench","faHand","faLaptopCode","faPaintBrush","faBell","faDownload","faEyeSlash","faInfo","TabSwitcher","InstanceTab","LimitsTab","FrontendsTab","users","currentUser","isLoggedIn","open","settingsModalState","bodyLock","adminDbLoaded","loaded","adminDescriptionsLoaded","descriptions","noDb","dbConfigEnabled","onOpen","targetTab","settingsModalTargetTab","tabIndex","$refs","tabSwitcher","findIndex","elm","setTab","mounted","watch","_component_tab_switcher","documentation","property","_component_InstanceTab","_component_LimitsTab","_component_FrontendsTab"],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/static/js/9801.99ace6b5dc657bf1a65b.js b/priv/static/static/js/9801.99ace6b5dc657bf1a65b.js @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[9801],{9541:(t,e,n)=>{n.r(e),n.d(e,{default:()=>te});var a=n(66252),i=n(3577),r=["label"],l=["label"],s={class:"setting-item"},o={href:"https://docs-develop.pleroma.social/backend/configuration/howto_database_config/",target:"_blank"},d=(0,a._)("code",null,"config :pleroma, configurable_from_database",-1),c=(0,a._)("code",null,"true",-1),u=["label"],p=["label"],m=["label"],f=n(79354),h=["label"],_={class:"setting-item"},b={class:"setting-list"},g={class:"setting-item"},w={class:"setting-list"},y={class:"setting-list suboptions"},v={class:"setting-list suboptions"},k={class:"setting-list"},O={class:"setting-list suboptions"},D={key:0},S={class:"setting-list"},j={class:"setting-item"},P={class:"setting-list"},$={key:0},W={class:"setting-list"},z={class:"setting-list"},Z={class:"setting-list"},C={class:"setting-list"},L=n(4942),I=n(59236),q=n(77218),M=n(87449),E={key:0,class:"StringSetting"},U=["for"],x=["id","disabled","value"],B=n(7761);function A(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}const F=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?A(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):A(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},B.Z);var T=n(83744);const Y=(0,T.Z)(F,[["render",function(t,e,n,r,l,s){var o=(0,a.up)("ModifiedIndicator"),d=(0,a.up)("ProfileSettingIndicator"),c=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("label",E,[(0,a._)("label",{for:t.path,class:(0,i.C_)({faint:t.shouldBeDisabled})},[t.backendDescriptionLabel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a.Uk)((0,i.zw)(t.backendDescriptionLabel+" "),1)],64)):"admin"===t.source?((0,a.wg)(),(0,a.iD)(a.HY,{key:1},[(0,a.Uk)(" MISSING LABEL FOR "+(0,i.zw)(t.path),1)],64)):(0,a.WI)(t.$slots,"default",{key:2})],10,U),(0,a._)("input",{id:t.path,class:"string-input",disabled:t.shouldBeDisabled,value:t.realDraftMode?t.draft:t.state,onChange:e[0]||(e[0]=function(){return t.update&&t.update.apply(t,arguments)})},null,40,x),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),(0,a.Wm)(o,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(d,{"is-profile":t.isProfileSetting},null,8,["is-profile"]),(0,a.Wm)(c),t.backendDescriptionDescription?((0,a.wg)(),(0,a.iD)("p",{key:0,class:(0,i.C_)(["setting-description",{faint:t.shouldBeDisabled}])},(0,i.zw)(t.backendDescriptionDescription+" "),3)):(0,a.kq)("",!0)])):(0,a.kq)("",!0)}]]);var H={key:0,class:"GroupSetting"},G=n(18446),K=n.n(G);function N(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function R(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?N(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}const V=R(R({},B.Z),{},{computed:R(R({},B.Z.computed),{},{isDirty:function(){return!K()(this.state,this.draft)}})}),X=(0,T.Z)(V,[["render",function(t,e,n,i,r,l){var s=(0,a.up)("ModifiedIndicator"),o=(0,a.up)("ProfileSettingIndicator"),d=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("span",H,[(0,a.Wm)(s,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(o,{"is-profile":t.isProfileSetting},null,8,["is-profile"]),(0,a.Wm)(d)])):(0,a.kq)("",!0)}]]);var J={key:0,class:"AttachmentSetting"},Q=["for"],tt={class:"attachment-input"},et={class:"controls"},nt=["id","disabled","value"],at={class:"controls"},it=n(58394),rt=n(37804),lt=n(66596);function st(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function ot(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?st(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):st(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}const dt=ot(ot({},B.Z),{},{props:ot(ot({},B.Z.props),{},{acceptTypes:{type:String,required:!1,default:"image/*"}}),components:ot(ot({},B.Z.components),{},{MediaUpload:rt.Z,Attachment:lt.Z}),computed:ot(ot({},B.Z.computed),{},{attachment:function(){var t=this.realDraftMode?this.draft:this.state,e=t.includes("://")?t:this.$store.state.instance.server+t;return{mimetype:(0,it.iL)(e),url:e}}}),methods:ot(ot({},B.Z.methods),{},{setMediaFile:function(t){this.realDraftMode?this.draft=t.url:this.configSink(this.path,t.url)}})}),ct=(0,T.Z)(dt,[["render",function(t,e,n,r,l,s){var o=(0,a.up)("ModifiedIndicator"),d=(0,a.up)("ProfileSettingIndicator"),c=(0,a.up)("Attachment"),u=(0,a.up)("MediaUpload"),p=(0,a.up)("DraftButtons");return t.matchesExpertLevel?((0,a.wg)(),(0,a.iD)("span",J,[(0,a._)("label",{for:t.path,class:(0,i.C_)({faint:t.shouldBeDisabled})},[t.backendDescriptionLabel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a.Uk)((0,i.zw)(t.backendDescriptionLabel+" "),1)],64)):"admin"===t.source?((0,a.wg)(),(0,a.iD)(a.HY,{key:1},[(0,a.Uk)(" MISSING LABEL FOR "+(0,i.zw)(t.path),1)],64)):(0,a.WI)(t.$slots,"default",{key:2})],10,Q),t.backendDescriptionDescription?((0,a.wg)(),(0,a.iD)("p",{key:0,class:(0,i.C_)(["setting-description",{faint:t.shouldBeDisabled}])},(0,i.zw)(t.backendDescriptionDescription+" "),3)):(0,a.kq)("",!0),(0,a._)("div",tt,[(0,a._)("div",null,(0,i.zw)(t.$t("settings.url")),1),(0,a._)("div",et,[(0,a._)("input",{id:t.path,class:"string-input",disabled:t.shouldBeDisabled,value:t.realDraftMode?t.draft:t.state,onChange:e[0]||(e[0]=function(){return t.update&&t.update.apply(t,arguments)})},null,40,nt),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),(0,a.Wm)(o,{changed:t.isChanged,onclick:t.reset},null,8,["changed","onclick"]),(0,a.Wm)(d,{"is-profile":t.isProfileSetting},null,8,["is-profile"])]),(0,a._)("div",null,(0,i.zw)(t.$t("settings.preview")),1),(0,a.Wm)(c,{class:"attachment",compact:t.compact,attachment:t.attachment,size:"small","hide-description":"",onSetMedia:t.onMedia,onNaturalSizeLoad:t.onNaturalSizeLoad},null,8,["compact","attachment","onSetMedia","onNaturalSizeLoad"]),(0,a._)("div",at,[(0,a.Wm)(u,{ref:"mediaUpload",class:"media-upload-icon","drop-files":t.dropFiles,"normal-button":"","accept-types":t.acceptTypes,onUploaded:t.setMediaFile,onUploadFailed:t.uploadFailed},null,8,["drop-files","accept-types","onUploaded","onUploadFailed"])])]),(0,a.Wm)(p)])):(0,a.kq)("",!0)}]]);var ut=n(76875),pt=n(9382),mt=n(84131);function ft(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}pt.vI.add(mt.g4A);const ht={provide:function(){return{defaultDraftMode:!0,defaultSource:"admin"}},components:{BooleanSetting:I.Z,ChoiceSetting:q.Z,IntegerSetting:M.Z,StringSetting:Y,AttachmentSetting:ct,GroupSetting:X},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ft(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ft(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},(0,ut.Z)())},_t=(0,T.Z)(ht,[["render",function(t,e,n,r,l,s){var o=(0,a.up)("StringSetting"),d=(0,a.up)("AttachmentSetting"),c=(0,a.up)("BooleanSetting"),u=(0,a.up)("IntegerSetting"),p=(0,a.up)("ChoiceSetting"),m=(0,a.up)("GroupSetting");return(0,a.wg)(),(0,a.iD)("div",{label:t.$t("admin_dash.tabs.instance")},[(0,a._)("div",_,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.instance")),1),(0,a._)("ul",b,[(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:instance.:name"})]),(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:instance.:email"})]),(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:instance.:description"})]),(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:instance.:short_description"})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:instance_thumbnail"})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:instance.:background_image"})])])]),(0,a._)("div",g,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.registrations")),1),(0,a._)("ul",w,[(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:registrations_open"}),(0,a._)("ul",y,[(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:invites_enabled","parent-path":":pleroma.:instance.:registrations_open","parent-invert":""})])])]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:birthday_required"}),(0,a._)("ul",v,[(0,a._)("li",null,[(0,a.Wm)(u,{path:":pleroma.:instance.:birthday_min_age","parent-path":":pleroma.:instance.:birthday_required"})])])]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:account_activation_required"})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:instance.:account_approval_required"})]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.instance.captcha_header")),1),(0,a._)("ul",k,[(0,a._)("li",null,[(0,a.Wm)(c,{path:[":pleroma","Pleroma.Captcha",":enabled"]},null,8,["path"]),(0,a._)("ul",O,[(0,a._)("li",null,[(0,a.Wm)(p,{path:[":pleroma","Pleroma.Captcha",":method"],"parent-path":[":pleroma","Pleroma.Captcha",":enabled"],"option-label-map":{"Pleroma.Captcha.Native":t.$t("admin_dash.captcha.native"),"Pleroma.Captcha.Kocaptcha":t.$t("admin_dash.captcha.kocaptcha")}},null,8,["path","parent-path","option-label-map"]),(0,a.Wm)(u,{path:[":pleroma","Pleroma.Captcha",":seconds_valid"],"parent-path":[":pleroma","Pleroma.Captcha",":enabled"]},null,8,["path","parent-path"])]),t.adminDraft[":pleroma"]["Pleroma.Captcha"][":enabled"]&&"Pleroma.Captcha.Kocaptcha"===t.adminDraft[":pleroma"]["Pleroma.Captcha"][":method"]?((0,a.wg)(),(0,a.iD)("li",D,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.kocaptcha")),1),(0,a._)("ul",S,[(0,a._)("li",null,[(0,a.Wm)(o,{path:[":pleroma","Pleroma.Captcha.Kocaptcha",":endpoint"]},null,8,["path"])])])])):(0,a.kq)("",!0)])])])])])]),(0,a._)("div",j,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.instance.access")),1),(0,a._)("ul",P,[(0,a._)("li",null,[(0,a.Wm)(c,{"override-backend-description":"","override-backend-description-label":"",path:":pleroma.:instance.:public"})]),(0,a._)("li",null,[(0,a.Wm)(p,{"override-backend-description":"","override-backend-description-label":"",path:":pleroma.:instance.:limit_to_local_content"})]),t.expertLevel?((0,a.wg)(),(0,a.iD)("li",$,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.header")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.description")),1),(0,a._)("ul",W,[(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.timelines")),1),(0,a._)("ul",z,[(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:timelines.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:timelines.:federated","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:timelines"})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.profiles")),1),(0,a._)("ul",Z,[(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:profiles.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:profiles.:remote","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:profiles"})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.instance.restrict.activities")),1),(0,a._)("ul",C,[(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:activities.:local","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(c,{path:":pleroma.:restrict_unauthenticated.:activities.:remote","indeterminate-state":":if_instance_is_private","swap-description-and-label":"","hide-description":""})]),(0,a._)("li",null,[(0,a.Wm)(m,{path:":pleroma.:restrict_unauthenticated.:activities"})])])])])])):(0,a.kq)("",!0)])])],8,h)}]]);var bt=["label"],gt={class:"setting-item"},wt={class:"setting-list"},yt={class:"setting-list"},vt={class:"setting-list"},kt={class:"setting-list"},Ot={class:"setting-list"},Dt={class:"setting-list"};function St(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}pt.vI.add(mt.g4A);const jt={data:function(){},components:{BooleanSetting:I.Z,ChoiceSetting:q.Z,IntegerSetting:M.Z,StringSetting:Y},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?St(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},(0,ut.Z)())},Pt=(0,T.Z)(jt,[["render",function(t,e,n,r,l,s){var o=(0,a.up)("IntegerSetting");return(0,a.wg)(),(0,a.iD)("div",{label:t.$t("admin_dash.tabs.limits")},[(0,a._)("div",gt,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.limits.arbitrary_limits")),1),(0,a._)("ul",wt,[(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.posts")),1),(0,a._)("ul",yt,[(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:remote_limit",expert:"1","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.uploads")),1),(0,a._)("ul",vt,[(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:description_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:upload_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:max_media_attachments","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.limits.users")),1),(0,a._)("ul",kt,[(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:max_pinned_statuses","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:user_bio_length","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:user_name_length","draft-mode":""})]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.limits.profile_fields")),1),(0,a._)("ul",Ot,[(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:max_account_fields","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:max_remote_account_fields","draft-mode":"",expert:"1"})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:account_field_name_length","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:account_field_value_length","draft-mode":""})])])]),(0,a._)("li",null,[(0,a._)("h4",null,(0,i.zw)(t.$t("admin_dash.limits.user_uploads")),1),(0,a._)("ul",Dt,[(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:avatar_upload_limit","draft-mode":""})]),(0,a._)("li",null,[(0,a.Wm)(o,{source:"admin",path:":pleroma.:instance.:banner_upload_limit","draft-mode":""})])])])])])])])],8,bt)}]]);var $t=["label"],Wt={class:"setting-item"},zt={class:"setting-list"},Zt={class:"setting-list"},Ct={class:"setting-list"},Lt={class:"cards-list"},It={key:0},qt=["href"],Mt={key:1},Et={key:2},Ut=["href"],xt={class:"btn-group"},Bt=["onClick"],At={class:"dropdown-menu"},Ft=["onClick"],Tt=["title"],Yt={key:0,class:"btn-group"},Ht=["disabled","onClick"],Gt={class:"dropdown-menu"},Kt=["onClick"],Nt=["title"],Rt=n(84535);function Vt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}pt.vI.add(mt.g4A);const Xt={provide:function(){return{defaultDraftMode:!0,defaultSource:"admin"}},components:{BooleanSetting:I.Z,ChoiceSetting:q.Z,IntegerSetting:M.Z,StringSetting:Y,GroupSetting:X,Popover:Rt.default},created:function(){this.user.rights.admin&&this.$store.dispatch("loadFrontendsStuff")},computed:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Vt(Object(n),!0).forEach((function(e){(0,L.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Vt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({frontends:function(){return this.$store.state.adminSettings.frontends}},(0,ut.Z)()),methods:{update:function(t,e){var n=this,a=e||t.refs[0],i={name:t.name,ref:a};this.$store.state.api.backendInteractor.installFrontend({payload:i}).then((function(t){n.$store.dispatch("loadFrontendsStuff")}))},setDefault:function(t,e){var n=e||t.refs[0],a=t.name;this.$store.commit("updateAdminDraft",{path:[":pleroma",":frontends",":primary"],value:{name:a,ref:n}})}}},Jt=(0,T.Z)(Xt,[["render",function(t,e,n,r,l,s){var o=(0,a.up)("StringSetting"),d=(0,a.up)("GroupSetting"),c=(0,a.up)("i18n-t"),u=(0,a.up)("FAIcon"),p=(0,a.up)("Popover");return(0,a.wg)(),(0,a.iD)("div",{class:"frontends-tab",label:t.$t("admin_dash.tabs.frontends")},[(0,a._)("div",Wt,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.tabs.frontends")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.frontend.wip_notice")),1),(0,a._)("ul",zt,[(0,a._)("li",null,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.frontend.default_frontend")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.frontend.default_frontend_tip")),1),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.frontend.default_frontend_tip2")),1),(0,a._)("ul",Zt,[(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:frontends.:primary.name"})]),(0,a._)("li",null,[(0,a.Wm)(o,{path:":pleroma.:frontends.:primary.ref"})]),(0,a._)("li",null,[(0,a.Wm)(d,{path:":pleroma.:frontends.:primary"})])])])]),(0,a._)("div",Ct,[(0,a._)("h3",null,(0,i.zw)(t.$t("admin_dash.frontend.available_frontends")),1),(0,a._)("ul",Lt,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(t.frontends,(function(e){return(0,a.wg)(),(0,a.iD)("li",{key:e.name},[(0,a._)("strong",null,(0,i.zw)(e.name),1),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),t.adminDraft[":pleroma"][":frontends"][":primary"].name===e.name?((0,a.wg)(),(0,a.iD)("span",It,[t.adminDraft[":pleroma"][":frontends"][":primary"].ref===e.refs[0]?((0,a.wg)(),(0,a.j4)(c,{key:0,keypath:"admin_dash.frontend.is_default"})):((0,a.wg)(),(0,a.j4)(c,{key:1,keypath:"admin_dash.frontend.is_default_custom"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(t.adminDraft[":pleroma"][":frontends"][":primary"].ref),1)]})),_:1}))])):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,i.zw)(t.$t("admin_dash.frontend.repository")),1),(0,a._)("dd",null,[(0,a._)("a",{href:e.git,target:"_blank"},(0,i.zw)(e.git),9,qt)]),t.expertLevel?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a._)("dt",null,(0,i.zw)(t.$t("admin_dash.frontend.versions")),1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.refs,(function(t){return(0,a.wg)(),(0,a.iD)("dd",{key:t},[(0,a._)("code",null,(0,i.zw)(t),1)])})),128))],64)):(0,a.kq)("",!0),t.expertLevel?((0,a.wg)(),(0,a.iD)("dt",Mt,(0,i.zw)(t.$t("admin_dash.frontend.build_url")),1)):(0,a.kq)("",!0),t.expertLevel?((0,a.wg)(),(0,a.iD)("dd",Et,[(0,a._)("a",{href:e.build_url,target:"_blank"},(0,i.zw)(e.build_url),9,Ut)])):(0,a.kq)("",!0)]),(0,a._)("div",null,[(0,a._)("span",xt,[(0,a._)("button",{class:"button button-default btn",type:"button",onClick:function(n){return t.update(e)}},(0,i.zw)(e.installed?t.$t("admin_dash.frontend.reinstall"):t.$t("admin_dash.frontend.install")),9,Bt),e.refs.length>1?((0,a.wg)(),(0,a.j4)(p,{key:0,trigger:"click",class:"button-dropdown",placement:"bottom"},{content:(0,a.w5)((function(){return[(0,a._)("div",At,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.refs,(function(n){return(0,a.wg)(),(0,a.iD)("button",{key:n,class:"button-default dropdown-item",onClick:function(a){return t.update(e,n)}},[(0,a.Wm)(c,{keypath:"admin_dash.frontend.install_version"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(n),1)]})),_:2},1024)],8,Ft)})),128))])]})),trigger:(0,a.w5)((function(){return[(0,a._)("button",{class:"button button-default btn dropdown-button",type:"button",title:t.$t("admin_dash.frontend.more_install_options")},[(0,a.Wm)(u,{icon:"chevron-down"})],8,Tt)]})),_:2},1024)):(0,a.kq)("",!0)]),e.installed&&"admin-fe"!==e.name?((0,a.wg)(),(0,a.iD)("span",Yt,[(0,a._)("button",{class:"button button-default btn",type:"button",disabled:t.adminDraft[":pleroma"][":frontends"][":primary"].name===e.name&&t.adminDraft[":pleroma"][":frontends"][":primary"].ref===e.refs[0],onClick:function(n){return t.setDefault(e)}},(0,i.zw)(t.$t("admin_dash.frontend.set_default")),9,Ht),(0,a.Uk)(" "+(0,i.zw)(" ")+" "),e.refs.length>1?((0,a.wg)(),(0,a.j4)(p,{key:0,trigger:"click",class:"button-dropdown",placement:"bottom"},{content:(0,a.w5)((function(){return[(0,a._)("div",Gt,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.refs.slice(1),(function(n){return(0,a.wg)(),(0,a.iD)("button",{key:n,class:"button-default dropdown-item",onClick:function(a){return t.setDefault(e,n)}},[(0,a.Wm)(c,{keypath:"admin_dash.frontend.set_default_version"},{version:(0,a.w5)((function(){return[(0,a._)("code",null,(0,i.zw)(n),1)]})),_:2},1024)],8,Kt)})),128))])]})),trigger:(0,a.w5)((function(){return[(0,a._)("button",{class:"button button-default btn dropdown-button",type:"button",title:t.$t("admin_dash.frontend.more_default_options")},[(0,a.Wm)(u,{icon:"chevron-down"})],8,Nt)]})),_:2},1024)):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])])})),128))])])])],8,$t)}]]);pt.vI.add(mt.klh,mt.ioV,mt.py1,mt.XsY,mt.qmU,mt.q7m,mt.Aq,mt.YHc);const Qt={components:{TabSwitcher:f.Z,InstanceTab:_t,LimitsTab:Pt,FrontendsTab:Jt},computed:{user:function(){return this.$store.state.users.currentUser},isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState},bodyLock:function(){return"visible"===this.$store.state.interface.settingsModalState},adminDbLoaded:function(){return this.$store.state.adminSettings.loaded},adminDescriptionsLoaded:function(){return null!==this.$store.state.adminSettings.descriptions},noDb:function(){return!1===this.$store.state.adminSettings.dbConfigEnabled}},created:function(){this.user.rights.admin&&this.$store.dispatch("loadAdminStuff")},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default().findIndex((function(e){return e.props&&e.props["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()}}},te=(0,T.Z)(Qt,[["render",function(t,e,n,f,h,_){var b=(0,a.up)("i18n-t"),g=(0,a.up)("InstanceTab"),w=(0,a.up)("LimitsTab"),y=(0,a.up)("FrontendsTab"),v=(0,a.up)("tab-switcher");return t.adminDescriptionsLoaded&&(t.noDb||t.adminDbLoaded)?((0,a.wg)(),(0,a.j4)(v,{key:0,ref:"tabSwitcher",class:"settings_tab-switcher","side-tab-bar":!0,"scrollable-tabs":!0,"render-only-focused":!0,"body-scroll-lock":t.bodyLock},{default:(0,a.w5)((function(){return[t.noDb?((0,a.wg)(),(0,a.iD)("div",{key:0,label:t.$t("admin_dash.tabs.nodb"),icon:"exclamation-triangle","data-tab-name":"nodb-notice"},[(0,a._)("div",{label:t.$t("admin_dash.tabs.nodb")},[(0,a._)("div",s,[(0,a._)("h2",null,(0,i.zw)(t.$t("admin_dash.nodb.heading")),1),(0,a.Wm)(b,{keypath:"admin_dash.nodb.text"},{documentation:(0,a.w5)((function(){return[(0,a._)("a",o,(0,i.zw)(t.$t("admin_dash.nodb.documentation")),1)]})),property:(0,a.w5)((function(){return[d]})),value:(0,a.w5)((function(){return[c]})),_:1}),(0,a._)("p",null,(0,i.zw)(t.$t("admin_dash.nodb.text2")),1)])],8,l)],8,r)):(0,a.kq)("",!0),t.adminDbLoaded?((0,a.wg)(),(0,a.iD)("div",{key:1,label:t.$t("admin_dash.tabs.instance"),icon:"wrench","data-tab-name":"general"},[(0,a.Wm)(g)],8,u)):(0,a.kq)("",!0),t.adminDbLoaded?((0,a.wg)(),(0,a.iD)("div",{key:2,label:t.$t("admin_dash.tabs.limits"),icon:"hand","data-tab-name":"limits"},[(0,a.Wm)(w)],8,p)):(0,a.kq)("",!0),(0,a._)("div",{label:t.$t("admin_dash.tabs.frontends"),icon:"laptop-code","data-tab-name":"frontends"},[(0,a.Wm)(y)],8,m)]})),_:1},8,["body-scroll-lock"])):(0,a.kq)("",!0)}]])}}]); -//# sourceMappingURL=9801.99ace6b5dc657bf1a65b.js.map -\ No newline at end of file diff --git a/priv/static/static/js/9801.99ace6b5dc657bf1a65b.js.map b/priv/static/static/js/9801.99ace6b5dc657bf1a65b.js.map @@ -1 +0,0 @@ -{"version":3,"file":"static/js/9801.99ace6b5dc657bf1a65b.js","mappings":"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","sources":["webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/string_setting.vue?3ee8","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/group_setting.vue?7ac1","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.js","webpack://pleroma_fe/./src/components/settings_modal/helpers/attachment_setting.vue?5a3a","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/instance_tab.vue?14f3","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/limits_tab.vue?14a2","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.vue","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.js","webpack://pleroma_fe/./src/components/settings_modal/admin_tabs/frontends_tab.vue?a9d3","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.js","webpack://pleroma_fe/./src/components/settings_modal/settings_modal_admin_content.vue?3247"],"sourcesContent":["<template>\n <tab-switcher\n v-if=\"adminDescriptionsLoaded && (noDb || adminDbLoaded)\"\n ref=\"tabSwitcher\"\n class=\"settings_tab-switcher\"\n :side-tab-bar=\"true\"\n :scrollable-tabs=\"true\"\n :render-only-focused=\"true\"\n :body-scroll-lock=\"bodyLock\"\n >\n <div\n v-if=\"noDb\"\n :label=\"$t('admin_dash.tabs.nodb')\"\n icon=\"exclamation-triangle\"\n data-tab-name=\"nodb-notice\"\n >\n <div :label=\"$t('admin_dash.tabs.nodb')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.nodb.heading') }}</h2>\n <i18n-t keypath=\"admin_dash.nodb.text\">\n <template #documentation>\n <a\n href=\"https://docs-develop.pleroma.social/backend/configuration/howto_database_config/\"\n target=\"_blank\"\n >\n {{ $t(\"admin_dash.nodb.documentation\") }}\n </a>\n </template>\n <template #property>\n <code>config :pleroma, configurable_from_database</code>\n </template>\n <template #value>\n <code>true</code>\n </template>\n </i18n-t>\n <p>{{ $t('admin_dash.nodb.text2') }}</p>\n </div>\n </div>\n </div>\n <div\n v-if=\"adminDbLoaded\"\n :label=\"$t('admin_dash.tabs.instance')\"\n icon=\"wrench\"\n data-tab-name=\"general\"\n >\n <InstanceTab />\n </div>\n <div\n v-if=\"adminDbLoaded\"\n :label=\"$t('admin_dash.tabs.limits')\"\n icon=\"hand\"\n data-tab-name=\"limits\"\n >\n <LimitsTab />\n </div>\n <div\n :label=\"$t('admin_dash.tabs.frontends')\"\n icon=\"laptop-code\"\n data-tab-name=\"frontends\"\n >\n <FrontendsTab />\n </div>\n </tab-switcher>\n</template>\n\n<script src=\"./settings_modal_admin_content.js\"></script>\n\n<style src=\"./settings_modal_admin_content.scss\" lang=\"scss\"></style>\n","<template>\n <div :label=\"$t('admin_dash.tabs.instance')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.instance') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <StringSetting path=\":pleroma.:instance.:name\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:email\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:description\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:instance.:short_description\" />\n </li>\n <li>\n <AttachmentSetting path=\":pleroma.:instance.:instance_thumbnail\" />\n </li>\n <li>\n <AttachmentSetting path=\":pleroma.:instance.:background_image\" />\n </li>\n </ul>\n </div>\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.registrations') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting path=\":pleroma.:instance.:registrations_open\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <BooleanSetting\n path=\":pleroma.:instance.:invites_enabled\"\n parent-path=\":pleroma.:instance.:registrations_open\"\n parent-invert\n />\n </li>\n </ul>\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:birthday_required\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <IntegerSetting\n path=\":pleroma.:instance.:birthday_min_age\"\n parent-path=\":pleroma.:instance.:birthday_required\"\n />\n </li>\n </ul>\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:account_activation_required\" />\n </li>\n <li>\n <BooleanSetting path=\":pleroma.:instance.:account_approval_required\" />\n </li>\n <li>\n <h3>{{ $t('admin_dash.instance.captcha_header') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting :path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\" />\n <ul class=\"setting-list suboptions\">\n <li>\n <ChoiceSetting\n :path=\"[':pleroma', 'Pleroma.Captcha', ':method']\"\n :parent-path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\"\n :option-label-map=\"{\n 'Pleroma.Captcha.Native': $t('admin_dash.captcha.native'),\n 'Pleroma.Captcha.Kocaptcha': $t('admin_dash.captcha.kocaptcha')\n }\"\n />\n <IntegerSetting\n :path=\"[':pleroma', 'Pleroma.Captcha', ':seconds_valid']\"\n :parent-path=\"[':pleroma', 'Pleroma.Captcha', ':enabled']\"\n />\n </li>\n <li\n v-if=\"adminDraft[':pleroma']['Pleroma.Captcha'][':enabled'] && adminDraft[':pleroma']['Pleroma.Captcha'][':method'] === 'Pleroma.Captcha.Kocaptcha'\"\n >\n <h4>{{ $t('admin_dash.instance.kocaptcha') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <StringSetting :path=\"[':pleroma', 'Pleroma.Captcha.Kocaptcha', ':endpoint']\" />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.instance.access') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n override-backend-description\n override-backend-description-label\n path=\":pleroma.:instance.:public\"\n />\n </li>\n <li>\n <ChoiceSetting\n override-backend-description\n override-backend-description-label\n path=\":pleroma.:instance.:limit_to_local_content\"\n />\n </li>\n <li v-if=\"expertLevel\">\n <h3>{{ $t('admin_dash.instance.restrict.header') }}</h3>\n <p>\n {{ $t('admin_dash.instance.restrict.description') }}\n </p>\n <ul class=\"setting-list\">\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.timelines') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:timelines.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:timelines.:federated\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:timelines\" />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.profiles') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:profiles.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:profiles.:remote\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:profiles\" />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.instance.restrict.activities') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:activities.:local\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <BooleanSetting\n path=\":pleroma.:restrict_unauthenticated.:activities.:remote\"\n indeterminate-state=\":if_instance_is_private\"\n swap-description-and-label\n hide-description\n />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:restrict_unauthenticated.:activities\" />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./instance_tab.js\"></script>\n","<template>\n <label\n v-if=\"matchesExpertLevel\"\n class=\"StringSetting\"\n >\n <label\n :for=\"path\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n <template v-if=\"backendDescriptionLabel\">\n {{ backendDescriptionLabel + ' ' }}\n </template>\n <template v-else-if=\"source === 'admin'\">\n MISSING LABEL FOR {{ path }}\n </template>\n <slot v-else />\n </label>\n <input\n :id=\"path\"\n class=\"string-input\"\n :disabled=\"shouldBeDisabled\"\n :value=\"realDraftMode ? draft : state\"\n @change=\"update\"\n >\n {{ ' ' }}\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n <DraftButtons />\n <p\n v-if=\"backendDescriptionDescription\"\n class=\"setting-description\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n {{ backendDescriptionDescription + ' ' }}\n </p>\n </label>\n</template>\n\n<script src=\"./string_setting.js\"></script>\n","import Setting from './setting.js'\n\nexport default {\n ...Setting\n}\n","import { render } from \"./string_setting.vue?vue&type=template&id=77b0b493\"\nimport script from \"./string_setting.js?vue&type=script&lang=js\"\nexport * from \"./string_setting.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n v-if=\"matchesExpertLevel\"\n class=\"GroupSetting\"\n >\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n <DraftButtons />\n </span>\n</template>\n\n<script src=\"./group_setting.js\"></script>\n","import { isEqual } from 'lodash'\n\nimport Setting from './setting.js'\n\nexport default {\n ...Setting,\n computed: {\n ...Setting.computed,\n isDirty () {\n return !isEqual(this.state, this.draft)\n }\n }\n}\n","import { render } from \"./group_setting.vue?vue&type=template&id=19cb3543\"\nimport script from \"./group_setting.js?vue&type=script&lang=js\"\nexport * from \"./group_setting.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n v-if=\"matchesExpertLevel\"\n class=\"AttachmentSetting\"\n >\n <label\n :for=\"path\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n <template v-if=\"backendDescriptionLabel\">\n {{ backendDescriptionLabel + ' ' }}\n </template>\n <template v-else-if=\"source === 'admin'\">\n MISSING LABEL FOR {{ path }}\n </template>\n <slot v-else />\n\n </label>\n <p\n v-if=\"backendDescriptionDescription\"\n class=\"setting-description\"\n :class=\"{ 'faint': shouldBeDisabled }\"\n >\n {{ backendDescriptionDescription + ' ' }}\n </p>\n <div class=\"attachment-input\">\n <div>{{ $t('settings.url') }}</div>\n <div class=\"controls\">\n <input\n :id=\"path\"\n class=\"string-input\"\n :disabled=\"shouldBeDisabled\"\n :value=\"realDraftMode ? draft : state\"\n @change=\"update\"\n >\n {{ ' ' }}\n <ModifiedIndicator\n :changed=\"isChanged\"\n :onclick=\"reset\"\n />\n <ProfileSettingIndicator :is-profile=\"isProfileSetting\" />\n </div>\n <div>{{ $t('settings.preview') }}</div>\n <Attachment\n class=\"attachment\"\n :compact=\"compact\"\n :attachment=\"attachment\"\n size=\"small\"\n hide-description\n @setMedia=\"onMedia\"\n @naturalSizeLoad=\"onNaturalSizeLoad\"\n />\n <div class=\"controls\">\n <MediaUpload\n ref=\"mediaUpload\"\n class=\"media-upload-icon\"\n :drop-files=\"dropFiles\"\n normal-button\n :accept-types=\"acceptTypes\"\n @uploaded=\"setMediaFile\"\n @upload-failed=\"uploadFailed\"\n />\n </div>\n </div>\n <DraftButtons />\n </span>\n</template>\n\n<script src=\"./attachment_setting.js\"></script>\n\n<style lang=\"scss\">\n.AttachmentSetting {\n .attachment {\n display: block;\n width: 100%;\n height: 15em;\n margin-bottom: 0.5em;\n }\n\n .attachment-input {\n margin-left: 1em;\n display: flex;\n flex-direction: column;\n width: 20em;\n }\n\n .controls {\n margin-bottom: 0.5em;\n\n input,\n button {\n width: 100%;\n }\n }\n}\n</style>\n","import Setting from './setting.js'\nimport { fileTypeExt } from 'src/services/file_type/file_type.service.js'\nimport MediaUpload from 'src/components/media_upload/media_upload.vue'\nimport Attachment from 'src/components/attachment/attachment.vue'\n\nexport default {\n ...Setting,\n props: {\n ...Setting.props,\n acceptTypes: {\n type: String,\n required: false,\n default: 'image/*'\n }\n },\n components: {\n ...Setting.components,\n MediaUpload,\n Attachment\n },\n computed: {\n ...Setting.computed,\n attachment () {\n const path = this.realDraftMode ? this.draft : this.state\n // The \"server\" part is primarily for local dev, but could be useful for alt-domain or multiuser usage.\n const url = path.includes('://') ? path : this.$store.state.instance.server + path\n return {\n mimetype: fileTypeExt(url),\n url\n }\n }\n },\n methods: {\n ...Setting.methods,\n setMediaFile (fileInfo) {\n if (this.realDraftMode) {\n this.draft = fileInfo.url\n } else {\n this.configSink(this.path, fileInfo.url)\n }\n }\n }\n}\n","import { render } from \"./attachment_setting.vue?vue&type=template&id=780a2e22\"\nimport script from \"./attachment_setting.js?vue&type=script&lang=js\"\nexport * from \"./attachment_setting.js?vue&type=script&lang=js\"\n\nimport \"./attachment_setting.vue?vue&type=style&index=0&id=780a2e22&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\nimport GroupSetting from '../helpers/group_setting.vue'\nimport AttachmentSetting from '../helpers/attachment_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst InstanceTab = {\n provide () {\n return {\n defaultDraftMode: true,\n defaultSource: 'admin'\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting,\n AttachmentSetting,\n GroupSetting\n },\n computed: {\n ...SharedComputedObject()\n }\n}\n\nexport default InstanceTab\n","import { render } from \"./instance_tab.vue?vue&type=template&id=0dfeca4e\"\nimport script from \"./instance_tab.js?vue&type=script&lang=js\"\nexport * from \"./instance_tab.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div :label=\"$t('admin_dash.tabs.limits')\">\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.limits.arbitrary_limits') }}</h2>\n <ul class=\"setting-list\">\n <li>\n <h3>{{ $t('admin_dash.limits.posts') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:remote_limit\"\n expert=\"1\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h3>{{ $t('admin_dash.limits.uploads') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:description_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:upload_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_media_attachments\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h3>{{ $t('admin_dash.limits.users') }}</h3>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_pinned_statuses\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:user_bio_length\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:user_name_length\"\n draft-mode\n />\n </li>\n <li>\n <h4>{{ $t('admin_dash.limits.profile_fields') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_account_fields\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:max_remote_account_fields\"\n draft-mode\n expert=\"1\"\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:account_field_name_length\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:account_field_value_length\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n <li>\n <h4>{{ $t('admin_dash.limits.user_uploads') }}</h4>\n <ul class=\"setting-list\">\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:avatar_upload_limit\"\n draft-mode\n />\n </li>\n <li>\n <IntegerSetting\n source=\"admin\"\n path=\":pleroma.:instance.:banner_upload_limit\"\n draft-mode\n />\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./limits_tab.js\"></script>\n","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst LimitsTab = {\n data () {},\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting\n },\n computed: {\n ...SharedComputedObject()\n }\n}\n\nexport default LimitsTab\n","import { render } from \"./limits_tab.vue?vue&type=template&id=04194dfc\"\nimport script from \"./limits_tab.js?vue&type=script&lang=js\"\nexport * from \"./limits_tab.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"frontends-tab\"\n :label=\"$t('admin_dash.tabs.frontends')\"\n >\n <div class=\"setting-item\">\n <h2>{{ $t('admin_dash.tabs.frontends') }}</h2>\n <p>{{ $t('admin_dash.frontend.wip_notice') }}</p>\n <ul class=\"setting-list\">\n <li>\n <h3>{{ $t('admin_dash.frontend.default_frontend') }}</h3>\n <p>{{ $t('admin_dash.frontend.default_frontend_tip') }}</p>\n <p>{{ $t('admin_dash.frontend.default_frontend_tip2') }}</p>\n <ul class=\"setting-list\">\n <li>\n <StringSetting path=\":pleroma.:frontends.:primary.name\" />\n </li>\n <li>\n <StringSetting path=\":pleroma.:frontends.:primary.ref\" />\n </li>\n <li>\n <GroupSetting path=\":pleroma.:frontends.:primary\" />\n </li>\n </ul>\n </li>\n </ul>\n <div class=\"setting-list\">\n <h3>{{ $t('admin_dash.frontend.available_frontends') }}</h3>\n <ul class=\"cards-list\">\n <li\n v-for=\"frontend in frontends\"\n :key=\"frontend.name\"\n >\n <strong>{{ frontend.name }}</strong>\n {{ ' ' }}\n <span v-if=\"adminDraft[':pleroma'][':frontends'][':primary'].name === frontend.name\">\n <i18n-t\n v-if=\"adminDraft[':pleroma'][':frontends'][':primary'].ref === frontend.refs[0]\"\n keypath=\"admin_dash.frontend.is_default\"\n />\n <i18n-t\n v-else\n keypath=\"admin_dash.frontend.is_default_custom\"\n >\n <template #version>\n <code>{{ adminDraft[':pleroma'][':frontends'][':primary'].ref }}</code>\n </template>\n </i18n-t>\n </span>\n <dl>\n <dt>{{ $t('admin_dash.frontend.repository') }}</dt>\n <dd>\n <a\n :href=\"frontend.git\"\n target=\"_blank\"\n >{{ frontend.git }}</a>\n </dd>\n <template v-if=\"expertLevel\">\n <dt>{{ $t('admin_dash.frontend.versions') }}</dt>\n <dd\n v-for=\"ref in frontend.refs\"\n :key=\"ref\"\n >\n <code>{{ ref }}</code>\n </dd>\n </template>\n <dt v-if=\"expertLevel\">\n {{ $t('admin_dash.frontend.build_url') }}\n </dt>\n <dd v-if=\"expertLevel\">\n <a\n :href=\"frontend.build_url\"\n target=\"_blank\"\n >{{ frontend.build_url }}</a>\n </dd>\n </dl>\n <div>\n <span class=\"btn-group\">\n <button\n class=\"button button-default btn\"\n type=\"button\"\n @click=\"update(frontend)\"\n >\n {{\n frontend.installed\n ? $t('admin_dash.frontend.reinstall')\n : $t('admin_dash.frontend.install')\n }}\n </button>\n <Popover\n v-if=\"frontend.refs.length > 1\"\n trigger=\"click\"\n class=\"button-dropdown\"\n placement=\"bottom\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n v-for=\"ref in frontend.refs\"\n :key=\"ref\"\n class=\"button-default dropdown-item\"\n @click=\"update(frontend, ref)\"\n >\n <i18n-t keypath=\"admin_dash.frontend.install_version\">\n <template #version>\n <code>{{ ref }}</code>\n </template>\n </i18n-t>\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button button-default btn dropdown-button\"\n type=\"button\"\n :title=\"$t('admin_dash.frontend.more_install_options')\"\n >\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n </span>\n <span\n v-if=\"frontend.installed && frontend.name !== 'admin-fe'\"\n class=\"btn-group\"\n >\n <button\n class=\"button button-default btn\"\n type=\"button\"\n :disabled=\"\n adminDraft[':pleroma'][':frontends'][':primary'].name === frontend.name &&\n adminDraft[':pleroma'][':frontends'][':primary'].ref === frontend.refs[0]\n \"\n @click=\"setDefault(frontend)\"\n >\n {{\n $t('admin_dash.frontend.set_default')\n }}\n </button>\n {{ ' ' }}\n <Popover\n v-if=\"frontend.refs.length > 1\"\n trigger=\"click\"\n class=\"button-dropdown\"\n placement=\"bottom\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n v-for=\"ref in frontend.refs.slice(1)\"\n :key=\"ref\"\n class=\"button-default dropdown-item\"\n @click=\"setDefault(frontend, ref)\"\n >\n <i18n-t keypath=\"admin_dash.frontend.set_default_version\">\n <template #version>\n <code>{{ ref }}</code>\n </template>\n </i18n-t>\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button button-default btn dropdown-button\"\n type=\"button\"\n :title=\"$t('admin_dash.frontend.more_default_options')\"\n >\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n </span>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./frontends_tab.js\"></script>\n\n<style lang=\"scss\" src=\"./frontends_tab.scss\"></style>\n","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport IntegerSetting from '../helpers/integer_setting.vue'\nimport StringSetting from '../helpers/string_setting.vue'\nimport GroupSetting from '../helpers/group_setting.vue'\nimport Popover from 'src/components/popover/popover.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst FrontendsTab = {\n provide () {\n return {\n defaultDraftMode: true,\n defaultSource: 'admin'\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n IntegerSetting,\n StringSetting,\n GroupSetting,\n Popover\n },\n created () {\n if (this.user.rights.admin) {\n this.$store.dispatch('loadFrontendsStuff')\n }\n },\n computed: {\n frontends () {\n return this.$store.state.adminSettings.frontends\n },\n ...SharedComputedObject()\n },\n methods: {\n update (frontend, suggestRef) {\n const ref = suggestRef || frontend.refs[0]\n const { name } = frontend\n const payload = { name, ref }\n\n this.$store.state.api.backendInteractor.installFrontend({ payload })\n .then((externalUser) => {\n this.$store.dispatch('loadFrontendsStuff')\n })\n },\n setDefault (frontend, suggestRef) {\n const ref = suggestRef || frontend.refs[0]\n const { name } = frontend\n\n this.$store.commit('updateAdminDraft', { path: [':pleroma', ':frontends', ':primary'], value: { name, ref } })\n }\n }\n}\n\nexport default FrontendsTab\n","import { render } from \"./frontends_tab.vue?vue&type=template&id=31875566\"\nimport script from \"./frontends_tab.js?vue&type=script&lang=js\"\nexport * from \"./frontends_tab.js?vue&type=script&lang=js\"\n\nimport \"./frontends_tab.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\n\nimport InstanceTab from './admin_tabs/instance_tab.vue'\nimport LimitsTab from './admin_tabs/limits_tab.vue'\nimport FrontendsTab from './admin_tabs/frontends_tab.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faWrench,\n faHand,\n faLaptopCode,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faWrench,\n faHand,\n faLaptopCode,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n)\n\nconst SettingsModalAdminContent = {\n components: {\n TabSwitcher,\n\n InstanceTab,\n LimitsTab,\n FrontendsTab\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n },\n bodyLock () {\n return this.$store.state.interface.settingsModalState === 'visible'\n },\n adminDbLoaded () {\n return this.$store.state.adminSettings.loaded\n },\n adminDescriptionsLoaded () {\n return this.$store.state.adminSettings.descriptions !== null\n },\n noDb () {\n return this.$store.state.adminSettings.dbConfigEnabled === false\n }\n },\n created () {\n if (this.user.rights.admin) {\n this.$store.dispatch('loadAdminStuff')\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.props && elm.props['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 SettingsModalAdminContent\n","import { render } from \"./settings_modal_admin_content.vue?vue&type=template&id=43a9ece4\"\nimport script from \"./settings_modal_admin_content.js?vue&type=script&lang=js\"\nexport * from \"./settings_modal_admin_content.js?vue&type=script&lang=js\"\n\nimport \"./settings_modal_admin_content.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["class","href","target","_createElementVNode","Setting","_ctx","matchesExpertLevel","_createElementBlock","_hoisted_1","for","path","_normalizeClass","shouldBeDisabled","backendDescriptionLabel","_Fragment","key","source","_toDisplayString","_renderSlot","$slots","id","disabled","value","realDraftMode","draft","state","onChange","_cache","update","apply","arguments","_createVNode","_component_ModifiedIndicator","changed","isChanged","onclick","reset","_component_ProfileSettingIndicator","isProfileSetting","_component_DraftButtons","backendDescriptionDescription","_objectSpread","computed","isDirty","_isEqual","this","props","acceptTypes","type","String","required","default","components","MediaUpload","Attachment","attachment","url","includes","$store","instance","server","mimetype","fileTypeExt","methods","setMediaFile","fileInfo","configSink","_hoisted_3","$t","_hoisted_4","_component_Attachment","compact","size","onSetMedia","onMedia","onNaturalSizeLoad","_hoisted_6","_component_MediaUpload","ref","dropFiles","onUploaded","onUploadFailed","uploadFailed","library","faGlobe","provide","defaultDraftMode","defaultSource","BooleanSetting","ChoiceSetting","IntegerSetting","StringSetting","AttachmentSetting","GroupSetting","SharedComputedObject","label","_hoisted_2","_component_StringSetting","_component_AttachmentSetting","_hoisted_5","_component_BooleanSetting","_hoisted_7","_component_IntegerSetting","_hoisted_8","_hoisted_9","_component_ChoiceSetting","adminDraft","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","expertLevel","_hoisted_14","_hoisted_15","_hoisted_16","_component_GroupSetting","_hoisted_17","_hoisted_18","data","expert","Popover","created","user","rights","admin","dispatch","frontends","adminSettings","frontend","suggestRef","_this","refs","payload","name","api","backendInteractor","installFrontend","then","externalUser","setDefault","commit","_renderList","_createBlock","_component_i18n_t","keypath","version","_withCtx","git","build_url","onClick","$event","installed","length","_component_Popover","trigger","placement","content","title","_component_FAIcon","icon","_hoisted_19","slice","faWrench","faHand","faLaptopCode","faPaintBrush","faBell","faDownload","faEyeSlash","faInfo","TabSwitcher","InstanceTab","LimitsTab","FrontendsTab","users","currentUser","isLoggedIn","open","settingsModalState","bodyLock","adminDbLoaded","loaded","adminDescriptionsLoaded","descriptions","noDb","dbConfigEnabled","onOpen","targetTab","settingsModalTargetTab","tabIndex","$refs","tabSwitcher","findIndex","elm","setTab","mounted","watch","_component_tab_switcher","documentation","property","_component_InstanceTab","_component_LimitsTab","_component_FrontendsTab"],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/js/app.7c4b412b26221a7c8572.js b/priv/static/static/js/app.7c4b412b26221a7c8572.js @@ -1,2 +0,0 @@ -(()=>{var e,t,n,o,r,i={88797:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const o={about:{mrf:{federation:e=>{const{normalize:t}=e;return t(["Federation"])},keyword:{keyword_policies:e=>{const{normalize:t}=e;return t(["Keyword policies"])},ftl_removal:e=>{const{normalize:t}=e;return t(['Removal from "The Whole Known Network" Timeline'])},reject:e=>{const{normalize:t}=e;return t(["Reject"])},replace:e=>{const{normalize:t}=e;return t(["Replace"])},is_replaced_by:e=>{const{normalize:t}=e;return t(["→"])}},mrf_policies:e=>{const{normalize:t}=e;return t(["Enabled MRF policies"])},mrf_policies_desc:e=>{const{normalize:t}=e;return t(["MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:"])},simple:{simple_policies:e=>{const{normalize:t}=e;return t(["Instance-specific policies"])},instance:e=>{const{normalize:t}=e;return t(["Instance"])},reason:e=>{const{normalize:t}=e;return t(["Reason"])},not_applicable:e=>{const{normalize:t}=e;return t(["N/A"])},accept:e=>{const{normalize:t}=e;return t(["Accept"])},accept_desc:e=>{const{normalize:t}=e;return t(["This instance only accepts messages from the following instances:"])},reject:e=>{const{normalize:t}=e;return t(["Reject"])},reject_desc:e=>{const{normalize:t}=e;return t(["This instance will not accept messages from the following instances:"])},quarantine:e=>{const{normalize:t}=e;return t(["Quarantine"])},quarantine_desc:e=>{const{normalize:t}=e;return t(["This instance will send only public posts to the following instances:"])},ftl_removal:e=>{const{normalize:t}=e;return t(['Removal from "Known Network" Timeline'])},ftl_removal_desc:e=>{const{normalize:t}=e;return t(['This instance removes these instances from "Known Network" timeline:'])},media_removal:e=>{const{normalize:t}=e;return t(["Media Removal"])},media_removal_desc:e=>{const{normalize:t}=e;return t(["This instance removes media from posts on the following instances:"])},media_nsfw:e=>{const{normalize:t}=e;return t(["Media force-set as sensitive"])},media_nsfw_desc:e=>{const{normalize:t}=e;return t(["This instance forces media to be set sensitive in posts on the following instances:"])}}},staff:e=>{const{normalize:t}=e;return t(["Staff"])}},announcements:{page_header:e=>{const{normalize:t}=e;return t(["Announcements"])},title:e=>{const{normalize:t}=e;return t(["Announcement"])},mark_as_read_action:e=>{const{normalize:t}=e;return t(["Mark as read"])},post_form_header:e=>{const{normalize:t}=e;return t(["Post announcement"])},post_placeholder:e=>{const{normalize:t}=e;return t(["Type your announcement content here..."])},post_action:e=>{const{normalize:t}=e;return t(["Post"])},post_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error: ",n(o("error"))])},close_error:e=>{const{normalize:t}=e;return t(["Close"])},delete_action:e=>{const{normalize:t}=e;return t(["Delete"])},start_time_prompt:e=>{const{normalize:t}=e;return t(["Start time: "])},end_time_prompt:e=>{const{normalize:t}=e;return t(["End time: "])},all_day_prompt:e=>{const{normalize:t}=e;return t(["This is an all-day event"])},published_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Published at ",n(o("time"))])},start_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Starts at ",n(o("time"))])},end_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Ends at ",n(o("time"))])},edit_action:e=>{const{normalize:t}=e;return t(["Edit"])},submit_edit_action:e=>{const{normalize:t}=e;return t(["Submit"])},cancel_edit_action:e=>{const{normalize:t}=e;return t(["Cancel"])},inactive_message:e=>{const{normalize:t}=e;return t(["This announcement is inactive"])}},shoutbox:{title:e=>{const{normalize:t}=e;return t(["Shoutbox"])}},domain_mute_card:{mute:e=>{const{normalize:t}=e;return t(["Mute"])},mute_progress:e=>{const{normalize:t}=e;return t(["Muting…"])},unmute:e=>{const{normalize:t}=e;return t(["Unmute"])},unmute_progress:e=>{const{normalize:t}=e;return t(["Unmuting…"])}},exporter:{export:e=>{const{normalize:t}=e;return t(["Export"])},processing:e=>{const{normalize:t}=e;return t(["Processing, you'll soon be asked to download your file"])}},features_panel:{shout:e=>{const{normalize:t}=e;return t(["Shoutbox"])},pleroma_chat_messages:e=>{const{normalize:t}=e;return t(["Pleroma Chat"])},gopher:e=>{const{normalize:t}=e;return t(["Gopher"])},media_proxy:e=>{const{normalize:t}=e;return t(["Media proxy"])},scope_options:e=>{const{normalize:t}=e;return t(["Scope options"])},text_limit:e=>{const{normalize:t}=e;return t(["Text limit"])},title:e=>{const{normalize:t}=e;return t(["Features"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])},upload_limit:e=>{const{normalize:t}=e;return t(["Upload limit"])}},finder:{error_fetching_user:e=>{const{normalize:t}=e;return t(["Error fetching user"])},find_user:e=>{const{normalize:t}=e;return t(["Find user"])}},general:{apply:e=>{const{normalize:t}=e;return t(["Apply"])},submit:e=>{const{normalize:t}=e;return t(["Submit"])},more:e=>{const{normalize:t}=e;return t(["More"])},loading:e=>{const{normalize:t}=e;return t(["Loading…"])},generic_error:e=>{const{normalize:t}=e;return t(["An error occured"])},generic_error_message:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["An error occured: ",n(o(0))])},error_retry:e=>{const{normalize:t}=e;return t(["Please try again"])},retry:e=>{const{normalize:t}=e;return t(["Try again"])},optional:e=>{const{normalize:t}=e;return t(["optional"])},show_more:e=>{const{normalize:t}=e;return t(["Show more"])},show_less:e=>{const{normalize:t}=e;return t(["Show less"])},never_show_again:e=>{const{normalize:t}=e;return t(["Never show again"])},dismiss:e=>{const{normalize:t}=e;return t(["Dismiss"])},cancel:e=>{const{normalize:t}=e;return t(["Cancel"])},disable:e=>{const{normalize:t}=e;return t(["Disable"])},enable:e=>{const{normalize:t}=e;return t(["Enable"])},confirm:e=>{const{normalize:t}=e;return t(["Confirm"])},verify:e=>{const{normalize:t}=e;return t(["Verify"])},close:e=>{const{normalize:t}=e;return t(["Close"])},undo:e=>{const{normalize:t}=e;return t(["Undo"])},yes:e=>{const{normalize:t}=e;return t(["Yes"])},no:e=>{const{normalize:t}=e;return t(["No"])},peek:e=>{const{normalize:t}=e;return t(["Peek"])},scroll_to_top:e=>{const{normalize:t}=e;return t(["Scroll to top"])},role:{admin:e=>{const{normalize:t}=e;return t(["Admin"])},moderator:e=>{const{normalize:t}=e;return t(["Moderator"])}},unpin:e=>{const{normalize:t}=e;return t(["Unpin item"])},pin:e=>{const{normalize:t}=e;return t(["Pin item"])},flash_content:e=>{const{normalize:t}=e;return t(["Click to show Flash content using Ruffle (Experimental, may not work)."])},flash_security:e=>{const{normalize:t}=e;return t(["Note that this can be potentially dangerous since Flash content is still arbitrary code."])},flash_fail:e=>{const{normalize:t}=e;return t(["Failed to load flash content, see console for details."])},scope_in_timeline:{direct:e=>{const{normalize:t}=e;return t(["Direct"])},private:e=>{const{normalize:t}=e;return t(["Followers-only"])},public:e=>{const{normalize:t}=e;return t(["Public"])},unlisted:e=>{const{normalize:t}=e;return t(["Unlisted"])}}},image_cropper:{crop_picture:e=>{const{normalize:t}=e;return t(["Crop picture"])},save:e=>{const{normalize:t}=e;return t(["Save"])},save_without_cropping:e=>{const{normalize:t}=e;return t(["Save without cropping"])},cancel:e=>{const{normalize:t}=e;return t(["Cancel"])}},importer:{submit:e=>{const{normalize:t}=e;return t(["Submit"])},success:e=>{const{normalize:t}=e;return t(["Imported successfully."])},error:e=>{const{normalize:t}=e;return t(["An error occured while importing this file."])}},login:{login:e=>{const{normalize:t}=e;return t(["Log in"])},description:e=>{const{normalize:t}=e;return t(["Log in with OAuth"])},logout:e=>{const{normalize:t}=e;return t(["Log out"])},logout_confirm_title:e=>{const{normalize:t}=e;return t(["Logout confirmation"])},logout_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to logout?"])},logout_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Logout"])},logout_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not logout"])},password:e=>{const{normalize:t}=e;return t(["Password"])},placeholder:e=>{const{normalize:t}=e;return t(["e.g. lain"])},register:e=>{const{normalize:t}=e;return t(["Register"])},username:e=>{const{normalize:t}=e;return t(["Username"])},hint:e=>{const{normalize:t}=e;return t(["Log in to join the discussion"])},authentication_code:e=>{const{normalize:t}=e;return t(["Authentication code"])},enter_recovery_code:e=>{const{normalize:t}=e;return t(["Enter a recovery code"])},enter_two_factor_code:e=>{const{normalize:t}=e;return t(["Enter a two-factor code"])},recovery_code:e=>{const{normalize:t}=e;return t(["Recovery code"])},heading:{totp:e=>{const{normalize:t}=e;return t(["Two-factor authentication"])},recovery:e=>{const{normalize:t}=e;return t(["Two-factor recovery"])}}},media_modal:{previous:e=>{const{normalize:t}=e;return t(["Previous"])},next:e=>{const{normalize:t}=e;return t(["Next"])},counter:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("current"))," / ",n(o("total"))])},hide:e=>{const{normalize:t}=e;return t(["Close media viewer"])}},nav:{about:e=>{const{normalize:t}=e;return t(["About"])},administration:e=>{const{normalize:t}=e;return t(["Administration"])},back:e=>{const{normalize:t}=e;return t(["Back"])},friend_requests:e=>{const{normalize:t}=e;return t(["Follow requests"])},mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},interactions:e=>{const{normalize:t}=e;return t(["Interactions"])},dms:e=>{const{normalize:t}=e;return t(["Direct messages"])},public_tl:e=>{const{normalize:t}=e;return t(["Public timeline"])},timeline:e=>{const{normalize:t}=e;return t(["Timeline"])},home_timeline:e=>{const{normalize:t}=e;return t(["Home timeline"])},twkn:e=>{const{normalize:t}=e;return t(["Known Network"])},bookmarks:e=>{const{normalize:t}=e;return t(["Bookmarks"])},user_search:e=>{const{normalize:t}=e;return t(["User Search"])},search:e=>{const{normalize:t}=e;return t(["Search"])},search_close:e=>{const{normalize:t}=e;return t(["Close search bar"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])},preferences:e=>{const{normalize:t}=e;return t(["Preferences"])},timelines:e=>{const{normalize:t}=e;return t(["Timelines"])},chats:e=>{const{normalize:t}=e;return t(["Chats"])},lists:e=>{const{normalize:t}=e;return t(["Lists"])},edit_nav_mobile:e=>{const{normalize:t}=e;return t(["Customize navigation bar"])},edit_pinned:e=>{const{normalize:t}=e;return t(["Edit pinned items"])},edit_finish:e=>{const{normalize:t}=e;return t(["Done editing"])},mobile_sidebar:e=>{const{normalize:t}=e;return t(["Toggle mobile sidebar"])},mobile_notifications:e=>{const{normalize:t}=e;return t(["Open notifications"])},mobile_notifications:e=>{const{normalize:t}=e;return t(["Open notifications (there are unread ones)"])},mobile_notifications_close:e=>{const{normalize:t}=e;return t(["Close notifications"])},announcements:e=>{const{normalize:t}=e;return t(["Announcements"])}},notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Unknown status, searching for it…"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error fetching notifications: ",n(o(0))])},favorited_you:e=>{const{normalize:t}=e;return t(["favorited your status"])},followed_you:e=>{const{normalize:t}=e;return t(["followed you"])},follow_request:e=>{const{normalize:t}=e;return t(["wants to follow you"])},load_older:e=>{const{normalize:t}=e;return t(["Load older notifications"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},read:e=>{const{normalize:t}=e;return t(["Read!"])},repeated_you:e=>{const{normalize:t}=e;return t(["repeated your status"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["No more notifications"])},migrated_to:e=>{const{normalize:t}=e;return t(["migrated to"])},reacted_with:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["reacted with ",n(o(0))])},submitted_report:e=>{const{normalize:t}=e;return t(["submitted a report"])},poll_ended:e=>{const{normalize:t}=e;return t(["poll has ended"])}},polls:{add_poll:e=>{const{normalize:t}=e;return t(["Add poll"])},add_option:e=>{const{normalize:t}=e;return t(["Add option"])},option:e=>{const{normalize:t}=e;return t(["Option"])},votes:e=>{const{normalize:t}=e;return t(["votes"])},people_voted_count:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("count"))," person voted"]),t([n(o("count"))," people voted"])])},votes_count:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("count"))," vote"]),t([n(o("count"))," votes"])])},vote:e=>{const{normalize:t}=e;return t(["Vote"])},type:e=>{const{normalize:t}=e;return t(["Poll type"])},single_choice:e=>{const{normalize:t}=e;return t(["Single choice"])},multiple_choices:e=>{const{normalize:t}=e;return t(["Multiple choices"])},expiry:e=>{const{normalize:t}=e;return t(["Poll age"])},expires_in:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Poll ends in ",n(o(0))])},expired:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Poll ended ",n(o(0))," ago"])},not_enough_options:e=>{const{normalize:t}=e;return t(["Too few unique options in poll"])}},emoji:{stickers:e=>{const{normalize:t}=e;return t(["Stickers"])},emoji:e=>{const{normalize:t}=e;return t(["Emoji"])},keep_open:e=>{const{normalize:t}=e;return t(["Keep picker open"])},search_emoji:e=>{const{normalize:t}=e;return t(["Search for an emoji"])},add_emoji:e=>{const{normalize:t}=e;return t(["Insert emoji"])},custom:e=>{const{normalize:t}=e;return t(["Custom emoji"])},unpacked:e=>{const{normalize:t}=e;return t(["Unpacked emoji"])},unicode:e=>{const{normalize:t}=e;return t(["Unicode emoji"])},unicode_groups:{activities:e=>{const{normalize:t}=e;return t(["Activities"])},"animals-and-nature":e=>{const{normalize:t}=e;return t(["Animals & Nature"])},flags:e=>{const{normalize:t}=e;return t(["Flags"])},"food-and-drink":e=>{const{normalize:t}=e;return t(["Food & Drink"])},objects:e=>{const{normalize:t}=e;return t(["Objects"])},"people-and-body":e=>{const{normalize:t}=e;return t(["People & Body"])},"smileys-and-emotion":e=>{const{normalize:t}=e;return t(["Smileys & Emotion"])},symbols:e=>{const{normalize:t}=e;return t(["Symbols"])},"travel-and-places":e=>{const{normalize:t}=e;return t(["Travel & Places"])}},load_all_hint:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Loaded first ",n(o("saneAmount"))," emoji, loading all emoji may cause performance issues."])},load_all:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Loading all ",n(o("emojiAmount"))," emoji"])},regional_indicator:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Regional indicator ",n(o("letter"))])}},errors:{storage_unavailable:e=>{const{normalize:t}=e;return t(["Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."])}},interactions:{favs_repeats:e=>{const{normalize:t}=e;return t(["Repeats and favorites"])},follows:e=>{const{normalize:t}=e;return t(["New follows"])},emoji_reactions:e=>{const{normalize:t}=e;return t(["Emoji Reactions"])},reports:e=>{const{normalize:t}=e;return t(["Reports"])},moves:e=>{const{normalize:t}=e;return t(["User migrates"])},load_older:e=>{const{normalize:t}=e;return t(["Load older interactions"])}},post_status:{edit_status:e=>{const{normalize:t}=e;return t(["Edit status"])},new_status:e=>{const{normalize:t}=e;return t(["Post new status"])},reply_option:e=>{const{normalize:t}=e;return t(["Reply to this status"])},quote_option:e=>{const{normalize:t}=e;return t(["Quote this status"])},account_not_locked_warning:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Your account is not ",n(o(0)),". Anyone can follow you to view your follower-only posts."])},account_not_locked_warning_link:e=>{const{normalize:t}=e;return t(["locked"])},attachments_sensitive:e=>{const{normalize:t}=e;return t(["Mark attachments as sensitive"])},media_description:e=>{const{normalize:t}=e;return t(["Media description"])},content_type:{"text/plain":e=>{const{normalize:t}=e;return t(["Plain text"])},"text/html":e=>{const{normalize:t}=e;return t(["HTML"])},"text/markdown":e=>{const{normalize:t}=e;return t(["Markdown"])},"text/bbcode":e=>{const{normalize:t}=e;return t(["BBCode"])}},content_type_selection:e=>{const{normalize:t}=e;return t(["Post format"])},content_warning:e=>{const{normalize:t}=e;return t(["Subject (optional)"])},default:e=>{const{normalize:t}=e;return t(["Just landed in L.A."])},direct_warning_to_all:e=>{const{normalize:t}=e;return t(["This post will be visible to all the mentioned users."])},direct_warning_to_first_only:e=>{const{normalize:t}=e;return t(["This post will only be visible to the mentioned users at the beginning of the message."])},edit_remote_warning:e=>{const{normalize:t}=e;return t(["Other remote instances may not support editing and unable to receive the latest version of your post."])},edit_unsupported_warning:e=>{const{normalize:t}=e;return t(["Pleroma does not support editing mentions or polls."])},posting:e=>{const{normalize:t}=e;return t(["Posting"])},post:e=>{const{normalize:t}=e;return t(["Post"])},preview:e=>{const{normalize:t}=e;return t(["Preview"])},preview_empty:e=>{const{normalize:t}=e;return t(["Empty"])},empty_status_error:e=>{const{normalize:t}=e;return t(["Can't post an empty status with no files"])},media_description_error:e=>{const{normalize:t}=e;return t(["Failed to update media, try again"])},scope_notice:{public:e=>{const{normalize:t}=e;return t(["This post will be visible to everyone"])},private:e=>{const{normalize:t}=e;return t(["This post will be visible to your followers only"])},unlisted:e=>{const{normalize:t}=e;return t(["This post will not be visible in Public Timeline and The Whole Known Network"])}},scope_notice_dismiss:e=>{const{normalize:t}=e;return t(["Close this notice"])},scope:{direct:e=>{const{normalize:t}=e;return t(["Direct - post to mentioned users only"])},private:e=>{const{normalize:t}=e;return t(["Followers-only - post to followers only"])},public:e=>{const{normalize:t}=e;return t(["Public - post to public timelines"])},unlisted:e=>{const{normalize:t}=e;return t(["Unlisted - do not post to public timelines"])}}},registration:{bio_optional:e=>{const{normalize:t}=e;return t(["Bio (optional)"])},email:e=>{const{normalize:t}=e;return t(["Email"])},email_optional:e=>{const{normalize:t}=e;return t(["Email (optional)"])},fullname:e=>{const{normalize:t}=e;return t(["Display name"])},password_confirm:e=>{const{normalize:t}=e;return t(["Password confirmation"])},registration:e=>{const{normalize:t}=e;return t(["Registration"])},token:e=>{const{normalize:t}=e;return t(["Invite token"])},captcha:e=>{const{normalize:t}=e;return t(["CAPTCHA"])},new_captcha:e=>{const{normalize:t}=e;return t(["Click the image to get a new captcha"])},username_placeholder:e=>{const{normalize:t}=e;return t(["e.g. lain"])},fullname_placeholder:e=>{const{normalize:t}=e;return t(["e.g. Lain Iwakura"])},bio_placeholder:e=>{const{normalize:t}=e;return t(["e.g.\nHi, I'm Lain.\nI’m an anime girl living in suburban Japan. You may know me from the Wired."])},reason:e=>{const{normalize:t}=e;return t(["Reason to register"])},reason_placeholder:e=>{const{normalize:t}=e;return t(["This instance approves registrations manually.\nLet the administration know why you want to register."])},register:e=>{const{normalize:t}=e;return t(["Register"])},validations:{username_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},fullname_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},email_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_confirmation_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_confirmation_match:e=>{const{normalize:t}=e;return t(["should be the same as password"])},birthday_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},birthday_min_age:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["must be on or before ",n(o("date"))])}},email_language:e=>{const{normalize:t}=e;return t(["In which language do you want to receive emails from the server?"])},birthday:e=>{const{normalize:t}=e;return t(["Birthday:"])},birthday_optional:e=>{const{normalize:t}=e;return t(["Birthday (optional):"])}},remote_user_resolver:{remote_user_resolver:e=>{const{normalize:t}=e;return t(["Remote user resolver"])},searching_for:e=>{const{normalize:t}=e;return t(["Searching for"])},error:e=>{const{normalize:t}=e;return t(["Not found."])}},report:{reporter:e=>{const{normalize:t}=e;return t(["Reporter:"])},reported_user:e=>{const{normalize:t}=e;return t(["Reported user:"])},reported_statuses:e=>{const{normalize:t}=e;return t(["Reported statuses:"])},notes:e=>{const{normalize:t}=e;return t(["Notes:"])},state:e=>{const{normalize:t}=e;return t(["State:"])},state_open:e=>{const{normalize:t}=e;return t(["Open"])},state_closed:e=>{const{normalize:t}=e;return t(["Closed"])},state_resolved:e=>{const{normalize:t}=e;return t(["Resolved"])}},selectable_list:{select_all:e=>{const{normalize:t}=e;return t(["Select all"])}},settings:{add_language:e=>{const{normalize:t}=e;return t(["Add fallback language"])},remove_language:e=>{const{normalize:t}=e;return t(["Remove"])},primary_language:e=>{const{normalize:t}=e;return t(["Primary language:"])},fallback_language:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Fallback language ",n(o("index")),":"])},app_name:e=>{const{normalize:t}=e;return t(["App name"])},expert_mode:e=>{const{normalize:t}=e;return t(["Show advanced"])},save:e=>{const{normalize:t}=e;return t(["Save changes"])},security:e=>{const{normalize:t}=e;return t(["Security"])},setting_changed:e=>{const{normalize:t}=e;return t(["Setting is different from default"])},setting_server_side:e=>{const{normalize:t}=e;return t(["This setting is tied to your profile and affects all sessions and clients"])},enter_current_password_to_confirm:e=>{const{normalize:t}=e;return t(["Enter your current password to confirm your identity"])},post_look_feel:e=>{const{normalize:t}=e;return t(["Posts Look & Feel"])},mention_links:e=>{const{normalize:t}=e;return t(["Mention links"])},mfa:{otp:e=>{const{normalize:t}=e;return t(["OTP"])},setup_otp:e=>{const{normalize:t}=e;return t(["Setup OTP"])},wait_pre_setup_otp:e=>{const{normalize:t}=e;return t(["presetting OTP"])},confirm_and_enable:e=>{const{normalize:t}=e;return t(["Confirm & enable OTP"])},title:e=>{const{normalize:t}=e;return t(["Two-factor Authentication"])},generate_new_recovery_codes:e=>{const{normalize:t}=e;return t(["Generate new recovery codes"])},warning_of_generate_new_codes:e=>{const{normalize:t}=e;return t(["When you generate new recovery codes, your old codes won’t work anymore."])},recovery_codes:e=>{const{normalize:t}=e;return t(["Recovery codes."])},waiting_a_recovery_codes:e=>{const{normalize:t}=e;return t(["Receiving backup codes…"])},recovery_codes_warning:e=>{const{normalize:t}=e;return t(["Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account."])},authentication_methods:e=>{const{normalize:t}=e;return t(["Authentication methods"])},scan:{title:e=>{const{normalize:t}=e;return t(["Scan"])},desc:e=>{const{normalize:t}=e;return t(["Using your two-factor app, scan this QR code or enter text key:"])},secret_code:e=>{const{normalize:t}=e;return t(["Key"])}},verify:{desc:e=>{const{normalize:t}=e;return t(["To enable two-factor authentication, enter the code from your two-factor app:"])}}},lists_navigation:e=>{const{normalize:t}=e;return t(["Show lists in navigation"])},allow_following_move:e=>{const{normalize:t}=e;return t(["Allow auto-follow when following account moves"])},attachmentRadius:e=>{const{normalize:t}=e;return t(["Attachments"])},attachments:e=>{const{normalize:t}=e;return t(["Attachments"])},avatar:e=>{const{normalize:t}=e;return t(["Avatar"])},avatarAltRadius:e=>{const{normalize:t}=e;return t(["Avatars (notifications)"])},avatarRadius:e=>{const{normalize:t}=e;return t(["Avatars"])},background:e=>{const{normalize:t}=e;return t(["Background"])},bio:e=>{const{normalize:t}=e;return t(["Bio"])},email_language:e=>{const{normalize:t}=e;return t(["Language for receiving emails from the server"])},block_export:e=>{const{normalize:t}=e;return t(["Block export"])},block_export_button:e=>{const{normalize:t}=e;return t(["Export your blocks to a csv file"])},block_import:e=>{const{normalize:t}=e;return t(["Block import"])},block_import_error:e=>{const{normalize:t}=e;return t(["Error importing blocks"])},blocks_imported:e=>{const{normalize:t}=e;return t(["Blocks imported! Processing them will take a while."])},mute_export:e=>{const{normalize:t}=e;return t(["Mute export"])},mute_export_button:e=>{const{normalize:t}=e;return t(["Export your mutes to a csv file"])},mute_import:e=>{const{normalize:t}=e;return t(["Mute import"])},mute_import_error:e=>{const{normalize:t}=e;return t(["Error importing mutes"])},mutes_imported:e=>{const{normalize:t}=e;return t(["Mutes imported! Processing them will take a while."])},import_mutes_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import mutes from a csv file"])},account_backup:e=>{const{normalize:t}=e;return t(["Account backup"])},account_backup_description:e=>{const{normalize:t}=e;return t(["This allows you to download an archive of your account information and your posts, but they cannot yet be imported into a Pleroma account."])},account_backup_table_head:e=>{const{normalize:t}=e;return t(["Backup"])},download_backup:e=>{const{normalize:t}=e;return t(["Download"])},backup_not_ready:e=>{const{normalize:t}=e;return t(["This backup is not ready yet."])},backup_running:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["This backup is in progress, processed ",n(o("number"))," record."]),t(["This backup is in progress, processed ",n(o("number"))," records."])])},backup_failed:e=>{const{normalize:t}=e;return t(["This backup has failed."])},remove_backup:e=>{const{normalize:t}=e;return t(["Remove"])},list_backups_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error fetching backup list: ",n(o("error"))])},add_backup:e=>{const{normalize:t}=e;return t(["Create a new backup"])},added_backup:e=>{const{normalize:t}=e;return t(["Added a new backup."])},add_backup_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error adding a new backup: ",n(o("error"))])},blocks_tab:e=>{const{normalize:t}=e;return t(["Blocks"])},bot:e=>{const{normalize:t}=e;return t(["This is a bot account"])},btnRadius:e=>{const{normalize:t}=e;return t(["Buttons"])},cBlue:e=>{const{normalize:t}=e;return t(["Blue (Reply, follow)"])},cGreen:e=>{const{normalize:t}=e;return t(["Green (Retweet)"])},cOrange:e=>{const{normalize:t}=e;return t(["Orange (Favorite)"])},cRed:e=>{const{normalize:t}=e;return t(["Red (Cancel)"])},change_email:e=>{const{normalize:t}=e;return t(["Change email"])},change_email_error:e=>{const{normalize:t}=e;return t(["There was an issue changing your email."])},changed_email:e=>{const{normalize:t}=e;return t(["Email changed successfully!"])},change_password:e=>{const{normalize:t}=e;return t(["Change password"])},change_password_error:e=>{const{normalize:t}=e;return t(["There was an issue changing your password."])},changed_password:e=>{const{normalize:t}=e;return t(["Password changed successfully!"])},chatMessageRadius:e=>{const{normalize:t}=e;return t(["Chat message"])},collapse_subject:e=>{const{normalize:t}=e;return t(["Collapse posts with subjects"])},composing:e=>{const{normalize:t}=e;return t(["Composing"])},confirm_new_password:e=>{const{normalize:t}=e;return t(["Confirm new password"])},current_password:e=>{const{normalize:t}=e;return t(["Current password"])},confirm_dialogs:e=>{const{normalize:t}=e;return t(["Ask for confirmation when"])},confirm_dialogs_repeat:e=>{const{normalize:t}=e;return t(["repeating a status"])},confirm_dialogs_unfollow:e=>{const{normalize:t}=e;return t(["unfollowing a user"])},confirm_dialogs_block:e=>{const{normalize:t}=e;return t(["blocking a user"])},confirm_dialogs_mute:e=>{const{normalize:t}=e;return t(["muting a user"])},confirm_dialogs_delete:e=>{const{normalize:t}=e;return t(["deleting a status"])},confirm_dialogs_logout:e=>{const{normalize:t}=e;return t(["logging out"])},confirm_dialogs_approve_follow:e=>{const{normalize:t}=e;return t(["approving a follower"])},confirm_dialogs_deny_follow:e=>{const{normalize:t}=e;return t(["denying a follower"])},confirm_dialogs_remove_follower:e=>{const{normalize:t}=e;return t(["removing a follower"])},mutes_and_blocks:e=>{const{normalize:t}=e;return t(["Mutes and Blocks"])},data_import_export_tab:e=>{const{normalize:t}=e;return t(["Data import / export"])},default_vis:e=>{const{normalize:t}=e;return t(["Default visibility scope"])},delete_account:e=>{const{normalize:t}=e;return t(["Delete account"])},delete_account_description:e=>{const{normalize:t}=e;return t(["Permanently delete your data and deactivate your account."])},delete_account_error:e=>{const{normalize:t}=e;return t(["There was an issue deleting your account. If this persists please contact your instance administrator."])},delete_account_instructions:e=>{const{normalize:t}=e;return t(["Type your password in the input below to confirm account deletion."])},account_alias:e=>{const{normalize:t}=e;return t(["Account aliases"])},account_alias_table_head:e=>{const{normalize:t}=e;return t(["Alias"])},list_aliases_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error fetching aliases: ",n(o("error"))])},hide_list_aliases_error_action:e=>{const{normalize:t}=e;return t(["Close"])},remove_alias:e=>{const{normalize:t}=e;return t(["Remove this alias"])},new_alias_target:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Add a new alias (e.g. ",n(o("example")),")"])},added_alias:e=>{const{normalize:t}=e;return t(["Alias is added."])},add_alias_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error adding alias: ",n(o("error"))])},move_account:e=>{const{normalize:t}=e;return t(["Move account"])},move_account_notes:e=>{const{normalize:t}=e;return t(["If you want to move the account somewhere else, you must go to your target account and add an alias pointing here."])},move_account_target:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Target account (e.g. ",n(o("example")),")"])},moved_account:e=>{const{normalize:t}=e;return t(["Account is moved."])},move_account_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error moving account: ",n(o("error"))])},discoverable:e=>{const{normalize:t}=e;return t(["Allow discovery of this account in search results and other services"])},domain_mutes:e=>{const{normalize:t}=e;return t(["Domains"])},avatar_size_instruction:e=>{const{normalize:t}=e;return t(["The recommended minimum size for avatar images is 150x150 pixels."])},pad_emoji:e=>{const{normalize:t}=e;return t(["Pad emoji with spaces when adding from picker"])},autocomplete_select_first:e=>{const{normalize:t}=e;return t(["Automatically select the first candidate when autocomplete results are available"])},emoji_reactions_on_timeline:e=>{const{normalize:t}=e;return t(["Show emoji reactions on timeline"])},emoji_reactions_scale:e=>{const{normalize:t}=e;return t(["Reactions scale factor"])},export_theme:e=>{const{normalize:t}=e;return t(["Save preset"])},filtering:e=>{const{normalize:t}=e;return t(["Filtering"])},wordfilter:e=>{const{normalize:t}=e;return t(["Wordfilter"])},filtering_explanation:e=>{const{normalize:t}=e;return t(["All statuses containing these words will be muted, one per line"])},word_filter_and_more:e=>{const{normalize:t}=e;return t(["Word filter and more..."])},follow_export:e=>{const{normalize:t}=e;return t(["Follow export"])},follow_export_button:e=>{const{normalize:t}=e;return t(["Export your follows to a csv file"])},follow_import:e=>{const{normalize:t}=e;return t(["Follow import"])},follow_import_error:e=>{const{normalize:t}=e;return t(["Error importing followers"])},follows_imported:e=>{const{normalize:t}=e;return t(["Follows imported! Processing them will take a while."])},accent:e=>{const{normalize:t}=e;return t(["Accent"])},foreground:e=>{const{normalize:t}=e;return t(["Foreground"])},general:e=>{const{normalize:t}=e;return t(["General"])},hide_attachments_in_convo:e=>{const{normalize:t}=e;return t(["Hide attachments in conversations"])},hide_attachments_in_tl:e=>{const{normalize:t}=e;return t(["Hide attachments in timeline"])},hide_media_previews:e=>{const{normalize:t}=e;return t(["Hide media previews"])},hide_muted_posts:e=>{const{normalize:t}=e;return t(["Hide posts of muted users"])},mute_bot_posts:e=>{const{normalize:t}=e;return t(["Mute bot posts"])},hide_bot_indication:e=>{const{normalize:t}=e;return t(["Hide bot indication in posts"])},hide_all_muted_posts:e=>{const{normalize:t}=e;return t(["Hide muted posts"])},max_thumbnails:e=>{const{normalize:t}=e;return t(["Maximum amount of thumbnails per post (empty = no limit)"])},hide_isp:e=>{const{normalize:t}=e;return t(["Hide instance-specific panel"])},hide_shoutbox:e=>{const{normalize:t}=e;return t(["Hide instance shoutbox"])},right_sidebar:e=>{const{normalize:t}=e;return t(["Reverse order of columns"])},navbar_column_stretch:e=>{const{normalize:t}=e;return t(["Stretch navbar to columns width"])},always_show_post_button:e=>{const{normalize:t}=e;return t(["Always show floating New Post button"])},hide_wallpaper:e=>{const{normalize:t}=e;return t(["Hide instance wallpaper"])},preload_images:e=>{const{normalize:t}=e;return t(["Preload images"])},use_one_click_nsfw:e=>{const{normalize:t}=e;return t(["Open NSFW attachments with just one click"])},hide_post_stats:e=>{const{normalize:t}=e;return t(["Hide post statistics (e.g. the number of favorites)"])},hide_user_stats:e=>{const{normalize:t}=e;return t(["Hide user statistics (e.g. the number of followers)"])},hide_filtered_statuses:e=>{const{normalize:t}=e;return t(["Hide all filtered posts"])},hide_wordfiltered_statuses:e=>{const{normalize:t}=e;return t(["Hide word-filtered statuses"])},hide_muted_threads:e=>{const{normalize:t}=e;return t(["Hide muted threads"])},import_blocks_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import blocks from a csv file"])},import_followers_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import follows from a csv file"])},import_theme:e=>{const{normalize:t}=e;return t(["Load preset"])},inputRadius:e=>{const{normalize:t}=e;return t(["Input fields"])},checkboxRadius:e=>{const{normalize:t}=e;return t(["Checkboxes"])},instance_default:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(default: ",n(o("value")),")"])},instance_default_simple:e=>{const{normalize:t}=e;return t(["(default)"])},interface:e=>{const{normalize:t}=e;return t(["Interface"])},interfaceLanguage:e=>{const{normalize:t}=e;return t(["Interface language"])},invalid_theme_imported:e=>{const{normalize:t}=e;return t(["The selected file is not a supported Pleroma theme. No changes to your theme were made."])},limited_availability:e=>{const{normalize:t}=e;return t(["Unavailable in your browser"])},links:e=>{const{normalize:t}=e;return t(["Links"])},lock_account_description:e=>{const{normalize:t}=e;return t(["Restrict your account to approved followers only"])},loop_video:e=>{const{normalize:t}=e;return t(["Loop videos"])},loop_video_silent_only:e=>{const{normalize:t}=e;return t(['Loop only videos without sound (i.e. Mastodon\'s "gifs")'])},mutes_tab:e=>{const{normalize:t}=e;return t(["Mutes"])},play_videos_in_modal:e=>{const{normalize:t}=e;return t(["Play videos in a popup frame"])},url:e=>{const{normalize:t}=e;return t(["URL"])},preview:e=>{const{normalize:t}=e;return t(["Preview"])},file_export_import:{backup_restore:e=>{const{normalize:t}=e;return t(["Settings backup"])},backup_settings:e=>{const{normalize:t}=e;return t(["Backup settings to file"])},backup_settings_theme:e=>{const{normalize:t}=e;return t(["Backup settings and theme to file"])},restore_settings:e=>{const{normalize:t}=e;return t(["Restore settings from file"])},errors:{invalid_file:e=>{const{normalize:t}=e;return t(["The selected file is not a supported Pleroma settings backup. No changes were made."])},file_too_new:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Incompatile major version: ",n(o("fileMajor")),", this PleromaFE (settings ver ",n(o("feMajor")),") is too old to handle it"])},file_too_old:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Incompatile major version: ",n(o("fileMajor")),", file version is too old and not supported (min. set. ver. ",n(o("feMajor")),")"])},file_slightly_new:e=>{const{normalize:t}=e;return t(["File minor version is different, some settings might not load"])}}},profile_fields:{label:e=>{const{normalize:t}=e;return t(["Profile metadata"])},add_field:e=>{const{normalize:t}=e;return t(["Add field"])},name:e=>{const{normalize:t}=e;return t(["Label"])},value:e=>{const{normalize:t}=e;return t(["Content"])}},birthday:{label:e=>{const{normalize:t}=e;return t(["Birthday"])},show_birthday:e=>{const{normalize:t}=e;return t(["Show my birthday"])}},account_privacy:e=>{const{normalize:t}=e;return t(["Privacy"])},use_contain_fit:e=>{const{normalize:t}=e;return t(["Don't crop the attachment in thumbnails"])},name:e=>{const{normalize:t}=e;return t(["Name"])},name_bio:e=>{const{normalize:t}=e;return t(["Name & bio"])},new_email:e=>{const{normalize:t}=e;return t(["New email"])},new_password:e=>{const{normalize:t}=e;return t(["New password"])},posts:e=>{const{normalize:t}=e;return t(["Posts"])},user_profiles:e=>{const{normalize:t}=e;return t(["User Profiles"])},notification_visibility:e=>{const{normalize:t}=e;return t(["Types of notifications to show"])},notification_visibility_follows:e=>{const{normalize:t}=e;return t(["Follows"])},notification_visibility_likes:e=>{const{normalize:t}=e;return t(["Favorites"])},notification_visibility_mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},notification_visibility_repeats:e=>{const{normalize:t}=e;return t(["Repeats"])},notification_visibility_moves:e=>{const{normalize:t}=e;return t(["User Migrates"])},notification_visibility_emoji_reactions:e=>{const{normalize:t}=e;return t(["Reactions"])},notification_visibility_polls:e=>{const{normalize:t}=e;return t(["Ends of polls you voted in"])},no_rich_text_description:e=>{const{normalize:t}=e;return t(["Strip rich text formatting from all posts"])},no_blocks:e=>{const{normalize:t}=e;return t(["No blocks"])},no_mutes:e=>{const{normalize:t}=e;return t(["No mutes"])},hide_favorites_description:e=>{const{normalize:t}=e;return t(["Don't show list of my favorites (people still get notified)"])},hide_follows_description:e=>{const{normalize:t}=e;return t(["Don't show who I'm following"])},hide_followers_description:e=>{const{normalize:t}=e;return t(["Don't show who's following me"])},hide_follows_count_description:e=>{const{normalize:t}=e;return t(["Don't show follow count"])},hide_followers_count_description:e=>{const{normalize:t}=e;return t(["Don't show follower count"])},show_admin_badge:e=>{const{normalize:t}=e;return t(['Show "Admin" badge in my profile'])},show_moderator_badge:e=>{const{normalize:t}=e;return t(['Show "Moderator" badge in my profile'])},nsfw_clickthrough:e=>{const{normalize:t}=e;return t(["Hide sensitive/NSFW media"])},oauth_tokens:e=>{const{normalize:t}=e;return t(["OAuth tokens"])},token:e=>{const{normalize:t}=e;return t(["Token"])},refresh_token:e=>{const{normalize:t}=e;return t(["Refresh token"])},valid_until:e=>{const{normalize:t}=e;return t(["Valid until"])},revoke_token:e=>{const{normalize:t}=e;return t(["Revoke"])},panelRadius:e=>{const{normalize:t}=e;return t(["Panels"])},pause_on_unfocused:e=>{const{normalize:t}=e;return t(["Pause when tab is not focused"])},presets:e=>{const{normalize:t}=e;return t(["Presets"])},profile_background:e=>{const{normalize:t}=e;return t(["Profile background"])},profile_banner:e=>{const{normalize:t}=e;return t(["Profile banner"])},profile_tab:e=>{const{normalize:t}=e;return t(["Profile"])},radii_help:e=>{const{normalize:t}=e;return t(["Set up interface edge rounding (in pixels)"])},replies_in_timeline:e=>{const{normalize:t}=e;return t(["Replies in timeline"])},reply_visibility_all:e=>{const{normalize:t}=e;return t(["Show all replies"])},reply_visibility_following:e=>{const{normalize:t}=e;return t(["Only show replies directed at me or users I'm following"])},reply_visibility_self:e=>{const{normalize:t}=e;return t(["Only show replies directed at me"])},reply_visibility_following_short:e=>{const{normalize:t}=e;return t(["Show replies to my follows"])},reply_visibility_self_short:e=>{const{normalize:t}=e;return t(["Show replies to self only"])},autohide_floating_post_button:e=>{const{normalize:t}=e;return t(["Automatically hide New Post button (mobile)"])},saving_err:e=>{const{normalize:t}=e;return t(["Error saving settings"])},saving_ok:e=>{const{normalize:t}=e;return t(["Settings saved"])},search_user_to_block:e=>{const{normalize:t}=e;return t(["Search whom you want to block"])},search_user_to_mute:e=>{const{normalize:t}=e;return t(["Search whom you want to mute"])},security_tab:e=>{const{normalize:t}=e;return t(["Security"])},scope_copy:e=>{const{normalize:t}=e;return t(["Copy scope when replying (DMs are always copied)"])},minimal_scopes_mode:e=>{const{normalize:t}=e;return t(["Minimize post scope selection options"])},set_new_avatar:e=>{const{normalize:t}=e;return t(["Set new avatar"])},set_new_profile_background:e=>{const{normalize:t}=e;return t(["Set new profile background"])},set_new_profile_banner:e=>{const{normalize:t}=e;return t(["Set new profile banner"])},reset_avatar:e=>{const{normalize:t}=e;return t(["Reset avatar"])},reset_profile_background:e=>{const{normalize:t}=e;return t(["Reset profile background"])},reset_profile_banner:e=>{const{normalize:t}=e;return t(["Reset profile banner"])},reset_avatar_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the avatar?"])},reset_banner_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the banner?"])},reset_background_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the background?"])},settings:e=>{const{normalize:t}=e;return t(["Settings"])},subject_input_always_show:e=>{const{normalize:t}=e;return t(["Always show subject field"])},subject_line_behavior:e=>{const{normalize:t}=e;return t(["Copy subject when replying"])},subject_line_email:e=>{const{normalize:t}=e;return t(['Like email: "re: subject"'])},subject_line_mastodon:e=>{const{normalize:t}=e;return t(["Like mastodon: copy as is"])},subject_line_noop:e=>{const{normalize:t}=e;return t(["Do not copy"])},conversation_display:e=>{const{normalize:t}=e;return t(["Conversation display style"])},conversation_display_tree:e=>{const{normalize:t}=e;return t(["Tree-style"])},conversation_display_tree_quick:e=>{const{normalize:t}=e;return t(["Tree view"])},disable_sticky_headers:e=>{const{normalize:t}=e;return t(["Don't stick column headers to top of the screen"])},show_scrollbars:e=>{const{normalize:t}=e;return t(["Show side column's scrollbars"])},third_column_mode:e=>{const{normalize:t}=e;return t(["When there's enough space, show third column containing"])},third_column_mode_none:e=>{const{normalize:t}=e;return t(["Don't show third column at all"])},third_column_mode_notifications:e=>{const{normalize:t}=e;return t(["Notifications column"])},third_column_mode_postform:e=>{const{normalize:t}=e;return t(["Main post form and navigation"])},columns:e=>{const{normalize:t}=e;return t(["Columns"])},column_sizes:e=>{const{normalize:t}=e;return t(["Column sizes"])},column_sizes_sidebar:e=>{const{normalize:t}=e;return t(["Sidebar"])},column_sizes_content:e=>{const{normalize:t}=e;return t(["Content"])},column_sizes_notifs:e=>{const{normalize:t}=e;return t(["Notifications"])},tree_advanced:e=>{const{normalize:t}=e;return t(["Allow more flexible navigation in tree view"])},tree_fade_ancestors:e=>{const{normalize:t}=e;return t(["Display ancestors of the current status in faint text"])},conversation_display_linear:e=>{const{normalize:t}=e;return t(["Linear-style"])},conversation_display_linear_quick:e=>{const{normalize:t}=e;return t(["Linear view"])},conversation_other_replies_button:e=>{const{normalize:t}=e;return t(['Show the "other replies" button'])},conversation_other_replies_button_below:e=>{const{normalize:t}=e;return t(["Below statuses"])},conversation_other_replies_button_inside:e=>{const{normalize:t}=e;return t(["Inside statuses"])},max_depth_in_thread:e=>{const{normalize:t}=e;return t(["Maximum number of levels in thread to display by default"])},post_status_content_type:e=>{const{normalize:t}=e;return t(["Post status content type"])},sensitive_by_default:e=>{const{normalize:t}=e;return t(["Mark posts as sensitive by default"])},stop_gifs:e=>{const{normalize:t}=e;return t(["Pause animated images until you hover on them"])},streaming:e=>{const{normalize:t}=e;return t(["Automatically show new posts when scrolled to the top"])},auto_update:e=>{const{normalize:t}=e;return t(["Show new posts automatically"])},user_mutes:e=>{const{normalize:t}=e;return t(["Users"])},useStreamingApi:e=>{const{normalize:t}=e;return t(["Receive posts and notifications real-time"])},use_websockets:e=>{const{normalize:t}=e;return t(["Use websockets (Realtime updates)"])},text:e=>{const{normalize:t}=e;return t(["Text"])},theme:e=>{const{normalize:t}=e;return t(["Theme"])},theme_help:e=>{const{normalize:t}=e;return t(["Use hex color codes (#rrggbb) to customize your color theme."])},theme_help_v2_1:e=>{const{normalize:t}=e;return t(['You can also override certain component\'s colors and opacity by toggling the checkbox, use "Clear all" button to clear all overrides.'])},theme_help_v2_2:e=>{const{normalize:t}=e;return t(["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."])},tooltipRadius:e=>{const{normalize:t}=e;return t(["Tooltips/alerts"])},type_domains_to_mute:e=>{const{normalize:t}=e;return t(["Search domains to mute"])},upload_a_photo:e=>{const{normalize:t}=e;return t(["Upload a photo"])},user_settings:e=>{const{normalize:t}=e;return t(["User Settings"])},values:{false:e=>{const{normalize:t}=e;return t(["no"])},true:e=>{const{normalize:t}=e;return t(["yes"])}},virtual_scrolling:e=>{const{normalize:t}=e;return t(["Optimize timeline rendering"])},use_at_icon:e=>{const{normalize:t}=e;return t(["Display ","@"," symbol as an icon instead of text"])},mention_link_display:e=>{const{normalize:t}=e;return t(["Display mention links"])},mention_link_display_short:e=>{const{normalize:t}=e;return t(["always as short names (e.g. ","@","foo)"])},mention_link_display_full_for_remote:e=>{const{normalize:t}=e;return t(["as full names only for remote users (e.g. ","@","foo","@","example.org)"])},mention_link_display_full:e=>{const{normalize:t}=e;return t(["always as full names (e.g. ","@","foo","@","example.org)"])},mention_link_use_tooltip:e=>{const{normalize:t}=e;return t(["Show user card when clicking mention links"])},mention_link_show_avatar:e=>{const{normalize:t}=e;return t(["Show user avatar beside the link"])},mention_link_show_avatar_quick:e=>{const{normalize:t}=e;return t(["Show user avatar next to mentions"])},mention_link_fade_domain:e=>{const{normalize:t}=e;return t(["Fade domains (e.g. ","@","example.org in ","@","foo","@","example.org)"])},mention_link_bolden_you:e=>{const{normalize:t}=e;return t(["Highlight mention of you when you are mentioned"])},user_popover_avatar_action:e=>{const{normalize:t}=e;return t(["Popover avatar click action"])},user_popover_avatar_action_zoom:e=>{const{normalize:t}=e;return t(["Zoom the avatar"])},user_popover_avatar_action_close:e=>{const{normalize:t}=e;return t(["Close the popover"])},user_popover_avatar_action_open:e=>{const{normalize:t}=e;return t(["Open profile"])},user_popover_avatar_overlay:e=>{const{normalize:t}=e;return t(["Show user popover over user avatar"])},fun:e=>{const{normalize:t}=e;return t(["Fun"])},greentext:e=>{const{normalize:t}=e;return t(["Meme arrows"])},show_yous:e=>{const{normalize:t}=e;return t(["Show (You)s"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},notification_setting_filters:e=>{const{normalize:t}=e;return t(["Filters"])},notification_setting_block_from_strangers:e=>{const{normalize:t}=e;return t(["Block notifications from users who you do not follow"])},notification_setting_privacy:e=>{const{normalize:t}=e;return t(["Privacy"])},notification_setting_hide_notification_contents:e=>{const{normalize:t}=e;return t(["Hide the sender and contents of push notifications"])},notification_mutes:e=>{const{normalize:t}=e;return t(["To stop receiving notifications from a specific user, use a mute."])},notification_blocks:e=>{const{normalize:t}=e;return t(["Blocking a user stops all notifications as well as unsubscribes them."])},enable_web_push_notifications:e=>{const{normalize:t}=e;return t(["Enable web push notifications"])},more_settings:e=>{const{normalize:t}=e;return t(["More settings"])},style:{switcher:{keep_color:e=>{const{normalize:t}=e;return t(["Keep colors"])},keep_shadows:e=>{const{normalize:t}=e;return t(["Keep shadows"])},keep_opacity:e=>{const{normalize:t}=e;return t(["Keep opacity"])},keep_roundness:e=>{const{normalize:t}=e;return t(["Keep roundness"])},keep_fonts:e=>{const{normalize:t}=e;return t(["Keep fonts"])},save_load_hint:e=>{const{normalize:t}=e;return t(['"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.'])},reset:e=>{const{normalize:t}=e;return t(["Reset"])},clear_all:e=>{const{normalize:t}=e;return t(["Clear all"])},clear_opacity:e=>{const{normalize:t}=e;return t(["Clear opacity"])},load_theme:e=>{const{normalize:t}=e;return t(["Load theme"])},keep_as_is:e=>{const{normalize:t}=e;return t(["Keep as is"])},use_snapshot:e=>{const{normalize:t}=e;return t(["Old version"])},use_source:e=>{const{normalize:t}=e;return t(["New version"])},help:{upgraded_from_v2:e=>{const{normalize:t}=e;return t(["PleromaFE has been upgraded, theme could look a little bit different than you remember."])},v2_imported:e=>{const{normalize:t}=e;return t(["File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies."])},future_version_imported:e=>{const{normalize:t}=e;return t(["File you imported was made in newer version of FE."])},older_version_imported:e=>{const{normalize:t}=e;return t(["File you imported was made in older version of FE."])},snapshot_present:e=>{const{normalize:t}=e;return t(["Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead."])},snapshot_missing:e=>{const{normalize:t}=e;return t(["No theme snapshot was in the file so it could look different than originally envisioned."])},fe_upgraded:e=>{const{normalize:t}=e;return t(["PleromaFE's theme engine upgraded after version update."])},fe_downgraded:e=>{const{normalize:t}=e;return t(["PleromaFE's version rolled back."])},migration_snapshot_ok:e=>{const{normalize:t}=e;return t(["Just to be safe, theme snapshot loaded. You can try loading theme data."])},migration_napshot_gone:e=>{const{normalize:t}=e;return t(["For whatever reason snapshot was missing, some stuff could look different than you remember."])},snapshot_source_mismatch:e=>{const{normalize:t}=e;return t(["Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version."])}}},common:{color:e=>{const{normalize:t}=e;return t(["Color"])},opacity:e=>{const{normalize:t}=e;return t(["Opacity"])},contrast:{hint:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Contrast ratio is ",n(o("ratio")),", it ",n(o("level"))," ",n(o("context"))])},level:{aa:e=>{const{normalize:t}=e;return t(["meets Level AA guideline (minimal)"])},aaa:e=>{const{normalize:t}=e;return t(["meets Level AAA guideline (recommended)"])},bad:e=>{const{normalize:t}=e;return t(["doesn't meet any accessibility guidelines"])}},context:{"18pt":e=>{const{normalize:t}=e;return t(["for large (18pt+) text"])},text:e=>{const{normalize:t}=e;return t(["for text"])}}}},common_colors:{_tab_label:e=>{const{normalize:t}=e;return t(["Common"])},main:e=>{const{normalize:t}=e;return t(["Common colors"])},foreground_hint:e=>{const{normalize:t}=e;return t(['See "Advanced" tab for more detailed control'])},rgbo:e=>{const{normalize:t}=e;return t(["Icons, accents, badges"])}},advanced_colors:{_tab_label:e=>{const{normalize:t}=e;return t(["Advanced"])},alert:e=>{const{normalize:t}=e;return t(["Alert background"])},alert_error:e=>{const{normalize:t}=e;return t(["Error"])},alert_warning:e=>{const{normalize:t}=e;return t(["Warning"])},alert_neutral:e=>{const{normalize:t}=e;return t(["Neutral"])},post:e=>{const{normalize:t}=e;return t(["Posts/User bios"])},badge:e=>{const{normalize:t}=e;return t(["Badge background"])},popover:e=>{const{normalize:t}=e;return t(["Tooltips, menus, popovers"])},badge_notification:e=>{const{normalize:t}=e;return t(["Notification"])},panel_header:e=>{const{normalize:t}=e;return t(["Panel header"])},top_bar:e=>{const{normalize:t}=e;return t(["Top bar"])},borders:e=>{const{normalize:t}=e;return t(["Borders"])},buttons:e=>{const{normalize:t}=e;return t(["Buttons"])},inputs:e=>{const{normalize:t}=e;return t(["Input fields"])},faint_text:e=>{const{normalize:t}=e;return t(["Faded text"])},underlay:e=>{const{normalize:t}=e;return t(["Underlay"])},wallpaper:e=>{const{normalize:t}=e;return t(["Wallpaper"])},poll:e=>{const{normalize:t}=e;return t(["Poll graph"])},icons:e=>{const{normalize:t}=e;return t(["Icons"])},highlight:e=>{const{normalize:t}=e;return t(["Highlighted elements"])},pressed:e=>{const{normalize:t}=e;return t(["Pressed"])},selectedPost:e=>{const{normalize:t}=e;return t(["Selected post"])},selectedMenu:e=>{const{normalize:t}=e;return t(["Selected menu item"])},disabled:e=>{const{normalize:t}=e;return t(["Disabled"])},toggled:e=>{const{normalize:t}=e;return t(["Toggled"])},tabs:e=>{const{normalize:t}=e;return t(["Tabs"])},chat:{incoming:e=>{const{normalize:t}=e;return t(["Incoming"])},outgoing:e=>{const{normalize:t}=e;return t(["Outgoing"])},border:e=>{const{normalize:t}=e;return t(["Border"])}}},radii:{_tab_label:e=>{const{normalize:t}=e;return t(["Roundness"])}},shadows:{_tab_label:e=>{const{normalize:t}=e;return t(["Shadow and lighting"])},component:e=>{const{normalize:t}=e;return t(["Component"])},override:e=>{const{normalize:t}=e;return t(["Override"])},shadow_id:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Shadow #",n(o("value"))])},blur:e=>{const{normalize:t}=e;return t(["Blur"])},spread:e=>{const{normalize:t}=e;return t(["Spread"])},inset:e=>{const{normalize:t}=e;return t(["Inset"])},hintV3:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["For shadows you can also use the ",n(o(0))," notation to use other color slot."])},filter_hint:{always_drop_shadow:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Warning, this shadow always uses ",n(o(0))," when browser supports it."])},drop_shadow_syntax:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0))," does not support ",n(o(1))," parameter and ",n(o(2))," keyword."])},avatar_inset:e=>{const{normalize:t}=e;return t(["Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars."])},spread_zero:e=>{const{normalize:t}=e;return t(["Shadows with spread > 0 will appear as if it was set to zero"])},inset_classic:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Inset shadows will be using ",n(o(0))])}},components:{panel:e=>{const{normalize:t}=e;return t(["Panel"])},panelHeader:e=>{const{normalize:t}=e;return t(["Panel header"])},topBar:e=>{const{normalize:t}=e;return t(["Top bar"])},avatar:e=>{const{normalize:t}=e;return t(["User avatar (in profile view)"])},avatarStatus:e=>{const{normalize:t}=e;return t(["User avatar (in post display)"])},popup:e=>{const{normalize:t}=e;return t(["Popups and tooltips"])},button:e=>{const{normalize:t}=e;return t(["Button"])},buttonHover:e=>{const{normalize:t}=e;return t(["Button (hover)"])},buttonPressed:e=>{const{normalize:t}=e;return t(["Button (pressed)"])},buttonPressedHover:e=>{const{normalize:t}=e;return t(["Button (pressed+hover)"])},input:e=>{const{normalize:t}=e;return t(["Input field"])}}},fonts:{_tab_label:e=>{const{normalize:t}=e;return t(["Fonts"])},help:e=>{const{normalize:t}=e;return t(['Select font to use for elements of UI. For "custom" you have to enter exact font name as it appears in system.'])},components:{interface:e=>{const{normalize:t}=e;return t(["Interface"])},input:e=>{const{normalize:t}=e;return t(["Input fields"])},post:e=>{const{normalize:t}=e;return t(["Post text"])},postCode:e=>{const{normalize:t}=e;return t(["Monospaced text in a post (rich text)"])}},family:e=>{const{normalize:t}=e;return t(["Font name"])},size:e=>{const{normalize:t}=e;return t(["Size (in px)"])},weight:e=>{const{normalize:t}=e;return t(["Weight (boldness)"])},custom:e=>{const{normalize:t}=e;return t(["Custom"])}},preview:{header:e=>{const{normalize:t}=e;return t(["Preview"])},content:e=>{const{normalize:t}=e;return t(["Content"])},error:e=>{const{normalize:t}=e;return t(["Example error"])},button:e=>{const{normalize:t}=e;return t(["Button"])},text:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["A bunch of more ",n(o(0))," and ",n(o(1))])},mono:e=>{const{normalize:t}=e;return t(["content"])},input:e=>{const{normalize:t}=e;return t(["Just landed in L.A."])},faint_link:e=>{const{normalize:t}=e;return t(["helpful manual"])},fine_print:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Read our ",n(o(0))," to learn nothing useful!"])},header_faint:e=>{const{normalize:t}=e;return t(["This is fine"])},checkbox:e=>{const{normalize:t}=e;return t(["I have skimmed over terms and conditions"])},link:e=>{const{normalize:t}=e;return t(["a nice lil' link"])}}},version:{title:e=>{const{normalize:t}=e;return t(["Version"])},backend_version:e=>{const{normalize:t}=e;return t(["Backend version"])},frontend_version:e=>{const{normalize:t}=e;return t(["Frontend version"])}},commit_value:e=>{const{normalize:t}=e;return t(["Save"])},commit_value_tooltip:e=>{const{normalize:t}=e;return t(["Value is not saved, press this button to commit your changes"])},reset_value:e=>{const{normalize:t}=e;return t(["Reset"])},reset_value_tooltip:e=>{const{normalize:t}=e;return t(["Reset draft"])},hard_reset_value:e=>{const{normalize:t}=e;return t(["Hard reset"])},hard_reset_value_tooltip:e=>{const{normalize:t}=e;return t(["Remove setting from storage, forcing use of default value"])}},admin_dash:{window_title:e=>{const{normalize:t}=e;return t(["Administration"])},wip_notice:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["This admin dashboard is experimental and WIP, ",n(o("adminFeLink")),"."])},old_ui_link:e=>{const{normalize:t}=e;return t(["old admin UI available here"])},reset_all:e=>{const{normalize:t}=e;return t(["Reset all"])},commit_all:e=>{const{normalize:t}=e;return t(["Save all"])},tabs:{nodb:e=>{const{normalize:t}=e;return t(["No DB Config"])},instance:e=>{const{normalize:t}=e;return t(["Instance"])},limits:e=>{const{normalize:t}=e;return t(["Limits"])},frontends:e=>{const{normalize:t}=e;return t(["Front-ends"])}},nodb:{heading:e=>{const{normalize:t}=e;return t(["Database config is disabled"])},text:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["You need to change backend config files so that ",n(o("property"))," is set to ",n(o("value")),", see more in ",n(o("documentation")),"."])},documentation:e=>{const{normalize:t}=e;return t(["documentation"])},text2:e=>{const{normalize:t}=e;return t(["Most configuration options will be unavailable."])}},captcha:{native:e=>{const{normalize:t}=e;return t(["Native"])},kocaptcha:e=>{const{normalize:t}=e;return t(["KoCaptcha"])}},instance:{instance:e=>{const{normalize:t}=e;return t(["Instance information"])},registrations:e=>{const{normalize:t}=e;return t(["User sign-ups"])},captcha_header:e=>{const{normalize:t}=e;return t(["CAPTCHA"])},kocaptcha:e=>{const{normalize:t}=e;return t(["KoCaptcha settings"])},access:e=>{const{normalize:t}=e;return t(["Instance access"])},restrict:{header:e=>{const{normalize:t}=e;return t(["Restrict access for anonymous visitors"])},description:e=>{const{normalize:t}=e;return t(["Detailed setting for allowing/disallowing access to certain aspects of API. By default (indeterminate state) it will disallow if instance is not public, ticked checkbox means disallow access even if instance is public, unticked means allow access even if instance is private. Please note that unexpected behavior might happen if some settings are set, i.e. if profile access is disabled posts will show without profile information."])},timelines:e=>{const{normalize:t}=e;return t(["Timelines access"])},profiles:e=>{const{normalize:t}=e;return t(["User profiles access"])},activities:e=>{const{normalize:t}=e;return t(["Statues/activities access"])}}},limits:{arbitrary_limits:e=>{const{normalize:t}=e;return t(["Arbitrary limits"])},posts:e=>{const{normalize:t}=e;return t(["Post limits"])},uploads:e=>{const{normalize:t}=e;return t(["Attachments limits"])},users:e=>{const{normalize:t}=e;return t(["User profile limits"])},profile_fields:e=>{const{normalize:t}=e;return t(["Profile fields limits"])},user_uploads:e=>{const{normalize:t}=e;return t(["Profile media limits"])}},frontend:{repository:e=>{const{normalize:t}=e;return t(["Repository link"])},versions:e=>{const{normalize:t}=e;return t(["Available versions"])},build_url:e=>{const{normalize:t}=e;return t(["Build URL"])},reinstall:e=>{const{normalize:t}=e;return t(["Reinstall"])},is_default:e=>{const{normalize:t}=e;return t(["(Default)"])},is_default_custom:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(Default, version: ",n(o("version")),")"])},install:e=>{const{normalize:t}=e;return t(["Install"])},install_version:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Install version ",n(o("version"))])},more_install_options:e=>{const{normalize:t}=e;return t(["More install options"])},more_default_options:e=>{const{normalize:t}=e;return t(["More default setting options"])},set_default:e=>{const{normalize:t}=e;return t(["Set default"])},set_default_version:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Set version ",n(o("version"))," as default"])},wip_notice:e=>{const{normalize:t}=e;return t(["Please note that this section is a WIP and lacks certain features as backend implementation of front-end management is incomplete."])},default_frontend:e=>{const{normalize:t}=e;return t(["Default front-end"])},default_frontend_tip:e=>{const{normalize:t}=e;return t(["Default front-end will be shown to all users. Currently there's no way to for a user to select personal front-end. If you switch away from PleromaFE you'll most likely have to use old and buggy AdminFE to do instance configuration until we replace it."])},default_frontend_tip2:e=>{const{normalize:t}=e;return t(["WIP: Since Pleroma backend doesn't properly list all installed frontends you'll have to enter name and reference manually. List below provides shortcuts to fill the values."])},available_frontends:e=>{const{normalize:t}=e;return t(["Available for install"])}},temp_overrides:{":pleroma":{":instance":{":public":{label:e=>{const{normalize:t}=e;return t(["Instance is public"])},description:e=>{const{normalize:t}=e;return t(["Disabling this will make all API accessible only for logged-in users, this will make Public and Federated timelines inaccessible to anonymous visitors."])}},":limit_to_local_content":{label:e=>{const{normalize:t}=e;return t(["Limit search to local content"])},description:e=>{const{normalize:t}=e;return t(["Disables global network search for unauthenticated (default), all users or none"])}},":description_limit":{label:e=>{const{normalize:t}=e;return t(["Limit"])},description:e=>{const{normalize:t}=e;return t(["Character limit for attachment descriptions"])}},":background_image":{label:e=>{const{normalize:t}=e;return t(["Background image"])},description:e=>{const{normalize:t}=e;return t(["Background image (primarily used by PleromaFE)"])}}}}}},time:{unit:{days:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," day"]),t([n(o(0))," days"])])},days_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"d"])},hours:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," hour"]),t([n(o(0))," hours"])])},hours_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"h"])},minutes:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," minute"]),t([n(o(0))," minutes"])])},minutes_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"min"])},months:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," month"]),t([n(o(0))," months"])])},months_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"mo"])},seconds:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," second"]),t([n(o(0))," seconds"])])},seconds_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"s"])},weeks:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," week"]),t([n(o(0))," weeks"])])},weeks_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"w"])},years:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," year"]),t([n(o(0))," years"])])},years_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"y"])}},in_future:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["in ",n(o(0))])},in_past:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0))," ago"])},now:e=>{const{normalize:t}=e;return t(["just now"])},now_short:e=>{const{normalize:t}=e;return t(["now"])}},timeline:{collapse:e=>{const{normalize:t}=e;return t(["Collapse"])},conversation:e=>{const{normalize:t}=e;return t(["Conversation"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error fetching timeline: ",n(o(0))])},load_older:e=>{const{normalize:t}=e;return t(["Load older statuses"])},no_retweet_hint:e=>{const{normalize:t}=e;return t(["Post is marked as followers-only or direct and cannot be repeated"])},repeated:e=>{const{normalize:t}=e;return t(["repeated"])},show_new:e=>{const{normalize:t}=e;return t(["Show new"])},reload:e=>{const{normalize:t}=e;return t(["Reload"])},up_to_date:e=>{const{normalize:t}=e;return t(["Up-to-date"])},no_more_statuses:e=>{const{normalize:t}=e;return t(["No more statuses"])},no_statuses:e=>{const{normalize:t}=e;return t(["No statuses"])},socket_reconnected:e=>{const{normalize:t}=e;return t(["Realtime connection established"])},socket_broke:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Realtime connection lost: CloseEvent code ",n(o(0))])},quick_view_settings:e=>{const{normalize:t}=e;return t(["Quick view settings"])},quick_filter_settings:e=>{const{normalize:t}=e;return t(["Quick filter settings"])}},status:{favorites:e=>{const{normalize:t}=e;return t(["Favorites"])},repeats:e=>{const{normalize:t}=e;return t(["Repeats"])},repeat_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to repeat this status?"])},repeat_confirm_title:e=>{const{normalize:t}=e;return t(["Repeat confirmation"])},repeat_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Repeat"])},repeat_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not repeat"])},delete:e=>{const{normalize:t}=e;return t(["Delete status"])},delete_error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error deleting status: ",n(o(0))])},edit:e=>{const{normalize:t}=e;return t(["Edit status"])},edited_at:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(last edited ",n(o("time")),")"])},pin:e=>{const{normalize:t}=e;return t(["Pin on profile"])},unpin:e=>{const{normalize:t}=e;return t(["Unpin from profile"])},pinned:e=>{const{normalize:t}=e;return t(["Pinned"])},bookmark:e=>{const{normalize:t}=e;return t(["Bookmark"])},unbookmark:e=>{const{normalize:t}=e;return t(["Unbookmark"])},delete_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to delete this status?"])},delete_confirm_title:e=>{const{normalize:t}=e;return t(["Delete confirmation"])},delete_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Delete"])},delete_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Keep"])},reply_to:e=>{const{normalize:t}=e;return t(["Reply to"])},mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},replies_list:e=>{const{normalize:t}=e;return t(["Replies:"])},replies_list_with_others:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Replies (+",n(o("numReplies"))," other):"]),t(["Replies (+",n(o("numReplies"))," others):"])])},mute_conversation:e=>{const{normalize:t}=e;return t(["Mute conversation"])},unmute_conversation:e=>{const{normalize:t}=e;return t(["Unmute conversation"])},status_unavailable:e=>{const{normalize:t}=e;return t(["Status unavailable"])},copy_link:e=>{const{normalize:t}=e;return t(["Copy link to status"])},external_source:e=>{const{normalize:t}=e;return t(["External source"])},thread_muted:e=>{const{normalize:t}=e;return t(["Thread muted"])},thread_muted_and_words:e=>{const{normalize:t}=e;return t([", has words:"])},show_full_subject:e=>{const{normalize:t}=e;return t(["Show full subject"])},hide_full_subject:e=>{const{normalize:t}=e;return t(["Hide full subject"])},show_content:e=>{const{normalize:t}=e;return t(["Show content"])},hide_content:e=>{const{normalize:t}=e;return t(["Hide content"])},status_deleted:e=>{const{normalize:t}=e;return t(["This post was deleted"])},nsfw:e=>{const{normalize:t}=e;return t(["NSFW"])},expand:e=>{const{normalize:t}=e;return t(["Expand"])},you:e=>{const{normalize:t}=e;return t(["(You)"])},plus_more:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["+",n(o("number"))," more"])},many_attachments:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Post has ",n(o("number"))," attachment(s)"])},collapse_attachments:e=>{const{normalize:t}=e;return t(["Collapse attachments"])},show_all_attachments:e=>{const{normalize:t}=e;return t(["Show all attachments"])},show_attachment_in_modal:e=>{const{normalize:t}=e;return t(["Show in media modal"])},show_attachment_description:e=>{const{normalize:t}=e;return t(["Preview description (open attachment for full description)"])},hide_attachment:e=>{const{normalize:t}=e;return t(["Hide attachment"])},remove_attachment:e=>{const{normalize:t}=e;return t(["Remove attachment"])},attachment_stop_flash:e=>{const{normalize:t}=e;return t(["Stop Flash player"])},move_up:e=>{const{normalize:t}=e;return t(["Shift attachment left"])},move_down:e=>{const{normalize:t}=e;return t(["Shift attachment right"])},open_gallery:e=>{const{normalize:t}=e;return t(["Open gallery"])},thread_hide:e=>{const{normalize:t}=e;return t(["Hide this thread"])},thread_show:e=>{const{normalize:t}=e;return t(["Show this thread"])},thread_show_full:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Show everything under this thread (",n(o("numStatus"))," status in total, max depth ",n(o("depth")),")"]),t(["Show everything under this thread (",n(o("numStatus"))," statuses in total, max depth ",n(o("depth")),")"])])},thread_show_full_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},thread_follow:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["See the remaining part of this thread (",n(o("numStatus"))," status in total)"]),t(["See the remaining part of this thread (",n(o("numStatus"))," statuses in total)"])])},thread_follow_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},ancestor_follow:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["See ",n(o("numReplies"))," other reply under this status"]),t(["See ",n(o("numReplies"))," other replies under this status"])])},ancestor_follow_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},show_all_conversation_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},show_all_conversation:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Show full conversation (",n(o("numStatus"))," other status)"]),t(["Show full conversation (",n(o("numStatus"))," other statuses)"])])},show_only_conversation_under_this:e=>{const{normalize:t}=e;return t(["Only show replies to this status"])},status_history:e=>{const{normalize:t}=e;return t(["Status history"])},reaction_count_label:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("num"))," person reacted"]),t([n(o("num"))," people reacted"])])},hide_quote:e=>{const{normalize:t}=e;return t(["Hide the quoted status"])},display_quote:e=>{const{normalize:t}=e;return t(["Display the quoted status"])},invisible_quote:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Quoted status unavailable: ",n(o("link"))])}},user_card:{approve:e=>{const{normalize:t}=e;return t(["Approve"])},approve_confirm_title:e=>{const{normalize:t}=e;return t(["Approve confirmation"])},approve_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Approve"])},approve_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not approve"])},approve_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you want to approve ",n(o("user")),"'s follow request?"])},block:e=>{const{normalize:t}=e;return t(["Block"])},blocked:e=>{const{normalize:t}=e;return t(["Blocked!"])},block_confirm_title:e=>{const{normalize:t}=e;return t(["Block confirmation"])},block_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to block ",n(o("user")),"?"])},block_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Block"])},block_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not block"])},deactivated:e=>{const{normalize:t}=e;return t(["Deactivated"])},deny:e=>{const{normalize:t}=e;return t(["Deny"])},deny_confirm_title:e=>{const{normalize:t}=e;return t(["Deny confirmation"])},deny_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Deny"])},deny_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not deny"])},deny_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you want to deny ",n(o("user")),"'s follow request?"])},edit_profile:e=>{const{normalize:t}=e;return t(["Edit profile"])},favorites:e=>{const{normalize:t}=e;return t(["Favorites"])},follow:e=>{const{normalize:t}=e;return t(["Follow"])},follow_cancel:e=>{const{normalize:t}=e;return t(["Cancel request"])},follow_sent:e=>{const{normalize:t}=e;return t(["Request sent!"])},follow_progress:e=>{const{normalize:t}=e;return t(["Requesting…"])},follow_unfollow:e=>{const{normalize:t}=e;return t(["Unfollow"])},unfollow_confirm_title:e=>{const{normalize:t}=e;return t(["Unfollow confirmation"])},unfollow_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to unfollow ",n(o("user")),"?"])},unfollow_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Unfollow"])},unfollow_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not unfollow"])},followees:e=>{const{normalize:t}=e;return t(["Following"])},followers:e=>{const{normalize:t}=e;return t(["Followers"])},following:e=>{const{normalize:t}=e;return t(["Following!"])},follows_you:e=>{const{normalize:t}=e;return t(["Follows you!"])},hidden:e=>{const{normalize:t}=e;return t(["Hidden"])},its_you:e=>{const{normalize:t}=e;return t(["It's you!"])},media:e=>{const{normalize:t}=e;return t(["Media"])},mention:e=>{const{normalize:t}=e;return t(["Mention"])},message:e=>{const{normalize:t}=e;return t(["Message"])},mute:e=>{const{normalize:t}=e;return t(["Mute"])},muted:e=>{const{normalize:t}=e;return t(["Muted"])},mute_confirm_title:e=>{const{normalize:t}=e;return t(["Mute confirmation"])},mute_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to mute ",n(o("user")),"?"])},mute_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Mute"])},mute_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not mute"])},mute_duration_prompt:e=>{const{normalize:t}=e;return t(["Mute this user for (0 for indefinite time):"])},per_day:e=>{const{normalize:t}=e;return t(["per day"])},remote_follow:e=>{const{normalize:t}=e;return t(["Remote follow"])},remove_follower:e=>{const{normalize:t}=e;return t(["Remove follower"])},remove_follower_confirm_title:e=>{const{normalize:t}=e;return t(["Remove follower confirmation"])},remove_follower_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Remove"])},remove_follower_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Keep"])},remove_follower_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to remove ",n(o("user"))," from your followers?"])},report:e=>{const{normalize:t}=e;return t(["Report"])},statuses:e=>{const{normalize:t}=e;return t(["Statuses"])},subscribe:e=>{const{normalize:t}=e;return t(["Subscribe"])},unsubscribe:e=>{const{normalize:t}=e;return t(["Unsubscribe"])},unblock:e=>{const{normalize:t}=e;return t(["Unblock"])},unblock_progress:e=>{const{normalize:t}=e;return t(["Unblocking…"])},block_progress:e=>{const{normalize:t}=e;return t(["Blocking…"])},unmute:e=>{const{normalize:t}=e;return t(["Unmute"])},unmute_progress:e=>{const{normalize:t}=e;return t(["Unmuting…"])},mute_progress:e=>{const{normalize:t}=e;return t(["Muting…"])},hide_repeats:e=>{const{normalize:t}=e;return t(["Hide repeats"])},show_repeats:e=>{const{normalize:t}=e;return t(["Show repeats"])},bot:e=>{const{normalize:t}=e;return t(["Bot"])},birthday:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Born ",n(o("birthday"))])},admin_menu:{moderation:e=>{const{normalize:t}=e;return t(["Moderation"])},grant_admin:e=>{const{normalize:t}=e;return t(["Grant Admin"])},revoke_admin:e=>{const{normalize:t}=e;return t(["Revoke Admin"])},grant_moderator:e=>{const{normalize:t}=e;return t(["Grant Moderator"])},revoke_moderator:e=>{const{normalize:t}=e;return t(["Revoke Moderator"])},activate_account:e=>{const{normalize:t}=e;return t(["Activate account"])},deactivate_account:e=>{const{normalize:t}=e;return t(["Deactivate account"])},delete_account:e=>{const{normalize:t}=e;return t(["Delete account"])},force_nsfw:e=>{const{normalize:t}=e;return t(["Mark all posts as NSFW"])},strip_media:e=>{const{normalize:t}=e;return t(["Remove media from posts"])},force_unlisted:e=>{const{normalize:t}=e;return t(["Force posts to be unlisted"])},sandbox:e=>{const{normalize:t}=e;return t(["Force posts to be followers-only"])},disable_remote_subscription:e=>{const{normalize:t}=e;return t(["Disallow following user from remote instances"])},disable_any_subscription:e=>{const{normalize:t}=e;return t(["Disallow following user at all"])},quarantine:e=>{const{normalize:t}=e;return t(["Disallow user posts from federating"])},delete_user:e=>{const{normalize:t}=e;return t(["Delete user"])},delete_user_data_and_deactivate_confirmation:e=>{const{normalize:t}=e;return t(["This will permanently delete the data from this account and deactivate it. Are you absolutely sure?"])}},highlight:{disabled:e=>{const{normalize:t}=e;return t(["No highlight"])},solid:e=>{const{normalize:t}=e;return t(["Solid bg"])},striped:e=>{const{normalize:t}=e;return t(["Striped bg"])},side:e=>{const{normalize:t}=e;return t(["Side stripe"])}},note:e=>{const{normalize:t}=e;return t(["Note"])},note_blank:e=>{const{normalize:t}=e;return t(["(None)"])},edit_note:e=>{const{normalize:t}=e;return t(["Edit note"])},edit_note_apply:e=>{const{normalize:t}=e;return t(["Apply"])},edit_note_cancel:e=>{const{normalize:t}=e;return t(["Cancel"])}},user_profile:{timeline_title:e=>{const{normalize:t}=e;return t(["User timeline"])},profile_does_not_exist:e=>{const{normalize:t}=e;return t(["Sorry, this profile does not exist."])},profile_loading_error:e=>{const{normalize:t}=e;return t(["Sorry, there was an error loading this profile."])}},user_reporting:{title:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Reporting ",n(o(0))])},add_comment_description:e=>{const{normalize:t}=e;return t(["The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:"])},additional_comments:e=>{const{normalize:t}=e;return t(["Additional comments"])},forward_description:e=>{const{normalize:t}=e;return t(["The account is from another server. Send a copy of the report there as well?"])},forward_to:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Forward to ",n(o(0))])},submit:e=>{const{normalize:t}=e;return t(["Submit"])},generic_error:e=>{const{normalize:t}=e;return t(["An error occurred while processing your request."])}},who_to_follow:{more:e=>{const{normalize:t}=e;return t(["More"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])}},tool_tip:{media_upload:e=>{const{normalize:t}=e;return t(["Upload media"])},repeat:e=>{const{normalize:t}=e;return t(["Repeat"])},reply:e=>{const{normalize:t}=e;return t(["Reply"])},favorite:e=>{const{normalize:t}=e;return t(["Favorite"])},add_reaction:e=>{const{normalize:t}=e;return t(["Add Reaction"])},user_settings:e=>{const{normalize:t}=e;return t(["User Settings"])},accept_follow_request:e=>{const{normalize:t}=e;return t(["Accept follow request"])},reject_follow_request:e=>{const{normalize:t}=e;return t(["Reject follow request"])},bookmark:e=>{const{normalize:t}=e;return t(["Bookmark"])},toggle_expand:e=>{const{normalize:t}=e;return t(["Expand or collapse notification to show post in full"])},toggle_mute:e=>{const{normalize:t}=e;return t(["Expand or collapse notification to reveal muted content"])},autocomplete_available:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("number"))," result is available. Use up and down keys to navigate through them."]),t([n(o("number"))," results are available. Use up and down keys to navigate through them."])])}},upload:{error:{base:e=>{const{normalize:t}=e;return t(["Upload failed."])},message:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Upload failed: ",n(o(0))])},file_too_big:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["File too big [",n(o("filesize")),n(o("filesizeunit"))," / ",n(o("allowedsize")),n(o("allowedsizeunit")),"]"])},default:e=>{const{normalize:t}=e;return t(["Try again later"])}},file_size_units:{B:e=>{const{normalize:t}=e;return t(["B"])},KiB:e=>{const{normalize:t}=e;return t(["KiB"])},MiB:e=>{const{normalize:t}=e;return t(["MiB"])},GiB:e=>{const{normalize:t}=e;return t(["GiB"])},TiB:e=>{const{normalize:t}=e;return t(["TiB"])}}},search:{people:e=>{const{normalize:t}=e;return t(["People"])},hashtags:e=>{const{normalize:t}=e;return t(["Hashtags"])},person_talking:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("count"))," person talking"])},people_talking:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("count"))," people talking"])},no_results:e=>{const{normalize:t}=e;return t(["No results"])},no_more_results:e=>{const{normalize:t}=e;return t(["No more results"])},load_more:e=>{const{normalize:t}=e;return t(["Load more results"])}},password_reset:{forgot_password:e=>{const{normalize:t}=e;return t(["Forgot password?"])},password_reset:e=>{const{normalize:t}=e;return t(["Password reset"])},instruction:e=>{const{normalize:t}=e;return t(["Enter your email address or username. We will send you a link to reset your password."])},placeholder:e=>{const{normalize:t}=e;return t(["Your email or username"])},check_email:e=>{const{normalize:t}=e;return t(["Check your email for a link to reset your password."])},return_home:e=>{const{normalize:t}=e;return t(["Return to the home page"])},too_many_requests:e=>{const{normalize:t}=e;return t(["You have reached the limit of attempts, try again later."])},password_reset_disabled:e=>{const{normalize:t}=e;return t(["Password reset is disabled. Please contact your instance administrator."])},password_reset_required:e=>{const{normalize:t}=e;return t(["You must reset your password to log in."])},password_reset_required_but_mailer_is_disabled:e=>{const{normalize:t}=e;return t(["You must reset your password, but password reset is disabled. Please contact your instance administrator."])}},chats:{you:e=>{const{normalize:t}=e;return t(["You:"])},message_user:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Message ",n(o("nickname"))])},delete:e=>{const{normalize:t}=e;return t(["Delete"])},chats:e=>{const{normalize:t}=e;return t(["Chats"])},new:e=>{const{normalize:t}=e;return t(["New Chat"])},empty_message_error:e=>{const{normalize:t}=e;return t(["Cannot post empty message"])},more:e=>{const{normalize:t}=e;return t(["More"])},delete_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to delete this message?"])},error_loading_chat:e=>{const{normalize:t}=e;return t(["Something went wrong when loading the chat."])},error_sending_message:e=>{const{normalize:t}=e;return t(["Something went wrong when sending the message."])},empty_chat_list_placeholder:e=>{const{normalize:t}=e;return t(["You don't have any chats yet. Start a new chat!"])}},lists:{lists:e=>{const{normalize:t}=e;return t(["Lists"])},new:e=>{const{normalize:t}=e;return t(["New List"])},title:e=>{const{normalize:t}=e;return t(["List title"])},search:e=>{const{normalize:t}=e;return t(["Search users"])},create:e=>{const{normalize:t}=e;return t(["Create"])},save:e=>{const{normalize:t}=e;return t(["Save changes"])},delete:e=>{const{normalize:t}=e;return t(["Delete list"])},following_only:e=>{const{normalize:t}=e;return t(["Limit to Following"])},manage_lists:e=>{const{normalize:t}=e;return t(["Manage lists"])},manage_members:e=>{const{normalize:t}=e;return t(["Manage list members"])},add_members:e=>{const{normalize:t}=e;return t(["Search for more users"])},remove_from_list:e=>{const{normalize:t}=e;return t(["Remove from list"])},add_to_list:e=>{const{normalize:t}=e;return t(["Add to list"])},is_in_list:e=>{const{normalize:t}=e;return t(["Already in list"])},editing_list:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Editing list ",n(o("listTitle"))])},creating_list:e=>{const{normalize:t}=e;return t(["Creating new list"])},update_title:e=>{const{normalize:t}=e;return t(["Save Title"])},really_delete:e=>{const{normalize:t}=e;return t(["Really delete list?"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error manipulating lists: ",n(o(0))])}},file_type:{audio:e=>{const{normalize:t}=e;return t(["Audio"])},video:e=>{const{normalize:t}=e;return t(["Video"])},image:e=>{const{normalize:t}=e;return t(["Image"])},file:e=>{const{normalize:t}=e;return t(["File"])}},display_date:{today:e=>{const{normalize:t}=e;return t(["Today"])}},update:{big_update_title:e=>{const{normalize:t}=e;return t(["Please bear with us"])},big_update_content:e=>{const{normalize:t}=e;return t(["We haven't had a release in a while, so things might look and feel different than what you're used to."])},update_bugs:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Please report any issues and bugs on ",n(o("pleromaGitlab")),", as we have changed a lot, and although we test thoroughly and use development versions ourselves, we may have missed some things. We welcome your feedback and suggestions on issues you might encounter, or how to improve Pleroma and Pleroma-FE."])},update_bugs_gitlab:e=>{const{normalize:t}=e;return t(["Pleroma GitLab"])},update_changelog:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["For more details on what's changed, see ",n(o("theFullChangelog")),"."])},update_changelog_here:e=>{const{normalize:t}=e;return t(["the full changelog"])},art_by:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Art by ",n(o("linkToArtist"))])}},unicode_domain_indicator:{tooltip:e=>{const{normalize:t}=e;return t(["This domain contains non-ascii characters."])}}}},1395:(e,t,n)=>{var o={"./af.json":[44919,6355],"./am.json":[53139,5119],"./ar.json":[44557,9873],"./ar_SA.json":[23450,7360],"./as.json":[44359,3377],"./ast.json":[13764,7569],"./az.json":[86459,2342],"./be.json":[50866,7304],"./bg.json":[26219,3974],"./bn.json":[69178,9064],"./br.json":[67871,6148],"./bs.json":[75340,8134],"./ca.json":[86914,4691],"./ccp.json":[73872,1162],"./ceb.json":[64478,9790],"./chr.json":[61017,6869],"./ckb.json":[56412,2656],"./cs.json":[8888,4710],"./cy.json":[25392,6272],"./da.json":[35042,1596],"./de.json":[35169,6226],"./de_CH.json":[28246,7164],"./doi.json":[59784,4209],"./dsb.json":[60634,1790],"./el.json":[98338,7879],"./en.json":[74990,5728],"./en_001.json":[62736,577],"./en_AU.json":[2597,9360],"./en_CA.json":[1516,4879],"./en_GB.json":[84830,50],"./en_IN.json":[71809,8988],"./es.json":[61148,6831],"./es_419.json":[25696,8873],"./es_MX.json":[11915,2699],"./es_US.json":[87826,3313],"./et.json":[66641,3276],"./eu.json":[6541,2992],"./fa.json":[43305,5521],"./fi.json":[40752,420],"./fil.json":[26843,1236],"./fo.json":[43032,8995],"./fr.json":[80898,2223],"./fr_CA.json":[54515,1821],"./ga.json":[66572,4571],"./gd.json":[9185,6116],"./gl.json":[23840,6126],"./gu.json":[85811,7261],"./ha.json":[91566,227],"./ha_NE.json":[3400,5304],"./he.json":[26260,5548],"./hi.json":[18136,5968],"./hi_Latn.json":[95638,3056],"./hr.json":[77435,2861],"./hsb.json":[15758,8015],"./hu.json":[2727,4902],"./hy.json":[8397,6344],"./ia.json":[49796,6936],"./id.json":[56635,9465],"./ig.json":[26406,9895],"./is.json":[51391,7300],"./it.json":[54879,8970],"./ja.json":[2971,1290],"./jv.json":[18644,2479],"./ka.json":[71255,6068],"./kab.json":[92892,9780],"./kk.json":[46419,2873],"./kl.json":[2227,2397],"./km.json":[65729,1404],"./kn.json":[65611,278],"./ko.json":[67080,2966],"./kok.json":[47209,2599],"./ku.json":[18738,2883],"./ky.json":[89690,4785],"./lb.json":[3929,4770],"./lo.json":[19778,7464],"./lt.json":[41683,7169],"./lv.json":[54873,8898],"./mai.json":[11781,1613],"./mi.json":[11569,6701],"./mk.json":[67589,9921],"./ml.json":[24415,2685],"./mn.json":[50512,4718],"./mni.json":[81597,5401],"./mr.json":[97747,1911],"./ms.json":[81588,9924],"./mt.json":[25081,9399],"./my.json":[8608,6790],"./ne.json":[8572,9377],"./nl.json":[52355,6773],"./nn.json":[52874,9414],"./no.json":[48005,9979],"./or.json":[26728,1012],"./pa.json":[15042,6946],"./pa_Arab.json":[43578,9994],"./pcm.json":[91163,5104],"./pl.json":[61335,1095],"./ps.json":[51828,678],"./pt.json":[38543,5041],"./pt_PT.json":[8063,1546],"./qu.json":[15821,8031],"./rm.json":[5014,5887],"./ro.json":[34064,9864],"./ru.json":[95222,8395],"./rw.json":[12710,346],"./sa.json":[69343,2243],"./sat.json":[51243,7855],"./sc.json":[1319,2874],"./sd.json":[67728,6826],"./si.json":[5044,4354],"./sk.json":[45626,2350],"./sl.json":[76091,1553],"./so.json":[93761,625],"./sq.json":[1230,4368],"./sr.json":[60445,3887],"./sr_Cyrl_BA.json":[38940,6060],"./sr_Latn.json":[21650,8681],"./sr_Latn_BA.json":[78328,5115],"./su.json":[54395,1959],"./sv.json":[3418,3241],"./sw.json":[11958,7585],"./sw_KE.json":[35001,3994],"./ta.json":[92930,7897],"./te.json":[8748,4786],"./tg.json":[20999,313],"./th.json":[23900,3951],"./ti.json":[368,3568],"./tk.json":[88770,1780],"./to.json":[95781,1584],"./tr.json":[92619,9978],"./tt.json":[87782,2569],"./ug.json":[19005,9757],"./uk.json":[82057,9871],"./ur.json":[13889,6797],"./uz.json":[45108,1056],"./vi.json":[97099,5224],"./wo.json":[9923,7303],"./xh.json":[29064,786],"./yo.json":[11971,8732],"./yo_BJ.json":[64533,9926],"./yue.json":[40648,1452],"./yue_Hans.json":[24800,4424],"./zh.json":[34626,457],"./zh_Hant.json":[82560,2767],"./zh_Hant_HK.json":[47677,1044],"./zu.json":[73784,9319]};function r(e){if(!n.o(o,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=o[e],r=t[0];return n.e(t[1]).then((()=>n.t(r,19)))}r.keys=()=>Object.keys(o),r.id=1395,e.exports=r},19003:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>l});var o=n(15861),r=n(93433),i=n(4942),s=n(64687),a=n.n(s);function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){(0,i.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const l=function(e){var t=d(e.emoji),n=e.store&&p(e.store);return function(o,r){var i=o[0];return":"===i&&e.emoji?t(o,r):"@"===i&&n?n(o):[]}};var d=function(e){return function(t,n){var o=t.toLowerCase().substr(1);return e.map((function(e){return c(c({},e),n(e))})).filter((function(e){return e.names.concat(e.keywords).filter((function(e){return e.toLowerCase().match(o)})).length})).map((function(e){var t=0;return t+=Math.max.apply(Math,(0,r.Z)(e.names.map((function(e){return e.toLowerCase()===o?200:0}))).concat([0])),t+=e.imageUrl?100:0,t+=Math.max.apply(Math,(0,r.Z)(e.names.map((function(e){return e.toLowerCase().startsWith(o)?10:0}))).concat([0])),t-=e.displayText.length,e.score=t,e})).sort((function(e,t){var n=e.displayText>t.displayText?.5:-.5;return t.score-e.score+n}))}},p=function(e){var t=e.dispatch,n=e.state,r=[],i="",s=null,u=null,c=function(e){return u&&u(),new Promise((function(n,o){s=setTimeout((function(){(function(e){return t("searchUsers",{query:e})})(e).then(n).catch(o)}),300),u=function(){clearTimeout(s),n([])}}))};return function(){var e=(0,o.Z)(a().mark((function e(t){var o,s;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=t.toLowerCase().substr(1),i!==o){e.next=3;break}return e.abrupt("return",r);case 3:if(r=[],i=o,o.includes("@")){e.next=8;break}return e.next=8,c(o);case 8:return s=n.users.users.filter((function(e){return e.screen_name&&e.name&&(e.screen_name.toLowerCase().startsWith(o)||e.name.toLowerCase().startsWith(o))})).slice(0,20).sort((function(e,t){var n=0,r=0;return n+=e.screen_name.toLowerCase().startsWith(o)?2:0,r+=t.screen_name.toLowerCase().startsWith(o)?2:0,n+=e.name.toLowerCase().startsWith(o)?1:0,10*((r+=t.name.toLowerCase().startsWith(o)?1:0)-n)+(e.name>t.name?1:-1)+(e.screen_name>t.screen_name?1:-1)})).map((function(e){return{user:e,displayText:e.screen_name_ui,detailText:e.name,imageUrl:e.profile_image_url_original,replacement:"@"+e.screen_name+" "}})),r=s||[],e.abrupt("return",r);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()}},92820:(e,t,n)=>{"use strict";n.d(t,{Z:()=>F});var o=n(93433),r=n(29439),i=n(44925),s=n(42348),a=n.n(s),u=n(27955),c=n.n(u),l=n(66252);function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return p(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var m=function(e){var t=/(?:<\/(\w+)>|<(\w+)\s?[\s\S]*?\/?>)/gi.exec(e);return t&&(t[1]||t[2])},h=function(e,t){var n=e.substring(1,e.length-1).replace(new RegExp("^"+m(e)),"").replace(/\/?$/,"").trim(),o=Array.from(n.matchAll(/([a-z]+[a-z0-9-]*)(?:=("[^"]+?"|'[^']+?'))?/gi)).map((function(e){var t=(0,r.Z)(e,3);return t[0],[t[1],t[2]]})).map((function(e){var t=(0,r.Z)(e,2),n=t[0],o=t[1];return o?[n,o.substring(1,o.length-1)]:[n,!0]}));return Object.fromEntries(o.filter(t||function(e){var t=(0,r.Z)(e,2),n=t[0],o=t[1],i=n.toLowerCase();return"style"!==i&&("class"!==i||"greentext"===o||"cyantext"===o)}))},f=function(e,t,n){for(var o=[],r="",i=0;i<e.length;i++){var s=e[i];if(":"===s){var a,u=e.slice(i+1),c=!1,l=d(t);try{for(l.s();!(a=l.n()).done;){var p=a.value;if(u.slice(0,p.shortcode.length+1)===p.shortcode+":"){c=p;break}}}catch(e){l.e(e)}finally{l.f()}c?(o.push(r),r="",o.push(n(c)),i+=c.shortcode.length+1):r+=s}else r+=s}return r&&o.push(r),o};function g(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return v(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var w=n(32140),b=n(21268),y=n(49963),D={class:"HashtagLink"},_=["href","innerHTML"];const k={name:"HashtagLink",props:{url:{required:!0,type:String},content:{required:!0,type:String},tag:{required:!1,type:String,default:""}},methods:{onClick:function(){var e,t,n,o=this.tag||(e=this.url,t=decodeURI(e),!!(n=/tags*\/((?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])*(?:[A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u108F\u109A-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1713\u171F-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1ABF\u1AC0\u1ACC-\u1ACE\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4C\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C36\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA805\uA807-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FF\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC45\uDC71-\uDC75\uDC82-\uDCB8\uDCC2\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD47\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDCE\uDDCF\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDEB8\uDF00-\uDF1A\uDF1D-\uDF2A\uDF40-\uDF46]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B\uDD3C\uDD3F-\uDD42\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDDF\uDDE1\uDDE3\uDDE4\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE97\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])(?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB7\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088E\u0898-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09F4-\u09F9\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71-\u0B77\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BF2\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7E\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D63\u0D66-\u0D78\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u17F0-\u17F9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ACE\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u20D0-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA827\uA82C\uA830-\uA835\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE6\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD27\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF54\uDF70-\uDF85\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC52-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAE\uDEC0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]|\uDB40[\uDD00-\uDDEF])*)$/g.exec(t))&&n[1]);if(o){var r=this.generateTagLink(o);this.$router.push(r)}else window.open(this.url,"_blank")},generateTagLink:function(e){return"/tag/".concat(e)}}},C=(0,n(83744).Z)(k,[["render",function(e,t,n,o,r,i){return(0,l.wg)(),(0,l.iD)("span",D,[(0,l._)("a",{href:e.url,class:"original",target:"_blank",onClick:t[0]||(t[0]=(0,y.iM)((function(){return e.onClick&&e.onClick.apply(e,arguments)}),["prevent"])),innerHTML:e.content},null,8,_)])}]]);var S=["index"],j=["blockquote","br","hr","ul","ol","li","p","table","tbody","td","th","thead","tr","h1","h2","h3","h4","h5"];const F={name:"RichContent",components:{MentionsLine:b.Z,HashtagLink:C},props:{html:{required:!0,type:String},attentions:{required:!1,default:function(){return[]}},emoji:{required:!0,type:Array},handleLinks:{required:!1,type:Boolean,default:!1},greentext:{required:!1,type:Boolean,default:!1}},render:function(){var e=this,t=O(this.html,this.greentext).newHtml,n=null,s="",a=[],u=[],d=[],p=[],g=0,v=0,y=!1,D=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=new Set(["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),n=[],o=[["",n]],r="",i=null,s=function(){return o[o.length-1][1]},a=function(){""!==r&&(s().push(r),r="")},u=function(e){s().push([e])},l=function(e){var t=s(),n=[c()(e),[]];o.push(n),t.push(n)},d=function(e){var t=o[o.length-1];m(o[o.length-1][0])===m(e)?(t.push(e),o.pop()):s().push(e)},p=0;p<e.length;p++){var h=e[p];if("<"===h&&null===i)a(),i=h;else if(">"!==h&&null!==i)i+=h;else if(">"===h&&null!==i){var f=i+=h;i=null;var g=m(f);"/"===f[1]?d(f):t.has(g)||"/"===f[f.length-2]?u(f):l(f)}else r+=h}return i&&(r+=i),a(),n}(t).map((function t(o,i,a,c){if("string"==typeof o){var p=""===o.trim();return o.includes("\n")&&(n=null),p?(s=o,i!==a.length-1&&null!==n?o.trim():o):(n=null,o.includes(":")&&(o=["",f(o,e.emoji,(function(e){var t=e.shortcode,n=e.url;return(0,l.Wm)(w.Z,{class:"emoji img",src:n,title:":".concat(t,":"),alt:":".concat(t,":")},null)}))]),o)}if(Array.isArray(o)){var v=o,y=(0,r.Z)(v,3),D=y[0],_=y[1],k=y[2],C=m(D);"script"===C.toLowerCase()&&(C="js-exploit"),"style"===C.toLowerCase()&&(C="css-exploit");var S=h(D,(function(){return!0})),F=h(D),O=null===n||_&&"string"==typeof _[0]&&_[0].match(/^\s/)?"":s;if(j.includes(C))n=null;else{if("img"===C)return["",[O,(E=D,(0,l.Wm)(w.Z,(0,l.dG)(h(E),{class:"img"}),null))],""];if("a"===C&&e.handleLinks){if(S.class&&S.class.includes("mention"))return function(t,o){var r=A(t,o,g++);return r.notifying=e.attentions.some((function(e){return e.statusnet_profile_url===r.url})),u.push(r),null===n&&(n=[]),n.push(r),n.length>b.d&&d.push(r),1===n.length?(0,l.Wm)(b.Z,{mentions:n},null):""}(F,_);n=null}else if("span"===C&&e.handleLinks&&S.class&&S.class.includes("h-card"))return["",_.map(t),""]}return void 0!==_?["",[O,[D,_.map(t),k]],""]:["",[O,o],""]}var E})),_=(0,o.Z)(D).reverse().map((function t(n,s,u,d){var f;if("string"==typeof n)return""===n.trim()?n:(y||(y=!0),c()(n));if(Array.isArray(n)){var g=(0,r.Z)(n,2),w=g[0],b=g[1],D=""===w?"":m(w);switch(D){case"a":if(!e.handleLinks)break;var _=h(w,(function(){return!0})),k=h(w,(function(){return!0}));if(_.class&&_.class.includes("hashtag")||"tag"===_.rel)return function(e,t,n){var o=A(e,t,v++),r=(o.index,(0,i.Z)(o,S));p.push(r),n||a.push(r);var s=r.url,u=r.tag,c=r.content;return(0,l.Wm)(C,{url:s,tag:u,content:c},null)}(k,b,y);k.target="_blank";var j=(0,o.Z)(b).reverse().map(t).reverse();return(0,l.Wm)("a",k,[j]);case"":return(0,o.Z)(b).reverse().map(t).reverse()}if(void 0!==b){var F=Array.isArray(b)?(0,o.Z)(b).reverse().map(t).reverse():b;return(0,l.Wm)(D,h(w),"function"==typeof(f=F)||"[object Object]"===Object.prototype.toString.call(f)&&!(0,l.lA)(f)?F:{default:function(){return[F]}})}return(0,l.Wm)(D,null,null)}return n})).reverse(),k=(0,l.Wm)("span",{class:"RichContent"},[_]),F={lastTags:a,writtenMentions:u,writtenTags:p,invisibleMentions:d};return this.$emit("parseReady",F),k}};var A=function(e,t,n){var o=t.map((function e(t){return"string"==typeof t?t:t[1].map(e).join("")})).join("");return{index:n,url:e.href,tag:e["data-tag"],content:a()(t).join(""),textContent:o}},O=function(e,t){var n=new Set(["p","div"]),r=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=new Set(["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),r=new Set(["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"]),i=new Set(["br"]),s=new Set([].concat((0,o.Z)(r.values()),(0,o.Z)(i.values()))),a=new Set(s),u=g(n);try{for(u.s();!(e=u.n()).done;){var c=e.value;a.delete(c)}}catch(e){u.e(e)}finally{u.f()}for(var l=new Set([].concat((0,o.Z)(a.values()),(0,o.Z)(n.values()))),d=[],p=[],h="",f=null,v=function(){h.trim().length>0?d.push({level:[].concat(p),text:h}):d.push(h),h=""},w=function(e){v(),d.push(e)},b=function(e){v(),d.push(e),p.unshift(m(e))},y=function(e){p[0]===m(e)?(v(),d.push(e),p.shift()):h+=e},D=0;D<t.length;D++){var _=t[D];if("<"===_&&null===f)f=_;else if(">"!==_&&null!==f)f+=_;else if(">"===_&&null!==f){var k=f+=_;f=null;var C=m(k);l.has(C)?i.has(C)?w(k):a.has(C)?"/"===k[1]?y(k):"/"===k[k.length-2]?w(k):b(k):h+=k:h+=k}else"\n"===_?w(_):h+=_}return f&&(h+=f),v(),d}(e);return{newHtml:r.reverse().map((function(e,o,r){if(!e.text)return e;var i=e.text;if(t&&e.level.every((function(e){return n.has(e)}))&&(i.includes("&gt;")||i.includes("&lt;"))){var s=i.replace(/<[^>]+?>/gi,"").replace(/@\w+/gi,"").trim();if(s.startsWith("&gt;"))return"<span class='greentext'>".concat(i,"</span>");if(s.startsWith("&lt;"))return"<span class='cyantext'>".concat(i,"</span>")}return i})).reverse().join("")}}},79354:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=n(57810),i=function(e){return e.findIndex((function(e){return e.props}))};const s={name:"TabSwitcher",props:{renderOnlyFocused:{required:!1,type:Boolean,default:!1},onSwitch:{required:!1,type:Function,default:void 0},activeTab:{required:!1,type:String,default:void 0},scrollableTabs:{required:!1,type:Boolean,default:!1},sideTabBar:{required:!1,type:Boolean,default:!1},bodyScrollLock:{required:!1,type:Boolean,default:!1}},data:function(){return{active:i(this.slots())}},computed:{activeIndex:function(){var e=this;return this.activeTab?this.slots().findIndex((function(t){return t&&t.props&&e.activeTab===t.props.key})):this.active},isActive:function(){var e=this;return function(t){return e.$slots.default().findIndex((function(e){return e.props&&e.props["data-tab-name"]===t}))===e.activeIndex}}},beforeUpdate:function(){this.slots()[this.active].props||(this.active=i(this.slots()))},methods:{clickTab:function(e){var t=this;return function(n){n.preventDefault(),t.setTab(e)}},slots:function(){return this.$slots.default()[0].type===o.HY?this.$slots.default()[0].children:this.$slots.default()},setTab:function(e){"function"==typeof this.onSwitch&&this.onSwitch.call(null,this.slots()[e].key),this.active=e,this.scrollableTabs&&(this.$refs.contents.scrollTop=0)}},render:function(){var e=this,t=this.slots().map((function(t,n){var i=t.props;if(i){var s=["tab","button-default"],a=["tab-wrapper"];return e.activeIndex===n&&(s.push("active"),a.push("active")),i.image?(0,o.Wm)("div",{class:a.join(" ")},[(0,o.Wm)("button",{disabled:i.disabled,onClick:e.clickTab(n),class:s.join(" "),type:"button",role:"tab"},[(0,o.Wm)("img",{src:i.image,title:i["image-tooltip"]},null),i.label?"":i.label])]):(0,o.Wm)("div",{class:a.join(" ")},[(0,o.Wm)("button",{disabled:i.disabled,onClick:e.clickTab(n),class:s.join(" "),type:"button",role:"tab"},[i.icon?(0,o.Wm)(r.GN,{class:"tab-icon",size:"2x","fixed-width":!0,icon:i.icon},null):"",(0,o.Wm)("span",{class:"text"},[i.label])])])}})),n=this.slots().map((function(t,n){var r=t.props;if(r){var i=e.activeIndex===n,s=[i?"active":"hidden"];r.fullHeight&&s.push("full-height");var a=!e.renderOnlyFocused||i?t:"";return(0,o.Wm)("div",{class:s},[e.sideTabBar?(0,o.Wm)("h1",{class:"mobile-label"},[r.label]):"",a])}}));return(0,o.Wm)("div",{class:"tab-switcher "+(this.sideTabBar?"side-tabs":"top-tabs")},[(0,o.Wm)("div",{class:"tabs",role:"tablist"},[t]),(0,o.wy)((0,o.Wm)("div",{ref:"contents",role:"tabpanel",class:"contents"+(this.scrollableTabs?" scrollable-tabs":"")},[n]),[[(0,o.Q2)("body-scroll-lock"),this.bodyScrollLock]])])}}},98027:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(4942),r=n(66252),i=n(41609),s=n.n(i),a=n(13562),u=n(57810),c=n(9382),l=n(84131);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}c.vI.add(l.IJ7);const m=function(e){var t=e.fetch,n=e.select,i=e.unmounted,c=e.childPropName,l=void 0===c?"entries":c,d=e.additionalPropNames,m=void 0===d?[]:d;return function(e){return{props:Object.keys((0,a.g)(e)).filter((function(e){return e!==l})).concat(m),data:function(){return{loading:!1,bottomedOut:!1,error:!1,entries:[]}},created:function(){window.addEventListener("scroll",this.scrollLoad),0===this.entries.length&&this.fetchEntries()},unmounted:function(){window.removeEventListener("scroll",this.scrollLoad),i&&i(this.$props,this.$store)},methods:{updateEntries:function(){this.entries=n(this.$props,this.$store)||[]},fetchEntries:function(){var e=this;this.loading||(this.loading=!0,this.error=!1,t(this.$props,this.$store).then((function(t){e.loading=!1,e.bottomedOut=s()(t)})).catch((function(){e.loading=!1,e.error=!0})).finally((function(){e.updateEntries()})))},scrollLoad:function(e){var t=document.body.getBoundingClientRect(),n=Math.max(t.height,-t.y);!1===this.loading&&!1===this.bottomedOut&&this.$el.offsetHeight>0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchEntries()}},render:function(){var t,n=p(p({},this.$props),{},(0,o.Z)({},l,this.entries)),i=this.$slots;return(0,r.Wm)("div",{class:"with-load-more"},[(0,r.Wm)(e,n,(t=i,"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!(0,r.lA)(t)?i:{default:function(){return[i]}})),(0,r.Wm)("div",{class:"with-load-more-footer"},[this.error&&(0,r.Wm)("button",{onClick:this.fetchEntries,class:"button-unstyled -link -fullwidth alert error"},[this.$t("general.generic_error")]),!this.error&&this.loading&&(0,r.Wm)(u.GN,{spin:!0,icon:"circle-notch"},null),!this.error&&!this.loading&&!this.bottomedOut&&(0,r.Wm)("a",{onClick:this.fetchEntries,role:"button",tabindex:"0"},[this.$t("general.more")])])])}}}}},8312:e=>{var t={ja:"ja_pedantic"};e.exports={languages:["ar","ca","cs","de","eo","en","es","et","eu","fi","fr","ga","he","hu","it","ja","ja_easy","ko","nan-TW","nb","nl","oc","pl","pt","ro","ru","sk","te","uk","zh","zh_Hant"],langCodeToJsonName:function(e){return t[e]||e},langCodeToCldrName:function(e){return e},ensureFinalFallback:function(e){var t=Array.isArray(e)?e:[e];return t.includes("en")?t:t.concat(["en"])}}},72617:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o=n(84506),r=n(15861),i=n(18446),s=n.n(i),a=n(64687),u=n.n(a),c=n(8312);function l(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p,m=function(e){return n(27650)("./".concat((0,c.langCodeToJsonName)(e),".json"))};const h={languages:c.languages,default:{en:n(88797).default},setLanguage:(p=(0,r.Z)(u().mark((function e(t,n){var r,i,a,d,p,h,f,g;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((r=(Array.isArray(n)?n:[n]).filter((function(e){return e}))).includes("en")||r.push("en"),i=(0,o.Z)(r),a=i[0],d=i.slice(1),a!==t.locale||!s()(d,t.fallbackLocale)){e.next=5;break}return e.abrupt("return");case 5:p=l(r),e.prev=6,p.s();case 8:if((h=p.n()).done){e.next=17;break}if(u=f=h.value,!c.languages.includes(u)){e.next=15;break}return e.next=13,m(f);case 13:g=e.sent,t.setLocaleMessage(f,g.default);case 15:e.next=8;break;case 17:e.next=22;break;case 19:e.prev=19,e.t0=e.catch(6),p.e(e.t0);case 22:return e.prev=22,p.f(),e.finish(22);case 25:t.fallbackLocale=d,t.locale=a;case 27:case"end":return e.stop()}var u}),e,null,[[6,19,22,25]])}))),function(e,t){return p.apply(this,arguments)})}},2514:(e,t,n)=>{"use strict";var o=n(15861),r=n(64687),i=n.n(r),s=n(989),a=(n(67810),n(73152));try{new EventTarget}catch(e){window.EventTarget=a.Z}const u={state:{settingsModalState:"hidden",settingsModalLoadedUser:!1,settingsModalLoadedAdmin:!1,settingsModalTargetTab:null,settingsModalMode:"user",settings:{currentSaveStateNotice:null,noticeClearTimeout:null,notificationPermission:null},browserSupport:{cssFilter:window.CSS&&window.CSS.supports&&(window.CSS.supports("filter","drop-shadow(0 0)")||window.CSS.supports("-webkit-filter","drop-shadow(0 0)"))},layoutType:"normal",globalNotices:[],layoutHeight:0,lastTimeline:null},mutations:{settingsSaved:function(e,t){var n=t.success,o=t.error;n?(e.noticeClearTimeout&&clearTimeout(e.noticeClearTimeout),e.settings.currentSaveStateNotice={error:!1,data:n},e.settings.noticeClearTimeout=setTimeout((function(){return delete e.settings.currentSaveStateNotice}),2e3)):e.settings.currentSaveStateNotice={error:!0,errorData:o}},setNotificationPermission:function(e,t){e.notificationPermission=t},setLayoutType:function(e,t){e.layoutType=t},closeSettingsModal:function(e){e.settingsModalState="hidden"},togglePeekSettingsModal:function(e){switch(e.settingsModalState){case"minimized":return void(e.settingsModalState="visible");case"visible":return void(e.settingsModalState="minimized");default:throw new Error("Illegal minimization state of settings modal")}},openSettingsModal:function(e,t){e.settingsModalMode=t,e.settingsModalState="visible","user"===t?e.settingsModalLoadedUser||(e.settingsModalLoadedUser=!0):"admin"===t&&(e.settingsModalLoadedAdmin||(e.settingsModalLoadedAdmin=!0))},setSettingsModalTargetTab:function(e,t){e.settingsModalTargetTab=t},pushGlobalNotice:function(e,t){e.globalNotices.push(t)},removeGlobalNotice:function(e,t){e.globalNotices=e.globalNotices.filter((function(e){return e!==t}))},setLayoutHeight:function(e,t){e.layoutHeight=t},setLayoutWidth:function(e,t){e.layoutWidth=t},setLastTimeline:function(e,t){e.lastTimeline=t}},actions:{setPageTitle:function(e){var t=e.rootState,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";document.title="".concat(n," ").concat(t.instance.name)},settingsSaved:function(e,t){var n=e.commit;e.dispatch,n("settingsSaved",{success:t.success,error:t.error})},setNotificationPermission:function(e,t){(0,e.commit)("setNotificationPermission",t)},closeSettingsModal:function(e){(0,e.commit)("closeSettingsModal")},openSettingsModal:function(e){var t=e.commit,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user";t("openSettingsModal",n)},togglePeekSettingsModal:function(e){(0,e.commit)("togglePeekSettingsModal")},clearSettingsModalTargetTab:function(e){(0,e.commit)("setSettingsModalTargetTab",null)},openSettingsModalTab:function(e,t){var n=e.commit;n("setSettingsModalTargetTab",t),n("openSettingsModal","user")},pushGlobalNotice:function(e,t){var n=e.commit,o=e.dispatch,r=e.state,i=t.messageKey,s=t.messageArgs,a=void 0===s?{}:s,u=t.level,c=void 0===u?"error":u,l=t.timeout,d=void 0===l?0:l;n("pushGlobalNotice",{messageKey:i,messageArgs:a,level:c});var p=r.globalNotices[r.globalNotices.length-1];return d&&setTimeout((function(){return o("removeGlobalNotice",p)}),d),p},removeGlobalNotice:function(e,t){(0,e.commit)("removeGlobalNotice",t)},setLayoutHeight:function(e,t){(0,e.commit)("setLayoutHeight",t)},setLayoutWidth:function(e,t){var n=e.commit,o=e.state,r=e.rootGetters,i=e.rootState,s=t;void 0!==t?n("setLayoutWidth",t):s=o.layoutWidth;var a=s<=800?"mobile":"normal";"none"!==r.mergedConfig.thirdColumnMode&&i.users.currentUser?n("setLayoutType",s>=1300?"wide":a):n("setLayoutType",a)},setLastTimeline:function(e,t){(0,e.commit)("setLastTimeline",t)}}};var c=n(29439),l=n(93433),d=n(4942),p=n(77394),m=n(40454),h=n(77776),f=n(85565),g=n(8312);function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var b=["smileys-and-emotion","people-and-body","animals-and-nature","food-and-drink","travel-and-places","activities","objects","symbols","flags"],y=function(){for(var e=127462,t="A".codePointAt(0),n=new Array(26),o=e;o<=127487;++o){var r=String.fromCodePoint(t+o-e);n[o-e]={replacement:String.fromCodePoint(o),imageUrl:!1,displayText:"regional_indicator_"+r,displayTextI18n:{key:"emoji.regional_indicator",args:{letter:r}}}}return n}(),D=function(e){return n(1395)("./".concat((0,g.langCodeToCldrName)(e),".json")).then((function(e){return e.default}))},_=function(e,t){var n=Object.keys(t);return w(w({},e),{},{annotations:n.reduce((function(n,o){return n[o]=t[o][e.replacement],n}),{})})};const k={state:{name:"Pleroma FE",registrationOpen:!0,server:"http://localhost:4040/",textlimit:5e3,themeData:void 0,vapidPublicKey:void 0,alwaysShowSubjectInput:!0,defaultAvatar:"/images/avi.png",defaultBanner:"/images/banner.png",background:"/static/aurora_borealis.jpg",collapseMessageWithSubject:!1,greentext:!1,useAtIcon:!1,mentionLinkDisplay:"short",mentionLinkShowTooltip:!0,mentionLinkShowAvatar:!1,mentionLinkFadeDomain:!0,mentionLinkShowYous:!1,mentionLinkBoldenYou:!0,hideFilteredStatuses:!1,hideMutedPosts:!1,hideMutedThreads:!0,hideWordFilteredPosts:!1,hidePostStats:!1,hideBotIndication:!1,hideSitename:!1,hideUserStats:!1,muteBotStatuses:!1,modalOnRepeat:!1,modalOnUnfollow:!1,modalOnBlock:!0,modalOnMute:!1,modalOnDelete:!0,modalOnLogout:!0,modalOnApproveFollow:!1,modalOnDenyFollow:!1,modalOnRemoveUserFromFollowers:!1,loginMethod:"password",logo:"/static/logo.svg",logoMargin:".2em",logoMask:!0,logoLeft:!1,disableUpdateNotification:!1,minimalScopesMode:!1,nsfwCensorImage:void 0,postContentType:"text/plain",redirectRootLogin:"/main/friends",redirectRootNoLogin:"/main/all",scopeCopy:!0,showFeaturesPanel:!0,showInstanceSpecificPanel:!1,sidebarRight:!1,subjectLineBehavior:"email",theme:"pleroma-dark",virtualScrolling:!0,sensitiveByDefault:!1,conversationDisplay:"linear",conversationTreeAdvanced:!1,conversationOtherRepliesButton:"below",conversationTreeFadeAncestors:!1,maxDepthInThread:6,autocompleteSelect:!1,customEmoji:[],customEmojiFetched:!1,emoji:{},emojiFetched:!1,unicodeEmojiAnnotations:{},pleromaBackend:!0,postFormats:[],restrictedNicknames:[],safeDM:!0,knownDomains:[],birthdayRequired:!1,birthdayMinAge:0,shoutAvailable:!1,pleromaChatMessagesAvailable:!1,pleromaCustomEmojiReactionsAvailable:!1,gopherAvailable:!1,mediaProxyAvailable:!1,suggestionsEnabled:!1,suggestionsWeb:"",quotingAvailable:!1,instanceSpecificPanelContent:"",tos:"",backendVersion:"",frontendVersion:"",pollsAvailable:!1,pollLimits:{max_options:4,max_option_chars:255,min_expiration:60,max_expiration:86400}},mutations:{setInstanceOption:function(e,t){var n=t.name,o=t.value;void 0!==o&&(e[n]=o)},setKnownDomains:function(e,t){e.knownDomains=t},setUnicodeEmojiAnnotations:function(e,t){var n=t.lang,o=t.annotations;e.unicodeEmojiAnnotations[n]=o}},getters:{instanceDefaultConfig:function(e){return f.Oi.map((function(t){return[t,e[t]]})).reduce((function(e,t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];return w(w({},e),{},(0,d.Z)({},o,r))}),{})},groupedCustomEmojis:function(e){return e.customEmoji.reduce((function(e,t){return function(e){var t=e.tags.filter((function(e){return e.startsWith("pack:")})).map((function(e){var t=e.slice(5);return{id:"custom-".concat(t),text:t}}));return t.length?t:[{id:"unpacked"}]}(t).forEach((function(n){var o=n.id,r=n.text;e[o]||(e[o]={id:o,text:r,image:t.imageUrl,emojis:[]}),e[o].emojis.push(t)})),e}),{})},standardEmojiList:function(e){return b.map((function(t){return(e.emoji[t]||[]).map((function(t){return _(t,e.unicodeEmojiAnnotations)}))})).reduce((function(e,t){return e.concat(t)}),[])},standardEmojiGroupList:function(e){return b.map((function(t){return{id:t,emojis:(e.emoji[t]||[]).map((function(t){return _(t,e.unicodeEmojiAnnotations)}))}}))},instanceDomain:function(e){return new URL(e.server).hostname},remoteInteractionLink:function(e){var t=(e.server.endsWith("/")?e.server.slice(0,-1):e.server)+"/main/ostatus";return function(e){var n=e.statusId,o=e.nickname;return n?"".concat(t,"?status_id=").concat(n):"".concat(t,"?nickname=").concat(o)}}},actions:{setInstanceOption:function(e,t){var n=e.commit,o=e.dispatch,r=t.name,i=t.value;switch(n("setInstanceOption",{name:r,value:i}),r){case"name":o("setPageTitle");break;case"shoutAvailable":i&&o("initializeSocket");break;case"theme":o("setTheme",i)}},getStaticEmoji:function(e){return(0,o.Z)(i().mark((function t(){var o,r,s;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.commit,t.prev=1,t.next=4,n.e(3687).then(n.t.bind(n,13315,19));case 4:r=t.sent.default,s=Object.keys(r).reduce((function(e,t){return e[t]=r[t].map((function(e){return{displayText:e.slug,imageUrl:!1,replacement:e.emoji}})),e}),{}),o("setInstanceOption",{name:"emoji",value:(i=s,a=void 0,(a=i.symbols).push.apply(a,(0,l.Z)(y)),i)}),t.next=13;break;case 9:t.prev=9,t.t0=t.catch(1),console.warn("Can't load static emoji"),console.warn(t.t0);case 13:case"end":return t.stop()}var i,a}),t,null,[[1,9]])})))()},loadUnicodeEmojiData:function(e,t){var n=e.commit,r=e.state,s=(0,g.ensureFinalFallback)(t);return Promise.all(s.map(function(){var e=(0,o.Z)(i().mark((function e(t){var o;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r.unicodeEmojiAnnotations[t]){e.next=11;break}return e.prev=1,e.next=4,D(t);case 4:o=e.sent,n("setUnicodeEmojiAnnotations",{lang:t,annotations:o}),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.warn("Error loading unicode emoji annotations for ".concat(t,": "),e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}()))},getCustomEmoji:function(e){return(0,o.Z)(i().mark((function t(){var n,o,r,s,a,u,d,p,m;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,o=e.state,t.prev=1,t.next=4,window.fetch("/api/pleroma/emoji.json");case 4:if(!(r=t.sent).ok){t.next=17;break}return t.next=8,r.json();case 8:s=t.sent,a=Array.isArray(s)?Object.assign.apply(Object,[{}].concat((0,l.Z)(s))):s,u=function(e,t){var n=e.toLowerCase(),o=t.toLowerCase();return n>o?1:n<o?-1:0},d=function(e,t){var n=""===e,o=""===t;return n===o?0:n&&!o?1:-1},p=function(e,t){var n=function(e){return(e.tags.filter((function(e){return e.startsWith("pack:")}))[0]||"").slice(5)},o=n(e),r=n(t);return d(o,r)||u(o,r)||u(e.displayText,t.displayText)},m=Object.entries(a).map((function(e){var t=(0,c.Z)(e,2),n=t[0],r=t[1],i=r.image_url;return{displayText:n,imageUrl:i?o.server+i:r,tags:i?r.tags.sort((function(e,t){return e>t?1:0})):["utf"],replacement:":".concat(n,": ")}})).sort(p),n("setInstanceOption",{name:"customEmoji",value:m}),t.next=18;break;case 17:throw r;case 18:t.next=24;break;case 20:t.prev=20,t.t0=t.catch(1),console.warn("Can't load custom emojis"),console.warn(t.t0);case 24:case"end":return t.stop()}}),t,null,[[1,20]])})))()},setTheme:function(e,t){var n=e.commit,o=e.rootState;n("setInstanceOption",{name:"theme",value:t}),(0,p.I3)(t).then((function(e){if(n("setInstanceOption",{name:"themeData",value:e}),!o.config.customTheme){var t=e.source;!e.theme||t&&t.themeEngineVersion===m.we?(0,p._v)(t):(0,p._v)(e.theme)}}))},fetchEmoji:function(e){var t=e.dispatch,n=e.state;n.customEmojiFetched||(n.customEmojiFetched=!0,t("getCustomEmoji")),n.emojiFetched||(n.emojiFetched=!0,t("getStaticEmoji"))},getKnownDomains:function(e){return(0,o.Z)(i().mark((function t(){var n,o,r;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,o=e.rootState,t.prev=1,t.next=4,h.ZP.fetchKnownDomains({credentials:o.users.currentUser.credentials});case 4:r=t.sent,n("setKnownDomains",r),t.next=12;break;case 8:t.prev=8,t.t0=t.catch(1),console.warn("Can't load known domains"),console.warn(t.t0);case 12:case"end":return t.stop()}}),t,null,[[1,8]])})))()}}};var C=n(14176),S=n.n(C),j=n(1469),F=n.n(j),A=n(10928),O=n.n(A),E=n(8804),z=n.n(E),P=n(82492),I=n.n(P),x=n(22762),T=n.n(x),$=n(84753),B=n.n($),U=n(13311),M=n.n(U),L=n(30998),R=n.n(L),q=n(66073),N=n.n(q),Z=n(12571),W=n.n(Z),H=n(82729),V=n.n(H),K=n(52230);function G(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?G(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):G(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var J=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return{statuses:[],statusesObject:{},faves:[],visibleStatuses:[],visibleStatusesObject:{},newStatusCount:0,maxId:0,minId:0,minVisibleId:0,loading:!1,followers:[],friends:[],userId:e,flushMarker:0}},Q=function(){return{desktopNotificationSilence:!0,maxId:0,minId:Number.POSITIVE_INFINITY,data:[],idStore:{},loading:!1}},X=function(){return{allStatuses:[],allStatusesObject:{},conversationsObject:{},maxId:0,notifications:Q(),favorites:new Set,timelines:{mentions:J(),public:J(),user:J(),favorites:J(),media:J(),publicAndExternal:J(),friends:J(),tag:J(),dms:J(),bookmarks:J(),list:J()}}},ee=function(e,t,n){var o=t[n.id];return o?(I()(o,S()(n,(function(e,t){return null===e||"user"===t}))),o.attachments.splice(o.attachments.length),{item:o,new:!1}):(function(e){e.deleted=!1,e.attachments=e.attachments||[]}(n),e.push(n),t[n.id]=n,{item:n,new:!0})},te=function(e,t){var n=Number(e.id),o=Number(t.id),r=!Number.isNaN(n),i=!Number.isNaN(o);return r&&i?n>o?-1:1:r&&!i?1:!r&&i||e.id>t.id?-1:1},ne=function(e){return e.visibleStatuses=e.visibleStatuses.sort(te),e.statuses=e.statuses.sort(te),e.minVisibleId=(O()(e.visibleStatuses)||{}).id,e},oe=function(e,t){var n=ee(e.allStatuses,e.allStatusesObject,t);if(n.new){var o=n.item,r=e.conversationsObject,i=o.statusnet_conversation_id;r[i]?r[i].push(o):r[i]=[o]}return n},re=function(e,t){e.notifications.maxId=t.id>e.notifications.maxId?t.id:e.notifications.maxId,e.notifications.minId=t.id<e.notifications.minId?t.id:e.notifications.minId},ie={addNewStatuses:function(e,t){var n=t.statuses,o=t.showImmediately,r=void 0!==o&&o,i=t.timeline,s=t.user,a=void 0===s?{}:s,u=t.noIdUpdate,c=void 0!==u&&u,l=t.userId,d=t.pagination,p=void 0===d?{}:d;if(!F()(n))return!1;var m=e.allStatuses,h=e.timelines[i],f=p.maxId||(n.length>0?T()(n,"id").id:0),g=p.minId||(n.length>0?B()(n,"id").id:0),v=i&&(g>h.maxId||0===h.maxId)&&n.length>0,w=i&&(f<h.minId||0===h.minId)&&n.length>0;if(!c&&v&&(h.maxId=g),!c&&w&&(h.minId=f),"user"!==i&&"media"!==i||h.userId===l){var b=function t(n,o){var r,s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],u=oe(e,n),c=u.item;if(u.new){if("status"===c.type&&M()(c.attentions,{id:a.id})){var l=e.timelines.mentions;h!==l&&(ee(l.statuses,l.statusesObject,c),l.newStatusCount+=1,ne(l))}if("direct"===c.visibility){var d=e.timelines.dms;ee(d.statuses,d.statusesObject,c),d.newStatusCount+=1,ne(d)}}return i&&s&&(r=ee(h.statuses,h.statusesObject,c)),i&&o?ee(h.visibleStatuses,h.visibleStatusesObject,c):i&&s&&r.new&&(h.newStatusCount+=1),c.quote&&t(c.quote,!1,!1),c},y={status:function(e){b(e,r)},edit:function(e){b(e,r)},retweet:function(e){var t=b(e.retweeted_status,!1,!1);(i&&M()(h.statuses,(function(e){return e.retweeted_status?e.id===t.id||e.retweeted_status.id===t.id:e.id===t.id}))?b(e,!1,!1):b(e,r)).retweeted_status=t},favorite:function(t){e.favorites.has(t.id)||(e.favorites.add(t.id),function(e,t){var n=M()(m,{id:e.in_reply_to_status_id});n&&(e.user.id===a.id?n.favorited=!0:n.fave_num+=1)}(t))},deletion:function(t){var n=t.uri,o=M()(m,{uri:n});o&&(function(e,t){V()(e.allStatuses,{id:t.id}),V()(e.notifications.data,(function(e){return e.action.id===t.id}));var n=t.statusnet_conversation_id;e.conversationsObject[n]&&V()(e.conversationsObject[n],{id:t.id})}(e,o),i&&(V()(h.statuses,{uri:n}),V()(h.visibleStatuses,{uri:n})))},follow:function(e){},default:function(e){console.log("unknown status type"),console.log(e)}};N()(n,(function(e){var t=e.type;(y[t]||y.default)(e)})),i&&"bookmarks"!==i&&ne(h)}},addNewNotifications:function(e,t){var n=t.dispatch,o=t.notifications,r=(t.older,t.visibleNotificationTypes,t.rootGetters,t.newNotificationSideEffects);N()(o,(function(t){if(!(0,K.nU)(t))return console.error("Invalid notification:",t),void re(e,t);(0,K.Gr)(t.type)&&(t.action=oe(e,t.action).item,t.status=t.status&&oe(e,t.status).item),"pleroma:report"===t.type&&n("addReport",t.report),"pleroma:emoji_reaction"===t.type&&n("fetchEmojiReactionsBy",t.status.id),e.notifications.idStore.hasOwnProperty(t.id)?t.seen&&(e.notifications.idStore[t.id].seen=!0):(re(e,t),e.notifications.data.push(t),e.notifications.idStore[t.id]=t,r(t))}))},removeStatus:function(e,t){var n=t.timeline,o=t.userId,r=e.timelines[n];o&&(V()(r.statuses,{user:{id:o}}),V()(r.visibleStatuses,{user:{id:o}}),r.minVisibleId=r.visibleStatuses.length>0?O()(r.visibleStatuses).id:0,r.maxId=r.statuses.length>0?z()(r.statuses).id:0)},showNewStatuses:function(e,t){var n=t.timeline,o=e.timelines[n];o.newStatusCount=0,o.visibleStatuses=W()(o.statuses,0,50),o.minVisibleId=O()(o.visibleStatuses).id,o.minId=o.minVisibleId,o.visibleStatusesObject={},N()(o.visibleStatuses,(function(e){o.visibleStatusesObject[e.id]=e}))},resetStatuses:function(e){var t=X();Object.entries(t).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];e[o]=r}))},clearTimeline:function(e,t){var n=t.timeline,o=t.excludeUserId,r=void 0!==o&&o?e.timelines[n].userId:void 0;e.timelines[n]=J(r)},clearNotifications:function(e){e.notifications=Q()},setFavorited:function(e,t){var n=t.status,o=t.value,r=e.allStatusesObject[n.id];r.favorited!==o&&(o?r.fave_num++:r.fave_num--),r.favorited=o},setFavoritedConfirm:function(e,t){var n=t.status,o=t.user,r=e.allStatusesObject[n.id];r.favorited=n.favorited,r.fave_num=n.fave_num;var i=R()(r.favoritedBy,{id:o.id});-1===i||r.favorited?-1===i&&r.favorited&&r.favoritedBy.push(o):r.favoritedBy.splice(i,1)},setMutedStatus:function(e,t){var n=e.allStatusesObject[t.id];n.thread_muted=t.thread_muted,void 0!==n.thread_muted&&e.conversationsObject[n.statusnet_conversation_id].forEach((function(e){e.thread_muted=n.thread_muted}))},setRetweeted:function(e,t){var n=t.status,o=t.value,r=e.allStatusesObject[n.id];r.repeated!==o&&(o?r.repeat_num++:r.repeat_num--),r.repeated=o},setRetweetedConfirm:function(e,t){var n=t.status,o=t.user,r=e.allStatusesObject[n.id];r.repeated=n.repeated,r.repeat_num=n.repeat_num;var i=R()(r.rebloggedBy,{id:o.id});-1===i||r.repeated?-1===i&&r.repeated&&r.rebloggedBy.push(o):r.rebloggedBy.splice(i,1)},setBookmarked:function(e,t){var n=t.status,o=t.value;e.allStatusesObject[n.id].bookmarked=o},setBookmarkedConfirm:function(e,t){var n=t.status;e.allStatusesObject[n.id].bookmarked=n.bookmarked},setDeleted:function(e,t){var n=t.status,o=e.allStatusesObject[n.id];o&&(o.deleted=!0)},setManyDeleted:function(e,t){Object.values(e.allStatusesObject).forEach((function(e){t(e)&&(e.deleted=!0)}))},setLoading:function(e,t){var n=t.timeline,o=t.value;e.timelines[n].loading=o},setNsfw:function(e,t){var n=t.id,o=t.nsfw;e.allStatusesObject[n].nsfw=o},setNotificationsLoading:function(e,t){var n=t.value;e.notifications.loading=n},setNotificationsSilence:function(e,t){var n=t.value;e.notifications.desktopNotificationSilence=n},markNotificationsAsSeen:function(e){N()(e.notifications.data,(function(e){e.seen=!0}))},markSingleNotificationAsSeen:function(e,t){var n=t.id,o=M()(e.notifications.data,(function(e){return e.id===n}));o&&(o.seen=!0)},dismissNotification:function(e,t){var n=t.id;e.notifications.data=e.notifications.data.filter((function(e){return e.id!==n}))},dismissNotifications:function(e,t){var n=t.finder;e.notifications.data=e.notifications.data.filter((function(e){return n}))},updateNotification:function(e,t){var n=t.id,o=t.updater,r=M()(e.notifications.data,(function(e){return e.id===n}));r&&o(r)},queueFlush:function(e,t){var n=t.timeline,o=t.id;e.timelines[n].flushMarker=o},queueFlushAll:function(e){Object.keys(e.timelines).forEach((function(t){e.timelines[t].flushMarker=e.timelines[t].maxId}))},addRepeats:function(e,t){var n=t.id,o=t.rebloggedByUsers,r=t.currentUser,i=e.allStatusesObject[n];i.rebloggedBy=o.filter((function(e){return e})),i.repeat_num=i.rebloggedBy.length,i.repeated=!!i.rebloggedBy.find((function(e){var t=e.id;return r.id===t}))},addFavs:function(e,t){var n=t.id,o=t.favoritedByUsers,r=t.currentUser,i=e.allStatusesObject[n];i.favoritedBy=o.filter((function(e){return e})),i.fave_num=i.favoritedBy.length,i.favorited=!!i.favoritedBy.find((function(e){var t=e.id;return r.id===t}))},addEmojiReactionsBy:function(e,t){var n=t.id,o=t.emojiReactions;t.currentUser,e.allStatusesObject[n].emoji_reactions=o},addOwnReaction:function(e,t){var n=t.id,o=t.emoji,r=t.currentUser,i=e.allStatusesObject[n],s=R()(i.emoji_reactions,{name:o}),a=i.emoji_reactions[s]||{name:o,count:0,accounts:[]},u=Y(Y({},a),{},{count:a.count+1,me:!0,accounts:[].concat((0,l.Z)(a.accounts),[r])});s>=0?i.emoji_reactions[s]=u:i.emoji_reactions=[].concat((0,l.Z)(i.emoji_reactions),[u])},removeOwnReaction:function(e,t){var n=t.id,o=t.emoji,r=t.currentUser,i=e.allStatusesObject[n],s=R()(i.emoji_reactions,{name:o});if(!(s<0)){var a=i.emoji_reactions[s],u=a.accounts||[],c=Y(Y({},a),{},{count:a.count-1,me:!1,accounts:u.filter((function(e){return e.id!==r.id}))});c.count>0?i.emoji_reactions[s]=c:i.emoji_reactions=i.emoji_reactions.filter((function(e){return e.name!==o}))}},updateStatusWithPoll:function(e,t){var n=t.id,o=t.poll;e.allStatusesObject[n].poll=o},setVirtualHeight:function(e,t){var n=t.statusId,o=t.height;e.allStatusesObject[n].virtualHeight=o}},se={state:X(),actions:{addNewStatuses:function(e,t){var n=e.rootState,o=e.commit,r=t.statuses,i=t.showImmediately,s=void 0!==i&&i,a=t.timeline,u=void 0!==a&&a,c=t.noIdUpdate,l=void 0!==c&&c,d=t.userId,p=t.pagination;o("addNewStatuses",{statuses:r,showImmediately:s,timeline:u,noIdUpdate:l,user:n.users.currentUser,userId:d,pagination:p})},addNewNotifications:function(e,t){var n=t.notifications,o=t.older;(0,e.commit)("addNewNotifications",{dispatch:e.dispatch,notifications:n,older:o,rootGetters:e.rootGetters,newNotificationSideEffects:function(t){(0,K.nJ)(e,t)}})},setNotificationsLoading:function(e,t){e.rootState,(0,e.commit)("setNotificationsLoading",{value:t.value})},setNotificationsSilence:function(e,t){e.rootState,(0,e.commit)("setNotificationsSilence",{value:t.value})},fetchStatus:function(e,t){var n=e.rootState,o=e.dispatch;return n.api.backendInteractor.fetchStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},fetchStatusSource:function(e,t){var n=e.rootState;return e.dispatch,h.ZP.fetchStatusSource({id:t.id,credentials:n.users.currentUser.credentials})},fetchStatusHistory:function(e,t){return e.rootState,e.dispatch,h.ZP.fetchStatusHistory({status:t})},deleteStatus:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch;h.ZP.deleteStatus({id:t.id,credentials:n.users.currentUser.credentials}).then((function(e){o("setDeleted",{status:t})})).catch((function(e){r("pushGlobalNotice",{level:"error",messageKey:"status.delete_error",messageArgs:[e.message],timeout:5e3})}))},deleteStatusById:function(e,t){var n=e.rootState;(0,e.commit)("setDeleted",{status:n.statuses.allStatusesObject[t]})},markStatusesAsDeleted:function(e,t){(0,e.commit)("setManyDeleted",t)},favorite:function(e,t){var n=e.rootState,o=e.commit;o("setFavorited",{status:t,value:!0}),n.api.backendInteractor.favorite({id:t.id}).then((function(e){return o("setFavoritedConfirm",{status:e,user:n.users.currentUser})}))},unfavorite:function(e,t){var n=e.rootState,o=e.commit;o("setFavorited",{status:t,value:!1}),n.api.backendInteractor.unfavorite({id:t.id}).then((function(e){return o("setFavoritedConfirm",{status:e,user:n.users.currentUser})}))},fetchPinnedStatuses:function(e,t){var n=e.rootState,o=e.dispatch;n.api.backendInteractor.fetchPinnedStatuses({id:t}).then((function(e){return o("addNewStatuses",{statuses:e,timeline:"user",userId:t,showImmediately:!0,noIdUpdate:!0})}))},pinStatus:function(e,t){var n=e.rootState,o=e.dispatch;return n.api.backendInteractor.pinOwnStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},unpinStatus:function(e,t){var n=e.rootState,o=e.dispatch;n.api.backendInteractor.unpinOwnStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},muteConversation:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.muteConversation({id:t}).then((function(e){return o("setMutedStatus",e)}))},unmuteConversation:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.unmuteConversation({id:t}).then((function(e){return o("setMutedStatus",e)}))},retweet:function(e,t){var n=e.rootState,o=e.commit;o("setRetweeted",{status:t,value:!0}),n.api.backendInteractor.retweet({id:t.id}).then((function(e){return o("setRetweetedConfirm",{status:e.retweeted_status,user:n.users.currentUser})}))},unretweet:function(e,t){var n=e.rootState,o=e.commit;o("setRetweeted",{status:t,value:!1}),n.api.backendInteractor.unretweet({id:t.id}).then((function(e){return o("setRetweetedConfirm",{status:e,user:n.users.currentUser})}))},bookmark:function(e,t){var n=e.rootState,o=e.commit;o("setBookmarked",{status:t,value:!0}),n.api.backendInteractor.bookmarkStatus({id:t.id}).then((function(e){o("setBookmarkedConfirm",{status:e})}))},unbookmark:function(e,t){var n=e.rootState,o=e.commit;o("setBookmarked",{status:t,value:!1}),n.api.backendInteractor.unbookmarkStatus({id:t.id}).then((function(e){o("setBookmarkedConfirm",{status:e})}))},queueFlush:function(e,t){e.rootState,(0,e.commit)("queueFlush",{timeline:t.timeline,id:t.id})},queueFlushAll:function(e){e.rootState,(0,e.commit)("queueFlushAll")},markNotificationsAsSeen:function(e){var t=e.rootState;(0,e.commit)("markNotificationsAsSeen"),h.ZP.markNotificationsAsSeen({id:t.statuses.notifications.maxId,credentials:t.users.currentUser.credentials})},markSingleNotificationAsSeen:function(e,t){var n=e.rootState,o=e.commit,r=t.id;o("markSingleNotificationAsSeen",{id:r}),h.ZP.markNotificationsAsSeen({single:!0,id:r,credentials:n.users.currentUser.credentials})},dismissNotificationLocal:function(e,t){e.rootState,(0,e.commit)("dismissNotification",{id:t.id})},dismissNotification:function(e,t){var n=e.rootState,o=e.commit,r=t.id;o("dismissNotification",{id:r}),n.api.backendInteractor.dismissNotification({id:r})},updateNotification:function(e,t){e.rootState,(0,e.commit)("updateNotification",{id:t.id,updater:t.updater})},fetchFavsAndRepeats:function(e,t){var n=e.rootState,o=e.commit;Promise.all([n.api.backendInteractor.fetchFavoritedByUsers({id:t}),n.api.backendInteractor.fetchRebloggedByUsers({id:t})]).then((function(e){var r=(0,c.Z)(e,2),i=r[0],s=r[1];o("addFavs",{id:t,favoritedByUsers:i,currentUser:n.users.currentUser}),o("addRepeats",{id:t,rebloggedByUsers:s,currentUser:n.users.currentUser})}))},reactWithEmoji:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit,i=t.id,s=t.emoji,a=n.users.currentUser;a&&(r("addOwnReaction",{id:i,emoji:s,currentUser:a}),n.api.backendInteractor.reactWithEmoji({id:i,emoji:s}).then((function(e){o("fetchEmojiReactionsBy",i)})))},unreactWithEmoji:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit,i=t.id,s=t.emoji,a=n.users.currentUser;a&&(r("removeOwnReaction",{id:i,emoji:s,currentUser:a}),n.api.backendInteractor.unreactWithEmoji({id:i,emoji:s}).then((function(e){o("fetchEmojiReactionsBy",i)})))},fetchEmojiReactionsBy:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.fetchEmojiReactions({id:t}).then((function(e){o("addEmojiReactionsBy",{id:t,emojiReactions:e,currentUser:n.users.currentUser})}))},fetchFavs:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.fetchFavoritedByUsers({id:t}).then((function(e){return o("addFavs",{id:t,favoritedByUsers:e,currentUser:n.users.currentUser})}))},fetchRepeats:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.fetchRebloggedByUsers({id:t}).then((function(e){return o("addRepeats",{id:t,rebloggedByUsers:e,currentUser:n.users.currentUser})}))},search:function(e,t){var n=t.q,o=t.resolve,r=t.limit,i=t.offset,s=t.following,a=t.type;return e.rootState.api.backendInteractor.search2({q:n,resolve:o,limit:r,offset:i,following:s,type:a}).then((function(t){return e.commit("addNewUsers",t.accounts),e.commit("addNewUsers",t.statuses.map((function(e){return e.user})).filter((function(e){return e}))),e.commit("addNewStatuses",{statuses:t.statuses}),t}))},setVirtualHeight:function(e,t){(0,e.commit)("setVirtualHeight",{statusId:t.statusId,height:t.height})}},mutations:ie};const ae=se;var ue={setLists:function(e,t){e.allLists=t},setList:function(e,t){var n=t.listId,o=t.title;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].title=o;var r=M()(e.allLists,{id:n});r?r.title=o:e.allLists.push({id:n,title:o})},setListAccounts:function(e,t){var n=t.listId,o=t.accountIds;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].accountIds=o},addListAccount:function(e,t){var n=t.listId,o=t.accountId;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].accountIds.push(o)},removeListAccount:function(e,t){var n=t.listId,o=t.accountId;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]});var r=e.allListsObject[n].accountIds,i=new Set(r);i.delete(o),e.allListsObject[n].accountIds=(0,l.Z)(i)},deleteList:function(e,t){var n=t.listId;delete e.allListsObject[n],V()(e.allLists,(function(e){return e.id===n}))}},ce={state:{allLists:[],allListsObject:{}},mutations:ue,actions:{setLists:function(e,t){(0,e.commit)("setLists",t)},createList:function(e,t){var n=e.rootState,o=e.commit,r=t.title;return n.api.backendInteractor.createList({title:r}).then((function(e){return o("setList",{listId:e.id,title:r}),e}))},fetchList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;return n.api.backendInteractor.getList({listId:r}).then((function(e){return o("setList",{listId:e.id,title:e.title})}))},fetchListAccounts:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;return n.api.backendInteractor.getListAccounts({listId:r}).then((function(e){return o("setListAccounts",{listId:r,accountIds:e})}))},setList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.title;n.api.backendInteractor.updateList({listId:r,title:i}),o("setList",{listId:r,title:i})},setListAccounts:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountIds,s=n.lists.allListsObject[r].accountIds||[],a=i.filter((function(e){return!s.includes(e)})),u=s.filter((function(e){return!i.includes(e)}));o("setListAccounts",{listId:r,accountIds:i}),a.length>0&&n.api.backendInteractor.addAccountsToList({listId:r,accountIds:a}),u.length>0&&n.api.backendInteractor.removeAccountsFromList({listId:r,accountIds:u})},addListAccount:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountId;return n.api.backendInteractor.addAccountsToList({listId:r,accountIds:[i]}).then((function(e){return o("addListAccount",{listId:r,accountId:i}),e}))},removeListAccount:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountId;return n.api.backendInteractor.removeAccountsFromList({listId:r,accountIds:[i]}).then((function(e){return o("removeListAccount",{listId:r,accountId:i}),e}))},deleteList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;n.api.backendInteractor.deleteList({listId:r}),o("deleteList",{listId:r})}},getters:{findListTitle:function(e){return function(t){if(e.allListsObject[t])return e.allListsObject[t].title}},findListAccounts:function(e){return function(t){return(0,l.Z)(e.allListsObject[t].accountIds)}}}};const le=ce;var de=n(71002),pe=n(44908),me=n.n(pe),he=n(57043),fe=n.n(he),ge=n(30236),ve=n.n(ge),we=n(35161),be=n.n(we),ye=n(39693),De=n.n(ye),_e=n(68929),ke=n.n(_e),Ce=n(22626),Se=function(e){var t=e.store,n=e.credentials,o=e.timeline,r=void 0===o?"friends":o,i=e.older,s=void 0!==i&&i,a=e.showImmediately,u=void 0!==a&&a,c=e.userId,l=void 0!==c&&c,d=e.listId,p=void 0!==d&&d,m=e.tag,f=void 0!==m&&m,g=e.until,v=e.since,w={timeline:r,credentials:n},b=t.rootState||t.state,y=t.getters,D=b.statuses.timelines[ke()(r)],_=y.mergedConfig,k=_.hideMutedPosts,C=_.replyVisibility,S=!!b.users.currentUser;s?w.until=g||D.minId:void 0===v?w.since=D.maxId:null!==v&&(w.since=v),w.userId=l,w.listId=p,w.tag=f,w.withMuted=!k,S&&["friends","public","publicAndExternal"].includes(r)&&(w.replyVisibility=C);var j=D.statuses.length;return h.ZP.fetchTimeline(w).then((function(e){if(e.errors)throw new Error("".concat(e.status," ").concat(e.statusText));var n=e.data,o=e.pagination;return!s&&n.length>=20&&!D.loading&&j>0&&t.dispatch("queueFlush",{timeline:r,id:D.maxId}),function(e){var t=e.store,n=e.statuses,o=e.timeline,r=e.showImmediately,i=e.userId,s=e.listId,a=e.pagination,u=ke()(o);t.dispatch("addNewStatuses",{timeline:u,userId:i,listId:s,statuses:n,showImmediately:r,pagination:a})}({store:t,statuses:n,timeline:r,showImmediately:u,userId:l,listId:p,pagination:o}),{statuses:n,pagination:o}})).catch((function(e){t.dispatch("pushGlobalNotice",{level:"error",messageKey:"timeline.error",messageArgs:[e.message],timeout:5e3})}))},je={fetchAndUpdate:Se,startFetching:function(e){var t=e.timeline,n=void 0===t?"friends":t,o=e.credentials,r=e.store,i=e.userId,s=void 0!==i&&i,a=e.listId,u=void 0!==a&&a,c=e.tag,l=void 0!==c&&c,d=(r.rootState||r.state).statuses.timelines[ke()(n)],p=0===d.visibleStatuses.length;return d.userId=s,d.listId=u,Se({timeline:n,credentials:o,store:r,showImmediately:p,userId:s,listId:u,tag:l}),(0,Ce.F)((function(){return Se({timeline:n,credentials:o,store:r,userId:s,listId:u,tag:l})}),1e4)}};const Fe=je;var Ae=n(15568);const Oe=function(e){var t=e.credentials,n=e.store,o=function(){return function(e){var t=e.store,n=e.credentials;return h.ZP.fetchFollowRequests({credentials:n}).then((function(e){t.commit("setFollowRequests",e),t.commit("addNewUsers",e)}),(function(){})).catch((function(){}))}({credentials:t,store:n})};return o(),(0,Ce.F)(o,1e4)};var Ee={startFetching:function(e){var t=e.credentials,n=e.store,o=function(){return function(e){var t=e.store,n=e.credentials;return h.ZP.fetchLists({credentials:n}).then((function(e){t.commit("setLists",e)}),(function(){})).catch((function(){}))}({credentials:t,store:n})};return o(),(0,Ce.F)(o,24e4)}};const ze=Ee;function Pe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const xe=function(e){return Ie(Ie({startFetchingTimeline:function(t){var n=t.timeline,o=t.store,r=t.userId,i=void 0!==r&&r,s=t.listId,a=void 0!==s&&s,u=t.tag;return Fe.startFetching({timeline:n,store:o,credentials:e,userId:i,listId:a,tag:u})},fetchTimeline:function(t){return Fe.fetchAndUpdate(Ie(Ie({},t),{},{credentials:e}))},startFetchingNotifications:function(t){var n=t.store;return Ae.Z.startFetching({store:n,credentials:e})},fetchNotifications:function(t){return Ae.Z.fetchAndUpdate(Ie(Ie({},t),{},{credentials:e}))},startFetchingFollowRequests:function(t){var n=t.store;return Oe({store:n,credentials:e})},startFetchingLists:function(t){var n=t.store;return ze.startFetching({store:n,credentials:e})},startUserSocket:function(t){var n=t.store.rootState.instance.server.replace("http","ws")+(0,h.pR)({credentials:e,stream:"user"});return(0,h.ro)({url:n,id:"User"})}},Object.entries(h.ZP).reduce((function(t,n){var o=(0,c.Z)(n,2),r=o[0],i=o[1];return Ie(Ie({},t),{},(0,d.Z)({},r,(function(t){return i(Ie({credentials:e},t))})))}),{})),{},{verifyCredentials:h.ZP.verifyCredentials})};var Te=function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},$e=function(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight},Be=n(54061),Ue=n.n(Be),Me="".concat(window.location.origin,"/oauth-callback"),Le=function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.commit;if(t&&n)return Promise.resolve({clientId:t,clientSecret:n});var i="".concat(o,"/api/v1/apps"),s=new window.FormData;return s.append("client_name","PleromaFE_".concat(window.___pleromafe_commit_hash,"_").concat((new Date).toISOString())),s.append("redirect_uris",Me),s.append("scopes","read write follow push admin"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()})).then((function(e){return{clientId:e.client_id,clientSecret:e.client_secret}})).then((function(e){return r("setClientData",e)||e}))},Re=function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r="".concat(o,"/oauth/token"),i=new window.FormData;return i.append("client_id",t),i.append("client_secret",n),i.append("grant_type","client_credentials"),i.append("redirect_uri","".concat(window.location.origin,"/oauth-callback")),window.fetch(r,{method:"POST",body:i}).then((function(e){return e.json()}))},qe={login:function(e){var t=e.instance,n={response_type:"code",client_id:e.clientId,redirect_uri:Me,scope:"read write follow push admin"},o=Ue()(n,(function(e,t,n){var o="".concat(n,"=").concat(encodeURIComponent(t));return e?"".concat(e,"&").concat(o):o}),!1),r="".concat(t,"/oauth/authorize?").concat(o);window.location.href=r},getToken:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.code,i="".concat(o,"/oauth/token"),s=new window.FormData;return s.append("client_id",t),s.append("client_secret",n),s.append("grant_type","authorization_code"),s.append("code",r),s.append("redirect_uri","".concat(window.location.origin,"/oauth-callback")),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},getTokenWithCredentials:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.username,i=e.password,s="".concat(o,"/oauth/token"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("grant_type","password"),a.append("username",r),a.append("password",i),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))},getOrCreateApp:Le,verifyOTPCode:function(e){var t=e.app,n=e.instance,o=e.mfaToken,r=e.code,i="".concat(n,"/oauth/mfa/challenge"),s=new window.FormData;return s.append("client_id",t.client_id),s.append("client_secret",t.client_secret),s.append("mfa_token",o),s.append("code",r),s.append("challenge_type","totp"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},verifyRecoveryCode:function(e){var t=e.app,n=e.instance,o=e.mfaToken,r=e.code,i="".concat(n,"/oauth/mfa/challenge"),s=new window.FormData;return s.append("client_id",t.client_id),s.append("client_secret",t.client_secret),s.append("mfa_token",o),s.append("code",r),s.append("challenge_type","recovery"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},revokeToken:function(e){var t=e.app,n=e.instance,o=e.token,r="".concat(n,"/oauth/revoke"),i=new window.FormData;return i.append("client_id",t.clientId),i.append("client_secret",t.clientSecret),i.append("token",o),window.fetch(r,{method:"POST",body:i}).then((function(e){return e.json()}))}};const Ne=qe;var Ze=n(56012),We=n.n(Ze);function He(){return"serviceWorker"in navigator&&"PushManager"in window}function Ve(){return We().register().catch((function(e){return console.error("Unable to get or create a service worker.",e)}))}function Ke(e){return window.fetch("/api/v1/push/subscription/",{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}}).then((function(e){if(!e.ok)throw new Error("Bad status code from server.");return e}))}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ye(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Je=function e(t,n){if(F()(t)&&F()(n))return t.length=n.length,ve()(t,n,e)},Qe=function(e,t){return e.rootState.api.backendInteractor.blockUser({id:t}).then((function(n){e.commit("updateUserRelationship",[n]),e.commit("addBlockId",t),e.commit("removeStatus",{timeline:"friends",userId:t}),e.commit("removeStatus",{timeline:"public",userId:t}),e.commit("removeStatus",{timeline:"publicAndExternal",userId:t})}))},Xe=function(e,t){return e.rootState.api.backendInteractor.unblockUser({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))},et=function(e,t){var n="object"===(0,de.Z)(t)?t.id:t,o="object"===(0,de.Z)(t)?t.expiresIn:0,r=e.state.relationships[n]||{id:n};return r.muting=!0,e.commit("updateUserRelationship",[r]),e.commit("addMuteId",n),e.rootState.api.backendInteractor.muteUser({id:n,expiresIn:o}).then((function(t){e.commit("updateUserRelationship",[t]),e.commit("addMuteId",n)}))},tt=function(e,t){var n=e.state.relationships[t]||{id:t};return n.muting=!1,e.commit("updateUserRelationship",[n]),e.rootState.api.backendInteractor.unmuteUser({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))},nt=function(e,t){return e.rootState.api.backendInteractor.muteDomain({domain:t}).then((function(){return e.commit("addDomainMute",t)}))},ot=function(e,t){return e.rootState.api.backendInteractor.unmuteDomain({domain:t}).then((function(){return e.commit("removeDomainMute",t)}))},rt={tagUser:function(e,t){var n=t.user.id,o=t.tag,r=e.usersObject[n],i=(r.tags||[]).concat([o]);r.tags=i},untagUser:function(e,t){var n=t.user.id,o=t.tag,r=e.usersObject[n],i=(r.tags||[]).filter((function(e){return e!==o}));r.tags=i},updateRight:function(e,t){var n=t.user.id,o=t.right,r=t.value,i=e.usersObject[n],s=i.rights;s[o]=r,i.rights=s},updateActivationStatus:function(e,t){var n=t.user.id,o=t.deactivated;e.usersObject[n].deactivated=o},setCurrentUser:function(e,t){e.lastLoginName=t.screen_name,e.currentUser=ve()(e.currentUser||{},t,Je)},clearCurrentUser:function(e){e.currentUser=!1,e.lastLoginName=!1},beginLogin:function(e){e.loggingIn=!0},endLogin:function(e){e.loggingIn=!1},saveFriendIds:function(e,t){var n=t.id,o=t.friendIds,r=e.usersObject[n];r.friendIds=me()(fe()(r.friendIds||[],o))},saveFollowerIds:function(e,t){var n=t.id,o=t.followerIds,r=e.usersObject[n];r.followerIds=me()(fe()(r.followerIds||[],o))},clearFriends:function(e,t){var n=e.usersObject[t];n&&(n.friendIds=[])},clearFollowers:function(e,t){var n=e.usersObject[t];n&&(n.followerIds=[])},addNewUsers:function(e,t){N()(t,(function(t){t.relationship&&(e.relationships[t.relationship.id]=t.relationship);var n=function(e,t,n){if(!n)return!1;var o=t[n.id];return o?(ve()(o,n,Je),{item:o,new:!1}):(e.push(n),t[n.id]=n,{item:n,new:!0})}(e.users,e.usersObject,t),o=n.item;n.new&&o.screen_name&&!o.screen_name.includes("@")&&(e.usersByNameObject[o.screen_name.toLowerCase()]=o)}))},updateUserRelationship:function(e,t){t.forEach((function(t){e.relationships[t.id]=t}))},updateUserInLists:function(e,t){var n=t.id,o=t.inLists;e.usersObject[n].inLists=o},saveBlockIds:function(e,t){e.currentUser.blockIds=t},addBlockId:function(e,t){-1===e.currentUser.blockIds.indexOf(t)&&e.currentUser.blockIds.push(t)},setBlockIdsMaxId:function(e,t){e.currentUser.blockIdsMaxId=t},saveMuteIds:function(e,t){e.currentUser.muteIds=t},setMuteIdsMaxId:function(e,t){e.currentUser.muteIdsMaxId=t},addMuteId:function(e,t){-1===e.currentUser.muteIds.indexOf(t)&&e.currentUser.muteIds.push(t)},saveDomainMutes:function(e,t){e.currentUser.domainMutes=t},addDomainMute:function(e,t){-1===e.currentUser.domainMutes.indexOf(t)&&e.currentUser.domainMutes.push(t)},removeDomainMute:function(e,t){var n=e.currentUser.domainMutes.indexOf(t);-1!==n&&e.currentUser.domainMutes.splice(n,1)},setPinnedToUser:function(e,t){var n=e.usersObject[t.user.id];n.pinnedStatusIds=n.pinnedStatusIds||[];var o=n.pinnedStatusIds.indexOf(t.id);t.pinned&&-1===o?n.pinnedStatusIds.push(t.id):t.pinned||-1===o||n.pinnedStatusIds.splice(o,1)},setUserForStatus:function(e,t){t.user=e.usersObject[t.user.id]},setUserForNotification:function(e,t){"follow"!==t.type&&(t.action.user=e.usersObject[t.action.user.id]),t.from_profile=e.usersObject[t.from_profile.id]},setColor:function(e,t){var n=t.user.id,o=t.highlighted;e.usersObject[n].highlight=o},signUpPending:function(e){e.signUpPending=!0,e.signUpErrors=[]},signUpSuccess:function(e){e.signUpPending=!1},signUpFailure:function(e,t){e.signUpPending=!1,e.signUpErrors=t}},it={state:{loggingIn:!1,lastLoginName:!1,currentUser:!1,users:[],usersObject:{},usersByNameObject:{},signUpPending:!1,signUpErrors:[],relationships:{}},mutations:rt,getters:{findUser:function(e){return function(t){return e.usersObject[t]}},findUserByName:function(e){return function(t){return e.usersByNameObject[t.toLowerCase()]}},findUserByUrl:function(e){return function(t){return e.users.find((function(e){return e.statusnet_profile_url&&e.statusnet_profile_url.toLowerCase()===t.toLowerCase()}))}},relationship:function(e){return function(t){return t&&e.relationships[t]||{id:t,loading:!0}}}},actions:{fetchUserIfMissing:function(e,t){e.getters.findUser(t)||e.dispatch("fetchUser",t)},fetchUser:function(e,t){return e.rootState.api.backendInteractor.fetchUser({id:t}).then((function(t){return e.commit("addNewUsers",[t]),t}))},fetchUserByName:function(e,t){return e.rootState.api.backendInteractor.fetchUserByName({name:t}).then((function(t){return e.commit("addNewUsers",[t]),t}))},fetchUserRelationship:function(e,t){e.state.currentUser&&e.rootState.api.backendInteractor.fetchUserRelationship({id:t}).then((function(t){return e.commit("updateUserRelationship",t)}))},fetchUserInLists:function(e,t){e.state.currentUser&&e.rootState.api.backendInteractor.fetchUserInLists({id:t}).then((function(n){return e.commit("updateUserInLists",{id:t,inLists:n})}))},fetchBlocks:function(e,t){var n=(t||{}).reset,o=e.state.currentUser.blockIdsMaxId;return e.rootState.api.backendInteractor.fetchBlocks({maxId:o}).then((function(t){return n?e.commit("saveBlockIds",be()(t,"id")):be()(t,"id").map((function(t){return e.commit("addBlockId",t)})),t.length&&e.commit("setBlockIdsMaxId",O()(t).id),e.commit("addNewUsers",t),t}))},blockUser:function(e,t){return Qe(e,t)},unblockUser:function(e,t){return Xe(e,t)},removeUserFromFollowers:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.removeUserFromFollowers({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},blockUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return Qe(e,t)})))},unblockUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return Xe(e,t)})))},editUserNote:function(e,t){return function(e,t){var n=t.id,o=t.comment;return e.rootState.api.backendInteractor.editUserNote({id:n,comment:o}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},fetchMutes:function(e,t){var n=(t||{}).reset,o=e.state.currentUser.muteIdsMaxId;return e.rootState.api.backendInteractor.fetchMutes({maxId:o}).then((function(t){return n?e.commit("saveMuteIds",be()(t,"id")):be()(t,"id").map((function(t){return e.commit("addMuteId",t)})),t.length&&e.commit("setMuteIdsMaxId",O()(t).id),e.commit("addNewUsers",t),t}))},muteUser:function(e,t){return et(e,t)},unmuteUser:function(e,t){return tt(e,t)},hideReblogs:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.followUser({id:t,reblogs:!1}).then((function(t){e.commit("updateUserRelationship",[t])}))}(e,t)},showReblogs:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.followUser({id:t,reblogs:!0}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},muteUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return et(e,t)})))},unmuteUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return tt(e,t)})))},fetchDomainMutes:function(e){return e.rootState.api.backendInteractor.fetchDomainMutes().then((function(t){return e.commit("saveDomainMutes",t),t}))},muteDomain:function(e,t){return nt(e,t)},unmuteDomain:function(e,t){return ot(e,t)},muteDomains:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return nt(e,t)})))},unmuteDomains:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return ot(e,t)})))},fetchFriends:function(e,t){var n=e.rootState,o=e.commit,r=n.users.usersObject[t],i=O()(r.friendIds);return n.api.backendInteractor.fetchFriends({id:t,maxId:i}).then((function(e){return o("addNewUsers",e),o("saveFriendIds",{id:t,friendIds:be()(e,"id")}),e}))},fetchFollowers:function(e,t){var n=e.rootState,o=e.commit,r=n.users.usersObject[t],i=O()(r.followerIds);return n.api.backendInteractor.fetchFollowers({id:t,maxId:i}).then((function(e){return o("addNewUsers",e),o("saveFollowerIds",{id:t,followerIds:be()(e,"id")}),e}))},clearFriends:function(e,t){(0,e.commit)("clearFriends",t)},clearFollowers:function(e,t){(0,e.commit)("clearFollowers",t)},subscribeUser:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.subscribeUser({id:t}).then((function(e){return o("updateUserRelationship",[e])}))},unsubscribeUser:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.unsubscribeUser({id:t}).then((function(e){return o("updateUserRelationship",[e])}))},toggleActivationStatus:function(e,t){var n=e.rootState,o=e.commit,r=t.user;(r.deactivated?n.api.backendInteractor.activateUser:n.api.backendInteractor.deactivateUser)({user:r}).then((function(e){var t=!e.is_active;o("updateActivationStatus",{user:e,deactivated:t})}))},registerPushNotifications:function(e){var t=e.state.currentUser.credentials,n=e.rootState.instance.vapidPublicKey;!function(e,t,n,o){He()&&Ve().then((function(n){return function(e,t,n){if(!t)return Promise.reject(new Error("Web Push is disabled in config"));if(!n)return Promise.reject(new Error("VAPID public key is not found"));var o,r,i,s={userVisibleOnly:!0,applicationServerKey:(o=n,r=(o+"=".repeat((4-o.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/"),i=window.atob(r),Uint8Array.from((0,l.Z)(i).map((function(e){return e.charCodeAt(0)}))))};return e.pushManager.subscribe(s)}(n,e,t)})).then((function(e){return function(e,t,n){return window.fetch("/api/v1/push/subscription/",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(t)},body:JSON.stringify({subscription:e,data:{alerts:{follow:n.follows,favourite:n.likes,mention:n.mentions,reblog:n.repeats,move:n.moves}}})}).then((function(e){if(!e.ok)throw new Error("Bad status code from server.");return e.json()})).then((function(e){if(!e.id)throw new Error("Bad response from server.");return e}))}(e,n,o)})).catch((function(e){return console.warn("Failed to setup Web Push Notifications: ".concat(e.message))}))}(e.rootState.config.webPushNotifications,n,t,e.rootState.config.notificationVisibility)},unregisterPushNotifications:function(e){var t;t=e.state.currentUser.credentials,He()&&Promise.all([Ke(t),Ve().then((function(e){return function(e){return e.pushManager.getSubscription().then((function(e){if(null!==e)return e.unsubscribe()}))}(e).then((function(t){return[e,t]}))})).then((function(e){var t=(0,c.Z)(e,2),n=t[0];return t[1]||console.warn("Push subscription cancellation wasn't successful, killing SW anyway..."),n.unregister().then((function(e){e||console.warn("Failed to kill SW")}))}))]).catch((function(e){return console.warn("Failed to disable Web Push Notifications: ".concat(e.message))}))},addNewUsers:function(e,t){(0,e.commit)("addNewUsers",t)},addNewStatuses:function(e,t){var n=t.statuses,o=be()(n,"user"),r=De()(be()(n,"retweeted_status.user"));e.commit("addNewUsers",o),e.commit("addNewUsers",r),N()(n,(function(t){e.commit("setUserForStatus",t),e.commit("setPinnedToUser",t)})),N()(De()(be()(n,"retweeted_status")),(function(t){e.commit("setUserForStatus",t),e.commit("setPinnedToUser",t)}))},addNewNotifications:function(e,t){var n=t.notifications,o=be()(n,"from_profile"),r=be()(n,"target").filter((function(e){return e})),i=n.map((function(e){return e.id}));e.commit("addNewUsers",o),e.commit("addNewUsers",r);var s=e.rootState.statuses.notifications.idStore,a=Object.entries(s).filter((function(e){var t=(0,c.Z)(e,2),n=t[0];return t[1],i.includes(n)})).map((function(e){var t=(0,c.Z)(e,2);return t[0],t[1]}));N()(a,(function(t){e.commit("setUserForNotification",t)}))},searchUsers:function(e,t){var n=e.rootState,o=e.commit,r=t.query;return n.api.backendInteractor.searchUsers({query:r}).then((function(e){return o("addNewUsers",e),e}))},signUp:function(e,t){return(0,o.Z)(i().mark((function n(){var o,r,s;return i().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.commit("signUpPending"),o=e.rootState,n.prev=2,n.next=5,o.api.backendInteractor.register({params:Ye({},t)});case 5:r=n.sent,e.commit("signUpSuccess"),e.commit("setToken",r.access_token),e.dispatch("loginUser",r.access_token),n.next=16;break;case 11:throw n.prev=11,n.t0=n.catch(2),s=n.t0.message,e.commit("signUpFailure",s),n.t0;case 16:case"end":return n.stop()}}),n,null,[[2,11]])})))()},getCaptcha:function(e){return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",e.rootState.api.backendInteractor.getCaptcha());case 1:case"end":return t.stop()}}),t)})))()},logout:function(e){var t=e.rootState,n=t.oauth,o=t.instance,r=Ye(Ye({},n),{},{commit:e.commit,instance:o.server});return Ne.getOrCreateApp(r).then((function(e){var t={app:e,instance:r.instance,token:n.userToken};return Ne.revokeToken(t)})).then((function(){e.commit("clearCurrentUser"),e.dispatch("disconnectFromSocket"),e.commit("clearToken"),e.dispatch("stopFetchingTimeline","friends"),e.commit("setBackendInteractor",xe(e.getters.getToken())),e.dispatch("stopFetchingNotifications"),e.dispatch("stopFetchingLists"),e.dispatch("stopFetchingFollowRequests"),e.commit("clearNotifications"),e.commit("resetStatuses"),e.dispatch("resetChats"),e.dispatch("setLastTimeline","public-timeline"),e.dispatch("setLayoutWidth",Te()),e.dispatch("setLayoutHeight",$e()),e.commit("clearServerSideStorage")}))},loginUser:function(e,t){return new Promise((function(n,o){var r=e.commit,i=e.dispatch;r("beginLogin"),e.rootState.api.backendInteractor.verifyCredentials(t).then((function(s){if(s.error){var a=s.error;r("endLogin"),[400,401,403,422].includes(a.status)&&r("clearToken"),401===a.status?o(new Error("Wrong username or password")):o(new Error("An error occurred, please try again"))}else{var u=s;u.credentials=t,u.blockIds=[],u.muteIds=[],u.domainMutes=[],r("setCurrentUser",u),r("setServerSideStorage",u),r("addNewUsers",[u]),i("fetchEmoji"),(c=window.Notification,c?"default"===c.permission?c.requestPermission():Promise.resolve(c.permission):Promise.resolve(null)).then((function(e){return r("setNotificationPermission",e)})),r("setBackendInteractor",xe(t)),i("pushServerSideStorage"),u.token&&(i("setWsToken",u.token),i("initializeSocket")),i("startFetchingLists"),u.locked&&i("startFetchingFollowRequests"),e.getters.mergedConfig.useStreamingApi?(i("fetchTimeline",{timeline:"friends",since:null}),i("fetchNotifications",{since:null}),i("enableMastoSockets",!0).catch((function(e){console.error("Failed initializing MastoAPI Streaming socket",e)})).then((function(){i("fetchChats",{latest:!0}),setTimeout((function(){return i("setNotificationsSilence",!1)}),1e4)}))):(i("startFetchingTimeline",{timeline:"friends"}),i("startFetchingNotifications"),i("startFetchingChats")),i("fetchMutes"),i("setLayoutWidth",Te()),i("setLayoutHeight",$e()),e.rootState.api.backendInteractor.fetchFriends({id:u.id}).then((function(e){return r("addNewUsers",e)}))}var c;r("endLogin"),n()})).catch((function(e){console.log(e),r("endLogin"),o(new Error("Failed to connect to server, try again"))}))}))}}};const st=it;var at=n(36459),ut=n(87462),ct=n(44925),lt=n(64689),dt=function(e,t){if(t.lastMessage&&(e.rootState.chats.currentChatId!==t.id||document.hidden)&&e.rootState.users.currentUser.id!==t.lastMessage.account_id){var n={tag:t.lastMessage.id,title:t.account.name,icon:t.account.profile_image_url,body:t.lastMessage.content};t.lastMessage.attachment&&"image"===t.lastMessage.attachment.type&&(n.image=t.lastMessage.attachment.preview_url),(0,lt.w)(e.rootState,n)}},pt=n(61796),mt=["timeline"];function ht(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ft(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ht(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ht(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var gt={state:{retryMultiplier:1,backendInteractor:xe(),fetchers:{},socket:null,mastoUserSocket:null,mastoUserSocketStatus:null,followRequests:[]},getters:{followRequestCount:function(e){return e.followRequests.length}},mutations:{setBackendInteractor:function(e,t){e.backendInteractor=t},addFetcher:function(e,t){var n=t.fetcherName,o=t.fetcher;e.fetchers[n]=o},removeFetcher:function(e,t){var n=t.fetcherName;t.fetcher,e.fetchers[n].stop(),delete e.fetchers[n]},setWsToken:function(e,t){e.wsToken=t},setSocket:function(e,t){e.socket=t},setFollowRequests:function(e,t){e.followRequests=t},setMastoUserSocketStatus:function(e,t){e.mastoUserSocketStatus=t},incrementRetryMultiplier:function(e){e.retryMultiplier=Math.max(++e.retryMultiplier,3)},resetRetryMultiplier:function(e){e.retryMultiplier=1}},actions:{enableMastoSockets:function(e,t){var n=e.state,o=e.dispatch,r=e.commit;if(!n.mastoUserSocket||[WebSocket.CLOSED,WebSocket.CLOSING].includes(n.mastoUserSocket.getState()))return r("setMastoUserSocketStatus",t?h._z.STARTING_INITIAL:h._z.STARTING),o("startMastoUserSocket")},disableMastoSockets:function(e){var t=e.state,n=e.dispatch,o=e.commit;if(t.mastoUserSocket)return o("setMastoUserSocketStatus",h._z.DISABLED),n("stopMastoUserSocket")},startMastoUserSocket:function(e){return new Promise((function(t,n){try{var o=e.state,r=e.commit,i=e.dispatch,s=e.rootState.statuses.timelines.friends;o.mastoUserSocket=o.backendInteractor.startUserSocket({store:e}),o.mastoUserSocket.addEventListener("message",(function(t){var n=t.detail;n&&("notification"===n.event?i("addNewNotifications",{notifications:[n.notification],older:!1}):"update"===n.event?i("addNewStatuses",{statuses:[n.status],userId:!1,showImmediately:0===s.visibleStatuses.length,timeline:"friends"}):"status.update"===n.event?i("addNewStatuses",{statuses:[n.status],userId:!1,showImmediately:n.status.id in s.visibleStatusesObject,timeline:"friends"}):"delete"===n.event?i("deleteStatusById",n.id):"pleroma:chat_update"===n.event&&setTimeout((function(){i("addChatMessages",{chatId:n.chatUpdate.id,messages:[n.chatUpdate.lastMessage]}),i("updateChat",{chat:n.chatUpdate}),dt(e,n.chatUpdate)}),100))})),o.mastoUserSocket.addEventListener("open",(function(){o.mastoUserSocketStatus!==h._z.STARTING_INITIAL&&i("pushGlobalNotice",{level:"success",messageKey:"timeline.socket_reconnected",timeout:5e3}),new Set([h._z.ERROR,h._z.DISABLED]).has(o.mastoUserSocketStatus)&&(i("stopFetchingTimeline",{timeline:"friends"}),i("stopFetchingNotifications"),i("stopFetchingChats")),r("resetRetryMultiplier"),r("setMastoUserSocketStatus",h._z.JOINED)})),o.mastoUserSocket.addEventListener("error",(function(e){var t=e.detail;console.error("Error in MastoAPI websocket:",t),i("clearOpenedChats")})),o.mastoUserSocket.addEventListener("close",(function(e){var t=e.detail,n=new Set([1e3,1001]),s=t.code;n.has(s)?(console.debug("Not restarting socket becasue of closure code ".concat(s," is in ignore list")),r("setMastoUserSocketStatus",h._z.CLOSED)):(console.warn("MastoAPI websocket disconnected, restarting. CloseEvent code: ".concat(s)),setTimeout((function(){i("startMastoUserSocket")}),1e3*o.retryMultiplier),r("incrementRetryMultiplier"),o.mastoUserSocketStatus!==h._z.ERROR&&(i("startFetchingTimeline",{timeline:"friends"}),i("startFetchingNotifications"),i("startFetchingChats"),i("pushGlobalNotice",{level:"error",messageKey:"timeline.socket_broke",messageArgs:[s],timeout:5e3})),r("setMastoUserSocketStatus",h._z.ERROR)),i("clearOpenedChats")})),t()}catch(e){n(e)}}))},stopMastoUserSocket:function(e){var t=e.state,n=e.dispatch;n("startFetchingTimeline",{timeline:"friends"}),n("startFetchingNotifications"),n("startFetchingChats"),t.mastoUserSocket.close()},startFetchingTimeline:function(e,t){var n=t.timeline,o=void 0===n?"friends":n,r=t.tag,i=void 0!==r&&r,s=t.userId,a=void 0!==s&&s,u=t.listId,c=void 0!==u&&u;if(!e.state.fetchers[o]){var l=e.state.backendInteractor.startFetchingTimeline({timeline:o,store:e,userId:a,listId:c,tag:i});e.commit("addFetcher",{fetcherName:o,fetcher:l})}},stopFetchingTimeline:function(e,t){var n=e.state.fetchers[t];n&&e.commit("removeFetcher",{fetcherName:t,fetcher:n})},fetchTimeline:function(e,t){var n=t.timeline,o=(0,ct.Z)(t,mt);e.state.backendInteractor.fetchTimeline(ft({store:e,timeline:n},o))},startFetchingNotifications:function(e){if(!e.state.fetchers.notifications){var t=e.state.backendInteractor.startFetchingNotifications({store:e});e.commit("addFetcher",{fetcherName:"notifications",fetcher:t})}},stopFetchingNotifications:function(e){var t=e.state.fetchers.notifications;t&&e.commit("removeFetcher",{fetcherName:"notifications",fetcher:t})},fetchNotifications:function(e,t){var n=(0,ut.Z)({},((0,at.Z)(t),t));e.state.backendInteractor.fetchNotifications(ft({store:e},n))},startFetchingFollowRequests:function(e){if(!e.state.fetchers.followRequests){var t=e.state.backendInteractor.startFetchingFollowRequests({store:e});e.commit("addFetcher",{fetcherName:"followRequests",fetcher:t})}},stopFetchingFollowRequests:function(e){var t=e.state.fetchers.followRequests;t&&e.commit("removeFetcher",{fetcherName:"followRequests",fetcher:t})},removeFollowRequest:function(e,t){var n=e.state.followRequests.filter((function(e){return e!==t}));e.commit("setFollowRequests",n)},startFetchingLists:function(e){if(!e.state.fetchers.lists){var t=e.state.backendInteractor.startFetchingLists({store:e});e.commit("addFetcher",{fetcherName:"lists",fetcher:t})}},stopFetchingLists:function(e){var t=e.state.fetchers.lists;t&&e.commit("removeFetcher",{fetcherName:"lists",fetcher:t})},setWsToken:function(e,t){e.commit("setWsToken",t)},initializeSocket:function(e){var t=e.dispatch,n=e.commit,o=e.state,r=e.rootState,i=o.wsToken;if(r.instance.shoutAvailable&&void 0!==i&&null===o.socket){var s=new pt.sk("/socket",{params:{token:i}});s.connect(),n("setSocket",s),t("initializeShout",s)}},disconnectFromSocket:function(e){var t=e.commit,n=e.state;n.socket&&n.socket.disconnect(),t("setSocket",null)}}};const vt=gt;var wt=n(36968),bt=n.n(wt),yt=n(27361),Dt=n.n(yt);function _t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var kt=function(e,t){var n=e.rootState,o=e.commit,r=t.path,i=t.value,s={};return bt()(s,r,i),n.api.backendInteractor.updateProfile({params:s}).then((function(e){o("addNewUsers",[e]),o("setCurrentUser",e)}))},Ct=function(e,t){var n=e.rootState,o=e.commit,r=t.path,i=t.value,s=t.oldValue,a={};return bt()(a,r,i),n.api.backendInteractor.updateNotificationSettings({settings:a}).then((function(e){"success"===e.status?o("confirmProfileOption",{name,value:i}):o("confirmProfileOption",{name,value:s})}))},St={defaultScope:"source.privacy",defaultNSFW:"source.sensitive",stripRichContent:{get:"source.pleroma.no_rich_text",set:"no_rich_text"},locked:"locked",acceptChatMessages:{get:"pleroma.accepts_chat_messages",set:"accepts_chat_messages"},allowFollowingMove:{get:"pleroma.allow_following_move",set:"allow_following_move"},discoverable:{get:"source.pleroma.discoverable",set:"discoverable"},hideFavorites:{get:"pleroma.hide_favorites",set:"hide_favorites"},hideFollowers:{get:"pleroma.hide_followers",set:"hide_followers"},hideFollows:{get:"pleroma.hide_follows",set:"hide_follows"},hideFollowersCount:{get:"pleroma.hide_followers_count",set:"hide_followers_count"},hideFollowsCount:{get:"pleroma.hide_follows_count",set:"hide_follows_count"},webPushHideContents:{get:"pleroma.notification_settings.hide_notification_contents",set:"hide_notification_contents",api:Ct},blockNotificationsFromStrangers:{get:"pleroma.notification_settings.block_from_strangers",set:"block_from_strangers",api:Ct}},jt={state:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_t(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_t(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},Object.fromEntries(Object.keys(St).map((function(e){return[e,null]})))),mutations:{confirmProfileOption:function(e,t){var n=t.name,o=t.value;bt()(e,n,o)},wipeProfileOption:function(e,t){var n=t.name;bt()(e,n,null)},wipeAllProfileOptions:function(e){Object.keys(St).forEach((function(t){bt()(e,t,null)}))},setCurrentUser:function(e,t){Object.entries(St).forEach((function(n){var o=(0,c.Z)(n,2),r=o[0],i=o[1],s=i.get,a=void 0===s?i:s;bt()(e,r,Dt()(t._original,a))}))}},actions:{setProfileOption:function(e,t){var n=e.rootState,o=e.state,r=e.commit,i=(e.dispatch,t.name),s=t.value,a=Dt()(o,i),u=St[i];if(!u)throw new Error("Invalid server-side setting");var c=u.set,l=void 0===c?u:c,d=u.api,p=void 0===d?kt:d;r("wipeProfileOption",{name:i}),p({rootState:n,commit:r},{path:l,value:s,oldValue:a}).catch((function(e){console.warn("Error setting server-side option:",e),r("confirmProfileOption",{name:i,value:a})}))},logout:function(e){(0,e.commit)("wipeAllProfileOptions")}}};const Ft=jt;var At=n(87185),Ot=n.n(At),Et=n(69579),zt=n.n(Et),Pt=n(7436),It=n.n(Pt),xt=n(7739),Tt=n.n(xt),$t=n(85564),Bt=n.n($t),Ut=n(74691),Mt=n.n(Ut),Lt=n(50361),Rt=n.n(Lt),qt=n(18446),Nt=n.n(qt),Zt=n(2262),Wt=n(48328),Ht=n(9382),Vt=(n(31934),n(95326),n(43011),n(68789),n(84131));Ht.vI.add(Vt.NBC),Wt.Z;var Kt=["_journal"],Gt=["_timestamp","_version"],Yt=["_timestamp","_version"];function Jt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Qt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jt(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Xt=new Date("2022-08-04"),en=1001,tn={dirty:!1,flagStorage:{updateCounter:0,reset:0},prefsStorage:{_journal:[],simple:{dontShowUpdateNotifs:!1,collapseNav:!1},collections:{pinnedNavItems:["home","dms","chats"]}},raw:null,cache:null},nn=Qt(Qt({},tn.flagStorage),{},{updateCounter:1}),on=function(e,t,n){var o=e.indexOf(t),r=o+n,i=(0,l.Z)(e);return i.splice(o,1),i.splice(Mt()(r,0,i.length+1),0,t),i},rn=function(e,t){return Qt(Qt({},e),{},{_user:t,_timestamp:Date.now(),_version:1})},sn=function(e){return e._timestamp>0&&e._version>0},an=function(e){e.prefsStorage=e.prefsStorage||{simple:{},collections:{}},Object.entries(tn.prefsStorage.simple).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];"number"!=typeof r&&"boolean"!=typeof r&&(console.warn("Preference simple.".concat(o," as invalid type, reinitializing")),bt()(e.prefsStorage.simple,o,tn.prefsStorage.simple[o]))})),Object.entries(tn.prefsStorage.collections).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];Array.isArray(r)||(console.warn("Preference collections.".concat(o," as invalid type, reinitializing")),bt()(e.prefsStorage.collections,o,tn.prefsStorage.collections[o]))}))},un=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o=Bt()(t.map((function(e){return Array.isArray(e)?e:[]}))).filter((function(e){return Object.prototype.hasOwnProperty.call(e,"path")&&Object.prototype.hasOwnProperty.call(e,"operation")&&Object.prototype.hasOwnProperty.call(e,"args")&&Object.prototype.hasOwnProperty.call(e,"timestamp")})),r=Tt()(o,"path"),i=Object.entries(r).map((function(e){var t=(0,c.Z)(e,2),n=t[0],o=t[1];if(o.sort((function(e,t){return e.timestamp>t.timestamp?1:-1})),n.startsWith("collections")){var r,i=It()(o,(function(e){return"removeFromCollection"===e.operation}));return r=i>0?o.slice(i):o,Ot()(r,(function(e,t){return e.path===t.path&&e.operation===t.operation&&"addToCollection"===e.operation&&e.args[0]===t.args[0]}))}return n.startsWith("simple")?zt()(o):o}));return Bt()(i).sort((function(e,t){return e.timestamp>t.timestamp?1:-1}))},cn={clearServerSideStorage:function(e,t){Qt({},Rt()(tn))},setServerSideStorage:function(e,t){var n=t.storage;e.raw=n;var o=e.cache;o&&o._user!==t.fqn&&(console.warn("cache belongs to another user! reinitializing local cache!"),o=null);var r=function(e,t){var n={recent:null,stale:null,needUpload:!1},o=sn(e||{}),r=sn(t||{});return!r&&o?(n.needUpload=!0,console.debug("Nothing valid stored on server, assuming cache to be source of truth"),n.recent=e,n.stale=t):!o&&r?(console.debug("Valid storage on server found, no local cache found, using live as source of truth"),n.recent=t,n.stale=e):o&&r?(console.debug("Both sources have valid data, figuring things out..."),t._timestamp===e._timestamp&&t._version===e._version?(console.debug("Same version/timestamp on both source, source of truth irrelevant"),n.recent=e,n.stale=t):(console.debug("Different timestamp, figuring out which one is more recent"),t._timestamp<e._timestamp?(n.recent=e,n.stale=t):(n.recent=t,n.stale=e))):(console.debug("Both sources are invalid, start from scratch"),n.needUpload=!0),n}(o=function(e){return e?(e._version<1&&(console.debug("Local cached data has older version, seeing if there any migrations that can be applied"),console.debug("No migrations found")),e._version>1&&(console.debug("Local cached data has newer version, seeing if there any reverse migrations that can be applied"),window._PLEROMA_HOTPATCH&&window._PLEROMA_HOTPATCH.reverseMigrations)?(console.debug("Found hotpatch migration, applying"),window._PLEROMA_HOTPATCH.reverseMigrations.call({},"serverSideStorage",{from:e._version,to:1},e)):e):e}(o),n),i=r.recent,s=r.stale,a=r.needsUpload,u=t.created_at>Xt,d=u?nn:tn.flagStorage,p=!1;if(null===i&&(console.debug("Data is empty, initializing for ".concat(u?"new":"existing"," user")),i=rn({flagStorage:Qt({},d),prefsStorage:Qt({},tn.prefsStorage)})),!a&&i&&s){console.debug("Checking if data needs merging...");var m=i,h=(m._timestamp,m._version,(0,ct.Z)(m,Gt)),f=(s._timestamp,s._version,(0,ct.Z)(s,Yt));p=!Nt()(h,f),console.debug("Data ".concat(p?"needs":"doesn't need"," merging"))}var g,v,w=function(e,t){return Array.from(new Set([].concat((0,l.Z)(Object.keys((0,Zt.IU)((e||{}).flagStorage||{}))),(0,l.Z)(Object.keys((0,Zt.IU)((t||{}).flagStorage||{}))))))}(i,s);p?(console.debug("Merging the data..."),g=function(e,t,n){return t.flagStorage?e.flagStorage?Object.fromEntries(n.map((function(n){var o=e.flagStorage[n],r=t.flagStorage[n];return[n,Number((o>r?o:r)||0)]}))):t.flagStorage:e.flagStorage}(i,s,w),an(i),an(s),v=function(e,t,n){if(!t)return e;if(!e)return t;var o=e._journal,r=(0,ct.Z)(e,Kt),i=t._journal,s=Qt({},r),a=un(i,o);return a.forEach((function(e){var t=e.path,n=(e.timestamp,e.operation),o=(e.command,e.args);if(t.startsWith("_"))console.error("journal contains entry to edit internal (starts with _) field '".concat(t,"', something is incorrect here, ignoring."));else switch(n){case"set":bt()(s,t,o[0]);break;case"addToCollection":bt()(s,t,Array.from(new Set(Dt()(s,t)).add(o[0])));break;case"removeFromCollection":var r=new Set(Dt()(s,t));r.delete(o[0]),bt()(s,t,Array.from(r));break;case"reorderCollection":var i=(0,c.Z)(o,2),a=i[0],u=i[1];bt()(s,t,on(Dt()(s,t),a,u));break;default:console.error("Unknown journal operation: '".concat(n,"', did we forget to run reverse migrations beforehand?"))}})),Qt(Qt({},s),{},{_journal:a})}(i.prefsStorage,s.prefsStorage)):(g=i.flagStorage,v=i.prefsStorage),g=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:tn.flagStorage,n=Qt({},e),o=Object.keys(e);if(e.reset>=1e3&&e.reset<=en){console.debug("Received command to trim the flags");var r=new Set(Object.keys(t));n={},o.forEach((function(t){r.has(t)&&(n[t]=e[t])})),e.reset===en&&(console.debug("Received command to reset the flags"),Object.keys(t).forEach((function(e){n[e]=0})))}else e.reset>0&&e.reset<9e3&&(console.debug("Received command to reset the flags"),o.forEach((function(e){n[e]=0})));return n.reset=0,n}(g),i.flagStorage=Qt(Qt({},d),g),i.prefsStorage=Qt(Qt({},tn.prefsStorage),v),e.dirty=p||a,e.cache=i,s&&i&&!e.dirty&&(e.cache._timestamp=Math.min(s._timestamp,i._timestamp)),e.flagStorage=e.cache.flagStorage,e.prefsStorage=e.cache.prefsStorage},setFlag:function(e,t){var n=t.flag,o=t.value;e.flagStorage[n]=o,e.dirty=!0},setPreference:function(e,t){var n=t.path,o=t.value;n.startsWith("_")?console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring.")):(bt()(e.prefsStorage,n,o),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"set",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0)},addCollectionPreference:function(e,t){var n=t.path,o=t.value;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var r=new Set(Dt()(e.prefsStorage,n));r.add(o),bt()(e.prefsStorage,n,(0,l.Z)(r)),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"addToCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},removeCollectionPreference:function(e,t){var n=t.path,o=t.value;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var r=new Set(Dt()(e.prefsStorage,n));r.delete(o),bt()(e.prefsStorage,n,(0,l.Z)(r)),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"removeFromCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},reorderCollectionPreference:function(e,t){var n=t.path,o=t.value,r=t.movement;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var i=Dt()(e.prefsStorage,n),s=on(i,o,r);bt()(e.prefsStorage,n,s),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"arrangeCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},updateCache:function(e,t){var n=t.username;e.prefsStorage._journal=un(e.prefsStorage._journal),e.cache=rn({flagStorage:(0,Zt.IU)(e.flagStorage),prefsStorage:(0,Zt.IU)(e.prefsStorage)},n)}};const ln={state:Qt({},Rt()(tn)),mutations:cn,actions:{pushServerSideStorage:function(e){var t=e.state,n=e.rootState,o=e.commit,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.force,s=void 0!==i&&i,a=t.dirty||s;if(console.log(a),a){o("updateCache",{username:n.users.currentUser.fqn});var u={pleroma_settings_store:{"pleroma-fe":t.cache}};n.api.backendInteractor.updateProfile({params:u}).then((function(e){o("setServerSideStorage",e),t.dirty=!1}))}}}};var dn=n(84506),pn=n(29521),mn=n.n(pn);function hn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hn(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var gn={frontends:[],loaded:!1,needsReboot:null,config:null,modifiedPaths:null,descriptions:null,draft:null,dbConfigEnabled:null},vn=(fn({},gn.flagStorage),{state:fn({},Rt()(gn)),mutations:{setInstanceAdminNoDbConfig:function(e){e.loaded=!1,e.dbConfigEnabled=!1},setAvailableFrontends:function(e,t){var n=t.frontends;e.frontends=n.map((function(e){return"pleroma-fe"===e.name?e.refs=["master","develop"]:e.refs=[e.ref],e}))},updateAdminSettings:function(e,t){var n=t.config,o=t.modifiedPaths;e.loaded=!0,e.dbConfigEnabled=!0,e.config=n,e.modifiedPaths=o},updateAdminDescriptions:function(e,t){var n=t.descriptions;e.descriptions=n},updateAdminDraft:function(e,t){var n=t.path,o=t.value,r=(0,c.Z)(n,3),i=[r[0],r[1],r[2]];bt()(e.draft,n,o),n.length>i.length&&bt()(e.draft,i,Rt()(Dt()(e.draft,i)))},resetAdminDraft:function(e){e.draft=Rt()(e.config)}},actions:{loadFrontendsStuff:function(e){e.state;var t=e.rootState,n=(e.dispatch,e.commit);t.api.backendInteractor.fetchAvailableFrontends().then((function(e){return n("setAvailableFrontends",{frontends:e})}))},loadAdminStuff:function(e){var t=e.state,n=e.rootState,o=e.dispatch,r=e.commit;n.api.backendInteractor.fetchInstanceDBConfig().then((function(e){e.error?400===e.error.status&&e.error.json().then((function(e){/configurable_from_database/.test(e.error)&&r("setInstanceAdminNoDbConfig")})):o("setInstanceAdminSettings",{backendDbConfig:e})})),null===t.descriptions&&n.api.backendInteractor.fetchInstanceConfigDescriptions().then((function(e){return o("setInstanceAdminDescriptions",{backendDescriptions:e})}))},setInstanceAdminSettings:function(e,t){var n=e.state,o=e.commit,r=(e.dispatch,t.backendDbConfig),i=n.config||{},s=new Set;r.configs.forEach((function(e){var t=[e.group,e.key];e.db&&e.db.forEach((function(e){return s.add([].concat(t,[e]).join(" -> "))})),bt()(i,t,function e(t){return Array.isArray(t)&&t.length>0&&t[0].tuple?t.reduce((function(t,n){return fn(fn({},t),{},(0,d.Z)({},n.tuple[0],e(n.tuple[1])))}),{}):t}(e.value))})),console.log(i[":pleroma"]),o("updateAdminSettings",{config:i,modifiedPaths:s}),o("resetAdminDraft")},setInstanceAdminDescriptions:function(e,t){e.state;var n=e.commit,o=(e.dispatch,t.backendDescriptions),r=function e(t,n,o){var r=t.children,i=t.description,s=t.label,a=t.key,u=void 0===a?"<ROOT>":a,c=t.group,l=t.suggestions,d=c?[c,u]:[u],p={description:i,label:s,suggestions:l};Array.isArray(r)&&r.forEach((function(t){e(t,0,p)})),bt()(o,d,p)},i={};o.forEach((function(e){return r(e,0,i)})),console.log(i[":pleroma"]["Pleroma.Captcha"]),n("updateAdminDescriptions",{descriptions:i})},pushAdminDraft:function(e){var t=e.rootState,n=e.state,o=(e.commit,e.dispatch),r=function e(t){return"object"!==(0,de.Z)(t)?t:Array.isArray(t)?t.map(e):Object.entries(t).map((function(e){var t=(0,c.Z)(e,2);return{tuple:[t[0],t[1]]}}))},i=Bt()(Object.entries(n.config).map((function(e){var t=(0,c.Z)(e,2),n=t[0],o=t[1];return Object.keys(o).map((function(e){return{group:n,key:e}}))}))).filter((function(e){var t=e.group,o=e.key;return!Nt()(n.config[t][o],n.draft[t][o])})).map((function(e){var t=e.group,o=e.key,i=n.config[t][o],s=n.draft[t][o],a=Object.entries(i),u=Object.entries(s);return{group:t,key:o,value:r(Object.fromEntries(mn()(u,a,Nt())))}}));t.api.backendInteractor.pushInstanceDBConfig({payload:{configs:i}}).then((function(){return t.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return o("setInstanceAdminSettings",{backendDbConfig:e})}))},pushAdminSetting:function(e,t){var n=e.rootState,o=(e.state,e.commit,e.dispatch),r=t.path,i=t.value,s=Array.isArray(r)?r:r.split(/\./g),a=(0,dn.Z)(s),u=a[0],l=a[1],d=a.slice(2),p={};bt()(p,d,i),n.api.backendInteractor.pushInstanceDBConfig({payload:{configs:[{group:u,key:l,value:function e(t){return"object"!==(0,de.Z)(t)?t:Array.isArray(t)?t.map(e):Object.entries(t).map((function(e){var t=(0,c.Z)(e,2);return{tuple:[t[0],t[1]]}}))}(p)}]}}).then((function(){return n.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return o("setInstanceAdminSettings",{backendDbConfig:e})}))},resetAdminSetting:function(e,t){var n=e.rootState,o=e.state,r=(e.commit,e.dispatch),i=t.path,s=i.split(/\./g),a=(0,c.Z)(s,3),u=a[0],l=a[1],d=a[2];return o.modifiedPaths.delete(i),n.api.backendInteractor.pushInstanceDBConfig({payload:{configs:[{group:u,key:l,delete:!0,subkeys:[d]}]}}).then((function(){return n.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return r("setInstanceAdminSettings",{backendDbConfig:e})}))}}});const wn=vn,bn={state:{messages:[],channel:{state:""},joined:!1},mutations:{setChannel:function(e,t){e.channel=t},addMessage:function(e,t){e.messages.push(t),e.messages=e.messages.slice(-19,20)},setMessages:function(e,t){e.messages=t.slice(-19,20)},setJoined:function(e,t){e.joined=t}},actions:{initializeShout:function(e,t){var n=t.channel("chat:public");n.joinPush.receive("ok",(function(){e.commit("setJoined",!0)})),n.onClose((function(){e.commit("setJoined",!1)})),n.onError((function(){e.commit("setJoined",!1)})),n.on("new_msg",(function(t){e.commit("addMessage",t)})),n.on("messages",(function(t){var n=t.messages;e.commit("setMessages",n)})),n.join(),e.commit("setChannel",n)}}},yn={state:{clientId:!1,clientSecret:!1,appToken:!1,userToken:!1},mutations:{setClientData:function(e,t){var n=t.clientId,o=t.clientSecret;e.clientId=n,e.clientSecret=o},setAppToken:function(e,t){e.appToken=t},setToken:function(e,t){e.userToken=t},clearToken:function(e){e.userToken=!1,delete e.token}},getters:{getToken:function(e){return function(){return e.userToken||e.token||e.appToken}},getUserToken:function(e){return function(){return e.userToken||e.token}}}};var Dn="password",_n="token",kn="totp",Cn="recovery",Sn=function(e){e.strategy=e.initStrategy,e.settings={}};const jn={namespaced:!0,state:{settings:{},strategy:Dn,initStrategy:Dn},getters:{settings:function(e,t){return e.settings},requiredPassword:function(e,t,n){return e.strategy===Dn},requiredToken:function(e,t,n){return e.strategy===_n},requiredTOTP:function(e,t,n){return e.strategy===kn},requiredRecovery:function(e,t,n){return e.strategy===Cn}},mutations:{setInitialStrategy:function(e,t){t&&(e.initStrategy=t,e.strategy=t)},requirePassword:function(e){e.strategy=Dn},requireToken:function(e){e.strategy=_n},requireMFA:function(e,t){var n=t.settings;e.settings=n,e.strategy=kn},requireRecovery:function(e){e.strategy=Cn},requireTOTP:function(e){e.strategy=kn},abortMFA:function(e){Sn(e)}},actions:{login:function(e,t){return(0,o.Z)(i().mark((function n(){var o,r,s,a;return i().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=e.state,r=e.dispatch,s=e.commit,a=t.access_token,s("setToken",a,{root:!0}),n.next=5,r("loginUser",a,{root:!0});case 5:Sn(o);case 6:case"end":return n.stop()}}),n)})))()}}};var Fn=n(58394),An=new Set(["image","video","audio","flash"]),On={state:{media:[],currentIndex:0,activated:!1},mutations:{setMedia:function(e,t){e.media=t},setCurrentMedia:function(e,t){e.activated=!0,e.currentIndex=t},close:function(e){e.activated=!1}},actions:{setMedia:function(e,t){var n=e.commit,o=t.filter((function(e){var t=Fn.ZP.fileType(e.mimetype);return An.has(t)}));n("setMedia",o)},setCurrentMedia:function(e,t){(0,e.commit)("setCurrentMedia",e.state.media.indexOf(t)||0)},closeMediaViewer:function(e){(0,e.commit)("close")}}};const En=On,zn={state:{tokens:[]},actions:{fetchTokens:function(e){var t=e.rootState,n=e.commit;t.api.backendInteractor.fetchOAuthTokens().then((function(e){n("swapTokens",e)}))},revokeToken:function(e,t){var n=e.rootState,o=e.commit,r=e.state;n.api.backendInteractor.revokeOAuthToken({id:t}).then((function(e){201===e.status&&o("swapTokens",r.tokens.filter((function(e){return e.id!==t})))}))}},mutations:{swapTokens:function(e,t){e.tokens=t}}};var Pn=n(63105),In=n.n(Pn),xn={state:{reportModal:{userId:null,statuses:[],preTickedIds:[],activated:!1},reports:{}},mutations:{openUserReportingModal:function(e,t){var n=t.userId,o=t.statuses,r=t.preTickedIds;e.reportModal.userId=n,e.reportModal.statuses=o,e.reportModal.preTickedIds=r,e.reportModal.activated=!0},closeUserReportingModal:function(e){e.reportModal.activated=!1},setReportState:function(e,t){var n=t.id,o=t.state;e.reports[n].state=o},addReport:function(e,t){e.reports[t.id]=t}},actions:{openUserReportingModal:function(e,t){var n=e.rootState,o=e.commit,r=t.userId,i=t.statusIds,s=void 0===i?[]:i,a=s.map((function(e){return n.statuses.allStatusesObject[e]})),u=s,c=a.concat(In()(n.statuses.allStatuses,(function(e){return e.user.id===r&&!u.includes(e.id)})));o("openUserReportingModal",{userId:r,statuses:c,preTickedIds:u})},closeUserReportingModal:function(e){(0,e.commit)("closeUserReportingModal")},setReportState:function(e,t){var n=e.commit,o=e.dispatch,r=e.rootState,i=t.id,s=t.state,a=r.reports.reports[i].state;n("setReportState",{id:i,state:s}),r.api.backendInteractor.setReportState({id:i,state:s}).catch((function(e){console.error("Failed to set report state",e),o("pushGlobalNotice",{level:"error",messageKey:"general.generic_error_message",messageArgs:[e.message],timeout:5e3}),n("setReportState",{id:i,state:a})}))},addReport:function(e,t){(0,e.commit)("addReport",t)}}};const Tn=xn;const $n={state:{trackedPolls:{},pollsObject:{}},mutations:{mergeOrAddPoll:function(e,t){var n=e.pollsObject[t.id];t.expired=Date.now()>Date.parse(t.expires_at),e.pollsObject[t.id]=n?I()(n,t):t},trackPoll:function(e,t){var n=e.trackedPolls[t];e.trackedPolls[t]=n?n+1:1},untrackPoll:function(e,t){var n=e.trackedPolls[t];e.trackedPolls[t]=n?n-1:0}},actions:{mergeOrAddPoll:function(e,t){(0,e.commit)("mergeOrAddPoll",t)},updateTrackedPoll:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit;n.api.backendInteractor.fetchPoll({pollId:t}).then((function(e){setTimeout((function(){n.polls.trackedPolls[t]&&o("updateTrackedPoll",t)}),3e4),r("mergeOrAddPoll",e)}))},trackPoll:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch;n.polls.trackedPolls[t]||setTimeout((function(){return r("updateTrackedPoll",t)}),3e4),o("trackPoll",t)},untrackPoll:function(e,t){(0,e.commit)("untrackPoll",t)},votePoll:function(e,t){var n=e.rootState,o=e.commit,r=(t.id,t.pollId),i=t.choices;return n.api.backendInteractor.vote({pollId:r,choices:i}).then((function(e){return o("mergeOrAddPoll",e),e}))}}},Bn={state:{params:null,modalActivated:!1},mutations:{openPostStatusModal:function(e,t){e.params=t,e.modalActivated=!0},closePostStatusModal:function(e){e.modalActivated=!1},resetPostStatusModal:function(e){e.params=null}},actions:{openPostStatusModal:function(e,t){(0,e.commit)("openPostStatusModal",t)},closePostStatusModal:function(e){(0,e.commit)("closePostStatusModal")},resetPostStatusModal:function(e){(0,e.commit)("resetPostStatusModal")}}},Un={state:{params:null,modalActivated:!1},mutations:{openEditStatusModal:function(e,t){e.params=t,e.modalActivated=!0},closeEditStatusModal:function(e){e.modalActivated=!1}},actions:{openEditStatusModal:function(e,t){(0,e.commit)("openEditStatusModal",t)},closeEditStatusModal:function(e){(0,e.commit)("closeEditStatusModal")}}},Mn={state:{params:{},modalActivated:!1},mutations:{openStatusHistoryModal:function(e,t){e.params=t,e.modalActivated=!0},closeStatusHistoryModal:function(e){e.modalActivated=!1}},actions:{openStatusHistoryModal:function(e,t){(0,e.commit)("openStatusHistoryModal",t)},closeStatusHistoryModal:function(e){(0,e.commit)("closeStatusHistoryModal")}}};var Ln=n(73303),Rn=n.n(Ln),qn=n(75472),Nn=n.n(qn),Zn=n(73955),Wn=n.n(Zn),Hn=n(89734),Vn=n.n(Hn);function Kn(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Gn(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var Yn={add:function(e,t){var n=t.messages,o=t.updateMaxId,r=void 0===o||o;if(e)for(var i=function(){var t=n[s];if(t.chat_id!==e.chatId)return{v:void 0};if(t.fakeId){var o=e.idIndex[t.fakeId];if(o)return e.idIndex[t.id]&&(delete e.idIndex[t.id],e.messages=e.messages.filter((function(e){return e.id!==t.id}))),Object.assign(o,t,{error:!1}),delete o.fakeId,e.idIndex[o.id]=o,delete e.idIndex[t.fakeId],{v:void 0}}(!e.minId||!t.pending&&t.id<e.minId)&&(e.minId=t.id),(!e.maxId||t.id>e.maxId)&&r&&(e.maxId=t.id),e.idIndex[t.id]||function(e,t){if(t.idempotency_key)return e.idempotencyKeyIndex[t.idempotency_key]}(e,t)||(e.lastSeenMessageId<t.id&&e.newMessageCount++,e.idIndex[t.id]=t,e.messages.push(e.idIndex[t.id]),e.idempotencyKeyIndex[t.idempotency_key]=!0)},s=0;s<n.length;s++){var a=i();if("object"===(0,de.Z)(a))return a.v}},empty:function(e){return{idIndex:{},idempotencyKeyIndex:{},messages:[],newMessageCount:0,lastSeenMessageId:"0",chatId:e,minId:void 0,maxId:void 0}},getView:function(e){if(!e)return[];var t,n=[],o=Nn()(e.messages,["pending","id"],["asc","asc"]),r=o[0],i=o[o.length-1];if(r){var s=new Date(r.created_at);s.setHours(0,0,0,0),n.push({type:"date",date:s,id:s.getTime().toString()})}for(var a=!1,u=0;u<o.length;u++){var c=o[u],l=o[u+1],d=new Date(c.created_at);d.setHours(0,0,0,0),i&&i.date<d&&(n.push({type:"date",date:d,id:d.getTime().toString()}),i.isTail=!0,t=void 0,a=!0);var p={type:"message",data:c,date:d,id:c.id,messageChainId:t};(l&&l.account_id)!==c.account_id&&(p.isTail=!0,t=void 0),((i&&i.data&&i.data.account_id)!==c.account_id||a)&&(t=Wn()(),p.isHead=!0,p.messageChainId=t),n.push(p),i=p,a=!1}return n},deleteMessage:function(e,t){if(e){if(e.messages=e.messages.filter((function(e){return e.id!==t})),delete e.idIndex[t],e.maxId===t){var n=B()(e.messages,"id");e.maxId=n.id}if(e.minId===t){var o=T()(e.messages,"id");e.minId=o.id}}},cullOlderMessages:function(e){var t=e.messages.length,n=t-50;if(!(t<=50)){e.messages=Vn()(e.messages,["id"]),e.minId=e.messages[n].id;var o,r=Kn(e.messages);try{for(r.s();!(o=r.n()).done;){var i=o.value;i.id<e.minId&&(delete e.idIndex[i.id],delete e.idempotencyKeyIndex[i.idempotency_key])}}catch(e){r.e(e)}finally{r.f()}e.messages=e.messages.slice(n,t)}},resetNewMessageCount:function(e){e&&(e.newMessageCount=0,e.lastSeenMessageId=e.maxId)},clear:function(e){var t,n=[],o=Kn(e.messages);try{for(o.s();!(t=o.n()).done;){var r=t.value;r.error?n.push(r.id):(delete e.idIndex[r.id],delete e.idempotencyKeyIndex[r.idempotency_key])}}catch(e){o.e(e)}finally{o.f()}e.messages=e.messages.filter((function(e){return n.includes(e.id)})),e.newMessageCount=0,e.lastSeenMessageId="0",e.minId=void 0,e.maxId=void 0},handleMessageError:function(e,t,n){if(e){var o=e.idIndex[t];if(o&&(o.error=!0,o.pending=!1,!n)){var r=Nn()(e.messages,["pending","id"],["asc","desc"])[0];if(r){var i=o.id;o.id="".concat(r.id,"-").concat((new Date).getTime()),e.idIndex[o.id]=o,delete e.idIndex[i]}}}}};const Jn=Yn;var Qn=n(27742);function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xn(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var to={chatList:{data:[],idStore:{}},chatListFetcher:null,openedChats:(0,Zt.qj)({}),openedChatMessageServices:(0,Zt.qj)({}),fetcher:void 0,currentChatId:null,lastReadMessageId:null},no=function(e,t){return M()(e.chatList.data,{id:t})},oo={state:eo({},to),getters:{currentChat:function(e){return e.openedChats[e.currentChatId]},currentChatMessageService:function(e){return e.openedChatMessageServices[e.currentChatId]},findOpenedChatByRecipientId:function(e){return function(t){return M()(e.openedChats,(function(e){return e.account.id===t}))}},sortedChatList:function(e){return Nn()(e.chatList.data,["updated_at"],["desc"])},unreadChatCount:function(e){return Rn()(e.chatList.data,"unread")}},actions:{startFetchingChats:function(e){var t=e.dispatch,n=e.commit,o=function(){return t("fetchChats",{latest:!0})};o(),n("setChatListFetcher",{fetcher:function(){return(0,Ce.F)(o,5e3)}})},stopFetchingChats:function(e){(0,e.commit)("setChatListFetcher",{fetcher:void 0})},fetchChats:function(e){var t=e.dispatch,n=e.rootState;return e.commit,n.api.backendInteractor.chats().then((function(e){var n=e.chats;return t("addNewChats",{chats:n}),n}))},addNewChats:function(e,t){var n=t.chats,o=e.commit,r=e.dispatch,i=e.rootGetters;o("addNewUsers",n.map((function(e){return e.account})).filter((function(e){return e}))),o("addNewChats",{dispatch:r,chats:n,rootGetters:i,newChatMessageSideEffects:function(t){dt(e,t)}})},updateChat:function(e,t){(0,e.commit)("updateChat",{chat:t.chat})},startFetchingCurrentChat:function(e,t){e.commit,(0,e.dispatch)("setCurrentChatFetcher",{fetcher:t.fetcher})},setCurrentChatFetcher:function(e,t){e.rootState,(0,e.commit)("setCurrentChatFetcher",{fetcher:t.fetcher})},addOpenedChat:function(e,t){e.rootState;var n=e.commit,o=e.dispatch,r=t.chat;n("addOpenedChat",{dispatch:o,chat:(0,Qn._J)(r)}),o("addNewUsers",[r.account])},addChatMessages:function(e,t){var n=e.commit;n("addChatMessages",eo({commit:n},t))},resetChatNewMessageCount:function(e,t){(0,e.commit)("resetChatNewMessageCount",t)},clearCurrentChat:function(e,t){e.rootState;var n=e.commit;e.dispatch,n("setCurrentChatId",{chatId:void 0}),n("setCurrentChatFetcher",{fetcher:void 0})},readChat:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch,i=t.id,s=t.lastReadId,a=n.chats.lastReadMessageId!==s;r("resetChatNewMessageCount"),o("readChat",{id:i,lastReadId:s}),a&&n.api.backendInteractor.readChat({id:i,lastReadId:s})},deleteChatMessage:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.deleteChatMessage(t),o("deleteChatMessage",eo({commit:o},t))},resetChats:function(e){var t=e.commit;(0,e.dispatch)("clearCurrentChat"),t("resetChats",{commit:t})},clearOpenedChats:function(e){e.rootState;var t=e.commit;e.dispatch,e.rootGetters,t("clearOpenedChats",{commit:t})},handleMessageError:function(e,t){var n=e.commit;n("handleMessageError",eo({commit:n},t))},cullOlderMessages:function(e,t){(0,e.commit)("cullOlderMessages",t)}},mutations:{setChatListFetcher:function(e,t){t.commit;var n=t.fetcher,o=e.chatListFetcher;o&&o.stop(),e.chatListFetcher=n&&n()},setCurrentChatFetcher:function(e,t){var n=t.fetcher,o=e.fetcher;o&&o.stop(),e.fetcher=n&&n()},addOpenedChat:function(e,t){t._dispatch;var n=t.chat;e.currentChatId=n.id,e.openedChats[n.id]=n,e.openedChatMessageServices[n.id]||(e.openedChatMessageServices[n.id]=Jn.empty(n.id))},setCurrentChatId:function(e,t){var n=t.chatId;e.currentChatId=n},addNewChats:function(e,t){var n=t.chats,o=t.newChatMessageSideEffects;n.forEach((function(t){var n=no(e,t.id);if(n){var r=(n.lastMessage&&n.lastMessage.id)!==(t.lastMessage&&t.lastMessage.id);n.lastMessage=t.lastMessage,n.unread=t.unread,n.updated_at=t.updated_at,r&&n.unread&&o(t)}else e.chatList.data.push(t),e.chatList.idStore[t.id]=t}))},updateChat:function(e,t){t._dispatch;var n=t.chat,o=(t._rootGetters,no(e,n.id));o&&(o.lastMessage=n.lastMessage,o.unread=n.unread,o.updated_at=n.updated_at),o||e.chatList.data.unshift(n),e.chatList.idStore[n.id]=n},deleteChat:function(e,t){t._dispatch;var n=t.id;t._rootGetters,e.chats.data=e.chats.data.filter((function(e){return e.last_status.id!==n})),e.chats.idStore=S()(e.chats.idStore,(function(e){return e.last_status.id===n}))},resetChats:function(e,t){var n=t.commit;for(var o in e.chatList={data:[],idStore:{}},e.currentChatId=null,n("setChatListFetcher",{fetcher:void 0}),e.openedChats)Jn.clear(e.openedChatMessageServices[o]),delete e.openedChats[o],delete e.openedChatMessageServices[o]},setChatsLoading:function(e,t){var n=t.value;e.chats.loading=n},addChatMessages:function(e,t){var n=t.chatId,o=t.messages,r=t.updateMaxId,i=e.openedChatMessageServices[n];i&&Jn.add(i,{messages:o.map(Qn.UB),updateMaxId:r})},deleteChatMessage:function(e,t){var n=t.chatId,o=t.messageId,r=e.openedChatMessageServices[n];r&&Jn.deleteMessage(r,o)},resetChatNewMessageCount:function(e,t){var n=e.openedChatMessageServices[e.currentChatId];Jn.resetNewMessageCount(n)},clearOpenedChats:function(e){var t=e.currentChatId;for(var n in e.openedChats)t!==n&&(Jn.clear(e.openedChatMessageServices[n]),delete e.openedChats[n],delete e.openedChatMessageServices[n])},readChat:function(e,t){var n=t.id,o=t.lastReadId;e.lastReadMessageId=o;var r=no(e,n);r&&(r.unread=0)},handleMessageError:function(e,t){var n=t.chatId,o=t.fakeId,r=t.isRetry,i=e.openedChatMessageServices[n];Jn.handleMessageError(i,o,r)},cullOlderMessages:function(e,t){Jn.cullOlderMessages(e.openedChatMessageServices[t])}}};const ro=oo;const io={state:{announcements:[],supportsAnnouncements:!0,fetchAnnouncementsTimer:void 0},mutations:{setAnnouncements:function(e,t){e.announcements=t},setAnnouncementRead:function(e,t){var n=t.id,o=t.read,r=e.announcements.findIndex((function(e){return e.id===n}));r<0||(e.announcements[r].read=o)},setFetchAnnouncementsTimer:function(e,t){e.fetchAnnouncementsTimer=t},setSupportsAnnouncements:function(e,t){e.supportsAnnouncements=t}},getters:{unreadAnnouncementCount:function(e,t,n){return n.users.currentUser?e.announcements.filter((function(e){return!(e.inactive||e.read)})).length:0}},actions:{fetchAnnouncements:function(e){if(!e.state.supportsAnnouncements)return Promise.resolve();var t=e.rootState.users.currentUser,n=t&&t.privileges.includes("announcements_manage_announcements"),r=function(){var t=(0,o.Z)(i().mark((function t(){var o,r,s,a;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}return t.abrupt("return",e.rootState.api.backendInteractor.fetchAnnouncements());case 2:return t.next=4,e.rootState.api.backendInteractor.adminFetchAnnouncements();case 4:return o=t.sent,t.next=7,e.rootState.api.backendInteractor.fetchAnnouncements();case 7:return r=t.sent,s=r.reduce((function(e,t){return e[t.id]=t,e}),{}),a=function(e){return s[e.id]},o.forEach((function(e){var t=a(e);t?e.read=t.read:e.inactive=!0})),t.abrupt("return",o);case 12:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();return r().then((function(t){e.commit("setAnnouncements",t)})).catch((function(t){if(!t||404!==t.statusCode)throw t;e.commit("setSupportsAnnouncements",!1)}))},markAnnouncementAsRead:function(e,t){return e.rootState.api.backendInteractor.dismissAnnouncement({id:t}).then((function(){e.commit("setAnnouncementRead",{id:t,read:!0})}))},startFetchingAnnouncements:function(e){if(!e.state.fetchAnnouncementsTimer){var t=setInterval((function(){return e.dispatch("fetchAnnouncements")}),3e5);return e.commit("setFetchAnnouncementsTimer",t),e.dispatch("fetchAnnouncements")}},stopFetchingAnnouncements:function(e){var t=e.state.fetchAnnouncementsTimer;e.commit("setFetchAnnouncementsTimer",void 0),clearInterval(t)},postAnnouncement:function(e,t){var n=t.content,o=t.startsAt,r=t.endsAt,i=t.allDay;return e.rootState.api.backendInteractor.postAnnouncement({content:n,startsAt:o,endsAt:r,allDay:i}).then((function(){return e.dispatch("fetchAnnouncements")}))},editAnnouncement:function(e,t){var n=t.id,o=t.content,r=t.startsAt,i=t.endsAt,s=t.allDay;return e.rootState.api.backendInteractor.editAnnouncement({id:n,content:o,startsAt:r,endsAt:i,allDay:s}).then((function(){return e.dispatch("fetchAnnouncements")}))},deleteAnnouncement:function(e,t){return e.rootState.api.backendInteractor.deleteAnnouncement({id:t}).then((function(){return e.dispatch("fetchAnnouncements")}))}}};var so=n(90308),ao=n(72378),uo=n.n(ao),co=n(69483),lo=!1,po=function(e,t){return 0===t.length?e:t.reduce((function(t,n){return bt()(t,n,Dt()(e,n)),t}),{})},mo=["markNotificationsAsSeen","clearCurrentUser","setCurrentUser","setServerSideStorage","setHighlight","setOption","setClientData","setToken","clearToken"],ho=n.n(co)();function fo(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.key,n=void 0===t?"vuex-lz":t,o=e.paths,r=void 0===o?[]:o,i=e.getState,s=void 0===i?function(e,t){return t.getItem(e)}:i,a=e.setState,u=void 0===a?function(e,t,n){return lo?n.setItem(e,t):(console.log("waiting for old state to be loaded..."),Promise.resolve())}:a,c=e.reducer,l=void 0===c?po:c,d=e.storage,p=void 0===d?ho:d,m=e.subscriber,h=void 0===m?function(e){return function(t){return e.subscribe(t)}}:m;return s(n,p).then((function(e){return function(t){try{if(null!==e&&"object"===(0,de.Z)(e)){var o=e.users||{};o.usersObject={};var i=o.users||[];N()(i,(function(e){o.usersObject[e.id]=e})),e.users=o,t.replaceState(uo()({},t.state,e))}lo=!0}catch(e){console.log("Couldn't load state"),console.error(e),lo=!0}h(t)((function(e,o){try{mo.includes(e.type)&&u(n,l(Rt()(o),r),p).then((function(n){void 0!==n&&("setOption"!==e.type&&"setCurrentUser"!==e.type||t.dispatch("settingsSaved",{success:n}))}),(function(n){"setOption"!==e.type&&"setCurrentUser"!==e.type||t.dispatch("settingsSaved",{error:n})}))}catch(e){console.log("Couldn't persist state:"),console.log(e)}}))}}))}const go=function(e){e.subscribe((function(t,n){var o=n.instance.vapidPublicKey,r=n.config.webPushNotifications,i="granted"===n.interface.notificationPermission,s=n.users.currentUser,a="setCurrentUser"===t.type,u="setInstanceOption"===t.type&&"vapidPublicKey"===t.payload.name,c="setNotificationPermission"===t.type&&"granted"===t.payload,l="setOption"===t.type&&"webPushNotifications"===t.payload.name,d="setOption"===t.type&&"notificationVisibility"===t.payload.name;if(a||u||c||l||d){if(s&&o&&i&&r)return e.dispatch("registerPushNotifications");if(l&&!r)return e.dispatch("unregisterPushNotifications")}}))};var vo=n(72617),wo=n(49963),bo=n(28339),yo=n(20425),Do=n.n(yo),_o=n(42570),ko=n(57810),Co=n(66252),So=n(3577),jo=(0,Co._)("div",{id:"app_bg_wrapper",class:"app-bg-wrapper"},null,-1),Fo=(0,Co._)("div",{class:"underlay"},null,-1),Ao=(0,Co._)("div",{id:"notifs-sidebar"},null,-1),Oo={key:0,class:"login-hint panel panel-default"},Eo={class:"user-panel"},zo={key:"user-panel-signed",class:"panel panel-default signed-in"},Po={class:"login panel panel-default"},Io={class:"panel-heading"},xo={class:"panel-body"},To={class:"form-group"},$o={for:"username"},Bo=["disabled","placeholder"],Uo={class:"form-group"},Mo={for:"password"},Lo=["disabled"],Ro={class:"form-group"},qo={key:1,class:"form-group"},No={class:"form-group"},Zo={class:"login-bottom"},Wo=["disabled"],Ho={key:0,class:"form-group"},Vo={class:"alert error"};function Ko(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ko(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ko(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const Yo={data:function(){return{user:{},error:!1}},computed:Go(Go({isPasswordAuth:function(){return this.requiredPassword},isTokenAuth:function(){return this.requiredToken}},(0,s.rn)({registrationOpen:function(e){return e.instance.registrationOpen},instance:function(e){return e.instance},loggingIn:function(e){return e.users.loggingIn},oauth:function(e){return e.oauth}})),(0,s.Se)("authFlow",["requiredPassword","requiredToken","requiredMFA"])),methods:Go(Go(Go({},(0,s.OI)("authFlow",["requireMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{submit:function(){this.isTokenAuth?this.submitToken():this.submitPassword()},submitToken:function(){var e=this.oauth,t={clientId:e.clientId,clientSecret:e.clientSecret,instance:this.instance.server,commit:this.$store.commit};Ne.getOrCreateApp(t).then((function(e){Ne.login(Go(Go({},e),t))}))},submitPassword:function(){var e=this,t={clientId:this.oauth.clientId,oauth:this.oauth,instance:this.instance.server,commit:this.$store.commit};this.error=!1,Ne.getOrCreateApp(t).then((function(n){Ne.getTokenWithCredentials(Go(Go({},n),{},{instance:t.instance,username:e.user.username,password:e.user.password})).then((function(t){t.error?"mfa_required"===t.error?e.requireMFA({settings:t}):"password_reset_required"===t.identifier?e.$router.push({name:"password-reset",params:{passwordResetRequested:!0}}):(e.error=t.error,e.focusOnPasswordInput()):e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}))},clearError:function(){this.error=!1},focusOnPasswordInput:function(){var e=this.$refs.passwordInput;e.focus(),e.setSelectionRange(0,e.value.length)}})};var Jo=n(83744);const Qo=(0,Jo.Z)(Yo,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Po,[(0,Co._)("div",Io,(0,So.zw)(e.$t("login.login")),1),(0,Co._)("div",xo,[(0,Co._)("form",{class:"login-form",onSubmit:t[2]||(t[2]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[e.isPasswordAuth?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co._)("div",To,[(0,Co._)("label",$o,(0,So.zw)(e.$t("login.username")),1),(0,Co.wy)((0,Co._)("input",{id:"username","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.user.username=t}),disabled:e.loggingIn,class:"form-control",placeholder:e.$t("login.placeholder")},null,8,Bo),[[wo.nr,e.user.username]])]),(0,Co._)("div",Uo,[(0,Co._)("label",Mo,(0,So.zw)(e.$t("login.password")),1),(0,Co.wy)((0,Co._)("input",{id:"password",ref:"passwordInput","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.user.password=t}),disabled:e.loggingIn,class:"form-control",type:"password"},null,8,Lo),[[wo.nr,e.user.password]])]),(0,Co._)("div",Ro,[(0,Co.Wm)(s,{to:{name:"password-reset"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("password_reset.forgot_password")),1)]})),_:1})])],64)):(0,Co.kq)("",!0),e.isTokenAuth?((0,Co.wg)(),(0,Co.iD)("div",qo,[(0,Co._)("p",null,(0,So.zw)(e.$t("login.description")),1)])):(0,Co.kq)("",!0),(0,Co._)("div",No,[(0,Co._)("div",Zo,[(0,Co._)("div",null,[e.registrationOpen?((0,Co.wg)(),(0,Co.j4)(s,{key:0,to:{name:"registration"},class:"register"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.register")),1)]})),_:1})):(0,Co.kq)("",!0)]),(0,Co._)("button",{disabled:e.loggingIn,type:"submit",class:"btn button-default"},(0,So.zw)(e.$t("login.login")),9,Wo)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ho,[(0,Co._)("div",Vo,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[3]||(t[3]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);var Xo={class:"login panel panel-default"},er={class:"panel-heading"},tr={class:"panel-body"},nr={class:"form-group"},or={for:"code"},rr={class:"form-group"},ir={class:"login-bottom"},sr=(0,Co._)("br",null,null,-1),ar={type:"submit",class:"btn button-default"},ur={key:0,class:"form-group"},cr={class:"alert error"},lr={verifyOTPCode:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.mfaToken,i=e.code,s="".concat(o,"/oauth/mfa/challenge"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("mfa_token",r),a.append("code",i),a.append("challenge_type","totp"),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))},verifyRecoveryCode:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.mfaToken,i=e.code,s="".concat(o,"/oauth/mfa/challenge"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("mfa_token",r),a.append("code",i),a.append("challenge_type","recovery"),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))}};const dr=lr;function pr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function mr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const hr={data:function(){return{code:null,error:!1}},computed:mr(mr({},(0,s.Se)({authSettings:"authFlow/settings"})),(0,s.rn)({instance:"instance",oauth:"oauth"})),methods:mr(mr(mr({},(0,s.OI)("authFlow",["requireTOTP","abortMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{clearError:function(){this.error=!1},submit:function(){var e=this,t=this.oauth,n={clientId:t.clientId,clientSecret:t.clientSecret,instance:this.instance.server,mfaToken:this.authSettings.mfa_token,code:this.code};dr.verifyRecoveryCode(n).then((function(t){if(t.error)return e.error=t.error,void(e.code=null);e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}})},fr=(0,Jo.Z)(hr,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Xo,[(0,Co._)("div",er,(0,So.zw)(e.$t("login.heading.recovery")),1),(0,Co._)("div",tr,[(0,Co._)("form",{class:"login-form",onSubmit:t[3]||(t[3]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",nr,[(0,Co._)("label",or,(0,So.zw)(e.$t("login.recovery_code")),1),(0,Co.wy)((0,Co._)("input",{id:"code","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.code=t}),class:"form-control"},null,512),[[wo.nr,e.code]])]),(0,Co._)("div",rr,[(0,Co._)("div",ir,[(0,Co._)("div",null,[(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.requireTOTP&&e.requireTOTP.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("login.enter_two_factor_code")),1),sr,(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.abortMFA&&e.abortMFA.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("general.cancel")),1)]),(0,Co._)("button",ar,(0,So.zw)(e.$t("general.verify")),1)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",ur,[(0,Co._)("div",cr,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[4]||(t[4]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);var gr={class:"login panel panel-default"},vr={class:"panel-heading"},wr={class:"panel-body"},br={class:"form-group"},yr={for:"code"},Dr={class:"form-group"},_r={class:"login-bottom"},kr=(0,Co._)("br",null,null,-1),Cr={type:"submit",class:"btn button-default"},Sr={key:0,class:"form-group"},jr={class:"alert error"};function Fr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ar(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Fr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const Or={data:function(){return{code:null,error:!1}},computed:Ar(Ar({},(0,s.Se)({authSettings:"authFlow/settings"})),(0,s.rn)({instance:"instance",oauth:"oauth"})),methods:Ar(Ar(Ar({},(0,s.OI)("authFlow",["requireRecovery","abortMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{clearError:function(){this.error=!1},submit:function(){var e=this,t=this.oauth,n={clientId:t.clientId,clientSecret:t.clientSecret,instance:this.instance.server,mfaToken:this.authSettings.mfa_token,code:this.code};dr.verifyOTPCode(n).then((function(t){if(t.error)return e.error=t.error,void(e.code=null);e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}})},Er=(0,Jo.Z)(Or,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",gr,[(0,Co._)("div",vr,(0,So.zw)(e.$t("login.heading.totp")),1),(0,Co._)("div",wr,[(0,Co._)("form",{class:"login-form",onSubmit:t[3]||(t[3]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",br,[(0,Co._)("label",yr,(0,So.zw)(e.$t("login.authentication_code")),1),(0,Co.wy)((0,Co._)("input",{id:"code","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.code=t}),class:"form-control"},null,512),[[wo.nr,e.code]])]),(0,Co._)("div",Dr,[(0,Co._)("div",_r,[(0,Co._)("div",null,[(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.requireRecovery&&e.requireRecovery.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("login.enter_recovery_code")),1),kr,(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.abortMFA&&e.abortMFA.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("general.cancel")),1)]),(0,Co._)("button",Cr,(0,So.zw)(e.$t("general.verify")),1)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",Sr,[(0,Co._)("div",jr,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[4]||(t[4]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);function zr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const Pr={name:"AuthForm",render:function(){return(0,Co.h)((0,Co.up)(this.authForm))},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({authForm:function(){return this.requiredTOTP?"MFATOTPForm":this.requiredRecovery?"MFARecoveryForm":"LoginForm"}},(0,s.Se)("authFlow",["requiredTOTP","requiredRecovery"])),components:{MFARecoveryForm:fr,MFATOTPForm:Er,LoginForm:Qo}};var Ir=n(45333),xr=n(20392);function Tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const $r={computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({signedIn:function(){return this.user}},(0,s.rn)({user:function(e){return e.users.currentUser}})),components:{AuthForm:Pr,PostStatusForm:Ir.Z,UserCard:xr.Z}},Br=(0,Jo.Z)($r,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("PostStatusForm"),u=(0,Co.up)("auth-form");return(0,Co.wg)(),(0,Co.iD)("aside",Eo,[e.signedIn?((0,Co.wg)(),(0,Co.iD)("div",zo,[(0,Co.Wm)(s,{"user-id":e.user.id,"hide-bio":!0,rounded:"top"},null,8,["user-id"]),(0,Co.Wm)(a)])):((0,Co.wg)(),(0,Co.j4)(u,{key:"user-panel"}))])}]]);var Ur={class:"NavPanel"},Mr={class:"panel panel-default"},Lr={key:0,class:"panel-heading nav-panel-heading"},Rr=(0,Co._)("div",{class:"spacer"},null,-1),qr={key:1,class:"panel-body"},Nr={class:"timelines-background"},Zr={class:"timelines"},Wr={class:"timelines-background"},Hr={key:0,class:"icon iconLetter fa-scale-110 menu-icon"},Vr={class:"label"},Kr={key:0,class:"badge badge-notification"},Gr=["title","aria-pressed"],Yr=new Set(["bookmarks","dms","interactions","notifications","chat","chats","user-profile"]),Jr={home:{route:"friends",icon:"home",label:"nav.home_timeline",criteria:["!private"]},public:{route:"public-timeline",anon:!0,icon:"users",label:"nav.public_tl",criteria:["!private"]},twkn:{route:"public-external-timeline",anon:!0,icon:"globe",label:"nav.twkn",criteria:["!private","federating"]},bookmarks:{route:"bookmarks",icon:"bookmark",label:"nav.bookmarks"},favorites:{routeObject:{name:"user-profile",query:{tab:"favorites"}},icon:"star",label:"user_card.favorites"},dms:{route:"dms",icon:"envelope",label:"nav.dms"}},Qr={interactions:{route:"interactions",icon:"bell",label:"nav.interactions"},chats:{route:"chats",icon:"comments",label:"nav.chats",badgeGetter:"unreadChatCount",criteria:["chats"]},friendRequests:{route:"friend-requests",icon:"user-plus",label:"nav.friend_requests",criteria:["lockedUser"],badgeGetter:"followRequestCount"},about:{route:"about",anon:!0,icon:"info-circle",label:"nav.about"},announcements:{route:"announcements",icon:"bullhorn",label:"nav.announcements",badgeGetter:"unreadAnnouncementCount",criteria:["announcements"]}};function Xr(e,t){return e.route||e.routeObject?(n=e.routeObject?e.routeObject:{name:e.anon||t?e.route:e.anonRoute},Yr.has(n.name)&&(n.params={username:t.screen_name,name:t.screen_name}),n):null;var n}const ei={props:["to"]},ti=(0,Jo.Z)(ei,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link");return n.to?((0,Co.wg)(),(0,Co.j4)(s,{key:0,to:n.to,custom:""},{default:(0,Co.w5)((function(t){return[(0,Co.WI)(e.$slots,"default",(0,So.vs)((0,Co.F4)(t)))]})),_:3},8,["to"])):(0,Co.WI)(e.$slots,"default",(0,So.vs)((0,Co.dG)({key:1},{})))}]]);function ni(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Ht.vI.add(Vt.RP7);const oi={props:["item","showPin"],components:{OptionalRouterLink:ti},methods:{isPinned:function(e){return this.pinnedItems.has(e)},togglePin:function(e){this.isPinned(e)?this.$store.commit("removeCollectionPreference",{path:"collections.pinnedNavItems",value:e}):this.$store.commit("addCollectionPreference",{path:"collections.pinnedNavItems",value:e}),this.$store.dispatch("pushServerSideStorage")}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ni(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ni(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({routeTo:function(){return Xr(this.item,this.currentUser)},getters:function(){return this.$store.getters}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)}}))},ri=(0,Jo.Z)(oi,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("OptionalRouterLink");return(0,Co.wg)(),(0,Co.j4)(a,{ass:"ass",to:e.routeTo},{default:(0,Co.w5)((function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.isActive,r=n.href,i=n.navigate;return[(0,Co._)("li",(0,Co.dG)({class:["NavigationEntry menu-item",{"-active":o}]},e.$attrs),[((0,Co.wg)(),(0,Co.j4)((0,Co.LL)(e.routeTo?"a":"button"),{class:"main-link button-unstyled",href:r,onClick:i},{default:(0,Co.w5)((function(){return[(0,Co._)("span",null,[e.item.icon?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",class:"fa-scale-110 menu-icon",icon:e.item.icon},null,8,["icon"])):(0,Co.kq)("",!0)]),e.item.iconLetter?((0,Co.wg)(),(0,Co.iD)("span",Hr,(0,So.zw)(e.item.iconLetter),1)):(0,Co.kq)("",!0),(0,Co._)("span",Vr,(0,So.zw)(e.item.labelRaw||e.$t(e.item.label)),1)]})),_:2},1032,["href","onClick"])),(0,Co.WI)(e.$slots,"default"),e.item.badgeGetter&&e.getters[e.item.badgeGetter]?((0,Co.wg)(),(0,Co.iD)("div",Kr,(0,So.zw)(e.getters[e.item.badgeGetter]),1)):(0,Co.kq)("",!0),e.showPin&&e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:1,type:"button",class:"button-unstyled extra-button",title:e.$t(e.isPinned?"general.unpin":"general.pin"),"aria-pressed":!!e.isPinned,onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.togglePin(e.item.name)}),["stop","prevent"]))},[e.showPin&&e.currentUser?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",class:(0,So.C_)(["fa-scale-110",{veryfaint:!e.isPinned(e.item.name)}]),transform:e.isPinned(e.item.name)?"":"rotate-45",icon:"thumbtack"},null,8,["class","transform"])):(0,Co.kq)("",!0)],8,Gr)):(0,Co.kq)("",!0)],16)]})),_:3},8,["to"])}]]);var ii=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=t.hasChats,o=t.hasAnnouncements,r=t.isFederating,i=t.isPrivate,s=t.currentUser;return e.filter((function(e){var t=e.criteria,a=e.anon,u=e.anonRoute,c=new Set(t||[]);return!(!r&&c.has("federating")||!s&&i&&c.has("!private")||!(s||a||u)||!(s&&s.locked||!c.has("lockedUser"))||!n&&c.has("chats")||!o&&c.has("announcements"))}))},si=function(e){return e.lists.allLists.map((function(e){return{name:"list-"+e.id,routeObject:{name:"lists-timeline",params:{id:e.id}},labelRaw:e.title,iconLetter:e.title[0]}}))};function ai(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var ui={props:["showPin"],components:{NavigationEntry:ri},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ai(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ai(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},(0,s.rn)({lists:si,currentUser:function(e){return e.users.currentUser},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating}}))};const ci=ui,li=(0,Jo.Z)(ci,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("NavigationEntry");return(0,Co.wg)(),(0,Co.iD)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.lists,(function(t){return(0,Co.wg)(),(0,Co.j4)(s,{key:t.name,"show-pin":e.showPin,item:t},null,8,["show-pin","item"])})),128))])}]]);var di={class:"NavigationPins"},pi={key:1,class:"iconLetter fa-scale-110 fa-old-padding"},mi={key:2,class:"alert-dot"};function hi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hi(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.FVb,Vt.g4A,Vt.xVw,Vt.FU$,Vt.lXL,Vt.qmU,Vt.sqG,Vt.aC2,Vt.Zrf);const gi={props:["limit"],methods:{getRouteTo:function(e){return Xr(e,this.currentUser)}},computed:fi(fi({getters:function(){return this.$store.getters}},(0,s.rn)({lists:si,currentUser:function(e){return e.users.currentUser},followRequestCount:function(e){return e.api.followRequests.length},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating},pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)}})),{},{pinnedList:function(){var e=this;return this.currentUser?ii([].concat((0,l.Z)(Object.entries(fi({},Jr)).filter((function(t){var n=(0,c.Z)(t,1)[0];return e.pinnedItems.has(n)})).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return fi(fi({},t[1]),{},{name:n})}))),(0,l.Z)(this.lists.filter((function(t){return e.pinnedItems.has(t.name)}))),(0,l.Z)(Object.entries(fi({},Qr)).filter((function(t){var n=(0,c.Z)(t,1)[0];return e.pinnedItems.has(n)})).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return fi(fi({},t[1]),{},{name:n})})))),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser}).slice(0,this.limit):ii([fi(fi({},Jr.public),{},{name:"public"}),fi(fi({},Jr.twkn),{},{name:"twkn"}),fi(fi({},Qr.about),{},{name:"about"})],{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}})},vi=(0,Jo.Z)(gi,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("span",di,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.pinnedList,(function(t){return(0,Co.wg)(),(0,Co.j4)(a,{key:t.name,class:"pinned-item",to:e.getRouteTo(t),title:t.labelRaw||e.$t(t.label)},{default:(0,Co.w5)((function(){return[t.icon?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",icon:t.icon},null,8,["icon"])):(0,Co.kq)("",!0),t.iconLetter?((0,Co.wg)(),(0,Co.iD)("span",pi,(0,So.zw)(t.iconLetter),1)):(0,Co.kq)("",!0),t.badgeGetter&&e.getters[t.badgeGetter]?((0,Co.wg)(),(0,Co.iD)("div",mi)):(0,Co.kq)("",!0)]})),_:2},1032,["to","title"])})),128))])}]]);var wi=n(66141);function bi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function yi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bi(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.FVb,Vt.g4A,Vt.xVw,Vt.FU$,Vt.ptq,Vt.mTx,Vt.lXL,Vt.qmU,Vt.sqG,Vt.aC2,Vt.Zrf,Vt.Acd);const Di={props:["forceExpand","forceEditMode"],created:function(){},components:{ListsMenuContent:li,NavigationEntry:ri,NavigationPins:vi,Checkbox:wi.Z},data:function(){return{editMode:!1,showTimelines:!1,showLists:!1,timelinesList:Object.entries(Jr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),rootList:Object.entries(Qr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})}))}},methods:{toggleTimelines:function(){this.showTimelines=!this.showTimelines},toggleLists:function(){this.showLists=!this.showLists},toggleEditMode:function(){this.editMode=!this.editMode},toggleCollapse:function(){this.$store.commit("setPreference",{path:"simple.collapseNav",value:!this.collapsed}),this.$store.dispatch("pushServerSideStorage")},isPinned:function(e){return this.pinnedItems.has(e)},togglePin:function(e){this.isPinned(e)?this.$store.commit("removeCollectionPreference",{path:"collections.pinnedNavItems",value:e}):this.$store.commit("addCollectionPreference",{path:"collections.pinnedNavItems",value:e}),this.$store.dispatch("pushServerSideStorage")}},computed:yi(yi({},(0,s.rn)({currentUser:function(e){return e.users.currentUser},followRequestCount:function(e){return e.api.followRequests.length},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating},pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)},collapsed:function(e){return e.serverSideStorage.prefsStorage.simple.collapseNav}})),{},{timelinesItems:function(){return ii(Object.entries(yi({},Jr)).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})},rootItems:function(){return ii(Object.entries(yi({},Qr)).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}},(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"]))},_i=(0,Jo.Z)(Di,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("NavigationPins"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("NavigationEntry"),c=(0,Co.up)("router-link"),l=(0,Co.up)("ListsMenuContent");return(0,Co.wg)(),(0,Co.iD)("div",Ur,[(0,Co._)("div",Mr,[e.forceExpand?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Lr,[(0,Co.Wm)(s,{limit:6}),Rr,(0,Co._)("button",{class:"button-unstyled",onClick:t[0]||(t[0]=function(){return e.toggleCollapse&&e.toggleCollapse.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"navigation-chevron","fixed-width":"",icon:e.collapsed?"chevron-down":"chevron-up"},null,8,["icon"])])])),!e.collapsed||e.forceExpand?((0,Co.wg)(),(0,Co.iD)("ul",qr,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.j4)(u,{key:0,"show-pin":!1,item:{icon:"stream",label:"nav.timelines"},"aria-expanded":e.showTimelines?"true":"false",onClick:e.toggleTimelines},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"timelines-chevron","fixed-width":"",icon:e.showTimelines?"chevron-up":"chevron-down"},null,8,["icon"])]})),_:1},8,["item","aria-expanded","onClick"])):(0,Co.kq)("",!0),(0,Co.wy)((0,Co._)("div",Nr,[(0,Co._)("div",Zr,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.timelinesItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.name,"show-pin":e.editMode||e.forceEditMode,item:t},null,8,["show-pin","item"])})),128))])],512),[[wo.F8,e.showTimelines]]),e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:1,"show-pin":!1,item:{icon:"list",label:"nav.lists"},"aria-expanded":e.showLists?"true":"false",onClick:e.toggleLists},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(c,{title:e.$t("lists.manage_lists"),class:"extra-button",to:{name:"lists"},onClick:t[1]||(t[1]=(0,wo.iM)((function(){}),["stop"]))},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"extra-button","fixed-width":"",icon:"wrench"})]})),_:1},8,["title"]),(0,Co.Wm)(a,{class:"timelines-chevron","fixed-width":"",icon:e.showLists?"chevron-up":"chevron-down"},null,8,["icon"])]})),_:1},8,["item","aria-expanded","onClick"])):(0,Co.kq)("",!0),(0,Co.wy)((0,Co._)("div",Wr,[(0,Co.Wm)(l,{"show-pin":e.editMode||e.forceEditMode,class:"timelines"},null,8,["show-pin"])],512),[[wo.F8,e.showLists]]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.rootItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.name,"show-pin":e.editMode||e.forceEditMode,item:t},null,8,["show-pin","item"])})),128)),!e.forceEditMode&&e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:2,"show-pin":!1,item:{label:e.editMode?e.$t("nav.edit_finish"):e.$t("nav.edit_pinned"),icon:e.editMode?"check":"wrench"},onClick:e.toggleEditMode},null,8,["item","onClick"])):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0)])])}]]);var ki={class:"instance-specific-panel"},Ci={class:"panel panel-default"},Si={class:"panel-body"},ji=["innerHTML"];const Fi={computed:{instanceSpecificPanelContent:function(){return this.$store.state.instance.instanceSpecificPanelContent}}},Ai=(0,Jo.Z)(Fi,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",ki,[(0,Co._)("div",Ci,[(0,Co._)("div",Si,[(0,Co._)("div",{innerHTML:e.instanceSpecificPanelContent},null,8,ji)])])])}]]);var Oi={class:"features-panel"},Ei={class:"panel panel-default base01-background"},zi={class:"panel-heading timeline-heading base02-background base04"},Pi={class:"title"},Ii={class:"panel-body features-panel"},xi={key:0},Ti={key:1},$i={key:2},Bi={key:3},Ui={key:4},Mi=n(65079);const Li={computed:{shout:function(){return this.$store.state.instance.shoutAvailable},pleromaChatMessages:function(){return this.$store.state.instance.pleromaChatMessagesAvailable},gopher:function(){return this.$store.state.instance.gopherAvailable},whoToFollow:function(){return this.$store.state.instance.suggestionsEnabled},mediaProxy:function(){return this.$store.state.instance.mediaProxyAvailable},minimalScopesMode:function(){return this.$store.state.instance.minimalScopesMode},textlimit:function(){return this.$store.state.instance.textlimit},uploadlimit:function(){return Mi.Z.fileSizeFormat(this.$store.state.instance.uploadlimit)}}},Ri=(0,Jo.Z)(Li,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",Oi,[(0,Co._)("div",Ei,[(0,Co._)("div",zi,[(0,Co._)("div",Pi,(0,So.zw)(e.$t("features_panel.title")),1)]),(0,Co._)("div",Ii,[(0,Co._)("ul",null,[e.shout?((0,Co.wg)(),(0,Co.iD)("li",xi,(0,So.zw)(e.$t("features_panel.shout")),1)):(0,Co.kq)("",!0),e.pleromaChatMessages?((0,Co.wg)(),(0,Co.iD)("li",Ti,(0,So.zw)(e.$t("features_panel.pleroma_chat_messages")),1)):(0,Co.kq)("",!0),e.gopher?((0,Co.wg)(),(0,Co.iD)("li",$i,(0,So.zw)(e.$t("features_panel.gopher")),1)):(0,Co.kq)("",!0),e.whoToFollow?((0,Co.wg)(),(0,Co.iD)("li",Bi,(0,So.zw)(e.$t("features_panel.who_to_follow")),1)):(0,Co.kq)("",!0),e.mediaProxy?((0,Co.wg)(),(0,Co.iD)("li",Ui,(0,So.zw)(e.$t("features_panel.media_proxy")),1)):(0,Co.kq)("",!0),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.scope_options")),1),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.text_limit"))+" = "+(0,So.zw)(e.textlimit),1),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.upload_limit"))+" = "+(0,So.zw)(e.uploadlimit.num)+" "+(0,So.zw)(e.$t("upload.file_size_units."+e.uploadlimit.unit)),1)])])])])}]]);var qi={class:"who-to-follow-panel"},Ni={class:"panel panel-default base01-background"},Zi={class:"panel-heading timeline-heading base02-background base04"},Wi={class:"title"},Hi={class:"who-to-follow"},Vi=["src"],Ki=(0,Co._)("br",null,null,-1),Gi={class:"who-to-follow-more"},Yi=n(69983),Ji=n.n(Yi),Qi=n(4493);function Xi(e){var t=e.$store.state.users.currentUser.credentials;t&&(e.usersToFollow.forEach((function(e){e.name="Loading..."})),h.ZP.suggestions({credentials:t}).then((function(t){!function(e,t){var n=this,o=Ji()(t);e.usersToFollow.forEach((function(t,r){var i=o[r],s=i.avatar||n.$store.state.instance.defaultAvatar,a=i.acct;t.img=s,t.name=a,e.$store.state.api.backendInteractor.fetchUser({id:a}).then((function(n){n.error||(e.$store.commit("addNewUsers",[n]),t.id=n.id)}))}))}(e,t)})))}const es={data:function(){return{usersToFollow:[]}},computed:{user:function(){return this.$store.state.users.currentUser.screen_name},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled}},methods:{userProfileLink:function(e,t){return(0,Qi.Z)(e,t,this.$store.state.instance.restrictedNicknames)}},watch:{user:function(e,t){this.suggestionsEnabled&&Xi(this)}},mounted:function(){var e=this;this.usersToFollow=new Array(3).fill().map((function(t){return{img:e.$store.state.instance.defaultAvatar,name:"",id:0}})),this.suggestionsEnabled&&Xi(this)}},ts=(0,Jo.Z)(es,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",qi,[(0,Co._)("div",Ni,[(0,Co._)("div",Zi,[(0,Co._)("div",Wi,(0,So.zw)(e.$t("who_to_follow.who_to_follow")),1)]),(0,Co._)("div",Hi,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.usersToFollow,(function(t){return(0,Co.wg)(),(0,Co.iD)("p",{key:t.id,class:"who-to-follow-items"},[(0,Co._)("img",{src:t.img},null,8,Vi),(0,Co.Wm)(s,{to:e.userProfileLink(t.id,t.name)},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(t.name),1)]})),_:2},1032,["to"]),Ki])})),128)),(0,Co._)("p",Gi,[(0,Co.Wm)(s,{to:{name:"who-to-follow"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("who_to_follow.more")),1)]})),_:1})])])])])}]]);var ns={key:0,class:"shout-panel"},os={class:"panel panel-default"},rs={class:"title"},is={class:"shout-window"},ss={class:"shout-avatar"},as=["src"],us={class:"shout-content"},cs=(0,Co._)("br",null,null,-1),ls={class:"shout-text"},ds={class:"shout-input"},ps={key:1,class:"shout-panel"},ms={class:"panel panel-default"},hs={class:"title"};Ht.vI.add(Vt.Acd,Vt.NBC);const fs={props:["floating"],data:function(){return{currentMessage:"",channel:null,collapsed:!0}},computed:{messages:function(){return this.$store.state.shout.messages}},methods:{submit:function(e){this.$store.state.shout.channel.push("new_msg",{text:e},1e4),this.currentMessage=""},togglePanel:function(){this.collapsed=!this.collapsed},userProfileLink:function(e){return(0,Qi.Z)(e.id,e.username,this.$store.state.instance.restrictedNicknames)}},watch:{messages:function(e){var t=this.$el.querySelector(".chat-window");t&&t.scrollTop+t.offsetHeight+20>t.scrollHeight&&this.$nextTick((function(){t&&(t.scrollTop=t.scrollHeight-t.offsetHeight)}))}}},gs=(0,Jo.Z)(fs,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("router-link");return e.collapsed&&e.floating?((0,Co.wg)(),(0,Co.iD)("div",ps,[(0,Co._)("div",ms,[(0,Co._)("div",{class:"panel-heading -stub timeline-heading shout-heading",onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.togglePanel&&e.togglePanel.apply(e,arguments)}),["stop","prevent"]))},[(0,Co._)("div",hs,[(0,Co.Wm)(s,{class:"icon",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("shoutbox.title")),1)])])])])):((0,Co.wg)(),(0,Co.iD)("div",ns,[(0,Co._)("div",os,[(0,Co._)("div",{class:(0,So.C_)(["panel-heading timeline-heading",{"shout-heading":e.floating}]),onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.togglePanel&&e.togglePanel.apply(e,arguments)}),["stop","prevent"]))},[(0,Co._)("div",rs,[(0,Co.Uk)((0,So.zw)(e.$t("shoutbox.title"))+" ",1),e.floating?((0,Co.wg)(),(0,Co.j4)(s,{key:0,icon:"times",class:"close-icon"})):(0,Co.kq)("",!0)])],2),(0,Co._)("div",is,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.messages,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"shout-message"},[(0,Co._)("span",ss,[(0,Co._)("img",{src:t.author.avatar},null,8,as)]),(0,Co._)("div",us,[(0,Co.Wm)(a,{class:"shout-name",to:e.userProfileLink(t.author)},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(t.author.username),1)]})),_:2},1032,["to"]),cs,(0,Co._)("span",ls,(0,So.zw)(t.text),1)])])})),128))]),(0,Co._)("div",ds,[(0,Co.wy)((0,Co._)("textarea",{"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.currentMessage=t}),class:"shout-input-textarea",rows:"1",onKeyup:t[2]||(t[2]=(0,wo.D2)((function(t){return e.submit(e.currentMessage)}),["enter"]))},null,544),[[wo.nr,e.currentMessage]])])])]))}]]);var vs=["src","alt","title"],ws=["src","alt","title"],bs=["title"],ys=["title"],Ds=["title"],_s={key:6,class:"description"},ks={class:"counter"},Cs={key:7,class:"loading-spinner"},Ss=n(32140),js=n(34133),Fs=n(782);const As={methods:{setTransform:function(e){var t=e.scale,n=e.x,o=e.y;this.$el.setTransform({scale:t,x:n,y:o})}},created:function(){Fs.Z}},Os=(0,Jo.Z)(As,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("pinch-zoom",(0,Co.dG)({class:"pinch-zoom-parent"},e.$attrs,(0,Co.mx)(e.$listeners,!0)),[(0,Co.WI)(e.$slots,"default")],16)}]]);var Es=n(15671),zs=n(43144),Ps=function(e,t){return[t[0]-e[0],t[1]-e[1]]},Is=function(e){return[(t=e.touches[0]).screenX,t.screenY];var t},xs=function(e){return[e.clientX,e.clientY]},Ts=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},$s=function(e){return[e[1],-e[0]]},Bs=function(e,t){return e[0]*t[0]+e[1]*t[1]},Us=function(e,t){var n=Bs(e,t)/Bs(t,t);return[n*t[0],n*t[1]]};const Ms={DIRECTION_LEFT:[-1,0],DIRECTION_RIGHT:[1,0],DIRECTION_UP:[0,-1],DIRECTION_DOWN:[0,1],swipeGesture:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;return{direction:e,onSwipe:t,threshold:n,perpendicularTolerance:o,_startPos:[0,0],_swiping:!1}},beginSwipe:function(e,t){t._startPos=Is(e),t._swiping=!0},updateSwipe:function(e,t){if(t._swiping){var n=Ps(t._startPos,Is(e));if(!(Ts(n)<t.threshold||Bs(n,t.direction)<0)){var o=Us(n,t.direction),r=$s(t.direction),i=Us(n,r);Ts(o)*t.perpendicularTolerance<Ts(i)||(t.onSwipe(),t._swiping=!1)}}},SwipeAndClickGesture:function(){function e(t){var n=t.direction,o=t.swipePreviewCallback,r=t.swipeEndCallback,i=t.swipeCancelCallback,s=t.swipelessClickCallback,a=t.threshold,u=void 0===a?30:a,c=t.perpendicularTolerance,l=void 0===c?1:c,d=t.disableClickThreshold,p=void 0===d?1:d;(0,Es.Z)(this,e);var m=function(){};this.direction=n,this.swipePreviewCallback=o||m,this.swipeEndCallback=r||m,this.swipeCancelCallback=i||m,this.swipelessClickCallback=s||m,this.threshold="function"==typeof u?u:function(){return u},this.disableClickThreshold="function"==typeof p?p:function(){return p},this.perpendicularTolerance=l,this._reset()}return(0,zs.Z)(e,[{key:"_reset",value:function(){this._startPos=[0,0],this._pointerId=-1,this._swiping=!1,this._swiped=!1,this._preventNextClick=!1}},{key:"start",value:function(e){0===e.button&&(this._startPos=xs(e),this._pointerId=e.pointerId,this._swiping=!0,this._swiped=!1)}},{key:"move",value:function(e){if(this._swiping&&this._pointerId===e.pointerId){this._swiped=!0;var t=xs(e),n=Ps(this._startPos,t);this.swipePreviewCallback(n)}}},{key:"cancel",value:function(e){this._swiping&&this._pointerId===e.pointerId&&this.swipeCancelCallback()}},{key:"end",value:function(e){var t=this;if(this._swiping&&this._pointerId===e.pointerId){this._swiping=!1;var n=xs(e),o=Ps(this._startPos,n),r=function(){if(Ts(o)<t.threshold())return 0;var e=Bs(o,t.direction)>0,n=Us(o,t.direction),r=$s(t.direction),i=Us(o,r);return Ts(n)*t.perpendicularTolerance<Ts(i)?0:e?1:-1}();this._swiped&&this.swipeEndCallback(r),this._reset(),Ts(o)>=this.disableClickThreshold()&&"mouse"===e.pointerType&&(this._preventNextClick=!0)}}},{key:"click",value:function(e){this._preventNextClick||this.swipelessClickCallback(),this._reset()}}]),e}()},Ls={props:{direction:{type:Array},threshold:{type:Function,default:function(){return 30}},disableClickThreshold:{type:Function,default:function(){return 1}},perpendicularTolerance:{type:Number,default:1}},methods:{handlePointerDown:function(e){this.$gesture.start(e)},handlePointerMove:function(e){this.$gesture.move(e)},handlePointerUp:function(e){this.$gesture.end(e)},handlePointerCancel:function(e){this.$gesture.cancel(e)},handleNativeClick:function(e){this.$gesture.click(e)},preview:function(e){this.$emit("preview-requested",e)},end:function(e){this.$emit("swipe-finished",e)},click:function(){this.$emit("swipeless-clicked")},cancel:function(){this.$emit("swipe-canceled")}},created:function(){this.$gesture=new Ms.SwipeAndClickGesture({direction:this.direction,threshold:this.threshold,disableClickThreshold:this.disableClickThreshold,perpendicularTolerance:this.perpendicularTolerance,swipePreviewCallback:this.preview,swipeEndCallback:this.end,swipeCancelCallback:this.cancel,swipelessClickCallback:this.click})}},Rs=(0,Jo.Z)(Ls,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",(0,Co.dG)(e.$attrs,{onPointerdown:t[0]||(t[0]=function(){return e.handlePointerDown&&e.handlePointerDown.apply(e,arguments)}),onPointermove:t[1]||(t[1]=function(){return e.handlePointerMove&&e.handlePointerMove.apply(e,arguments)}),onPointerup:t[2]||(t[2]=function(){return e.handlePointerUp&&e.handlePointerUp.apply(e,arguments)}),onPointercancel:t[3]||(t[3]=function(){return e.handlePointerCancel&&e.handlePointerCancel.apply(e,arguments)}),onClick:t[4]||(t[4]=function(){return e.handleNativeClick&&e.handleNativeClick.apply(e,arguments)})}),[(0,Co.WI)(e.$slots,"default")],16)}]]);var qs=n(72884);Ht.vI.add(Vt.A35,Vt._tD,Vt.IJ7,Vt.NBC);const Ns={components:{StillImage:Ss.Z,VideoAttachment:js.Z,PinchZoom:Os,SwipeClick:Rs,Modal:Wt.Z,Flash:qs.Z},data:function(){return{loading:!1,swipeDirection:Ms.DIRECTION_LEFT,swipeThreshold:function(){return window.innerWidth*(1/4)},pinchZoomMinScale:1,pinchZoomScaleResetLimit:1.2}},computed:{showing:function(){return this.$store.state.mediaViewer.activated},media:function(){return this.$store.state.mediaViewer.media},description:function(){return this.currentMedia.description},currentIndex:function(){return this.$store.state.mediaViewer.currentIndex},currentMedia:function(){return this.media[this.currentIndex]},canNavigate:function(){return this.media.length>1},type:function(){return this.currentMedia?this.getType(this.currentMedia):null},swipeDisableClickThreshold:function(){var e=this;return function(){return e.canNavigate?1:30}}},methods:{getType:function(e){return Fn.ZP.fileType(e.mimetype)},hide:function(){var e=this;setTimeout((function(){e.$store.dispatch("closeMediaViewer")}),100)},hideIfNotSwiped:function(e){var t=this.$refs.swipeClick;t?t.$gesture.click(e):this.hide()},goPrev:function(){if(this.canNavigate){var e=0===this.currentIndex?this.media.length-1:this.currentIndex-1,t=this.media[e];"image"===this.getType(t)&&(this.loading=!0),this.$store.dispatch("setCurrentMedia",t)}},goNext:function(){if(this.canNavigate){var e=this.currentIndex===this.media.length-1?0:this.currentIndex+1,t=this.media[e];"image"===this.getType(t)&&(this.loading=!0),this.$store.dispatch("setCurrentMedia",t)}},onImageLoaded:function(){this.loading=!1},handleSwipePreview:function(e){this.$refs.pinchZoom.setTransform({scale:1,x:e[0],y:0})},handleSwipeEnd:function(e){this.$refs.pinchZoom.setTransform({scale:1,x:0,y:0}),e>0?this.goNext():e<0&&this.goPrev()},handleKeyupEvent:function(e){this.showing&&27===e.keyCode&&this.hide()},handleKeydownEvent:function(e){this.showing&&(39===e.keyCode?this.goNext():37===e.keyCode&&this.goPrev())}},mounted:function(){window.addEventListener("popstate",this.hide),document.addEventListener("keyup",this.handleKeyupEvent),document.addEventListener("keydown",this.handleKeydownEvent)},unmounted:function(){window.removeEventListener("popstate",this.hide),document.removeEventListener("keyup",this.handleKeyupEvent),document.removeEventListener("keydown",this.handleKeydownEvent)}},Zs=(0,Jo.Z)(Ns,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PinchZoom"),a=(0,Co.up)("SwipeClick"),u=(0,Co.up)("VideoAttachment"),c=(0,Co.up)("Flash"),l=(0,Co.up)("FAIcon"),d=(0,Co.up)("Modal");return e.showing?((0,Co.wg)(),(0,Co.j4)(d,{key:0,class:"media-modal-view",onBackdropClicked:e.hideIfNotSwiped},{default:(0,Co.w5)((function(){return["image"===e.type?((0,Co.wg)(),(0,Co.j4)(a,{key:0,ref:"swipeClick",class:"modal-image-container",direction:e.swipeDirection,threshold:e.swipeThreshold,"disable-click-threshold":e.swipeDisableClickThreshold,onPreviewRequested:e.handleSwipePreview,onSwipeFinished:e.handleSwipeEnd,onSwipelessClicked:e.hide},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{ref:"pinchZoom",class:"modal-image-container-inner",selector:".modal-image","reach-min-scale-strategy":"reset","stop-propagate-handled":"stop-propgate-handled","allow-pan-min-scale":e.pinchZoomMinScale,"min-scale":e.pinchZoomMinScale,"reset-to-min-scale-limit":e.pinchZoomScaleResetLimit},{default:(0,Co.w5)((function(){return[(0,Co._)("img",{class:(0,So.C_)([{loading:e.loading},"modal-image"]),src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description,onLoad:t[0]||(t[0]=function(){return e.onImageLoaded&&e.onImageLoaded.apply(e,arguments)})},null,42,vs)]})),_:1},8,["allow-pan-min-scale","min-scale","reset-to-min-scale-limit"])]})),_:1},8,["direction","threshold","disable-click-threshold","onPreviewRequested","onSwipeFinished","onSwipelessClicked"])):(0,Co.kq)("",!0),"video"===e.type?((0,Co.wg)(),(0,Co.j4)(u,{key:1,class:"modal-image",attachment:e.currentMedia,controls:!0},null,8,["attachment"])):(0,Co.kq)("",!0),"audio"===e.type?((0,Co.wg)(),(0,Co.iD)("audio",{key:2,class:"modal-image",src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description,controls:""},null,8,ws)):(0,Co.kq)("",!0),"flash"===e.type?((0,Co.wg)(),(0,Co.j4)(c,{key:3,class:"modal-image",src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description},null,8,["src","alt","title"])):(0,Co.kq)("",!0),e.canNavigate?((0,Co.wg)(),(0,Co.iD)("button",{key:4,title:e.$t("media_modal.previous"),class:"modal-view-button modal-view-button-arrow modal-view-button-arrow--prev",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.goPrev&&e.goPrev.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon arrow-icon",icon:"chevron-left"})],8,bs)):(0,Co.kq)("",!0),e.canNavigate?((0,Co.wg)(),(0,Co.iD)("button",{key:5,title:e.$t("media_modal.next"),class:"modal-view-button modal-view-button-arrow modal-view-button-arrow--next",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.goNext&&e.goNext.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon arrow-icon",icon:"chevron-right"})],8,ys)):(0,Co.kq)("",!0),(0,Co._)("button",{class:"modal-view-button modal-view-button-hide",title:e.$t("media_modal.hide"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.hide&&e.hide.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon",icon:"times"})],8,Ds),e.description?((0,Co.wg)(),(0,Co.iD)("span",_s,(0,So.zw)(e.description),1)):(0,Co.kq)("",!0),(0,Co._)("span",ks,(0,So.zw)(e.$tc("media_modal.counter",e.currentIndex+1,{current:e.currentIndex+1,total:e.media.length})),1),e.loading?((0,Co.wg)(),(0,Co.iD)("span",Cs,[(0,Co.Wm)(l,{spin:"",icon:"circle-notch",size:"5x"})])):(0,Co.kq)("",!0)]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var Ws={key:1,class:"side-drawer-logo-wrapper"},Hs=["src"],Vs={key:0},Ks={key:0,class:"badge badge-notification"},Gs={key:0},Ys={key:0,class:"badge badge-notification"},Js={key:0,class:"badge badge-notification"};function Qs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Xs(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qs(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qs(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.$Wj,Vt.jLD,Vt.J9Y,Vt.lXL,Vt.qmU,Vt.FKd,Vt.Acd,Vt.wn1,Vt.HLz,Vt.b7W,Vt.sqG,Vt.GTN,Vt.Zrf);const ea={props:["logout"],data:function(){return{closed:!0,closeGesture:void 0}},created:function(){this.closeGesture=Ms.swipeGesture(Ms.DIRECTION_LEFT,this.toggleDrawer),this.currentUser&&this.currentUser.locked&&this.$store.dispatch("startFetchingFollowRequests")},components:{UserCard:xr.Z},computed:Xs(Xs({currentUser:function(){return this.$store.state.users.currentUser},shout:function(){return this.$store.state.shout.joined},unseenNotifications:function(){return(0,K.Km)(this.$store)},unseenNotificationsCount:function(){return this.unseenNotifications.length},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled},logo:function(){return this.$store.state.instance.logo},hideSitename:function(){return this.$store.state.instance.hideSitename},sitename:function(){return this.$store.state.instance.name},followRequestCount:function(){return this.$store.state.api.followRequests.length},privateMode:function(){return this.$store.state.instance.private},federating:function(){return this.$store.state.instance.federating},timelinesRoute:function(){var e;return this.$store.state.interface.lastTimeline&&(e=this.$store.state.interface.lastTimeline),e=this.currentUser?"friends":"public-timeline",Yr.has(e)?{name:e,params:{username:this.currentUser.screen_name}}:{name:e}}},(0,s.rn)({pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements}})),(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"])),methods:{toggleDrawer:function(){this.closed=!this.closed},doLogout:function(){this.logout(),this.toggleDrawer()},touchStart:function(e){Ms.beginSwipe(e,this.closeGesture)},touchMove:function(e){Ms.updateSwipe(e,this.closeGesture)},openSettingsModal:function(){this.$store.dispatch("openSettingsModal","user")},openAdminModal:function(){this.$store.dispatch("openSettingsModal","admin")}}},ta=(0,Jo.Z)(ea,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["side-drawer-container",{"side-drawer-container-closed":e.closed,"side-drawer-container-open":!e.closed}])},[(0,Co._)("div",{class:(0,So.C_)(["side-drawer-darken",{"side-drawer-darken-closed":e.closed}])},null,2),(0,Co._)("div",{class:(0,So.C_)(["side-drawer",{"side-drawer-closed":e.closed}]),onTouchstart:t[19]||(t[19]=function(){return e.touchStart&&e.touchStart.apply(e,arguments)}),onTouchmove:t[20]||(t[20]=function(){return e.touchMove&&e.touchMove.apply(e,arguments)})},[(0,Co._)("div",{class:"side-drawer-heading",onClick:t[0]||(t[0]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[e.currentUser?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"user-id":e.currentUser.id,"hide-bio":!0},null,8,["user-id"])):((0,Co.wg)(),(0,Co.iD)("div",Ws,[(0,Co._)("img",{src:e.logo},null,8,Hs),e.hideSitename?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("span",Vs,(0,So.zw)(e.sitename),1))]))]),(0,Co._)("ul",null,[e.currentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[1]||(t[1]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"login"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-in-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("login.login")),1)]})),_:1})])),e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[2]||(t[2]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:e.timelinesRoute},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"home"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.timelines")),1)]})),_:1},8,["to"])])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:2,onClick:t[3]||(t[3]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"lists"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"list"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.lists")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser&&e.pleromaChatMessagesAvailable?((0,Co.wg)(),(0,Co.iD)("li",{key:3,onClick:t[4]||(t[4]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"chats",params:{username:e.currentUser.screen_name}},style:{position:"relative"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"comments"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.chats"))+" ",1),e.unreadChatCount?((0,Co.wg)(),(0,Co.iD)("span",Ks,(0,So.zw)(e.unreadChatCount),1)):(0,Co.kq)("",!0)]})),_:1},8,["to"])])):(0,Co.kq)("",!0)]),e.currentUser?((0,Co.wg)(),(0,Co.iD)("ul",Gs,[(0,Co._)("li",{onClick:t[5]||(t[5]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"interactions",params:{username:e.currentUser.screen_name}}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bell"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.interactions")),1)]})),_:1},8,["to"])]),e.currentUser.locked?((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[6]||(t[6]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:"/friend-requests"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"user-plus"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.friend_requests"))+" ",1),e.followRequestCount>0?((0,Co.wg)(),(0,Co.iD)("span",Ys,(0,So.zw)(e.followRequestCount),1)):(0,Co.kq)("",!0)]})),_:1})])):(0,Co.kq)("",!0),e.shout?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[7]||(t[7]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"shout-panel"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("shoutbox.title")),1)]})),_:1})])):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0),(0,Co._)("ul",null,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[8]||(t[8]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"search"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"search"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.search")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser&&e.suggestionsEnabled?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[9]||(t[9]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"who-to-follow"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"user-plus"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.who_to_follow")),1)]})),_:1})])):(0,Co.kq)("",!0),(0,Co._)("li",{onClick:t[11]||(t[11]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[10]||(t[10]=function(){return e.openSettingsModal&&e.openSettingsModal.apply(e,arguments)})},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"cog"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.settings")),1)])]),(0,Co._)("li",{onClick:t[12]||(t[12]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"about"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"info-circle"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.about")),1)]})),_:1})]),e.currentUser&&"admin"===e.currentUser.role?((0,Co.wg)(),(0,Co.iD)("li",{key:2,onClick:t[14]||(t[14]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[13]||(t[13]=(0,wo.iM)((function(){return e.openAdminModal&&e.openAdminModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"tachometer-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.administration")),1)])])):(0,Co.kq)("",!0),e.currentUser&&e.supportsAnnouncements?((0,Co.wg)(),(0,Co.iD)("li",{key:3,onClick:t[15]||(t[15]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"announcements"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.announcements"))+" ",1),e.unreadAnnouncementCount?((0,Co.wg)(),(0,Co.iD)("span",Js,(0,So.zw)(e.unreadAnnouncementCount),1)):(0,Co.kq)("",!0)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:4,onClick:t[16]||(t[16]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"edit-navigation"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"compass"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.edit_nav_mobile")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:5,onClick:t[18]||(t[18]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[17]||(t[17]=function(){return e.doLogout&&e.doLogout.apply(e,arguments)})},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-out-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("login.logout")),1)])])):(0,Co.kq)("",!0)])],34),(0,Co._)("div",{class:(0,So.C_)(["side-drawer-click-outside",{"side-drawer-click-outside-closed":e.closed}]),onClick:t[21]||(t[21]=(0,wo.iM)((function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)}),["stop","prevent"]))},null,2)],2)}]]);var na=["title"],oa=n(23279),ra=n.n(oa);Ht.vI.add(Vt.IwR);var ia=new Set(["chats","chat","lists-edit"]);const sa={data:function(){return{hidden:!1,scrollingDown:!1,inputActive:!1,oldScrollPos:0,amountScrolled:0}},created:function(){this.autohideFloatingPostButton&&this.activateFloatingPostButtonAutohide(),window.addEventListener("resize",this.handleOSK)},unmounted:function(){this.autohideFloatingPostButton&&this.deactivateFloatingPostButtonAutohide(),window.removeEventListener("resize",this.handleOSK)},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},isHidden:function(){return!!ia.has(this.$route.name)||this.autohideFloatingPostButton&&(this.hidden||this.inputActive)},isPersistent:function(){return!!this.$store.getters.mergedConfig.alwaysShowNewPostButton},autohideFloatingPostButton:function(){return!!this.$store.getters.mergedConfig.autohideFloatingPostButton}},watch:{autohideFloatingPostButton:function(e){e?this.activateFloatingPostButtonAutohide():this.deactivateFloatingPostButtonAutohide()}},methods:{activateFloatingPostButtonAutohide:function(){window.addEventListener("scroll",this.handleScrollStart),window.addEventListener("scroll",this.handleScrollEnd)},deactivateFloatingPostButtonAutohide:function(){window.removeEventListener("scroll",this.handleScrollStart),window.removeEventListener("scroll",this.handleScrollEnd)},openPostForm:function(){this.$store.dispatch("openPostStatusModal")},handleOSK:function(){var e=window.innerWidth<350,t=e&&window.innerHeight<345,n=!e&&window.innerWidth<450&&window.innerHeight<560;this.inputActive=!(!t&&!n)},handleScrollStart:ra()((function(){window.scrollY>this.oldScrollPos?this.hidden=!0:this.hidden=!1,this.oldScrollPos=window.scrollY}),100,{leading:!0,trailing:!1}),handleScrollEnd:ra()((function(){this.hidden=!1,this.oldScrollPos=window.scrollY}),100,{leading:!1,trailing:!0})}},aa=(0,Jo.Z)(sa,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return e.isLoggedIn?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:(0,So.C_)(["MobilePostButton button-default new-status-button",{hidden:e.isHidden,"always-show":e.isPersistent}]),title:e.$t("post_status.new_status"),onClick:t[0]||(t[0]=function(){return e.openPostForm&&e.openPostForm.apply(e,arguments)})},[(0,Co.Wm)(s,{icon:"pen"})],10,na)):(0,Co.kq)("",!0)}]]);var ua={class:"MobileNav"},ca={class:"item"},la=["title","aria-expanaded"],da={key:0,class:"alert-dot"},pa={class:"item right"},ma=["title"],ha={key:0,class:"alert-dot"},fa={class:"mobile-notifications-header"},ga={class:"title"},va=(0,Co._)("span",{class:"spacer"},null,-1),wa=["title"],ba=["title"],ya=n(93737),Da=n(1447);function _a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ka(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_a(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC,Vt.qmU,Vt.xiG,Vt.FPD,Vt.Kl4);const Ca={components:{SideDrawer:ta,Notifications:ya.default,NavigationPins:vi,ConfirmModal:Da.Z},data:function(){return{notificationsCloseGesture:void 0,notificationsOpen:!1,notificationsAtTop:!0,showingConfirmLogout:!1}},created:function(){var e=this;this.notificationsCloseGesture=Ms.swipeGesture(Ms.DIRECTION_RIGHT,(function(){return e.closeMobileNotifications(!0)}),50)},computed:ka(ka({currentUser:function(){return this.$store.state.users.currentUser},unseenNotifications:function(){return(0,K.Km)(this.$store)},unseenNotificationsCount:function(){return this.unseenNotifications.length},hideSitename:function(){return this.$store.state.instance.hideSitename},sitename:function(){return this.$store.state.instance.name},isChat:function(){return"chat"===this.$route.name}},(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"])),{},{chatsPinned:function(){return new Set(this.$store.state.serverSideStorage.prefsStorage.collections.pinnedNavItems).has("chats")},shouldConfirmLogout:function(){return this.$store.getters.mergedConfig.modalOnLogout}},(0,s.Se)(["unreadChatCount"])),methods:{toggleMobileSidebar:function(){this.$refs.sideDrawer.toggleDrawer()},openMobileNotifications:function(){this.notificationsOpen=!0},closeMobileNotifications:function(e){this.notificationsOpen&&(this.notificationsOpen=!1,e&&this.markNotificationsAsSeen())},notificationsTouchStart:function(e){Ms.beginSwipe(e,this.notificationsCloseGesture)},notificationsTouchMove:function(e){Ms.updateSwipe(e,this.notificationsCloseGesture)},scrollToTop:function(){window.scrollTo(0,0)},scrollMobileNotificationsToTop:function(){this.$refs.mobileNotifications.scrollTo(0,0)},showConfirmLogout:function(){this.showingConfirmLogout=!0},hideConfirmLogout:function(){this.showingConfirmLogout=!1},logout:function(){this.shouldConfirmLogout?this.showConfirmLogout():this.doLogout()},doLogout:function(){this.$router.replace("/main/public"),this.$store.dispatch("logout"),this.hideConfirmLogout()},markNotificationsAsSeen:function(){this.$store.dispatch("markNotificationsAsSeen")},onScroll:function(e){var t=e.target,n=t.scrollTop,o=t.clientHeight,r=t.scrollHeight;this.notificationsAtTop=n>0,n+o>=r&&this.$refs.notifications.fetchOlderNotifications()}},watch:{$route:function(){this.closeMobileNotifications()}}},Sa=(0,Jo.Z)(Ca,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("NavigationPins"),u=(0,Co.up)("FALayers"),c=(0,Co.up)("SideDrawer"),l=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("div",ua,[(0,Co._)("nav",{id:"nav",class:"mobile-nav",onClick:t[2]||(t[2]=function(t){return e.scrollToTop()})},[(0,Co._)("div",ca,[(0,Co._)("button",{class:"button-unstyled mobile-nav-button",title:e.$t("nav.mobile_sidebar"),"aria-expanaded":e.$refs.sideDrawer&&!e.$refs.sideDrawer.closed,onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.toggleMobileSidebar()}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"bars"}),e.unreadChatCount&&!e.chatsPinned||e.unreadAnnouncementCount?((0,Co.wg)(),(0,Co.iD)("div",da)):(0,Co.kq)("",!0)],8,la),(0,Co.Wm)(a,{class:"pins"})]),(0,Co.Uk)(),(0,Co._)("div",pa,[e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled mobile-nav-button",title:e.unseenNotificationsCount?e.$t("nav.mobile_notifications_unread_active"):e.$t("nav.mobile_notifications"),onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.openMobileNotifications()}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"bell"}),e.unseenNotificationsCount?((0,Co.wg)(),(0,Co.iD)("div",ha)):(0,Co.kq)("",!0)],8,ma)):(0,Co.kq)("",!0)])]),e.currentUser?((0,Co.wg)(),(0,Co.iD)("aside",{key:0,class:(0,So.C_)(["mobile-notifications-drawer",{"-closed":!e.notificationsOpen}]),onTouchstart:t[6]||(t[6]=(0,wo.iM)((function(){return e.notificationsTouchStart&&e.notificationsTouchStart.apply(e,arguments)}),["stop"])),onTouchmove:t[7]||(t[7]=(0,wo.iM)((function(){return e.notificationsTouchMove&&e.notificationsTouchMove.apply(e,arguments)}),["stop"]))},[(0,Co._)("div",fa,[(0,Co._)("span",ga,(0,So.zw)(e.$t("notifications.notifications")),1),va,e.notificationsAtTop?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled mobile-nav-button",title:e.$t("general.scroll_to_top"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.scrollMobileNotificationsToTop&&e.scrollMobileNotificationsToTop.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"arrow-up"}),(0,Co.Wm)(s,{icon:"minus",transform:"up-7"})]})),_:1})],8,wa)):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-unstyled mobile-nav-button",title:e.$t("nav.mobile_notifications_close"),onClick:t[4]||(t[4]=(0,wo.iM)((function(t){return e.closeMobileNotifications(!0)}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})],8,ba)]),(0,Co._)("div",{id:"mobile-notifications",ref:"mobileNotifications",class:"mobile-notifications",onScroll:t[5]||(t[5]=function(){return e.onScroll&&e.onScroll.apply(e,arguments)})},null,544)],34)):(0,Co.kq)("",!0),(0,Co.Wm)(c,{ref:"sideDrawer",logout:e.logout},null,8,["logout"]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmLogout?((0,Co.wg)(),(0,Co.j4)(l,{key:0,title:e.$t("login.logout_confirm_title"),"confirm-text":e.$t("login.logout_confirm_accept_button"),"cancel-text":e.$t("login.logout_confirm_cancel_button"),onAccepted:e.doLogout,onCancelled:e.hideConfirmLogout},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.logout_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))])}]]);var ja={class:"inner-nav"},Fa={class:"item sitename"},Aa=["src"],Oa={class:"item right actions"},Ea=["title"],za=["title"],Pa=(0,Co._)("span",{class:"spacer"},null,-1),Ia=["title"],xa=["title","aria-expanded"],Ta=["placeholder"],$a=["title"],Ba=["title","aria-expanded"],Ua=(0,Co._)("span",{class:"spacer"},null,-1),Ma=(0,Co._)("span",{class:"spacer"},null,-1);Ht.vI.add(Vt.NBC,Vt.wn1);const La={data:function(){return{searchTerm:void 0,hidden:!0,error:!1}},watch:{$route:function(e){"search"===e.name&&(this.searchTerm=e.query.query)}},methods:{find:function(e){this.$router.push({name:"search",query:{query:e}}),this.$refs.searchInput.focus()},toggleHidden:function(){var e=this;this.hidden=!this.hidden,this.$emit("toggled",this.hidden),this.$nextTick((function(){e.hidden||e.$refs.searchInput.focus()}))}}},Ra=(0,Jo.Z)(La,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["SearchBar",{"-expanded":!e.hidden}])},[e.hidden?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled nav-icon",title:e.$t("nav.search"),type:"button","aria-expanded":!e.hidden,onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[(0,Co.Wm)(s,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"search"})],8,xa)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:1},[(0,Co.wy)((0,Co._)("input",{id:"search-bar-input",ref:"searchInput","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),class:"search-bar-input",placeholder:e.$t("nav.search"),type:"text",onKeyup:t[2]||(t[2]=(0,wo.D2)((function(t){return e.find(e.searchTerm)}),["enter"]))},null,40,Ta),[[wo.nr,e.searchTerm]]),(0,Co._)("button",{class:"button-default search-button",type:"submit",title:e.$t("nav.search"),onClick:t[3]||(t[3]=function(t){return e.find(e.searchTerm)})},[(0,Co.Wm)(s,{"fixed-width":"",icon:"search"})],8,$a),(0,Co._)("button",{class:"button-unstyled cancel-search",type:"button",title:e.$t("nav.search_close"),"aria-expanded":!e.hidden,onClick:t[4]||(t[4]=(0,wo.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[(0,Co.Wm)(s,{"fixed-width":"",icon:"times",class:"cancel-icon fa-scale-110 fa-old-padding"})],8,Ba),Ua,Ma],64))],2)}]]);Ht.vI.add(Vt.$Wj,Vt.jLD,Vt.J9Y,Vt.lXL,Vt.qmU,Vt.FKd,Vt.Acd,Vt.wn1,Vt.HLz,Vt.b7W,Vt.sqG);const qa={components:{SearchBar:Ra,ConfirmModal:Da.Z},data:function(){return{searchBarHidden:!0,supportsMask:window.CSS&&window.CSS.supports&&(window.CSS.supports("mask-size","contain")||window.CSS.supports("-webkit-mask-size","contain")||window.CSS.supports("-moz-mask-size","contain")||window.CSS.supports("-ms-mask-size","contain")||window.CSS.supports("-o-mask-size","contain")),showingConfirmLogout:!1}},computed:{enableMask:function(){return this.supportsMask&&this.$store.state.instance.logoMask},logoStyle:function(){return{visibility:this.enableMask?"hidden":"visible"}},logoMaskStyle:function(){return this.enableMask?{"mask-image":"url(".concat(this.$store.state.instance.logo,")")}:{"background-color":this.enableMask?"":"transparent"}},logoBgStyle:function(){return Object.assign({margin:"".concat(this.$store.state.instance.logoMargin," 0"),opacity:this.searchBarHidden?1:0},this.enableMask?{}:{"background-color":this.enableMask?"":"transparent"})},logo:function(){return this.$store.state.instance.logo},sitename:function(){return this.$store.state.instance.name},hideSitename:function(){return this.$store.state.instance.hideSitename},logoLeft:function(){return this.$store.state.instance.logoLeft},currentUser:function(){return this.$store.state.users.currentUser},privateMode:function(){return this.$store.state.instance.private},shouldConfirmLogout:function(){return this.$store.getters.mergedConfig.modalOnLogout}},methods:{scrollToTop:function(){window.scrollTo(0,0)},showConfirmLogout:function(){this.showingConfirmLogout=!0},hideConfirmLogout:function(){this.showingConfirmLogout=!1},logout:function(){this.shouldConfirmLogout?this.showConfirmLogout():this.doLogout()},doLogout:function(){this.$router.replace("/main/public"),this.$store.dispatch("logout"),this.hideConfirmLogout()},onSearchBarToggled:function(e){this.searchBarHidden=e},openSettingsModal:function(){this.$store.dispatch("openSettingsModal","user")},openAdminModal:function(){this.$store.dispatch("openSettingsModal","admin")}}},Na=(0,Jo.Z)(qa,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("search-bar"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("nav",{id:"nav",class:(0,So.C_)(["DesktopNav",{"-logoLeft":e.logoLeft}]),onClick:t[4]||(t[4]=function(t){return e.scrollToTop()})},[(0,Co._)("div",ja,[(0,Co._)("div",Fa,[e.hideSitename?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:0,class:"site-name",to:{name:"root"},"active-class":"home"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.sitename),1)]})),_:1}))]),(0,Co.Wm)(s,{class:"logo",to:{name:"root"},style:(0,So.j5)(e.logoBgStyle),title:e.sitename},{default:(0,Co.w5)((function(){return[(0,Co._)("div",{class:"mask",style:(0,So.j5)(e.logoMaskStyle)},null,4),(0,Co._)("img",{src:e.logo,style:(0,So.j5)(e.logoStyle)},null,12,Aa)]})),_:1},8,["style","title"]),(0,Co._)("div",Oa,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.j4)(a,{key:0,onToggled:e.onSearchBarToggled,onClick:t[0]||(t[0]=(0,wo.iM)((function(){}),["stop"]))},null,8,["onToggled"])):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-unstyled nav-icon",title:e.$t("nav.preferences"),onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.openSettingsModal&&e.openSettingsModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"cog"})],8,Ea),e.currentUser&&"admin"===e.currentUser.role?((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-unstyled nav-icon",target:"_blank",title:e.$t("nav.administration"),onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.openAdminModal&&e.openAdminModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"tachometer-alt"})],8,za)):(0,Co.kq)("",!0),Pa,e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-unstyled nav-icon",title:e.$t("login.logout"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.logout&&e.logout.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-out-alt"})],8,Ia)):(0,Co.kq)("",!0)])]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmLogout?((0,Co.wg)(),(0,Co.j4)(c,{key:0,title:e.$t("login.logout_confirm_title"),"confirm-text":e.$t("login.logout_confirm_accept_button"),"cancel-text":e.$t("login.logout_confirm_cancel_button"),onAccepted:e.doLogout,onCancelled:e.hideConfirmLogout},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.logout_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))],2)}]]);var Za={class:"user-reporting-panel panel"},Wa={class:"panel-heading"},Ha={class:"panel-body"},Va={class:"user-reporting-panel-left"},Ka=["placeholder"],Ga={key:0},Ya=["disabled"],Ja={key:0,class:"alert error"},Qa={class:"user-reporting-panel-right"},Xa={class:"status-fadein user-reporting-panel-sitem"},eu=n(96686),tu=n(88369),nu=n(12061);function ou(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const ru={components:{Status:eu.default,List:tu.Z,Checkbox:wi.Z,Modal:Wt.Z,UserLink:nu.Z},data:function(){return{comment:"",forward:!1,statusIdsToReport:[],processing:!1,error:!1}},computed:{reportModal:function(){return this.$store.state.reports.reportModal},isLoggedIn:function(){return!!this.$store.state.users.currentUser},isOpen:function(){return this.isLoggedIn&&this.reportModal.activated},userId:function(){return this.reportModal.userId},user:function(){return this.$store.getters.findUser(this.userId)},remoteInstance:function(){return!this.user.is_local&&this.user.screen_name.substr(this.user.screen_name.indexOf("@")+1)},statuses:function(){return this.reportModal.statuses},preTickedIds:function(){return this.reportModal.preTickedIds}},watch:{userId:"resetState",preTickedIds:function(e){this.statusIdsToReport=e}},methods:{resetState:function(){this.comment="",this.forward=!1,this.statusIdsToReport=this.preTickedIds,this.processing=!1,this.error=!1},closeModal:function(){this.$store.dispatch("closeUserReportingModal")},reportUser:function(){var e=this;this.processing=!0,this.error=!1;var t={userId:this.userId,comment:this.comment,forward:this.forward,statusIds:this.statusIdsToReport};this.$store.state.api.backendInteractor.reportUser(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ou(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ou(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},t)).then((function(){e.processing=!1,e.resetState(),e.closeModal()})).catch((function(){e.processing=!1,e.error=!0}))},clearError:function(){this.error=!1},isChecked:function(e){return-1!==this.statusIdsToReport.indexOf(e)},toggleStatus:function(e,t){e!==this.isChecked(t)&&(e?this.statusIdsToReport.push(t):this.statusIdsToReport.splice(this.statusIdsToReport.indexOf(t),1))},resize:function(e){var t=e.target||e;t instanceof window.Element&&(t.style.height="auto",t.style.height="".concat(t.scrollHeight,"px"),""===t.value&&(t.style.height=null))}}},iu=(0,Jo.Z)(ru,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserLink"),a=(0,Co.up)("i18n-t"),u=(0,Co.up)("Checkbox"),c=(0,Co.up)("Status"),l=(0,Co.up)("List"),d=(0,Co.up)("Modal");return e.isOpen?((0,Co.wg)(),(0,Co.j4)(d,{key:0,onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",Za,[(0,Co._)("div",Wa,[(0,Co.Wm)(a,{tag:"div",keypath:"user_reporting.title",class:"title"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{user:e.user},null,8,["user"])]})),_:1})]),(0,Co._)("div",Ha,[(0,Co._)("div",Va,[(0,Co._)("div",null,[(0,Co._)("p",null,(0,So.zw)(e.$t("user_reporting.add_comment_description")),1),(0,Co.wy)((0,Co._)("textarea",{"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.comment=t}),class:"form-control",placeholder:e.$t("user_reporting.additional_comments"),rows:"1",onInput:t[1]||(t[1]=function(){return e.resize&&e.resize.apply(e,arguments)})},null,40,Ka),[[wo.nr,e.comment]])]),e.user.is_local?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Ga,[(0,Co._)("p",null,(0,So.zw)(e.$t("user_reporting.forward_description")),1),(0,Co.Wm)(u,{modelValue:e.forward,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.forward=t})},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_reporting.forward_to",[e.remoteInstance])),1)]})),_:1},8,["modelValue"])])),(0,Co._)("div",null,[(0,Co._)("button",{class:"btn button-default",disabled:e.processing,onClick:t[3]||(t[3]=function(){return e.reportUser&&e.reportUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_reporting.submit")),9,Ya),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ja,(0,So.zw)(e.$t("user_reporting.generic_error")),1)):(0,Co.kq)("",!0)])]),(0,Co._)("div",Qa,[(0,Co.Wm)(l,{items:e.statuses},{item:(0,Co.w5)((function(t){var n=t.item;return[(0,Co._)("div",Xa,[(0,Co.Wm)(c,{"in-conversation":!1,focused:!1,statusoid:n},null,8,["statusoid"]),(0,Co.Wm)(u,{"model-value":e.isChecked(n.id),"onUpdate:modelValue":function(t){return e.toggleStatus(t,n.id)}},null,8,["model-value","onUpdate:modelValue"])])]})),_:1},8,["items"])])])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var su={class:"edit-form-modal-panel panel"},au={class:"panel-heading"},uu=n(7257);const cu={components:{PostStatusForm:Ir.Z,Modal:Wt.Z},data:function(){return{resettingForm:!1}},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},modalActivated:function(){return this.$store.state.editStatus.modalActivated},isFormVisible:function(){return this.isLoggedIn&&!this.resettingForm&&this.modalActivated},params:function(){return this.$store.state.editStatus.params||{}}},watch:{params:function(e,t){var n=this;Dt()(e,"statusId")!==Dt()(t,"statusId")&&(this.resettingForm=!0,this.$nextTick((function(){n.resettingForm=!1})))},isFormVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$el&&t.$el.querySelector("textarea").focus()}))}},methods:{doEditStatus:function(e){var t=e.status,n=e.spoilerText,o=e.sensitive,r=e.media,i=e.contentType,s=e.poll,a={store:this.$store,statusId:this.$store.state.editStatus.params.statusId,status:t,spoilerText:n,sensitive:o,poll:s,media:r,contentType:i};return uu.Z.editStatus(a).then((function(e){return e})).catch((function(e){return console.error("Error editing status",e),{error:e.message}}))},closeModal:function(){this.$store.dispatch("closeEditStatusModal")}}},lu=(0,Jo.Z)(cu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PostStatusForm"),a=(0,Co.up)("Modal");return e.isFormVisible?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"edit-form-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",su,[(0,Co._)("div",au,(0,So.zw)(e.$t("post_status.edit_status")),1),(0,Co.Wm)(s,(0,Co.dG)({class:"panel-body"},e.params,{"post-handler":e.doEditStatus,"disable-polls":!0,"disable-visibility-selector":!0,onPosted:e.closeModal}),null,16,["post-handler","onPosted"])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var du={class:"post-form-modal-panel panel"},pu={class:"panel-heading"};const mu={components:{PostStatusForm:Ir.Z,Modal:Wt.Z},data:function(){return{resettingForm:!1}},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},modalActivated:function(){return this.$store.state.postStatus.modalActivated},isFormVisible:function(){return this.isLoggedIn&&!this.resettingForm&&this.modalActivated},params:function(){return this.$store.state.postStatus.params||{}}},watch:{params:function(e,t){var n=this;Dt()(e,"repliedUser.id")!==Dt()(t,"repliedUser.id")&&(this.resettingForm=!0,this.$nextTick((function(){n.resettingForm=!1})))},isFormVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$el&&t.$el.querySelector("textarea").focus()}))}},methods:{closeModal:function(){this.$store.dispatch("closePostStatusModal")},resetAndClose:function(){this.$store.dispatch("resetPostStatusModal"),this.$store.dispatch("closePostStatusModal")}}},hu=(0,Jo.Z)(mu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PostStatusForm"),a=(0,Co.up)("Modal");return e.isLoggedIn&&!e.resettingForm?((0,Co.wg)(),(0,Co.j4)(a,{key:0,"is-open":e.modalActivated,class:"post-form-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",du,[(0,Co._)("div",pu,(0,So.zw)(e.$t("post_status.new_status")),1),(0,Co.Wm)(s,(0,Co.dG)({class:"panel-body"},e.params,{onPosted:e.resetAndClose}),null,16,["onPosted"])])]})),_:1},8,["is-open","onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var fu={class:"status-history-modal-panel panel"},gu={class:"panel-heading"},vu={class:"panel-body"},wu={key:0,class:"history-body"};const bu={components:{Modal:Wt.Z,Status:eu.default},data:function(){return{statuses:[]}},computed:{modalActivated:function(){return this.$store.state.statusHistory.modalActivated},params:function(){return this.$store.state.statusHistory.params},statusId:function(){return this.params.id},historyCount:function(){return this.statuses.length},history:function(){return this.statuses}},watch:{params:function(e,t){var n=Dt()(e,"id")!==Dt()(t,"id");n&&this.resetHistory(),(n||Dt()(e,"edited_at")!==Dt()(t,"edited_at"))&&this.fetchStatusHistory()}},methods:{resetHistory:function(){this.statuses=[]},fetchStatusHistory:function(){var e=this;this.$store.dispatch("fetchStatusHistory",this.params).then((function(t){e.statuses=t}))},closeModal:function(){this.$store.dispatch("closeStatusHistoryModal")}}},yu=(0,Jo.Z)(bu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("status"),a=(0,Co.up)("Modal");return e.modalActivated?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"status-history-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",fu,[(0,Co._)("div",gu,(0,So.zw)(e.$t("status.status_history"))+" ("+(0,So.zw)(e.historyCount)+") ",1),(0,Co._)("div",vu,[e.historyCount>0?((0,Co.wg)(),(0,Co.iD)("div",wu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.history,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,statusoid:e,"is-preview":!0,class:"conversation-status status-fadein panel-body"},null,8,["statusoid"])})),128))])):(0,Co.kq)("",!0)])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var Du={class:"global-notice-list"},_u={class:"notice-message"},ku=["onClick"];Ht.vI.add(Vt.NBC);const Cu={computed:{notices:function(){return this.$store.state.interface.globalNotices}},methods:{closeNotice:function(e){this.$store.dispatch("removeGlobalNotice",e)}}},Su=(0,Jo.Z)(Cu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Du,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.notices,(function(t,n){return(0,Co.wg)(),(0,Co.iD)("div",{key:n,class:(0,So.C_)(["alert global-notice",(0,d.Z)({},"global-"+t.level,!0)])},[(0,Co._)("div",_u,(0,So.zw)(e.$t(t.messageKey,t.messageArgs)),1),(0,Co._)("button",{class:"button-unstyled close-notice",onClick:function(n){return e.closeNotice(t)}},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})],8,ku)],2)})),128))])}]]);function ju(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const Fu={name:"app",components:{UserPanel:Br,NavPanel:_i,Notifications:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,93737))})),InstanceSpecificPanel:Ai,FeaturesPanel:Ri,WhoToFollowPanel:ts,ShoutPanel:gs,MediaModal:Zs,SideDrawer:ta,MobilePostStatusButton:aa,MobileNav:Sa,DesktopNav:Na,SettingsModal:(0,Co.RC)((function(){return n.e(7586).then(n.bind(n,27586))})),UpdateNotification:(0,Co.RC)((function(){return n.e(6464).then(n.bind(n,16464))})),UserReportingModal:iu,PostStatusModal:hu,EditStatusModal:lu,StatusHistoryModal:yu,GlobalNoticeList:Su},data:function(){return{mobileActivePanel:"timeline"}},created:function(){var e=this.$store.getters.mergedConfig.interfaceLanguage;this.$store.dispatch("setOption",{name:"interfaceLanguage",value:e}),window.addEventListener("resize",this.updateMobileState)},unmounted:function(){window.removeEventListener("resize",this.updateMobileState)},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ju(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ju(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({classes:function(){return[{"-reverse":this.reverseLayout,"-no-sticky-headers":this.noSticky,"-has-new-post-button":this.newPostButtonShown},"-"+this.layoutType]},navClasses:function(){var e=this.$store.getters.mergedConfig.navbarColumnStretch;return["-"+this.layoutType].concat((0,l.Z)(e?["-column-stretch"]:[]))},currentUser:function(){return this.$store.state.users.currentUser},userBackground:function(){return this.currentUser.background_image},instanceBackground:function(){return this.mergedConfig.hideInstanceWallpaper?null:this.$store.state.instance.background},background:function(){return this.userBackground||this.instanceBackground},bgStyle:function(){if(this.background)return{"--body-background-image":"url(".concat(this.background,")")}},shout:function(){return this.$store.state.shout.joined},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled},showInstanceSpecificPanel:function(){return this.$store.state.instance.showInstanceSpecificPanel&&!this.$store.getters.mergedConfig.hideISP&&this.$store.state.instance.instanceSpecificPanelContent},isChats:function(){return"chat"===this.$route.name||"chats"===this.$route.name},isListEdit:function(){return"lists-edit"===this.$route.name},newPostButtonShown:function(){return!this.isChats&&!this.isListEdit&&(this.$store.getters.mergedConfig.alwaysShowNewPostButton||"mobile"===this.layoutType)},showFeaturesPanel:function(){return this.$store.state.instance.showFeaturesPanel},editingAvailable:function(){return this.$store.state.instance.editingAvailable},shoutboxPosition:function(){return this.$store.getters.mergedConfig.alwaysShowNewPostButton||!1},hideShoutbox:function(){return this.$store.getters.mergedConfig.hideShoutbox},layoutType:function(){return this.$store.state.interface.layoutType},privateMode:function(){return this.$store.state.instance.private},reverseLayout:function(){var e=this.$store.getters.mergedConfig,t=e.thirdColumnMode,n=e.sidebarRight;return"wide"!==this.layoutType||"notifications"===t?n:!n},noSticky:function(){return this.$store.getters.mergedConfig.disableStickyHeaders},showScrollbars:function(){return this.$store.getters.mergedConfig.showScrollbars}},(0,s.Se)(["mergedConfig"])),methods:{updateMobileState:function(){this.$store.dispatch("setLayoutWidth",Te()),this.$store.dispatch("setLayoutHeight",$e())}}},Au=(0,Jo.Z)(Fu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("MobileNav"),a=(0,Co.up)("DesktopNav"),u=(0,Co.up)("Notifications"),c=(0,Co.up)("user-panel"),l=(0,Co.up)("nav-panel"),d=(0,Co.up)("instance-specific-panel"),p=(0,Co.up)("features-panel"),m=(0,Co.up)("who-to-follow-panel"),h=(0,Co.up)("router-link"),f=(0,Co.up)("router-view"),g=(0,Co.up)("MediaModal"),v=(0,Co.up)("shout-panel"),w=(0,Co.up)("MobilePostStatusButton"),b=(0,Co.up)("UserReportingModal"),y=(0,Co.up)("PostStatusModal"),D=(0,Co.up)("EditStatusModal"),_=(0,Co.up)("StatusHistoryModal"),k=(0,Co.up)("SettingsModal"),C=(0,Co.up)("UpdateNotification"),S=(0,Co.up)("GlobalNoticeList");return(0,Co.wg)(),(0,Co.iD)("div",{id:"app-loaded",style:(0,So.j5)(e.bgStyle)},[jo,"mobile"===e.layoutType?((0,Co.wg)(),(0,Co.j4)(s,{key:0})):((0,Co.wg)(),(0,Co.j4)(a,{key:1,class:(0,So.C_)(e.navClasses)},null,8,["class"])),e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:2})):(0,Co.kq)("",!0),(0,Co._)("div",{id:"content",class:(0,So.C_)(["app-layout container",e.classes])},[Fo,(0,Co._)("div",{id:"sidebar",class:(0,So.C_)(["column -scrollable",{"-show-scrollbar":e.showScrollbars}])},[(0,Co.Wm)(c),"mobile"!==e.layoutType?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co.Wm)(l),e.showInstanceSpecificPanel?((0,Co.wg)(),(0,Co.j4)(d,{key:0})):(0,Co.kq)("",!0),!e.currentUser&&e.showFeaturesPanel?((0,Co.wg)(),(0,Co.j4)(p,{key:1})):(0,Co.kq)("",!0),e.currentUser&&e.suggestionsEnabled?((0,Co.wg)(),(0,Co.j4)(m,{key:2})):(0,Co.kq)("",!0),Ao],64)):(0,Co.kq)("",!0)],2),(0,Co._)("main",{id:"main-scroller",class:(0,So.C_)(["column main",{"-full-height":e.isChats||e.isListEdit}])},[e.currentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Oo,[(0,Co.Wm)(h,{to:{name:"login"},class:"panel-body"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.hint")),1)]})),_:1})])),(0,Co.Wm)(f)],2),(0,Co._)("div",{id:"notifs-column",class:(0,So.C_)(["column -scrollable",{"-show-scrollbar":e.showScrollbars}])},null,2)],2),(0,Co.Wm)(g),e.currentUser&&e.shout&&!e.hideShoutbox?((0,Co.wg)(),(0,Co.j4)(v,{key:3,floating:!0,class:(0,So.C_)(["floating-shout mobile-hidden",{"-left":e.shoutboxPosition}])},null,8,["class"])):(0,Co.kq)("",!0),(0,Co.Wm)(w),(0,Co.Wm)(b),(0,Co.Wm)(y),e.editingAvailable?((0,Co.wg)(),(0,Co.j4)(D,{key:4})):(0,Co.kq)("",!0),e.editingAvailable?((0,Co.wg)(),(0,Co.j4)(_,{key:5})):(0,Co.kq)("",!0),(0,Co.Wm)(k),(0,Co.Wm)(C),(0,Co.Wm)(S)],4)}]]);var Ou={key:1,class:"rightside-button"},Eu=["title"],zu={key:0,class:"rightside-button"},Pu=["title"],Iu={class:"alert-badge"},xu=["title"],Tu={ref:"timeline",class:"timeline",role:"feed"},$u={key:0,class:"new-status-notification text-center faint"},Bu={key:1,class:"new-status-notification text-center faint"},Uu={class:"new-status-notification text-center"},Mu={key:3,class:"new-status-notification text-center"},Lu=n(24350),Ru=n.n(Lu),qu=n(23493),Nu=n.n(qu),Zu={key:0,class:"panel-heading conversation-heading -sticky"},Wu={class:"title"},Hu={class:"conversation-body panel-body"},Vu={key:0,class:"thread-body"},Ku={key:0,class:"conversation-dive-to-top-level-box"},Gu={key:1,class:"thread-ancestors"},Yu={key:0,class:"thread-ancestor-dive-box"},Ju={class:"thread-ancestor-dive-box-inner"},Qu={key:1,class:"thread-body"},Xu=n(66678),ec=n.n(Xu),tc={class:"thread-tree"},nc={key:0,class:"thread-tree-replies"},oc={key:1,class:"thread-tree-replies thread-tree-replies-hidden"};Ht.vI.add(Vt.Sbq,Vt.cLY);const rc={components:{Status:eu.default},name:"ThreadTree",props:{depth:Number,status:Object,inProfile:Boolean,conversation:Array,collapsable:Boolean,isExpanded:Boolean,pinnedStatusIdsObject:Object,profileUserId:String,focused:Function,highlight:String,getReplies:Function,setHighlight:Function,toggleExpanded:Function,simple:Boolean,toggleThreadDisplay:Function,threadDisplayStatus:Object,showThreadRecursively:Function,totalReplyCount:Object,totalReplyDepth:Object,statusContentProperties:Object,setStatusContentProperty:Function,toggleStatusContentProperty:Function,dive:Function},computed:{suspendable:function(){var e=!this.$refs.statusComponent||this.$refs.statusComponent.suspendable;return this.$refs.childComponent?e&&this.$refs.childComponent.every((function(e){return e.suspendable})):e},reverseLookupTable:function(){return this.conversation.reduce((function(e,t,n){return e[t.id]=n,e}),{})},currentReplies:function(){var e=this;return this.getReplies(this.status.id).map((function(t){var n=t.id;return e.statusById(n)}))},threadShowing:function(){return"showing"===this.threadDisplayStatus[this.status.id]},currentProp:function(){return this.statusContentProperties[this.status.id]}},methods:{statusById:function(e){return this.conversation[this.reverseLookupTable[e]]},collapseThread:function(){},showThread:function(){},showAllSubthreads:function(){},toggleCurrentProp:function(e){this.toggleStatusContentProperty(this.status.id,e)},setCurrentProp:function(e,t){this.setStatusContentProperty(this.status.id,e)}}},ic=(0,Jo.Z)(rc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("status"),a=(0,Co.up)("thread-tree"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("i18n-t");return(0,Co.wg)(),(0,Co.iD)("article",tc,[((0,Co.wg)(),(0,Co.j4)(s,{key:e.status.id,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:e.status,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[e.status.id],focused:e.focused(e.status.id),"in-conversation":e.isExpanded,highlight:e.highlight,replies:e.getReplies(e.status.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status conversation-status-treeview status-fadein panel-body","simple-tree":e.simple,"controlled-thread-display-status":e.threadDisplayStatus[e.status.id],"controlled-toggle-thread-display":function(){return e.toggleThreadDisplay(e.status.id)},"controlled-showing-tall":e.currentProp.showingTall,"controlled-expanding-subject":e.currentProp.expandingSubject,"controlled-showing-long-subject":e.currentProp.showingLongSubject,"controlled-replying":e.currentProp.replying,"controlled-media-playing":e.currentProp.mediaPlaying,"controlled-toggle-showing-tall":function(){return e.toggleCurrentProp("showingTall")},"controlled-toggle-expanding-subject":function(){return e.toggleCurrentProp("expandingSubject")},"controlled-toggle-showing-long-subject":function(){return e.toggleCurrentProp("showingLongSubject")},"controlled-toggle-replying":function(){return e.toggleCurrentProp("replying")},"controlled-set-media-playing":function(t){return e.setCurrentProp("mediaPlaying",t)},dive:e.dive?function(){return e.dive(e.status.id)}:void 0,onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","simple-tree","controlled-thread-display-status","controlled-toggle-thread-display","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-replying","controlled-media-playing","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","controlled-toggle-replying","controlled-set-media-playing","dive","onGoto","onToggleExpanded"])),e.currentReplies.length&&e.threadShowing?((0,Co.wg)(),(0,Co.iD)("div",nc,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.currentReplies,(function(t){return(0,Co.wg)(),(0,Co.j4)(a,{key:t.id,ref_for:!0,ref:"childComponent",depth:e.depth+1,status:t,"in-profile":e.inProfile,conversation:e.conversation,collapsable:e.collapsable,"is-expanded":e.isExpanded,"pinned-status-ids-object":e.pinnedStatusIdsObject,"profile-user-id":e.profileUserId,focused:e.focused,"get-replies":e.getReplies,highlight:e.highlight,"set-highlight":e.setHighlight,"toggle-expanded":e.toggleExpanded,simple:e.simple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,dive:e.dive},null,8,["depth","status","in-profile","conversation","collapsable","is-expanded","pinned-status-ids-object","profile-user-id","focused","get-replies","highlight","set-highlight","toggle-expanded","simple","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","dive"])})),128))])):(0,Co.kq)("",!0),e.currentReplies.length&&!e.threadShowing?((0,Co.wg)(),(0,Co.iD)("div",oc,[e.simple?((0,Co.wg)(),(0,Co.j4)(c,{key:0,scope:"global",tag:"button",keypath:"status.thread_follow_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.dive(e.status.id)}),["prevent"]))},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-right"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.thread_follow",e.totalReplyCount[e.status.id],{numStatus:e.totalReplyCount[e.status.id]})),1)]})),_:1})):((0,Co.wg)(),(0,Co.j4)(c,{key:1,scope:"global",tag:"button",keypath:"status.thread_show_full_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.showThreadRecursively(e.status.id)}),["prevent"]))},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-down"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.thread_show_full",e.totalReplyCount[e.status.id],{numStatus:e.totalReplyCount[e.status.id],depth:e.totalReplyDepth[e.status.id]})),1)]})),_:1}))])):(0,Co.kq)("",!0)])}]]);var sc={class:"dropdown-menu",role:"menu"},ac={key:0,role:"group"},uc=["aria-checked"],cc=["aria-checked"],lc=["aria-checked"],dc={key:3,role:"separator",class:"dropdown-divider"},pc=["aria-checked"],mc=["aria-checked"],hc=["aria-checked"],fc=n(84535);function gc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function vc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.G_j,Vt.yGG,Vt.klh);const wc={props:{conversation:Boolean},components:{Popover:fc.default},methods:{setReplyVisibility:function(e){this.$store.dispatch("setOption",{name:"replyVisibility",value:e}),this.$store.dispatch("queueFlushAll")},openTab:function(e){this.$store.dispatch("openSettingsModalTab",e)}},computed:vc(vc({},(0,s.Se)(["mergedConfig"])),{},{loggedIn:function(){return!!this.$store.state.users.currentUser},replyVisibilitySelf:{get:function(){return"self"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("self")}},replyVisibilityFollowing:{get:function(){return"following"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("following")}},replyVisibilityAll:{get:function(){return"all"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("all")}},hideMedia:{get:function(){return this.mergedConfig.hideAttachments||this.mergedConfig.hideAttachmentsInConv},set:function(){var e=!this.hideMedia;this.$store.dispatch("setOption",{name:"hideAttachments",value:e}),this.$store.dispatch("setOption",{name:"hideAttachmentsInConv",value:e})}},hideMutedPosts:{get:function(){return this.mergedConfig.hideFilteredStatuses},set:function(){var e=!this.hideMutedPosts;this.$store.dispatch("setOption",{name:"hideFilteredStatuses",value:e})}},muteBotStatuses:{get:function(){return this.mergedConfig.muteBotStatuses},set:function(){var e=!this.muteBotStatuses;this.$store.dispatch("setOption",{name:"muteBotStatuses",value:e})}}})},bc=(0,Jo.Z)(wc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(a,{trigger:"click",class:"QuickFilterSettings","bound-to":{x:"container"},"trigger-attrs":{title:e.$t("timeline.quick_filter_settings")}},{content:(0,Co.w5)((function(){return[(0,Co._)("div",sc,[e.loggedIn?((0,Co.wg)(),(0,Co.iD)("div",ac,[e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default dropdown-item","aria-checked":e.replyVisibilityAll,role:"menuitemradio",onClick:t[0]||(t[0]=function(t){return e.replyVisibilityAll=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilityAll}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_all")),1)],8,uc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-default dropdown-item","aria-checked":e.replyVisibilityFollowing,role:"menuitemradio",onClick:t[1]||(t[1]=function(t){return e.replyVisibilityFollowing=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilityFollowing}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_following_short")),1)],8,cc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-default dropdown-item","aria-checked":e.replyVisibilitySelf,role:"menuitemradio",onClick:t[2]||(t[2]=function(t){return e.replyVisibilitySelf=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilitySelf}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_self_short")),1)],8,lc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",dc))])):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.muteBotStatuses,onClick:t[3]||(t[3]=function(t){return e.muteBotStatuses=!e.muteBotStatuses})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.muteBotStatuses}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.mute_bot_posts")),1)],8,pc),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.hideMedia,onClick:t[4]||(t[4]=function(t){return e.hideMedia=!e.hideMedia})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hideMedia}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.hide_media_previews")),1)],8,mc),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.hideMutedPosts,onClick:t[5]||(t[5]=function(t){return e.hideMutedPosts=!e.hideMutedPosts})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hideMutedPosts}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.hide_all_muted_posts")),1)],8,hc),(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[6]||(t[6]=function(t){return e.openTab("filtering")})},[(0,Co.Wm)(s,{icon:"font"}),(0,Co.Uk)((0,So.zw)(e.$t("settings.word_filter_and_more")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"filter"})]})),_:1},8,["trigger-attrs"])}]]);var yc={class:"dropdown-menu",role:"menu"},Dc={role:"group"},_c=["aria-checked"],kc=["aria-checked"],Cc=(0,Co._)("div",{role:"separator",class:"dropdown-divider"},null,-1),Sc=["aria-checked"],jc=["aria-checked"],Fc=["aria-checked"];function Ac(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Oc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ac(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ac(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.Zrf,Vt.lCn,Vt.xiG,Vt.klh);const Ec={props:{conversation:Boolean},components:{Popover:fc.default},methods:{setConversationDisplay:function(e){this.$store.dispatch("setOption",{name:"conversationDisplay",value:e})},openTab:function(e){this.$store.dispatch("openSettingsModalTab",e)}},computed:Oc(Oc({},(0,s.Se)(["mergedConfig"])),{},{loggedIn:function(){return!!this.$store.state.users.currentUser},conversationDisplay:{get:function(){return this.mergedConfig.conversationDisplay},set:function(e){this.setConversationDisplay(e)}},autoUpdate:{get:function(){return this.mergedConfig.streaming},set:function(){var e=!this.autoUpdate;this.$store.dispatch("setOption",{name:"streaming",value:e})}},collapseWithSubjects:{get:function(){return this.mergedConfig.collapseMessageWithSubject},set:function(){var e=!this.collapseWithSubjects;this.$store.dispatch("setOption",{name:"collapseMessageWithSubject",value:e})}},showUserAvatars:{get:function(){return this.mergedConfig.mentionLinkShowAvatar},set:function(){var e=!this.showUserAvatars;console.log(e),this.$store.dispatch("setOption",{name:"mentionLinkShowAvatar",value:e})}},muteBotStatuses:{get:function(){return this.mergedConfig.muteBotStatuses},set:function(){var e=!this.muteBotStatuses;this.$store.dispatch("setOption",{name:"muteBotStatuses",value:e})}}})},zc=(0,Jo.Z)(Ec,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(a,{trigger:"click",class:"QuickViewSettings","bound-to":{x:"container"},"trigger-attrs":{title:e.$t("timeline.quick_view_settings")}},{content:(0,Co.w5)((function(){return[(0,Co._)("div",yc,[(0,Co._)("div",Dc,[(0,Co._)("button",{class:"button-default dropdown-item","aria-checked":"tree"===e.conversationDisplay,role:"menuitemradio",onClick:t[0]||(t[0]=function(t){return e.conversationDisplay="tree"})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":"tree"===e.conversationDisplay}]),"aria-hidden":!0},null,2),(0,Co.Wm)(s,{icon:"folder-tree","aria-hidden":!0}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.conversation_display_tree_quick")),1)],8,_c),(0,Co._)("button",{class:"button-default dropdown-item","aria-checked":"linear"===e.conversationDisplay,role:"menuitemradio",onClick:t[1]||(t[1]=function(t){return e.conversationDisplay="linear"})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":"linear"===e.conversationDisplay}]),"aria-hidden":!0},null,2),(0,Co.Wm)(s,{icon:"list","aria-hidden":!0}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.conversation_display_linear_quick")),1)],8,kc)]),Cc,(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.showUserAvatars,onClick:t[2]||(t[2]=function(t){return e.showUserAvatars=!e.showUserAvatars})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.showUserAvatars}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.mention_link_show_avatar_quick")),1)],8,Sc),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.autoUpdate,onClick:t[3]||(t[3]=function(t){return e.autoUpdate=!e.autoUpdate})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.autoUpdate}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.auto_update")),1)],8,jc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.collapseWithSubjects,onClick:t[4]||(t[4]=function(t){return e.collapseWithSubjects=!e.collapseWithSubjects})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.collapseWithSubjects}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.collapse_subject")),1)],8,Fc)),(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[5]||(t[5]=function(t){return e.openTab("general")})},[(0,Co.Wm)(s,{icon:"wrench"}),(0,Co.Uk)((0,So.zw)(e.$t("settings.more_settings")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"bars"})]})),_:1},8,["trigger-attrs"])}]]);function Pc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ic(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.Sbq,Vt.UXu,Vt.A35);var xc=function(e,t){var n="retweet"===e.type?e.retweeted_status.id:e.id,o="retweet"===t.type?t.retweeted_status.id:t.id,r=Number(n),i=Number(o),s=!Number.isNaN(r),a=!Number.isNaN(i);return s&&a?r<i?-1:1:s&&!a?-1:!s&&a?1:n<o?-1:1};const Tc={data:function(){return{highlight:null,expanded:!1,threadDisplayStatusObject:{},statusContentPropertiesObject:{},inlineDivePosition:null}},props:["statusId","collapsable","isPage","pinnedStatusIdsObject","inProfile","profileUserId","virtualHidden"],created:function(){this.isPage&&this.fetchConversation()},computed:Ic(Ic({maxDepthToShowByDefault:function(){var e=this.$store.getters.mergedConfig.maxDepthInThread-2;return e>=1?e:1},streamingEnabled:function(){return this.mergedConfig.useStreamingApi&&this.mastoUserSocketStatus===h._z.JOINED},displayStyle:function(){return this.$store.getters.mergedConfig.conversationDisplay},isTreeView:function(){return!this.isLinearView},treeViewIsSimple:function(){return!this.$store.getters.mergedConfig.conversationTreeAdvanced},isLinearView:function(){return"linear"===this.displayStyle},shouldFadeAncestors:function(){return this.$store.getters.mergedConfig.conversationTreeFadeAncestors},otherRepliesButtonPosition:function(){return this.$store.getters.mergedConfig.conversationOtherRepliesButton},showOtherRepliesButtonBelowStatus:function(){return"below"===this.otherRepliesButtonPosition},showOtherRepliesButtonInsideStatus:function(){return"inside"===this.otherRepliesButtonPosition},suspendable:function(){return this.isTreeView?Object.entries(this.statusContentProperties).every((function(e){var t=(0,c.Z)(e,2),n=(t[0],t[1]);return!n.replying&&0===n.mediaPlaying.length})):!this.$refs.statusComponent||!this.$refs.statusComponent[0]||this.$refs.statusComponent.every((function(e){return e.suspendable}))},hideStatus:function(){return this.virtualHidden&&this.suspendable},status:function(){return this.$store.state.statuses.allStatusesObject[this.statusId]},originalStatusId:function(){return this.status.retweeted_status?this.status.retweeted_status.id:this.statusId},conversationId:function(){return this.getConversationId(this.statusId)},conversation:function(){if(!this.status)return[];if(!this.isExpanded)return[this.status];var e=ec()(this.$store.state.statuses.conversationsObject[this.conversationId]),t=R()(e,{id:this.originalStatusId});return-1!==t&&(e[t]=this.status),function(e,t){return(e="retweet"===t.type?In()(e,(function(e){return"retweet"===e.type||e.id!==t.retweeted_status.id})):In()(e,(function(e){return"retweet"!==e.type}))).filter((function(e){return e})).sort(xc)}(e,this.status)},statusMap:function(){return this.conversation.reduce((function(e,t){return e[t.id]=t,e}),{})},threadTree:function(){var e=this,t=this.conversation.reduce((function(e,t,n){return e[t.id]=n,e}),{}),n=function n(o,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return r.map((function(r){return s[r]?[]:(s[r]=!0,[{status:e.conversation[t[r]],id:r,depth:i},n(o,o[r],i+1,s)].reduce((function(e,t){return e.concat(t)}),[]))})).reduce((function(e,t){return e.concat(t)}),[])}(this.conversation.reduce((function(t,n){var o=n.id;return t.forest[o]=e.getReplies(o).map((function(e){return e.id})),t}),{forest:{}}).forest,this.topLevel.map((function(e){return e.id})));return n},replyIds:function(){var e=this;return this.conversation.map((function(e){return e.id})).reduce((function(t,n){return t[n]=(e.replies[n]||[]).map((function(e){return e.id})),t}),{})},totalReplyCount:function(){var e=this,t={};return this.conversation.map((function(e){return e.id})).map((function n(o){return t[o]||(t[o]=1+e.replyIds[o].map((function(e){return n(e)})).reduce((function(e,t){return e+t}),0)),t[o]})),Object.keys(t).reduce((function(e,n){return e[n]=t[n]-1,e}),{})},totalReplyDepth:function(){var e=this,t={};return this.conversation.map((function(e){return e.id})).map((function n(o){return t[o]||(t[o]=1+e.replyIds[o].map((function(e){return n(e)})).reduce((function(e,t){return e>t?e:t}),0)),t[o]})),Object.keys(t).reduce((function(e,n){return e[n]=t[n]-1,e}),{})},depths:function(){return this.threadTree.reduce((function(e,t){return e[t.id]=t.depth,e}),{})},topLevel:function(){var e=this;return this.conversation.reduce((function(t,n){return t.filter((function(t){return-1===e.getReplies(n.id).map((function(e){return e.id})).indexOf(t.id)}))}),this.conversation)},otherTopLevelCount:function(){return this.topLevel.length-1},showingTopLevel:function(){return this.canDive&&this.diveRoot?[this.statusMap[this.diveRoot]]:this.topLevel},diveRoot:function(){var e=this.inlineDivePosition||this.statusId;return this.parentOf(e)?e:null},diveDepth:function(){return this.canDive&&this.diveRoot?this.depths[this.diveRoot]:0},diveMode:function(){return this.canDive&&!!this.diveRoot},shouldShowAllConversationButton:function(){return this.isTreeView&&this.isExpanded&&this.diveMode&&this.topLevel.length>1},shouldShowAncestors:function(){return this.isTreeView&&this.isExpanded&&this.ancestorsOf(this.diveRoot).length},replies:function(){var e=1;return Ue()(this.conversation,(function(t,n){var o=n.id,r=n.in_reply_to_status_id;return r&&(t[r]=t[r]||[],t[r].push({name:"#".concat(e),id:o})),e++,t}),{})},isExpanded:function(){return!(!this.expanded&&!this.isPage)},hiddenStyle:function(){var e=this.status&&this.status.virtualHeight||"120px";return this.virtualHidden?{height:e}:{}},threadDisplayStatus:function(){var e=this;return this.conversation.reduce((function(t,n){var o=n.id,r=e.depths[o],i=e.threadDisplayStatusObject[o]?e.threadDisplayStatusObject[o]:r-e.diveDepth<=e.maxDepthToShowByDefault?"showing":"hidden";return t[o]=i,t}),{})},statusContentProperties:function(){var e=this;return this.conversation.reduce((function(t,n){var o,r=n.id,i=(o={showingTall:!1,expandingSubject:!1,showingLongSubject:!1,isReplying:!1,mediaPlaying:[]},e.statusContentPropertiesObject[r]?Ic(Ic({},o),e.statusContentPropertiesObject[r]):o);return t[r]=i,t}),{})},canDive:function(){return this.isTreeView&&this.isExpanded},focused:function(){var e=this;return function(t){return e.isExpanded&&t===e.highlight}},maybeHighlight:function(){return this.isExpanded?this.highlight:null}},(0,s.Se)(["mergedConfig"])),(0,s.rn)({mastoUserSocketStatus:function(e){return e.api.mastoUserSocketStatus}})),components:{Status:eu.default,ThreadTree:ic,QuickFilterSettings:bc,QuickViewSettings:zc},watch:{statusId:function(e,t){var n=this.getConversationId(e),o=this.getConversationId(t);n&&o&&n===o?this.setHighlight(this.originalStatusId):this.fetchConversation()},expanded:function(e){e?this.fetchConversation():this.resetDisplayState()},virtualHidden:function(e){this.$store.dispatch("setVirtualHeight",{statusId:this.statusId,height:"".concat(this.$el.clientHeight,"px")})}},methods:{fetchConversation:function(){var e=this;this.status?this.$store.state.api.backendInteractor.fetchConversation({id:this.statusId}).then((function(t){var n=t.ancestors,o=t.descendants;e.$store.dispatch("addNewStatuses",{statuses:n}),e.$store.dispatch("addNewStatuses",{statuses:o}),e.setHighlight(e.originalStatusId)})):this.$store.state.api.backendInteractor.fetchStatus({id:this.statusId}).then((function(t){e.$store.dispatch("addNewStatuses",{statuses:[t]}),e.fetchConversation()}))},getReplies:function(e){return this.replies[e]||[]},getHighlight:function(){return this.isExpanded?this.highlight:null},setHighlight:function(e){e&&(this.highlight=e,this.streamingEnabled||this.$store.dispatch("fetchStatus",e),this.$store.dispatch("fetchFavsAndRepeats",e),this.$store.dispatch("fetchEmojiReactionsBy",e))},toggleExpanded:function(){this.expanded=!this.expanded},getConversationId:function(e){var t=this.$store.state.statuses.allStatusesObject[e];return Dt()(t,"retweeted_status.statusnet_conversation_id",Dt()(t,"statusnet_conversation_id"))},setThreadDisplay:function(e,t){this.threadDisplayStatusObject=Ic(Ic({},this.threadDisplayStatusObject),{},(0,d.Z)({},e,t))},toggleThreadDisplay:function(e){var t="showing"===this.threadDisplayStatus[e]?"hidden":"showing";this.setThreadDisplay(e,t)},setThreadDisplayRecursively:function(e,t){var n=this;this.setThreadDisplay(e,t),this.getReplies(e).map((function(e){return e.id})).map((function(e){return n.setThreadDisplayRecursively(e,t)}))},showThreadRecursively:function(e){this.setThreadDisplayRecursively(e,"showing")},setStatusContentProperty:function(e,t,n){this.statusContentPropertiesObject=Ic(Ic({},this.statusContentPropertiesObject),{},(0,d.Z)({},e,Ic(Ic({},this.statusContentPropertiesObject[e]),{},(0,d.Z)({},t,n))))},toggleStatusContentProperty:function(e,t){this.setStatusContentProperty(e,t,!this.statusContentProperties[e][t])},leastVisibleAncestor:function(e){for(var t=e,n=this.parentOf(t);t;){if("showing"===this.threadDisplayStatus[n])return t;n=this.parentOf(n),t=this.parentOf(t)}return this.topLevel[0]?this.topLevel[0].id:void 0},diveIntoStatus:function(e,t){this.tryScrollTo(e)},diveToTopLevel:function(){this.tryScrollTo(this.topLevelAncestorOrSelfId(this.diveRoot)||this.topLevel[0].id)},undive:function(){this.inlineDivePosition=null,this.setHighlight(this.statusId)},tryScrollTo:function(e){var t=this;e&&(this.isPage?this.$router.push({name:"conversation",params:{id:e}}):this.inlineDivePosition=e,this.$nextTick((function(){t.setHighlight(e)})))},goToCurrent:function(){this.tryScrollTo(this.diveRoot||this.topLevel[0].id)},statusById:function(e){return this.statusMap[e]},parentOf:function(e){var t=this.statusById(e);if(t){var n=t.in_reply_to_status_id;if(this.statusMap[n])return n}},parentOrSelf:function(e){return this.parentOf(e)||e},ancestorsOf:function(e){for(var t=[],n=this.parentOf(e);n;)t.unshift(this.statusMap[n]),n=this.parentOf(n);return t},topLevelAncestorOrSelfId:function(e){for(var t=e,n=this.parentOf(e);n;)t=this.parentOf(t),n=this.parentOf(n);return t},resetDisplayState:function(){this.undive(),this.threadDisplayStatusObject={}}}},$c=(0,Jo.Z)(Tc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("QuickFilterSettings"),a=(0,Co.up)("QuickViewSettings"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("i18n-t"),l=(0,Co.up)("status"),d=(0,Co.up)("thread-tree");return e.hideStatus?((0,Co.wg)(),(0,Co.iD)("div",{key:1,style:(0,So.j5)(e.hiddenStyle)},null,4)):((0,Co.wg)(),(0,Co.iD)("div",{key:0,style:(0,So.j5)(e.hiddenStyle),class:(0,So.C_)(["Conversation",{"-expanded":e.isExpanded,panel:e.isExpanded}])},[e.isExpanded?((0,Co.wg)(),(0,Co.iD)("div",Zu,[(0,Co._)("span",Wu,(0,So.zw)(e.$t("timeline.conversation")),1),e.collapsable?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled -link",onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.toggleExpanded&&e.toggleExpanded.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("timeline.collapse")),1)):(0,Co.kq)("",!0),e.collapsable?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:1,conversation:!0,class:"rightside-button"})),e.collapsable?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(a,{key:2,conversation:!0,class:"rightside-button"}))])):(0,Co.kq)("",!0),(0,Co._)("div",Hu,[e.isTreeView?((0,Co.wg)(),(0,Co.iD)("div",Vu,[e.shouldShowAllConversationButton?((0,Co.wg)(),(0,Co.iD)("div",Ku,[(0,Co.Wm)(c,{keypath:"status.show_all_conversation_with_icon",tag:"button",class:"button-unstyled -link",scope:"global",onClick:(0,wo.iM)(e.diveToTopLevel,["prevent"])},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-left"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.show_all_conversation",e.otherTopLevelCount,{numStatus:e.otherTopLevelCount})),1)]})),_:1},8,["onClick"])])):(0,Co.kq)("",!0),e.shouldShowAncestors?((0,Co.wg)(),(0,Co.iD)("div",Gu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.ancestorsOf(e.diveRoot),(function(t){return(0,Co.wg)(),(0,Co.iD)("article",{key:t.id,class:(0,So.C_)(["thread-ancestor",{"thread-ancestor-has-other-replies":e.getReplies(t.id).length>1,"-faded":e.shouldFadeAncestors}])},[(0,Co.Wm)(l,{ref_for:!0,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:t,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[t.id],focused:e.focused(t.id),"in-conversation":e.isExpanded,highlight:e.getHighlight(),replies:e.getReplies(t.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status status-fadein panel-body","simple-tree":e.treeViewIsSimple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"show-other-replies-as-button":e.showOtherRepliesButtonInsideStatus,dive:function(){return e.diveIntoStatus(t.id)},"controlled-showing-tall":e.statusContentProperties[t.id].showingTall,"controlled-expanding-subject":e.statusContentProperties[t.id].expandingSubject,"controlled-showing-long-subject":e.statusContentProperties[t.id].showingLongSubject,"controlled-replying":e.statusContentProperties[t.id].replying,"controlled-media-playing":e.statusContentProperties[t.id].mediaPlaying,"controlled-toggle-showing-tall":function(){return e.toggleStatusContentProperty(t.id,"showingTall")},"controlled-toggle-expanding-subject":function(){return e.toggleStatusContentProperty(t.id,"expandingSubject")},"controlled-toggle-showing-long-subject":function(){return e.toggleStatusContentProperty(t.id,"showingLongSubject")},"controlled-toggle-replying":function(){return e.toggleStatusContentProperty(t.id,"replying")},"controlled-set-media-playing":function(n){return e.toggleStatusContentProperty(t.id,"mediaPlaying",n)},onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","simple-tree","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","show-other-replies-as-button","dive","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-replying","controlled-media-playing","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","controlled-toggle-replying","controlled-set-media-playing","onGoto","onToggleExpanded"]),e.showOtherRepliesButtonBelowStatus&&e.getReplies(t.id).length>1?((0,Co.wg)(),(0,Co.iD)("div",Yu,[(0,Co._)("div",Ju,[(0,Co.Wm)(c,{tag:"button",scope:"global",keypath:"status.ancestor_follow_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:(0,wo.iM)((function(n){return e.diveIntoStatus(t.id)}),["prevent"])},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-right"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.ancestor_follow",e.getReplies(t.id).length-1,{numReplies:e.getReplies(t.id).length-1})),1)]})),_:2},1032,["onClick"])])])):(0,Co.kq)("",!0)],2)})),128))])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.showingTopLevel,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t.id,ref_for:!0,ref:"statusComponent",depth:0,status:t,"in-profile":e.inProfile,conversation:e.conversation,collapsable:e.collapsable,"is-expanded":e.isExpanded,"pinned-status-ids-object":e.pinnedStatusIdsObject,"profile-user-id":e.profileUserId,focused:e.focused,"get-replies":e.getReplies,highlight:e.maybeHighlight,"set-highlight":e.setHighlight,"toggle-expanded":e.toggleExpanded,simple:e.treeViewIsSimple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,dive:e.canDive?e.diveIntoStatus:void 0},null,8,["status","in-profile","conversation","collapsable","is-expanded","pinned-status-ids-object","profile-user-id","focused","get-replies","highlight","set-highlight","toggle-expanded","simple","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","dive"])})),128))])):(0,Co.kq)("",!0),e.isLinearView?((0,Co.wg)(),(0,Co.iD)("div",Qu,[(0,Co._)("article",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.conversation,(function(t){return(0,Co.wg)(),(0,Co.j4)(l,{key:t.id,ref_for:!0,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:t,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[t.id],focused:e.focused(t.id),"in-conversation":e.isExpanded,highlight:e.getHighlight(),replies:e.getReplies(t.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status status-fadein panel-body","toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","onGoto","onToggleExpanded"])})),128))])])):(0,Co.kq)("",!0)])],6))}]]);var Bc={key:1},Uc={class:"button-unstyled title timeline-menu-title"},Mc={class:"timeline-title"};function Lc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Rc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.ptq);const qc={components:{Popover:fc.default,NavigationEntry:ri,ListsMenuContent:ui},data:function(){return{isOpen:!1}},created:function(){({friends:"nav.home_timeline",bookmarks:"nav.bookmarks",dms:"nav.dms","public-timeline":"nav.public_tl","public-external-timeline":"nav.twkn"})[this.$route.name]&&this.$store.dispatch("setLastTimeline",this.$route.name)},computed:Rc(Rc({useListsMenu:function(){return"lists-timeline"===this.$route.name}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating}})),{},{timelinesList:function(){return ii(Object.entries(Jr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return Rc(Rc({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}}),methods:{openMenu:function(){var e=this;setTimeout((function(){e.isOpen=!0}),25)},blockOpen:function(e){this.isOpen||e.stopPropagation()},timelineName:function(){var e=this.$route.name;if("tag-timeline"===e)return"#"+this.$route.params.tag;if("lists-timeline"===e)return this.$store.getters.findListTitle(this.$route.params.id);var t={friends:"nav.home_timeline",bookmarks:"nav.bookmarks",dms:"nav.dms","public-timeline":"nav.public_tl","public-external-timeline":"nav.twkn"}[this.$route.name];return t?this.$t(t):e}}},Nc=(0,Jo.Z)(qc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("ListsMenuContent"),a=(0,Co.up)("NavigationEntry"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(c,{trigger:"click",class:(0,So.C_)(["TimelineMenu",{open:e.isOpen}]),"bound-to":{x:"container"},"bound-to-selector":".Timeline","popover-class":"timeline-menu-popover popover-default",onShow:e.openMenu,onClose:t[1]||(t[1]=function(){return e.isOpen=!1})},{content:(0,Co.w5)((function(){return[e.useListsMenu?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"show-pin":!1,class:"timelines"})):((0,Co.wg)(),(0,Co.iD)("ul",Bc,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.timelinesList,(function(e){return(0,Co.wg)(),(0,Co.j4)(a,{key:e.name,"show-pin":!1,item:e},null,8,["item"])})),128))]))]})),trigger:(0,Co.w5)((function(){return[(0,Co._)("span",Uc,[(0,Co._)("span",Mc,(0,So.zw)(e.timelineName()),1),(0,Co._)("span",null,[(0,Co.Wm)(u,{size:"sm",icon:"chevron-down"})]),(0,Co._)("span",{class:"click-blocker",onClick:t[0]||(t[0]=function(){return e.blockOpen&&e.blockOpen.apply(e,arguments)})})])]})),_:1},8,["class","onShow"])}]]);function Zc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Ht.vI.add(Vt.IJ7,Vt.b7W,Vt.Kl4,Vt.FPD,Vt.EQ8,Vt.LEp);var Wc={props:["timeline","timelineName","title","userId","listId","tag","embedded","count","pinnedStatusIds","inProfile","footerSlipgate"],data:function(){return{showScrollTop:!1,paused:!1,unfocused:!1,bottomedOut:!1,virtualScrollIndex:0,blockingClicks:!1}},components:{Status:eu.default,Conversation:$c,TimelineMenu:Nc,QuickFilterSettings:bc,QuickViewSettings:zc},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({filteredVisibleStatuses:function(){var e=this;return this.timeline.visibleStatuses.filter((function(t){return"user"!==e.timelineName||t.id>=e.timeline.minId&&t.id<=e.timeline.maxId}))},filteredPinnedStatusIds:function(){var e=this;return(this.pinnedStatusIds||[]).filter((function(t){return e.timeline.statusesObject[t]}))},newStatusCount:function(){return this.timeline.newStatusCount},showLoadButton:function(){return this.timeline.newStatusCount>0||0!==this.timeline.flushMarker},loadButtonString:function(){return 0!==this.timeline.flushMarker?this.$t("timeline.reload"):"".concat(this.$t("timeline.show_new")," (").concat(this.newStatusCount,")")},mobileLoadButtonString:function(){return 0!==this.timeline.flushMarker?"+":this.newStatusCount>99?"∞":this.newStatusCount},classes:function(){var e=this.embedded?["-nonpanel"]:["panel","panel-default"];return this.blockingClicks&&(e=e.concat(["-blocked","_misclick-prevention"])),{root:e,header:["timeline-heading"].concat(this.embedded?[]:["panel-heading","-sticky"]),body:["timeline-body"].concat(this.embedded?[]:["panel-body"]),footer:["timeline-footer"].concat(this.embedded?[]:["panel-footer"])}},pinnedStatusIdsObject:function(){return Ru()(this.pinnedStatusIds)},statusesToDisplay:function(){var e=this.timeline.visibleStatuses.length,t=Math.ceil(Math.max(3,window.innerHeight/80)),n=this.virtualScrollIndex-this.filteredPinnedStatusIds.length,o=Math.max(0,n-t),r=Math.min(e,n+t);return this.timeline.visibleStatuses.slice(o,r).map((function(e){return e.id}))},virtualScrollingEnabled:function(){return this.$store.getters.mergedConfig.virtualScrolling}},(0,s.rn)({mobileLayout:function(e){return"mobile"===e.interface.layoutType}})),created:function(){var e=this.$store,t=e.state.users.currentUser.credentials,n=0===this.timeline.visibleStatuses.length;if(window.addEventListener("scroll",this.handleScroll),e.state.api.fetchers[this.timelineName])return!1;Fe.fetchAndUpdate({store:e,credentials:t,timeline:this.timelineName,showImmediately:n,userId:this.userId,listId:this.listId,tag:this.tag})},mounted:function(){void 0!==document.hidden&&(document.addEventListener("visibilitychange",this.handleVisibilityChange,!1),this.unfocused=document.hidden),window.addEventListener("keydown",this.handleShortKey),setTimeout(this.determineVisibleStatuses,250)},unmounted:function(){window.removeEventListener("scroll",this.handleScroll),window.removeEventListener("keydown",this.handleShortKey),void 0!==document.hidden&&document.removeEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$store.commit("setLoading",{timeline:this.timelineName,value:!1})},methods:{scrollToTop:function(){window.scrollTo({top:this.$el.offsetTop})},stopBlockingClicks:ra()((function(){this.blockingClicks=!1}),1e3),blockClicksTemporarily:function(){this.blockingClicks||(this.blockingClicks=!0),this.stopBlockingClicks()},handleShortKey:function(e){["textarea","input"].includes(e.target.tagName.toLowerCase())||"."===e.key&&this.showNewStatuses()},showNewStatuses:function(){0!==this.timeline.flushMarker?(this.$store.commit("clearTimeline",{timeline:this.timelineName,excludeUserId:!0}),this.$store.commit("queueFlush",{timeline:this.timelineName,id:0}),"user"===this.timelineName&&this.$store.dispatch("fetchPinnedStatuses",this.userId),this.fetchOlderStatuses()):(this.blockClicksTemporarily(),this.$store.commit("showNewStatuses",{timeline:this.timelineName}),this.paused=!1),window.scrollTo({top:0})},fetchOlderStatuses:Nu()((function(){var e=this,t=this.$store,n=t.state.users.currentUser.credentials;t.commit("setLoading",{timeline:this.timelineName,value:!0}),Fe.fetchAndUpdate({store:t,credentials:n,timeline:this.timelineName,older:!0,showImmediately:!0,userId:this.userId,listId:this.listId,tag:this.tag}).then((function(t){var n=t.statuses;n&&0===n.length&&(e.bottomedOut=!0)})).finally((function(){return t.commit("setLoading",{timeline:e.timelineName,value:!1})}))}),1e3,void 0),determineVisibleStatuses:function(){if(this.$refs.timeline&&this.virtualScrollingEnabled){var e=this.$refs.timeline.children,t=Math.max(0,Math.min(this.virtualScrollIndex,e.length-1));if(0!==e.length){var n=Math.max(document.body.offsetHeight,window.pageYOffset),o=window.pageYOffset+.5*window.innerHeight,r=Math.floor(e.length*(o/n)),i=e[r].getBoundingClientRect().y,s=e[t].getBoundingClientRect().y;for(Math.abs(i)>s&&(r=t,i=s);i<-20&&r<e.length-1;)i+=e[r].offsetHeight,r++;for(;i>window.innerHeight+100&&r>0;)i-=e[--r].offsetHeight;this.virtualScrollIndex=r}}},scrollLoad:function(e){var t=document.body.getBoundingClientRect(),n=Math.max(t.height,-t.y);!1===this.timeline.loading&&this.$el.offsetHeight>0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchOlderStatuses()},handleScroll:Nu()((function(e){this.showScrollTop=this.$el.offsetTop<window.scrollY,this.determineVisibleStatuses(),this.scrollLoad(e)}),200),handleVisibilityChange:function(){this.unfocused=document.hidden}},watch:{newStatusCount:function(e){if(this.$store.getters.mergedConfig.streaming&&e>0){var t=document.documentElement;!((window.pageYOffset||t.scrollTop)-(t.clientTop||0)<15)||this.paused||this.unfocused&&this.$store.getters.mergedConfig.pauseOnUnfocused?this.paused=!0:this.showNewStatuses()}}}};const Hc=Wc,Vc=(0,Jo.Z)(Hc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("TimelineMenu"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("FALayers"),c=(0,Co.up)("QuickFilterSettings"),l=(0,Co.up)("QuickViewSettings"),d=(0,Co.up)("conversation");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["Timeline",e.classes.root])},[(0,Co._)("div",{class:(0,So.C_)(e.classes.header)},[e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:0,"timeline-name":e.timelineName},null,8,["timeline-name"])),e.showScrollTop&&!e.embedded?((0,Co.wg)(),(0,Co.iD)("div",Ou,[(0,Co._)("button",{class:"button-unstyled scroll-to-top-button",type:"button",title:e.$t("general.scroll_to_top"),onClick:t[0]||(t[0]=function(){return e.scrollToTop&&e.scrollToTop.apply(e,arguments)})},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{icon:"arrow-up"}),(0,Co.Wm)(a,{icon:"minus",transform:"up-7"})]})),_:1})],8,Eu)])):(0,Co.kq)("",!0),e.mobileLayout&&!e.embedded?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[e.showLoadButton?((0,Co.wg)(),(0,Co.iD)("div",zu,[(0,Co._)("button",{class:"button-unstyled loadmore-button",title:e.loadButtonString,onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.showNewStatuses&&e.showNewStatuses.apply(e,arguments)}),["prevent"]))},[(0,Co.Wm)(a,{"fixed-width":"",icon:"circle-plus"}),(0,Co._)("div",Iu,(0,So.zw)(e.mobileLoadButtonString),1)],8,Pu)])):e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",{key:1,class:"loadmore-text faint veryfaint rightside-icon",title:e.$t("timeline.up_to_date"),"aria-disabled":!0,onClick:t[2]||(t[2]=(0,wo.iM)((function(){}),["prevent"]))},[(0,Co.Wm)(a,{"fixed-width":"",icon:"check"})],8,xu))],64)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:3},[e.showLoadButton?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default loadmore-button",onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.showNewStatuses&&e.showNewStatuses.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.loadButtonString),1)):e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",{key:1,class:"loadmore-text faint",onClick:t[4]||(t[4]=(0,wo.iM)((function(){}),["prevent"]))},(0,So.zw)(e.$t("timeline.up_to_date")),1))],64)),e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(c,{key:4,class:"rightside-button"})),e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(l,{key:5,class:"rightside-button"}))],2),(0,Co._)("div",{class:(0,So.C_)(e.classes.body)},[(0,Co._)("div",Tu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.filteredPinnedStatusIds,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t+"-pinned",role:"listitem",class:"status-fadein","status-id":t,collapsable:!0,"pinned-status-ids-object":e.pinnedStatusIdsObject,"in-profile":e.inProfile,"profile-user-id":e.userId},null,8,["status-id","pinned-status-ids-object","in-profile","profile-user-id"])})),128)),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.filteredVisibleStatuses,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t.id,role:"listitem",class:"status-fadein","status-id":t.id,collapsable:!0,"in-profile":e.inProfile,"profile-user-id":e.userId,"virtual-hidden":e.virtualScrollingEnabled&&!e.statusesToDisplay.includes(t.id)},null,8,["status-id","in-profile","profile-user-id","virtual-hidden"])})),128))],512)],2),(0,Co._)("div",{class:(0,So.C_)(e.classes.footer)},[((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:e.footerSlipgate,disabled:!e.embedded||!e.footerSlipgate},[0===e.count?((0,Co.wg)(),(0,Co.iD)("div",$u,(0,So.zw)(e.$t("timeline.no_statuses")),1)):e.bottomedOut?((0,Co.wg)(),(0,Co.iD)("div",Bu,(0,So.zw)(e.$t("timeline.no_more_statuses")),1)):e.timeline.loading?((0,Co.wg)(),(0,Co.iD)("div",Mu,[(0,Co.Wm)(a,{icon:"circle-notch",spin:"",size:"lg"})])):((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-unstyled -link",onClick:t[5]||(t[5]=(0,wo.iM)((function(t){return e.fetchOlderStatuses()}),["prevent"]))},[(0,Co._)("div",Uu,(0,So.zw)(e.$t("timeline.load_older")),1)]))],8,["to","disabled"]))],2)],2)}]]),Kc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.public}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"public"})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","public")}},Gc=(0,Jo.Z)(Kc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.public_tl"),timeline:e.timeline,"timeline-name":"public"},null,8,["title","timeline"])}]]),Yc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.publicAndExternal}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"publicAndExternal"})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","publicAndExternal")}},Jc=(0,Jo.Z)(Yc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.twkn"),timeline:e.timeline,"timeline-name":"publicAndExternal"},null,8,["title","timeline"])}]]),Qc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.friends}}},Xc=(0,Jo.Z)(Qc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.timeline"),timeline:e.timeline,"timeline-name":"friends"},null,8,["title","timeline"])}]]),el={created:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})},components:{Timeline:Vc},computed:{tag:function(){return this.$route.params.tag},timeline:function(){return this.$store.state.statuses.timelines.tag}},watch:{tag:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})}},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","tag")}},tl=(0,Jo.Z)(el,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.tag,timeline:e.timeline,"timeline-name":"tag",tag:e.tag},null,8,["title","timeline","tag"])}]]),nl={computed:{timeline:function(){return this.$store.state.statuses.timelines.bookmarks}},components:{Timeline:Vc},unmounted:function(){this.$store.commit("clearTimeline",{timeline:"bookmarks"})}},ol=(0,Jo.Z)(nl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.bookmarks"),timeline:e.timeline,"timeline-name":"bookmarks"},null,8,["title","timeline"])}]]),rl={components:{Conversation:$c},computed:{statusId:function(){return this.$route.params.id}}},il=(0,Jo.Z)(rl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("conversation");return(0,Co.wg)(),(0,Co.j4)(s,{collapsable:!1,"is-page":"true","status-id":e.statusId},null,8,["status-id"])}]]);var sl={class:"panel panel-default"},al={class:"panel-heading"},ul={class:"title"},cl=["label"],ll=["label"],dl=["label"],pl=["label"],ml=["label"],hl=["label"],fl=n(79354),gl={mentions:["mention"],"likes+repeats":["repeat","like"],follows:["follow"],reactions:["pleroma:emoji_reaction"],reports:["pleroma:report"],moves:["move"]};const vl={data:function(){return{allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,filterMode:gl.mentions,canSeeReports:this.$store.state.users.currentUser.privileges.includes("reports_manage_reports")}},methods:{onModeSwitch:function(e){this.filterMode=gl[e]}},components:{Notifications:ya.default,TabSwitcher:fl.Z}},wl=(0,Jo.Z)(vl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("tab-switcher"),a=(0,Co.up)("Notifications");return(0,Co.wg)(),(0,Co.iD)("div",sl,[(0,Co._)("div",al,[(0,Co._)("div",ul,(0,So.zw)(e.$t("nav.interactions")),1)]),(0,Co.Wm)(s,{ref:"tabSwitcher","on-switch":e.onModeSwitch},{default:(0,Co.w5)((function(){return[(0,Co._)("span",{key:"mentions",label:e.$t("nav.mentions")},null,8,cl),(0,Co._)("span",{key:"likes+repeats",label:e.$t("interactions.favs_repeats")},null,8,ll),(0,Co._)("span",{key:"follows",label:e.$t("interactions.follows")},null,8,dl),(0,Co._)("span",{key:"reactions",label:e.$t("interactions.emoji_reactions")},null,8,pl),e.canSeeReports?((0,Co.wg)(),(0,Co.iD)("span",{key:"reports",label:e.$t("interactions.reports")},null,8,ml)):(0,Co.kq)("",!0),e.allowFollowingMove?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("span",{key:"moves",label:e.$t("interactions.moves")},null,8,hl))]})),_:1},8,["on-switch"]),(0,Co.Wm)(a,{ref:"notifications","no-heading":!0,"minimal-mode":!0,"filter-mode":e.filterMode},null,8,["filter-mode"])])}]]),bl={computed:{timeline:function(){return this.$store.state.statuses.timelines.dms}},components:{Timeline:Vc}},yl=(0,Jo.Z)(bl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.dms"),timeline:e.timeline,"timeline-name":"dms"},null,8,["title","timeline"])}]]);var Dl={key:0},_l={key:1,class:"chat-list panel panel-default"},kl={class:"panel-heading -sticky"},Cl={class:"title"},Sl={class:"panel-body"},jl={key:0,class:"timeline"},Fl={key:1,class:"emtpy-chat-list-alert"},Al={class:"chat-list-item-left"},Ol={class:"chat-list-item-center"},El={class:"heading"},zl={key:0,class:"name-and-account-name"},Pl=(0,Co._)("span",{class:"heading-right"},null,-1),Il={class:"time-wrapper"},xl={class:"chat-preview"},Tl={key:0,class:"badge badge-notification unread-chat-count"},$l=n(10252),Bl=n(48173),Ul=n(19066),Ml=n(1840),Ll=["title"],Rl=n(92820);const ql={name:"ChatTitle",components:{UserAvatar:Bl.default,RichContent:Rl.Z,UserPopover:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},props:["user","withAvatar"],computed:{title:function(){return this.user?this.user.screen_name_ui:""},htmlTitle:function(){return this.user?this.user.name_html:""}}},Nl=(0,Jo.Z)(ql,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("UserPopover"),u=(0,Co.up)("RichContent");return(0,Co.wg)(),(0,Co.iD)("div",{class:"chat-title",title:e.title},[e.withAvatar&&e.user?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"avatar-container","user-id":e.user.id},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{class:"titlebar-avatar",user:e.user},null,8,["user"])]})),_:1},8,["user-id"])):(0,Co.kq)("",!0),e.user?((0,Co.wg)(),(0,Co.j4)(u,{key:1,class:"username",title:"@"+(e.user&&e.user.screen_name_ui),html:e.htmlTitle,emoji:e.user.emoji||[]},null,8,["title","html","emoji"])):(0,Co.kq)("",!0)],8,Ll)}]]);function Zl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Wl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zl(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Hl={name:"ChatListItem",props:["chat"],components:{UserAvatar:Bl.default,AvatarList:Ul.Z,Timeago:Ml.Z,ChatTitle:Nl,StatusBody:$l.Z},computed:Wl(Wl({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{attachmentInfo:function(){if(0!==this.chat.lastMessage.attachments.length){var e=this.chat.lastMessage.attachments.map((function(e){return Fn.ZP.fileType(e.mimetype)}));return e.includes("video")?this.$t("file_type.video"):e.includes("audio")?this.$t("file_type.audio"):e.includes("image")?this.$t("file_type.image"):this.$t("file_type.file")}},messageForStatusContent:function(){var e=this.chat.lastMessage,t=e?e.emojis:[],n=e&&e.account_id===this.currentUser.id,o=e?this.attachmentInfo||e.content:"",r=n?"<i>".concat(this.$t("chats.you"),"</i> ").concat(o):o;return{summary:"",emojis:t,raw_html:r,text:r,attachments:[]}}}),methods:{openChat:function(e){this.chat.id&&this.$router.push({name:"chat",params:{username:this.currentUser.screen_name,recipient_id:this.chat.account.id}})}}},Vl=(0,Jo.Z)(Hl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("ChatTitle"),u=(0,Co.up)("Timeago"),c=(0,Co.up)("StatusBody");return(0,Co.wg)(),(0,Co.iD)("div",{class:"chat-list-item",onClickCapture:t[0]||(t[0]=(0,wo.iM)((function(){return e.openChat&&e.openChat.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",Al,[(0,Co.Wm)(s,{user:e.chat.account,height:"48px",width:"48px"},null,8,["user"])]),(0,Co._)("div",Ol,[(0,Co._)("div",El,[e.chat.account?((0,Co.wg)(),(0,Co.iD)("span",zl,[(0,Co.Wm)(a,{user:e.chat.account},null,8,["user"])])):(0,Co.kq)("",!0),Pl,(0,Co._)("div",Il,[(0,Co.Wm)(u,{time:e.chat.updated_at,"auto-update":60},null,8,["time"])])]),(0,Co._)("div",xl,[(0,Co.Wm)(c,{class:"chat-preview-body",status:e.messageForStatusContent,"single-line":!0},null,8,["status"]),e.chat.unread>0?((0,Co.wg)(),(0,Co.iD)("div",Tl,(0,So.zw)(e.chat.unread),1)):(0,Co.kq)("",!0)])])],32)}]]);var Kl={class:"panel-default panel chat-new"},Gl={ref:"header",class:"panel-heading"},Yl={class:"input-wrap"},Jl={class:"input-search"},Ql={class:"member-list"},Xl=["onClickCapture"],ed=n(29076);function td(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function nd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?td(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):td(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.wn1,Vt.A35);var od={components:{BasicUserCard:ed.Z,UserAvatar:Bl.default},data:function(){return{suggestions:[],userIds:[],loading:!1,query:""}},created:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.backendInteractor.chats();case 2:t.sent.chats.forEach((function(t){return e.suggestions.push(t.account)}));case 5:case"end":return t.stop()}}),t)})))()},computed:nd(nd({users:function(){var e=this;return this.userIds.map((function(t){return e.findUser(t)}))},availableUsers:function(){return 0!==this.query.length?this.users:this.suggestions}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},backendInteractor:function(e){return e.api.backendInteractor}})),(0,s.Se)(["findUser"])),methods:{goBack:function(){this.$emit("cancel")},goToChat:function(e){this.$router.push({name:"chat",params:{recipient_id:e.id}})},onInput:function(){this.search(this.query)},addUser:function(e){this.selectedUserIds.push(e.id),this.query=""},removeUser:function(e){this.selectedUserIds=this.selectedUserIds.filter((function(t){return t!==e}))},search:function(e){var t=this;e?(this.loading=!0,this.userIds=[],this.$store.dispatch("search",{q:e,resolve:!0,type:"accounts"}).then((function(e){t.loading=!1,t.userIds=e.accounts.map((function(e){return e.id}))}))):this.loading=!1}}};const rd=od,id=(0,Jo.Z)(rd,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("BasicUserCard");return(0,Co.wg)(),(0,Co.iD)("div",Kl,[(0,Co._)("div",Gl,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){return e.goBack&&e.goBack.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})])],512),(0,Co._)("div",Yl,[(0,Co._)("div",Jl,[(0,Co.Wm)(s,{class:"search-icon fa-scale-110 fa-old-padding",icon:"search"})]),(0,Co.wy)((0,Co._)("input",{ref:"search","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.query=t}),placeholder:"Search people",onInput:t[2]||(t[2]=function(){return e.onInput&&e.onInput.apply(e,arguments)})},null,544),[[wo.nr,e.query]])]),(0,Co._)("div",Ql,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.availableUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co._)("div",{onClickCapture:(0,wo.iM)((function(n){return e.goToChat(t)}),["prevent"])},[(0,Co.Wm)(a,{user:t},null,8,["user"])],40,Xl)])})),128))])])}]]);function sd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ad(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sd(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const ud={components:{ChatListItem:Vl,List:tu.Z,ChatNew:id},computed:ad(ad({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),(0,s.Se)(["sortedChatList"])),data:function(){return{isNew:!1}},created:function(){this.$store.dispatch("fetchChats",{latest:!0})},methods:{cancelNewChat:function(){this.isNew=!1,this.$store.dispatch("fetchChats",{latest:!0})},newChat:function(){this.isNew=!0}}},cd=(0,Jo.Z)(ud,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("ChatNew"),a=(0,Co.up)("ChatListItem"),u=(0,Co.up)("List");return e.isNew?((0,Co.wg)(),(0,Co.iD)("div",Dl,[(0,Co.Wm)(s,{onCancel:e.cancelNewChat},null,8,["onCancel"])])):((0,Co.wg)(),(0,Co.iD)("div",_l,[(0,Co._)("div",kl,[(0,Co._)("span",Cl,(0,So.zw)(e.$t("chats.chats")),1),(0,Co._)("button",{class:"button-default",onClick:t[0]||(t[0]=function(){return e.newChat&&e.newChat.apply(e,arguments)})},(0,So.zw)(e.$t("chats.new")),1)]),(0,Co._)("div",Sl,[e.sortedChatList.length>0?((0,Co.wg)(),(0,Co.iD)("div",jl,[(0,Co.Wm)(u,{items:e.sortedChatList},{item:(0,Co.w5)((function(e){var t=e.item;return[((0,Co.wg)(),(0,Co.j4)(a,{key:t.id,compact:!1,chat:t},null,8,["chat"]))]})),_:1},8,["items"])])):((0,Co.wg)(),(0,Co.iD)("div",Fl,[(0,Co._)("span",null,(0,So.zw)(e.$t("chats.empty_chat_list_placeholder")),1)]))])]))}]]);var ld={class:"chat-view"},dd={class:"chat-view-inner"},pd={ref:"inner",class:"panel-default panel chat-view-body"},md={ref:"header",class:"panel-heading -sticky chat-view-heading"},hd={class:"title text-center"},fd={key:1,class:"chat-loading-error"},gd={class:"alert error"},vd={ref:"footer",class:"panel-body footer"},wd={key:0,class:"badge badge-notification unread-chat-count unread-message-count"},bd={key:0,class:"avatar-wrapper"},yd={class:"chat-message-inner"},Dd={class:"dropdown-menu"},_d=["title"],kd={class:"created-at"},Cd={key:1,class:"chat-message-date-separator"},Sd=n(66596),jd=n(67671),Fd=n(92798),Ad=n(39776);const Od={name:"Timeago",props:["date"],computed:{displayDate:function(){var e=new Date;return e.setHours(0,0,0,0),this.date.getTime()===e.getTime()?this.$t("display_date.today"):this.date.toLocaleDateString(Ad.Z.internalToBrowserLocale(this.$i18n.locale),{day:"numeric",month:"long"})}}},Ed=(0,Jo.Z)(Od,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("time",null,(0,So.zw)(i.displayDate),1)}]]);function zd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Pd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zd(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC,Vt.cNd);const Id={name:"ChatMessage",props:["author","edited","noHeading","chatViewItem","hoveredMessageChain"],emits:["hover"],components:{Popover:fc.default,Attachment:Sd.Z,StatusContent:$l.Z,UserAvatar:Bl.default,Gallery:jd.Z,LinkPreview:Fd.Z,ChatMessageDate:Ed,UserPopover:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},computed:Pd(Pd({createdAt:function(){return this.chatViewItem.data.created_at.toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit",hour12:!1})},isCurrentUser:function(){return this.message.account_id===this.currentUser.id},message:function(){return this.chatViewItem.data},isMessage:function(){return"message"===this.chatViewItem.type},messageForStatusContent:function(){return{summary:"",emojis:this.message.emojis,raw_html:this.message.content||"",text:this.message.content||"",attachments:this.message.attachments}},hasAttachment:function(){return this.message.attachments.length>0}},(0,s.rn)({betterShadow:function(e){return e.interface.browserSupport.cssFilter},currentUser:function(e){return e.users.currentUser},restrictedNicknames:function(e){return e.instance.restrictedNicknames}})),{},{popoverMarginStyle:function(){return this.isCurrentUser?{}:{left:50}}},(0,s.Se)(["mergedConfig","findUser"])),data:function(){return{hovered:!1,menuOpened:!1}},methods:{onHover:function(e){this.$emit("hover",{isHovered:e,messageChainId:this.chatViewItem.messageChainId})},deleteMessage:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!window.confirm(e.$t("chats.delete_confirm"))){t.next=4;break}return t.next=4,e.$store.dispatch("deleteChatMessage",{messageId:e.chatViewItem.data.id,chatId:e.chatViewItem.data.chat_id});case 4:e.hovered=!1,e.menuOpened=!1;case 6:case"end":return t.stop()}}),t)})))()}}},xd=(0,Jo.Z)(Id,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("UserPopover"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("Popover"),l=(0,Co.up)("StatusContent"),d=(0,Co.up)("ChatMessageDate");return e.isMessage?((0,Co.wg)(),(0,Co.iD)("div",{key:0,class:(0,So.C_)(["chat-message-wrapper",{"hovered-message-chain":e.hoveredMessageChain}]),onMouseover:t[5]||(t[5]=function(t){return e.onHover(!0)}),onMouseleave:t[6]||(t[6]=function(t){return e.onHover(!1)})},[(0,Co._)("div",{class:(0,So.C_)(["chat-message",[{outgoing:e.isCurrentUser,incoming:!e.isCurrentUser}]])},[e.isCurrentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",bd,[e.chatViewItem.isHead?((0,Co.wg)(),(0,Co.j4)(a,{key:0,"user-id":e.author.id},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{compact:!0,"better-shadow":e.betterShadow,user:e.author},null,8,["better-shadow","user"])]})),_:1},8,["user-id"])):(0,Co.kq)("",!0)])),(0,Co._)("div",yd,[(0,Co._)("div",{class:"status-body",style:(0,So.j5)({"min-width":e.message.attachment?"80%":""})},[(0,Co._)("div",{class:(0,So.C_)(["media status",{"without-attachment":!e.hasAttachment,pending:e.chatViewItem.data.pending,error:e.chatViewItem.data.error}]),style:{position:"relative"},onMouseenter:t[3]||(t[3]=function(t){return e.hovered=!0}),onMouseleave:t[4]||(t[4]=function(t){return e.hovered=!1})},[(0,Co._)("div",{class:(0,So.C_)(["chat-message-menu",{visible:e.hovered||e.menuOpened}])},[(0,Co.Wm)(c,{trigger:"click",placement:"top","bound-to-selector":".chat-view-inner","bound-to":{x:"container"},margin:e.popoverMarginStyle,onShow:t[1]||(t[1]=function(t){return e.menuOpened=!0}),onClose:t[2]||(t[2]=function(t){return e.menuOpened=!1})},{content:(0,Co.w5)((function(){return[(0,Co._)("div",Dd,[(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:t[0]||(t[0]=function(){return e.deleteMessage&&e.deleteMessage.apply(e,arguments)})},[(0,Co.Wm)(u,{icon:"times"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("chats.delete")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co._)("button",{class:"button-default menu-icon",title:e.$t("chats.more")},[(0,Co.Wm)(u,{icon:"ellipsis-h"})],8,_d)]})),_:1},8,["margin"])],2),(0,Co.Wm)(l,{class:"message-content",status:e.messageForStatusContent,"full-content":!0},{footer:(0,Co.w5)((function(){return[(0,Co._)("span",kd,(0,So.zw)(e.createdAt),1)]})),_:1},8,["status"])],34)],4)])],2)],34)):((0,Co.wg)(),(0,Co.iD)("div",Cd,[(0,Co.Wm)(d,{date:e.chatViewItem.date},null,8,["date"])]))}]]);var Td=function(){return{scrollTop:window.scrollY,scrollHeight:document.documentElement.scrollHeight,offsetHeight:window.innerHeight}};function $d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Bd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$d(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.ptq,Vt.A35);var Ud={components:{ChatMessage:xd,ChatTitle:Nl,PostStatusForm:Ir.Z},data:function(){return{jumpToBottomButtonVisible:!1,hoveredMessageChainId:void 0,lastScrollPosition:{},scrollableContainerHeight:"100%",errorLoadingChat:!1,messageRetriers:{}}},created:function(){this.startFetching(),window.addEventListener("resize",this.handleResize)},mounted:function(){var e=this;window.addEventListener("scroll",this.handleScroll),void 0!==document.hidden&&document.addEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$nextTick((function(){e.handleResize()}))},unmounted:function(){window.removeEventListener("scroll",this.handleScroll),window.removeEventListener("resize",this.handleResize),void 0!==document.hidden&&document.removeEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$store.dispatch("clearCurrentChat")},computed:Bd(Bd({recipient:function(){return this.currentChat&&this.currentChat.account},recipientId:function(){return this.$route.params.recipient_id},formPlaceholder:function(){return this.recipient?this.$t("chats.message_user",{nickname:this.recipient.screen_name_ui}):""},chatViewItems:function(){return Jn.getView(this.currentChatMessageService)},newMessageCount:function(){return this.currentChatMessageService&&this.currentChatMessageService.newMessageCount},streamingEnabled:function(){return this.mergedConfig.useStreamingApi&&this.mastoUserSocketStatus===h._z.JOINED}},(0,s.Se)(["currentChat","currentChatMessageService","findOpenedChatByRecipientId","mergedConfig"])),(0,s.rn)({backendInteractor:function(e){return e.api.backendInteractor},mastoUserSocketStatus:function(e){return e.api.mastoUserSocketStatus},mobileLayout:function(e){return"mobile"===e.interface.layoutType},currentUser:function(e){return e.users.currentUser}})),watch:{chatViewItems:function(){var e=this,t=this.bottomedOut(10);this.$nextTick((function(){t&&e.scrollDown()}))},$route:function(){this.startFetching()},mastoUserSocketStatus:function(e){e===h._z.JOINED&&this.fetchChat({isFirstFetch:!0})}},methods:{onMessageHover:function(e){var t=e.isHovered,n=e.messageChainId;this.hoveredMessageChainId=t?n:void 0},onFilesDropped:function(){var e=this;this.$nextTick((function(){e.handleResize()}))},handleVisibilityChange:function(){var e=this;this.$nextTick((function(){!document.hidden&&e.bottomedOut(10)&&e.scrollDown({forceRead:!0})}))},handleResize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.delayed,o=void 0!==n&&n;o?setTimeout((function(){e.handleResize(Bd(Bd({},t),{},{delayed:!1}))}),100):this.$nextTick((function(){var t=Td().offsetHeight,n=(void 0===t?void 0:t)-e.lastScrollPosition.offsetHeight;0===n||e.bottomedOut()||e.$nextTick((function(){window.scrollBy({top:-Math.trunc(n)})})),e.lastScrollPosition=Td()}))},scrollDown:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.behavior,n=void 0===t?"auto":t,o=e.forceRead,r=void 0!==o&&o;this.$nextTick((function(){window.scrollTo({top:document.documentElement.scrollHeight,behavior:n})})),r&&this.readChat()},readChat:function(){if(this.currentChatMessageService&&this.currentChatMessageService.maxId&&!document.hidden){var e=this.currentChatMessageService.maxId;this.$store.dispatch("readChat",{id:this.currentChat.id,lastReadId:e})}},bottomedOut:function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=window.scrollY+e;return document.documentElement.scrollHeight-window.innerHeight<=t}(e)},reachedTop:function(){return window.scrollY<=0},cullOlderCheck:function(){var e=this;window.setTimeout((function(){e.bottomedOut(10)&&e.$store.dispatch("cullOlderMessages",e.currentChatMessageService.chatId)}),5e3)},handleScroll:Nu()((function(){var e=this;this.lastScrollPosition=Td(),this.currentChat&&(this.reachedTop()?this.fetchChat({maxId:this.currentChatMessageService.minId}):this.bottomedOut(10)?(this.jumpToBottomButtonVisible=!1,this.cullOlderCheck(),this.newMessageCount>0&&window.setTimeout((function(){e.$el&&e.readChat()}),1500)):this.jumpToBottomButtonVisible=!0)}),200),handleScrollUp:function(e){var t,n,o=Td();window.scrollTo({top:(t=e,n=o,t.scrollTop+(n.scrollHeight-t.scrollHeight))})},fetchChat:function(e){var t=this,n=e.isFirstFetch,o=void 0!==n&&n,r=e.fetchLatest,i=void 0!==r&&r,s=e.maxId,a=this.currentChatMessageService;if(a&&(!i||!this.streamingEnabled)){var u=a.chatId,c=!!s,l=i&&a.maxId;return this.backendInteractor.chatMessages({id:u,maxId:s,sinceId:l}).then((function(e){o&&Jn.clear(a);var n=Td();t.$store.dispatch("addChatMessages",{chatId:u,messages:e}).then((function(){t.$nextTick((function(){c&&t.handleScrollUp(n),!(document.documentElement.scrollHeight>window.innerHeight)&&e.length>0&&t.fetchChat({maxId:t.currentChatMessageService.minId})}))}))}))}},startFetching:function(){var e=this;return(0,o.Z)(i().mark((function t(){var n;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.findOpenedChatByRecipientId(e.recipientId)){t.next=12;break}return t.prev=2,t.next=5,e.backendInteractor.getOrCreateChat({accountId:e.recipientId});case 5:n=t.sent,t.next=12;break;case 8:t.prev=8,t.t0=t.catch(2),console.error("Error creating or getting a chat",t.t0),e.errorLoadingChat=!0;case 12:n&&(e.$nextTick((function(){e.scrollDown({forceRead:!0})})),e.$store.dispatch("addOpenedChat",{chat:n}),e.doStartFetching());case 13:case"end":return t.stop()}}),t,null,[[2,8]])})))()},doStartFetching:function(){var e=this;this.$store.dispatch("startFetchingCurrentChat",{fetcher:function(){return(0,Ce.F)((function(){return e.fetchChat({fetchLatest:!0})}),5e3)}}),this.fetchChat({isFirstFetch:!0})},handleAttachmentPosting:function(){var e=this;this.$nextTick((function(){e.handleResize(),e.scrollDown({forceRead:!0})}))},sendMessage:function(e){var t=this,n=e.status,o=e.media,r=e.idempotencyKey,i={id:this.currentChat.id,content:n,idempotencyKey:r};o[0]&&(i.mediaId=o[0].id);var s=function(e){var t=e.attachments,n=e.userId,o=e.idempotencyKey,r={content:e.content,chat_id:e.chatId,created_at:new Date,id:"".concat((new Date).getTime()),attachments:t,account_id:n,idempotency_key:o,emojis:[],pending:!0,isNormalized:!0};return t[0]&&(r.attachment=t[0]),r}({attachments:o,chatId:this.currentChat.id,content:n,userId:this.currentUser.id,idempotencyKey:r});return this.$store.dispatch("addChatMessages",{chatId:this.currentChat.id,messages:[s]}).then((function(){t.handleAttachmentPosting()})),this.doSendMessage({params:i,fakeMessage:s,retriesLeft:10})},doSendMessage:function(e){var t=this,n=e.params,o=e.fakeMessage,r=e.retriesLeft,i=void 0===r?10:r;if(!(i<=0))return this.backendInteractor.sendChatMessage(n).then((function(e){return t.$store.dispatch("addChatMessages",{chatId:t.currentChat.id,updateMaxId:!1,messages:[Bd(Bd({},e),{},{fakeId:o.id})]}),e})).catch((function(e){return console.error("Error sending message",e),t.$store.dispatch("handleMessageError",{chatId:t.currentChat.id,fakeId:o.id,isRetry:10!==i}),(e.statusCode>=500&&e.statusCode<600||"Failed to fetch"===e.message)&&(t.messageRetriers[o.id]=setTimeout((function(){t.doSendMessage({params:n,fakeMessage:o,retriesLeft:i-1})}),1e3*Math.pow(2,10-i))),{}})),Promise.resolve(o)},goBack:function(){this.$router.push({name:"chats",params:{username:this.currentUser.screen_name}})}}};const Md=Ud,Ld=(0,Jo.Z)(Md,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("ChatTitle"),u=(0,Co.up)("ChatMessage"),c=(0,Co.up)("PostStatusForm");return(0,Co.wg)(),(0,Co.iD)("div",ld,[(0,Co._)("div",dd,[(0,Co._)("div",pd,[(0,Co._)("div",md,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){return e.goBack&&e.goBack.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})]),(0,Co._)("div",hd,[(0,Co.Wm)(a,{user:e.recipient,"with-avatar":!0},null,8,["user"])])],512),(0,Co._)("div",{class:"message-list",style:(0,So.j5)({height:e.scrollableContainerHeight})},[e.errorLoadingChat?((0,Co.wg)(),(0,Co.iD)("div",fd,[(0,Co._)("div",gd,(0,So.zw)(e.$t("chats.error_loading_chat")),1)])):((0,Co.wg)(!0),(0,Co.iD)(Co.HY,{key:0},(0,Co.Ko)(e.chatViewItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.id,author:e.recipient,"chat-view-item":t,"hovered-message-chain":t.messageChainId===e.hoveredMessageChainId,onHover:e.onMessageHover},null,8,["author","chat-view-item","hovered-message-chain","onHover"])})),128))],4),(0,Co._)("div",vd,[(0,Co._)("div",{class:(0,So.C_)(["jump-to-bottom-button",{visible:e.jumpToBottomButtonVisible}]),onClick:t[1]||(t[1]=function(t){return e.scrollDown({behavior:"smooth"})})},[(0,Co._)("span",null,[(0,Co.Wm)(s,{icon:"chevron-down"}),e.newMessageCount?((0,Co.wg)(),(0,Co.iD)("div",wd,(0,So.zw)(e.newMessageCount),1)):(0,Co.kq)("",!0)])],2),(0,Co.Wm)(c,{"disable-subject":!0,"disable-scope-selector":!0,"disable-notice":!0,"disable-lock-warning":!0,"disable-polls":!0,"disable-sensitivity-checkbox":!0,"disable-submit":e.errorLoadingChat||!e.currentChat,"disable-preview":!0,"optimistic-posting":!0,"post-handler":e.sendMessage,"submit-on-enter":!e.mobileLayout,"preserve-focus":!e.mobileLayout,"auto-focus":!e.mobileLayout,placeholder:e.formPlaceholder,"file-limit":1,"max-height":"160","emoji-picker-placement":"top",onResize:e.handleResize},null,8,["disable-submit","post-handler","submit-on-enter","preserve-focus","auto-focus","placeholder","onResize"])],512)],512)])])}]]);var Rd={key:0,class:"user-profile panel panel-default"},qd={key:0,class:"user-birthday"},Nd={key:1,class:"user-profile-fields"},Zd=["title"],Wd=["title"],Hd=["label","disabled"],Vd=["label","disabled"],Kd={key:1,class:"panel user-profile-placeholder"},Gd={class:"panel-heading"},Yd={class:"title"},Jd={class:"panel-body"},Qd={key:0},Xd={class:"follow-card-content-container"},ep={key:0,class:"faint"},tp={key:0,class:"follow-card-follow-button"},np=n(72895),op=n(34837),rp=["disabled","title"],ip=["textContent"];const sp={props:["user","relationship"],data:function(){return{inProgress:!1,showingConfirmRemoveFollower:!1}},components:{ConfirmModal:Da.Z},computed:{label:function(){return this.inProgress?this.$t("user_card.follow_progress"):this.$t("user_card.remove_follower")},shouldConfirmRemoveUserFromFollowers:function(){return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers}},methods:{showConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!0},hideConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!1},onClick:function(){this.shouldConfirmRemoveUserFromFollowers?this.showConfirmRemoveUserFromFollowers():this.doRemoveUserFromFollowers()},doRemoveUserFromFollowers:function(){var e=this;this.inProgress=!0,this.$store.dispatch("removeUserFromFollowers",this.relationship.id).then((function(){e.inProgress=!1})),this.hideConfirmRemoveUserFromFollowers()}}},ap=(0,Jo.Z)(sp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("i18n-t"),a=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("button",{class:(0,So.C_)(["btn button-default follow-button",{toggled:e.inProgress}]),disabled:e.inProgress,title:e.$t("user_card.remove_follower"),onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[(0,Co.Uk)((0,So.zw)(e.label)+" ",1),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmRemoveFollower?((0,Co.wg)(),(0,Co.j4)(a,{key:0,title:e.$t("user_card.remove_follower_confirm_title"),"confirm-text":e.$t("user_card.remove_follower_confirm_accept_button"),"cancel-text":e.$t("user_card.remove_follower_confirm_cancel_button"),onAccepted:e.doRemoveUserFromFollowers,onCancelled:e.hideConfirmRemoveUserFromFollowers},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{keypath:"user_card.remove_follower_confirm",tag:"span"},{user:(0,Co.w5)((function(){return[(0,Co._)("span",{textContent:(0,So.zw)(e.user.screen_name_ui)},null,8,ip)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))],10,rp)}]]),up={props:["user","noFollowsYou"],components:{BasicUserCard:ed.Z,RemoteFollow:np.Z,FollowButton:op.Z,RemoveFollowerButton:ap},computed:{isMe:function(){return this.$store.state.users.currentUser.id===this.user.id},loggedIn:function(){return this.$store.state.users.currentUser},relationship:function(){return this.$store.getters.relationship(this.user.id)}}},cp=(0,Jo.Z)(up,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("RemoteFollow"),a=(0,Co.up)("FollowButton"),u=(0,Co.up)("RemoveFollowerButton"),c=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.j4)(c,{user:e.user},{default:(0,Co.w5)((function(){return[(0,Co._)("div",Xd,[e.isMe||!e.noFollowsYou&&e.relationship.followed_by?((0,Co.wg)(),(0,Co.iD)("span",ep,(0,So.zw)(e.isMe?e.$t("user_card.its_you"):e.$t("user_card.follows_you")),1)):(0,Co.kq)("",!0),e.loggedIn?e.isMe?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[(0,Co.Wm)(a,{relationship:e.relationship,"label-following":e.$t("user_card.follow_unfollow"),class:"follow-card-follow-button",user:e.user},null,8,["relationship","label-following","user"]),e.noFollowsYou&&e.relationship.followed_by?((0,Co.wg)(),(0,Co.j4)(u,{key:0,user:e.user,relationship:e.relationship,class:"follow-card-button"},null,8,["user","relationship"])):(0,Co.kq)("",!0)],64)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:1},[e.relationship.following?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",tp,[(0,Co.Wm)(s,{user:e.user},null,8,["user"])]))],64))])]})),_:1},8,["user"])}]]);var lp=n(98027);Ht.vI.add(Vt.IJ7,Vt.xiy);var dp=(0,lp.Z)({fetch:function(e,t){return t.dispatch("fetchFollowers",e.userId)},select:function(e,t){return Dt()(t.getters.findUser(e.userId),"followerIds",[]).map((function(e){return t.getters.findUser(e)}))},destroy:function(e,t){return t.dispatch("clearFollowers",e.userId)},childPropName:"items",additionalPropNames:["userId"]})(tu.Z),pp=(0,lp.Z)({fetch:function(e,t){return t.dispatch("fetchFriends",e.userId)},select:function(e,t){return Dt()(t.getters.findUser(e.userId),"friendIds",[]).map((function(e){return t.getters.findUser(e)}))},destroy:function(e,t){return t.dispatch("clearFriends",e.userId)},childPropName:"items",additionalPropNames:["userId"]})(tu.Z),mp="statuses";const hp={data:function(){return{error:!1,userId:null,tab:mp,footerRef:null}},created:function(){var e=this.$route.params;this.load({name:e.name,id:e.id}),this.tab=Dt()(this.$route,"query.tab",mp)},unmounted:function(){this.stopFetching()},computed:{timeline:function(){return this.$store.state.statuses.timelines.user},favorites:function(){return this.$store.state.statuses.timelines.favorites},media:function(){return this.$store.state.statuses.timelines.media},isUs:function(){return this.userId&&this.$store.state.users.currentUser.id&&this.userId===this.$store.state.users.currentUser.id},user:function(){return this.$store.getters.findUser(this.userId)},isExternal:function(){return"external-user-profile"===this.$route.name},followsTabVisible:function(){return this.isUs||!this.user.hide_follows},followersTabVisible:function(){return this.isUs||!this.user.hide_followers},formattedBirthday:function(){var e=Ad.Z.internalToBrowserLocale(this.$i18n.locale);return this.user.birthday&&new Date(Date.parse(this.user.birthday)).toLocaleDateString(e,{timeZone:"UTC",day:"numeric",month:"long",year:"numeric"})}},methods:{setFooterRef:function(e){this.footerRef=e},load:function(e){var t=this,n=function(e,n){n!==t.$store.state.statuses.timelines[e].userId&&t.$store.commit("clearTimeline",{timeline:e}),t.$store.dispatch("startFetchingTimeline",{timeline:e,userId:n})},o=function(e){t.userId=e,n("user",e),n("media",e),t.isUs&&n("favorites",e),t.$store.dispatch("fetchPinnedStatuses",e)};this.userId=null,this.error=!1;var r=e.id,i=e.name,s=r?this.$store.getters.findUser(r):this.$store.getters.findUserByName(i);s?o(s.id):(r?this.$store.dispatch("fetchUser",r):this.$store.dispatch("fetchUserByName",i)).then((function(e){var t=e.id;return o(t)})).catch((function(e){var n=Dt()(e,"error.error");t.error="No user with such user_id"===n?t.$t("user_profile.profile_does_not_exist"):n||t.$t("user_profile.profile_loading_error")}))},stopFetching:function(){this.$store.dispatch("stopFetchingTimeline","user"),this.$store.dispatch("stopFetchingTimeline","favorites"),this.$store.dispatch("stopFetchingTimeline","media")},switchUser:function(e){this.stopFetching(),this.load(e)},onTabSwitch:function(e){this.tab=e,this.$router.replace({query:{tab:e}})},linkClicked:function(e){var t=e.target;"SPAN"===t.tagName&&(t=t.parentNode),"A"===t.tagName&&window.open(t.href,"_blank")}},watch:{"$route.params.id":function(e){e&&this.switchUser({id:e})},"$route.params.name":function(e){e&&this.switchUser({name:e})},"$route.query":function(e){this.tab=e.tab||mp}},components:{UserCard:xr.Z,Timeline:Vc,FollowerList:dp,FriendList:pp,FollowCard:cp,TabSwitcher:fl.Z,Conversation:$c,RichContent:Rl.Z}},fp=(0,Jo.Z)(hp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("RichContent"),c=(0,Co.up)("Timeline"),l=(0,Co.up)("FollowCard"),d=(0,Co.up)("FriendList"),p=(0,Co.up)("FollowerList"),m=(0,Co.up)("tab-switcher");return(0,Co.wg)(),(0,Co.iD)("div",null,[e.user?((0,Co.wg)(),(0,Co.iD)("div",Rd,[(0,Co.Wm)(s,{"user-id":e.userId,switcher:!0,selected:e.timeline.viewing,"avatar-action":"zoom",rounded:"top","has-note-editor":!0},null,8,["user-id","selected"]),e.user.birthday?((0,Co.wg)(),(0,Co.iD)("span",qd,[(0,Co.Wm)(a,{class:"fa-old-padding",icon:"birthday-cake"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("user_card.birthday",{birthday:e.formattedBirthday})),1)])):(0,Co.kq)("",!0),e.user.fields_html&&e.user.fields_html.length>0?((0,Co.wg)(),(0,Co.iD)("div",Nd,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.user.fields_html,(function(t,n){return(0,Co.wg)(),(0,Co.iD)("dl",{key:n,class:"user-profile-field"},[(0,Co._)("dt",{title:e.user.fields_text[n].name,class:"user-profile-field-name"},[(0,Co.Wm)(u,{html:t.name,emoji:e.user.emoji},null,8,["html","emoji"])],8,Zd),(0,Co._)("dd",{title:e.user.fields_text[n].value,class:"user-profile-field-value"},[(0,Co.Wm)(u,{html:t.value,emoji:e.user.emoji},null,8,["html","emoji"])],8,Wd)])})),128))])):(0,Co.kq)("",!0),(0,Co.Wm)(m,{"active-tab":e.tab,"render-only-focused":!0,"on-switch":e.onTabSwitch},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(c,{key:"statuses",label:e.$t("user_card.statuses"),count:e.user.statuses_count,embedded:!0,title:e.$t("user_profile.timeline_title"),timeline:e.timeline,"timeline-name":"user","user-id":e.userId,"pinned-status-ids":e.user.pinnedStatusIds,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","count","title","timeline","user-id","pinned-status-ids","footer-slipgate"]),e.followsTabVisible?((0,Co.wg)(),(0,Co.iD)("div",{key:"followees",label:e.$t("user_card.followees"),disabled:!e.user.friends_count},[(0,Co.Wm)(d,{"user-id":e.userId},{item:(0,Co.w5)((function(e){var t=e.item;return[(0,Co.Wm)(l,{user:t},null,8,["user"])]})),_:1},8,["user-id"])],8,Hd)):(0,Co.kq)("",!0),e.followersTabVisible?((0,Co.wg)(),(0,Co.iD)("div",{key:"followers",label:e.$t("user_card.followers"),disabled:!e.user.followers_count},[(0,Co.Wm)(p,{"user-id":e.userId},{item:(0,Co.w5)((function(t){var n=t.item;return[(0,Co.Wm)(l,{user:n,"no-follows-you":e.isUs},null,8,["user","no-follows-you"])]})),_:1},8,["user-id"])],8,Vd)):(0,Co.kq)("",!0),(0,Co.Wm)(c,{key:"media",label:e.$t("user_card.media"),disabled:!e.media.visibleStatuses.length,embedded:!0,title:e.$t("user_card.media"),"timeline-name":"media",timeline:e.media,"user-id":e.userId,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","disabled","title","timeline","user-id","footer-slipgate"]),e.isUs?((0,Co.wg)(),(0,Co.j4)(c,{key:"favorites",label:e.$t("user_card.favorites"),disabled:!e.favorites.visibleStatuses.length,embedded:!0,title:e.$t("user_card.favorites"),"timeline-name":"favorites",timeline:e.favorites,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","disabled","title","timeline","footer-slipgate"])):(0,Co.kq)("",!0)]})),_:1},8,["active-tab","on-switch"]),(0,Co._)("div",{ref:e.setFooterRef,class:"panel-footer"},null,512)])):((0,Co.wg)(),(0,Co.iD)("div",Kd,[(0,Co._)("div",Gd,[(0,Co._)("div",Yd,(0,So.zw)(e.$t("settings.profile_tab")),1)]),(0,Co._)("div",Jd,[e.error?((0,Co.wg)(),(0,Co.iD)("span",Qd,(0,So.zw)(e.error),1)):((0,Co.wg)(),(0,Co.j4)(a,{key:1,spin:"",icon:"circle-notch"}))])]))])}]]);var gp={class:"panel panel-default"},vp={class:"panel-heading"},wp={class:"title"},bp={class:"search-input-container"},yp=["placeholder"],Dp={key:0,class:"text-center loading-icon"},_p={key:1},kp={class:"search-nav-heading"},Cp=["label"],Sp=["label"],jp=["label"],Fp={class:"panel-body"},Ap={key:0},Op={class:"new-status-notification text-center"},Ep={key:1,class:"text-center loading-icon"},zp={key:2,class:"search-result-heading"},Pp={key:1},Ip={key:0,class:"search-result-heading"},xp={key:2},Tp={key:0,class:"search-result-heading"},$p={class:"hashtag"},Bp={key:0},Up={key:0},Mp={key:1},Lp={key:0,class:"count"},Rp=(0,Co._)("div",{class:"search-result-footer text-center panel-footer faint"},null,-1),qp=n(45578),Np=n.n(qp);Ht.vI.add(Vt.IJ7,Vt.wn1);const Zp={components:{FollowCard:cp,Conversation:$c,Status:eu.default,TabSwitcher:fl.Z},props:["query"],data:function(){return{loaded:!1,loading:!1,searchTerm:this.query||"",userIds:[],statuses:[],hashtags:[],currenResultTab:"statuses",statusesOffset:0,lastStatusFetchCount:0,lastQuery:""}},computed:{users:function(){var e=this;return this.userIds.map((function(t){return e.$store.getters.findUser(t)}))},visibleStatuses:function(){var e=this.$store.state.statuses.allStatusesObject;return this.statuses.filter((function(t){return e[t.id]&&!e[t.id].deleted}))}},mounted:function(){this.search(this.query)},watch:{query:function(e){this.searchTerm=e,this.search(e)}},methods:{newQuery:function(e){this.$router.push({name:"search",query:{query:e}}),this.$refs.searchInput.focus()},search:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e?(this.loading=!0,this.$refs.searchInput.blur(),this.lastQuery!==e&&(this.userIds=[],this.hashtags=[],this.statuses=[],this.statusesOffset=0,this.lastStatusFetchCount=0),this.$store.dispatch("search",{q:e,resolve:!0,offset:this.statusesOffset,type:n}).then((function(n){t.loading=!1;var o=t.statuses.length;t.userIds=t.userIds.concat(be()(n.accounts,"id")),t.statuses=Np()(t.statuses.concat(n.statuses),"id"),t.hashtags=t.hashtags.concat(n.hashtags),t.currenResultTab=t.getActiveTab(),t.loaded=!0,t.statusesOffset=t.statuses.length,t.lastStatusFetchCount=t.statuses.length-o,t.lastQuery=e}))):this.loading=!1},resultCount:function(e){var t=this[e].length;return 0===t?"":" (".concat(t,")")},onResultTabSwitch:function(e){this.currenResultTab=e},getActiveTab:function(){return this.visibleStatuses.length>0?"statuses":this.users.length>0?"people":this.hashtags.length>0?"hashtags":"statuses"},lastHistoryRecord:function(e){return e.history&&e.history[0]}}},Wp=(0,Jo.Z)(Zp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("tab-switcher"),u=(0,Co.up)("Status"),c=(0,Co.up)("FollowCard"),l=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",gp,[(0,Co._)("div",vp,[(0,Co._)("div",wp,(0,So.zw)(e.$t("nav.search")),1)]),(0,Co._)("div",bp,[(0,Co.wy)((0,Co._)("input",{ref:"searchInput","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.searchTerm=t}),class:"search-input",placeholder:e.$t("nav.search"),onKeyup:t[1]||(t[1]=(0,wo.D2)((function(t){return e.newQuery(e.searchTerm)}),["enter"]))},null,40,yp),[[wo.nr,e.searchTerm]]),(0,Co._)("button",{class:"btn button-default search-button",type:"submit",onClick:t[2]||(t[2]=function(t){return e.newQuery(e.searchTerm)})},[(0,Co.Wm)(s,{icon:"search"})])]),e.loading&&0==e.statusesOffset?((0,Co.wg)(),(0,Co.iD)("div",Dp,[(0,Co.Wm)(s,{icon:"circle-notch",spin:"",size:"lg"})])):e.loaded?((0,Co.wg)(),(0,Co.iD)("div",_p,[(0,Co._)("div",kp,[(0,Co.Wm)(a,{ref:"tabSwitcher","on-switch":e.onResultTabSwitch,"active-tab":e.currenResultTab},{default:(0,Co.w5)((function(){return[(0,Co._)("span",{key:"statuses",label:e.$t("user_card.statuses")+e.resultCount("visibleStatuses")},null,8,Cp),(0,Co._)("span",{key:"people",label:e.$t("search.people")+e.resultCount("users")},null,8,Sp),(0,Co._)("span",{key:"hashtags",label:e.$t("search.hashtags")+e.resultCount("hashtags")},null,8,jp)]})),_:1},8,["on-switch","active-tab"])])])):(0,Co.kq)("",!0),(0,Co._)("div",Fp,["statuses"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",Ap,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.visibleStatuses,(function(e){return(0,Co.wg)(),(0,Co.j4)(u,{key:e.id,collapsable:!1,expandable:!1,compact:!1,class:"search-result",statusoid:e,"no-heading":!1},null,8,["statusoid"])})),128)),!e.loading&&e.loaded&&e.lastStatusFetchCount>0?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"more-statuses-button button-unstyled -link -fullwidth",onClick:t[3]||(t[3]=(0,wo.iM)((function(t){return e.search(e.searchTerm,"statuses")}),["prevent"]))},[(0,Co._)("div",Op,(0,So.zw)(e.$t("search.load_more")),1)])):e.loading&&e.statusesOffset>0?((0,Co.wg)(),(0,Co.iD)("div",Ep,[(0,Co.Wm)(s,{icon:"circle-notch",spin:"",size:"lg"})])):(0,Co.kq)("",!0),0!==e.visibleStatuses.length&&0!==e.lastStatusFetchCount||e.loading||!e.loaded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",zp,[(0,Co._)("h4",null,(0,So.zw)(0===e.visibleStatuses.length?e.$t("search.no_results"):e.$t("search.no_more_results")),1)]))])):"people"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",Pp,[0===e.users.length&&!e.loading&&e.loaded?((0,Co.wg)(),(0,Co.iD)("div",Ip,[(0,Co._)("h4",null,(0,So.zw)(e.$t("search.no_results")),1)])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(c,{key:e.id,user:e,class:"list-item search-result"},null,8,["user"])})),128))])):"hashtags"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",xp,[0===e.hashtags.length&&!e.loading&&e.loaded?((0,Co.wg)(),(0,Co.iD)("div",Tp,[(0,Co._)("h4",null,(0,So.zw)(e.$t("search.no_results")),1)])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.hashtags,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.url,class:"status trend search-result"},[(0,Co._)("div",$p,[(0,Co.Wm)(l,{to:{name:"tag-timeline",params:{tag:t.name}}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)(" #"+(0,So.zw)(t.name),1)]})),_:2},1032,["to"]),e.lastHistoryRecord(t)?((0,Co.wg)(),(0,Co.iD)("div",Bp,[1==e.lastHistoryRecord(t).accounts?((0,Co.wg)(),(0,Co.iD)("span",Up,(0,So.zw)(e.$t("search.person_talking",{count:e.lastHistoryRecord(t).accounts})),1)):((0,Co.wg)(),(0,Co.iD)("span",Mp,(0,So.zw)(e.$t("search.people_talking",{count:e.lastHistoryRecord(t).accounts})),1))])):(0,Co.kq)("",!0)]),e.lastHistoryRecord(t)?((0,Co.wg)(),(0,Co.iD)("div",Lp,(0,So.zw)(e.lastHistoryRecord(t).uses),1)):(0,Co.kq)("",!0)])})),128))])):(0,Co.kq)("",!0)]),Rp])}]]);var Hp={class:"settings panel panel-default"},Vp={class:"panel-heading"},Kp={class:"panel-body"},Gp={class:"container"},Yp={class:"text-fields"},Jp={class:"form--label",for:"sign-up-username"},Qp=["disabled","placeholder"],Xp={key:0,class:"form-error"},em={key:0},tm={class:"form--label",for:"sign-up-fullname"},nm=["disabled","placeholder"],om={key:1,class:"form-error"},rm={key:0},im={class:"form--label",for:"email"},sm=["disabled","aria-required"],am={key:2,class:"form-error"},um={key:0},cm={class:"form-group"},lm={class:"form--label",for:"bio"},dm=["disabled","placeholder"],pm={class:"form--label",for:"sign-up-password"},mm=["disabled"],hm={key:3,class:"form-error"},fm={key:0},gm={class:"form--label",for:"sign-up-password-confirmation"},vm=["disabled"],wm={key:4,class:"form-error"},bm={key:0},ym={key:1},Dm={class:"form--label",for:"sign-up-birthday"},_m=["disabled","max","aria-required"],km={key:5,class:"form-error"},Cm={key:0},Sm={key:1},jm={key:6,class:"form-group"},Fm={class:"form--label",for:"reason"},Am=["disabled","placeholder"],Om={key:7,id:"captcha-group",class:"form-group"},Em={class:"form--label",for:"captcha-label"},zm=["src"],Pm=["disabled"],Im={key:8,class:"form-group"},xm={for:"token"},Tm={class:"form-group"},$m=["disabled"],Bm=["innerHTML"],Um={key:0,class:"form-group"},Mm={class:"alert error"},Lm=n(21359),Rm=n(35332),qm=n(86269),Nm=n(27483);function Zm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Wm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zm(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Hm={setup:function(){return{v$:(0,Lm.ZP)()}},data:function(){return{user:{email:"",fullname:"",username:"",password:"",confirm:"",birthday:"",reason:"",language:[""]},captcha:{}}},components:{InterfaceLanguageSwitcher:qm.Z},validations:function(){var e=this;return{user:{email:{required:(0,Rm.CF)((function(){return e.accountActivationRequired}))},username:{required:Rm.C1},fullname:{required:Rm.C1},password:{required:Rm.C1},confirm:{required:Rm.C1,sameAs:(0,Rm.sH)(this.user.password)},birthday:{required:(0,Rm.CF)((function(){return e.birthdayRequired})),maxValue:function(t){return!e.birthdayRequired||new Date(t).getTime()<=e.birthdayMin.getTime()}},reason:{required:(0,Rm.CF)((function(){return e.accountApprovalRequired}))},language:{}}}},created:function(){(!this.registrationOpen&&!this.token||this.signedIn)&&this.$router.push({name:"root"}),this.setCaptcha()},computed:Wm({token:function(){return this.$route.params.token},bioPlaceholder:function(){return this.replaceNewlines(this.$t("registration.bio_placeholder"))},reasonPlaceholder:function(){return this.replaceNewlines(this.$t("registration.reason_placeholder"))},birthdayMin:function(){var e=this.birthdayMinAge,t=new Date;t.setUTCMilliseconds(0),t.setUTCSeconds(0),t.setUTCMinutes(0),t.setUTCHours(0);var n=new Date;return n.setTime(t.getTime()-e*Nm.x4),n},birthdayMinAttr:function(){return this.birthdayMin.toJSON().replace(/T.+$/,"")},birthdayMinFormatted:function(){var e=Ad.Z.internalToBrowserLocale(this.$i18n.locale);return this.user.birthday&&new Date(Date.parse(this.birthdayMin)).toLocaleDateString(e,{timeZone:"UTC",day:"numeric",month:"long",year:"numeric"})}},(0,s.rn)({registrationOpen:function(e){return e.instance.registrationOpen},signedIn:function(e){return!!e.users.currentUser},isPending:function(e){return e.users.signUpPending},serverValidationErrors:function(e){return e.users.signUpErrors},termsOfService:function(e){return e.instance.tos},accountActivationRequired:function(e){return e.instance.accountActivationRequired},accountApprovalRequired:function(e){return e.instance.accountApprovalRequired},birthdayRequired:function(e){return e.instance.birthdayRequired},birthdayMinAge:function(e){return e.instance.birthdayMinAge}})),methods:Wm(Wm({},(0,s.nv)(["signUp","getCaptcha"])),{},{submit:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.user.nickname=e.user.username,e.user.token=e.token,e.user.captcha_solution=e.captcha.solution,e.user.captcha_token=e.captcha.token,e.user.captcha_answer_data=e.captcha.answer_data,e.user.language&&(e.user.language=Ad.Z.internalToBackendLocaleMulti(e.user.language.filter((function(e){return e})))),e.v$.$touch(),e.v$.$invalid){t.next=18;break}return t.prev=8,t.next=11,e.signUp(e.user);case 11:e.$router.push({name:"friends"}),t.next=18;break;case 14:t.prev=14,t.t0=t.catch(8),console.warn("Registration failed: ",t.t0),e.setCaptcha();case 18:case"end":return t.stop()}}),t,null,[[8,14]])})))()},setCaptcha:function(){var e=this;this.getCaptcha().then((function(t){e.captcha=t}))},replaceNewlines:function(e){return e.replace(/\s*\n\s*/g," \n")}})},Vm=(0,Jo.Z)(Hm,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("interface-language-switcher");return(0,Co.wg)(),(0,Co.iD)("div",Hp,[(0,Co._)("div",Vp,(0,So.zw)(e.$t("registration.registration")),1),(0,Co._)("div",Kp,[(0,Co._)("form",{class:"registration-form",onSubmit:t[12]||(t[12]=(0,wo.iM)((function(t){return e.submit(e.user)}),["prevent"]))},[(0,Co._)("div",Gp,[(0,Co._)("div",Yp,[(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.username.$error}])},[(0,Co._)("label",Jp,(0,So.zw)(e.$t("login.username")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-username","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.v$.user.username.$model=t}),disabled:e.isPending,class:"form-control","aria-required":!0,placeholder:e.$t("registration.username_placeholder")},null,8,Qp),[[wo.nr,e.v$.user.username.$model,void 0,{trim:!0}]])],2),e.v$.user.username.$dirty?((0,Co.wg)(),(0,Co.iD)("div",Xp,[(0,Co._)("ul",null,[e.v$.user.username.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",em,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.username_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.fullname.$error}])},[(0,Co._)("label",tm,(0,So.zw)(e.$t("registration.fullname")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-fullname","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.v$.user.fullname.$model=t}),disabled:e.isPending,class:"form-control","aria-required":!0,placeholder:e.$t("registration.fullname_placeholder")},null,8,nm),[[wo.nr,e.v$.user.fullname.$model,void 0,{trim:!0}]])],2),e.v$.user.fullname.$dirty?((0,Co.wg)(),(0,Co.iD)("div",om,[(0,Co._)("ul",null,[e.v$.user.fullname.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",rm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.fullname_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.email.$error}])},[(0,Co._)("label",im,(0,So.zw)(e.accountActivationRequired?e.$t("registration.email"):e.$t("registration.email_optional")),1),(0,Co.wy)((0,Co._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.v$.user.email.$model=t}),disabled:e.isPending,class:"form-control",type:"email","aria-required":e.accountActivationRequired},null,8,sm),[[wo.nr,e.v$.user.email.$model]])],2),e.v$.user.email.$dirty?((0,Co.wg)(),(0,Co.iD)("div",am,[(0,Co._)("ul",null,[e.v$.user.email.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",um,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.email_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",cm,[(0,Co._)("label",lm,(0,So.zw)(e.$t("registration.bio_optional")),1),(0,Co.wy)((0,Co._)("textarea",{id:"bio","onUpdate:modelValue":t[3]||(t[3]=function(t){return e.user.bio=t}),disabled:e.isPending,class:"form-control",placeholder:e.bioPlaceholder},null,8,dm),[[wo.nr,e.user.bio]])]),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.password.$error}])},[(0,Co._)("label",pm,(0,So.zw)(e.$t("login.password")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-password","onUpdate:modelValue":t[4]||(t[4]=function(t){return e.user.password=t}),disabled:e.isPending,class:"form-control",type:"password","aria-required":!0},null,8,mm),[[wo.nr,e.user.password]])],2),e.v$.user.password.$dirty?((0,Co.wg)(),(0,Co.iD)("div",hm,[(0,Co._)("ul",null,[e.v$.user.password.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",fm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.confirm.$error}])},[(0,Co._)("label",gm,(0,So.zw)(e.$t("registration.password_confirm")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-password-confirmation","onUpdate:modelValue":t[5]||(t[5]=function(t){return e.user.confirm=t}),disabled:e.isPending,class:"form-control",type:"password","aria-required":!0},null,8,vm),[[wo.nr,e.user.confirm]])],2),e.v$.user.confirm.$dirty?((0,Co.wg)(),(0,Co.iD)("div",wm,[(0,Co._)("ul",null,[e.v$.user.confirm.required.$invalid?((0,Co.wg)(),(0,Co.iD)("li",bm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_confirmation_required")),1)])):(0,Co.kq)("",!0),e.v$.user.confirm.sameAs.$invalid?((0,Co.wg)(),(0,Co.iD)("li",ym,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_confirmation_match")),1)])):(0,Co.kq)("",!0)])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.birthday.$error}])},[(0,Co._)("label",Dm,(0,So.zw)(e.birthdayRequired?e.$t("registration.birthday"):e.$t("registration.birthday_optional")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-birthday","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.user.birthday=t}),disabled:e.isPending,class:"form-control",type:"date",max:e.birthdayRequired?e.birthdayMinAttr:void 0,"aria-required":e.birthdayRequired},null,8,_m),[[wo.nr,e.user.birthday]])],2),e.v$.user.birthday.$dirty?((0,Co.wg)(),(0,Co.iD)("div",km,[(0,Co._)("ul",null,[e.v$.user.birthday.required.$invalid?((0,Co.wg)(),(0,Co.iD)("li",Cm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.birthday_required")),1)])):(0,Co.kq)("",!0),e.v$.user.birthday.maxValue.$invalid?((0,Co.wg)(),(0,Co.iD)("li",Sm,[(0,Co._)("span",null,(0,So.zw)(e.$tc("registration.validations.birthday_min_age",{date:e.birthdayMinFormatted})),1)])):(0,Co.kq)("",!0)])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.language.$error}])},[(0,Co.Wm)(s,{for:"email-language","prompt-text":e.$t("registration.email_language"),language:e.v$.user.language.$model,"set-language":function(t){return e.v$.user.language.$model=t},onClick:t[7]||(t[7]=(0,wo.iM)((function(){}),["stop","prevent"]))},null,8,["prompt-text","language","set-language"])],2),e.accountApprovalRequired?((0,Co.wg)(),(0,Co.iD)("div",jm,[(0,Co._)("label",Fm,(0,So.zw)(e.$t("registration.reason")),1),(0,Co.wy)((0,Co._)("textarea",{id:"reason","onUpdate:modelValue":t[8]||(t[8]=function(t){return e.user.reason=t}),disabled:e.isPending,class:"form-control",placeholder:e.reasonPlaceholder},null,8,Am),[[wo.nr,e.user.reason]])])):(0,Co.kq)("",!0),"none"!=e.captcha.type?((0,Co.wg)(),(0,Co.iD)("div",Om,[(0,Co._)("label",Em,(0,So.zw)(e.$t("registration.captcha")),1),["kocaptcha","native"].includes(e.captcha.type)?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co._)("img",{src:e.captcha.url,onClick:t[9]||(t[9]=function(){return e.setCaptcha&&e.setCaptcha.apply(e,arguments)})},null,8,zm),(0,Co._)("sub",null,(0,So.zw)(e.$t("registration.new_captcha")),1),(0,Co.wy)((0,Co._)("input",{id:"captcha-answer","onUpdate:modelValue":t[10]||(t[10]=function(t){return e.captcha.solution=t}),disabled:e.isPending,class:"form-control",type:"text",autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},null,8,Pm),[[wo.nr,e.captcha.solution]])],64)):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0),e.token?((0,Co.wg)(),(0,Co.iD)("div",Im,[(0,Co._)("label",xm,(0,So.zw)(e.$t("registration.token")),1),(0,Co.wy)((0,Co._)("input",{id:"token","onUpdate:modelValue":t[11]||(t[11]=function(t){return e.token=t}),disabled:"true",class:"form-control",type:"text"},null,512),[[wo.nr,e.token]])])):(0,Co.kq)("",!0),(0,Co._)("div",Tm,[(0,Co._)("button",{disabled:e.isPending,type:"submit",class:"btn button-default"},(0,So.zw)(e.$t("registration.register")),9,$m)])]),(0,Co._)("div",{class:"terms-of-service",innerHTML:e.termsOfService},null,8,Bm)]),e.serverValidationErrors.length?((0,Co.wg)(),(0,Co.iD)("div",Um,[(0,Co._)("div",Mm,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.serverValidationErrors,(function(e){return(0,Co.wg)(),(0,Co.iD)("span",{key:e},(0,So.zw)(e),1)})),128))])])):(0,Co.kq)("",!0)],32)])])}]]);var Km={class:"settings panel panel-default"},Gm={class:"panel-heading"},Ym={class:"panel-body"},Jm={class:"container"},Qm={key:0},Xm={key:0},eh={key:1},th={key:1},nh={key:0},oh={class:"form-group text-center"},rh={key:2},ih={key:0,class:"password-reset-required error"},sh={class:"form-group"},ah=["disabled","placeholder"],uh={class:"form-group"},ch=["disabled"],lh={key:3,class:"alert error notice-dismissible"};function dh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ph(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?dh(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dh(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);var mh={data:function(){return{user:{email:""},isPending:!1,success:!1,throttled:!1,error:null}},computed:ph(ph({},(0,s.rn)({signedIn:function(e){return!!e.users.currentUser},instance:function(e){return e.instance}})),{},{mailerEnabled:function(){return this.instance.mailerEnabled}}),created:function(){this.signedIn&&this.$router.push({name:"root"})},props:{passwordResetRequested:{default:!1,type:Boolean}},methods:{dismissError:function(){this.error=null},submit:function(){var e=this;this.isPending=!0;var t=this.user.email;(function(e){var t=e.instance,n={email:e.email},o=Ue()(n,(function(e,t,n){var o="".concat(n,"=").concat(encodeURIComponent(t));return"".concat(e,"&").concat(o)}),""),r="".concat(t).concat("/auth/password","?").concat(o);return window.fetch(r,{method:"POST"})})({instance:this.instance.server,email:t}).then((function(t){var n=t.status;e.isPending=!1,e.user.email="",204===n?(e.success=!0,e.error=null):429===n&&(e.throttled=!0,e.error=e.$t("password_reset.too_many_requests"))})).catch((function(){e.isPending=!1,e.user.email="",e.error=e.$t("general.generic_error")}))}}};const hh=mh,fh=(0,Jo.Z)(hh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Km,[(0,Co._)("div",Gm,(0,So.zw)(e.$t("password_reset.password_reset")),1),(0,Co._)("div",Ym,[(0,Co._)("form",{class:"password-reset-form",onSubmit:t[2]||(t[2]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",Jm,[e.mailerEnabled?e.success||e.throttled?((0,Co.wg)(),(0,Co.iD)("div",th,[e.success?((0,Co.wg)(),(0,Co.iD)("p",nh,(0,So.zw)(e.$t("password_reset.check_email")),1)):(0,Co.kq)("",!0),(0,Co._)("div",oh,[(0,Co.Wm)(s,{to:{name:"root"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("password_reset.return_home")),1)]})),_:1})])])):((0,Co.wg)(),(0,Co.iD)("div",rh,[e.passwordResetRequested?((0,Co.wg)(),(0,Co.iD)("p",ih,(0,So.zw)(e.$t("password_reset.password_reset_required")),1)):(0,Co.kq)("",!0),(0,Co._)("p",null,(0,So.zw)(e.$t("password_reset.instruction")),1),(0,Co._)("div",sh,[(0,Co.wy)((0,Co._)("input",{ref:"email","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.user.email=t}),disabled:e.isPending,placeholder:e.$t("password_reset.placeholder"),class:"form-control",type:"input"},null,8,ah),[[wo.nr,e.user.email]])]),(0,Co._)("div",uh,[(0,Co._)("button",{disabled:e.isPending,type:"submit",class:"btn button-default btn-block"},(0,So.zw)(e.$t("settings.save")),9,ch)])])):((0,Co.wg)(),(0,Co.iD)("div",Qm,[e.passwordResetRequested?((0,Co.wg)(),(0,Co.iD)("p",Xm,(0,So.zw)(e.$t("password_reset.password_reset_required_but_mailer_is_disabled")),1)):((0,Co.wg)(),(0,Co.iD)("p",eh,(0,So.zw)(e.$t("password_reset.password_reset_disabled")),1))])),e.error?((0,Co.wg)(),(0,Co.iD)("p",lh,[(0,Co._)("span",null,(0,So.zw)(e.error),1),(0,Co._)("a",{class:"fa-scale-110 fa-old-padding dismiss",onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.dismissError()}),["prevent"]))},[(0,Co.Wm)(a,{icon:"times"})])])):(0,Co.kq)("",!0)])],32)])])}]]);var gh={class:"settings panel panel-default"},vh={class:"panel-heading"},wh={class:"title"},bh={class:"panel-body"},yh={class:"follow-request-card-content-container"};const Dh={props:["user"],components:{BasicUserCard:ed.Z,ConfirmModal:Da.Z},data:function(){return{showingApproveConfirmDialog:!1,showingDenyConfirmDialog:!1}},methods:{findFollowRequestNotificationId:function(){var e=this,t=(0,K.Bt)(this.$store).find((function(t){return t.from_profile.id===e.user.id&&"follow_request"===t.type}));return t&&t.id},showApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!0},hideApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!1},showDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!0},hideDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!1},approveUser:function(){this.shouldConfirmApprove?this.showApproveConfirmDialog():this.doApprove()},doApprove:function(){this.$store.state.api.backendInteractor.approveUser({id:this.user.id}),this.$store.dispatch("removeFollowRequest",this.user);var e=this.findFollowRequestNotificationId();this.$store.dispatch("markSingleNotificationAsSeen",{id:e}),this.$store.dispatch("updateNotification",{id:e,updater:function(e){e.type="follow"}}),this.hideApproveConfirmDialog()},denyUser:function(){this.shouldConfirmDeny?this.showDenyConfirmDialog():this.doDeny()},doDeny:function(){var e=this,t=this.findFollowRequestNotificationId();this.$store.state.api.backendInteractor.denyUser({id:this.user.id}).then((function(){e.$store.dispatch("dismissNotificationLocal",{id:t}),e.$store.dispatch("removeFollowRequest",e.user)})),this.hideDenyConfirmDialog()}},computed:{mergedConfig:function(){return this.$store.getters.mergedConfig},shouldConfirmApprove:function(){return this.mergedConfig.modalOnApproveFollow},shouldConfirmDeny:function(){return this.mergedConfig.modalOnDenyFollow}}},_h={components:{FollowRequestCard:(0,Jo.Z)(Dh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("confirm-modal"),a=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.j4)(a,{user:e.user},{default:(0,Co.w5)((function(){return[(0,Co._)("div",yh,[(0,Co._)("button",{class:"btn button-default",onClick:t[0]||(t[0]=function(){return e.approveUser&&e.approveUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_card.approve")),1),(0,Co._)("button",{class:"btn button-default",onClick:t[1]||(t[1]=function(){return e.denyUser&&e.denyUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_card.deny")),1)]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingApproveConfirmDialog?((0,Co.wg)(),(0,Co.j4)(s,{key:0,title:e.$t("user_card.approve_confirm_title"),"confirm-text":e.$t("user_card.approve_confirm_accept_button"),"cancel-text":e.$t("user_card.approve_confirm_cancel_button"),onAccepted:e.doApprove,onCancelled:e.hideApproveConfirmDialog},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_card.approve_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0),e.showingDenyConfirmDialog?((0,Co.wg)(),(0,Co.j4)(s,{key:1,title:e.$t("user_card.deny_confirm_title"),"confirm-text":e.$t("user_card.deny_confirm_accept_button"),"cancel-text":e.$t("user_card.deny_confirm_cancel_button"),onAccepted:e.doDeny,onCancelled:e.hideDenyConfirmDialog},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_card.deny_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))]})),_:1},8,["user"])}]])},computed:{requests:function(){return this.$store.state.api.followRequests}}},kh=(0,Jo.Z)(_h,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FollowRequestCard");return(0,Co.wg)(),(0,Co.iD)("div",gh,[(0,Co._)("div",vh,[(0,Co._)("div",wh,(0,So.zw)(e.$t("nav.friend_requests")),1)]),(0,Co._)("div",bh,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.requests,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,user:e,class:"list-item"},null,8,["user"])})),128))])])}]]),Ch={props:["code"],mounted:function(){var e=this;if(this.code){var t=this.$store.state.oauth,n=t.clientId,o=t.clientSecret;Ne.getToken({clientId:n,clientSecret:o,instance:this.$store.state.instance.server,code:this.code}).then((function(t){e.$store.commit("setToken",t.access_token),e.$store.dispatch("loginUser",t.access_token),e.$router.push({name:"friends"})}))}}},Sh=(0,Jo.Z)(Ch,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("h1",null,"...")}]]);var jh={class:"panel panel-default"},Fh={class:"panel-heading"},Ah={class:"panel-body"};const Oh={components:{FollowCard:cp},data:function(){return{users:[]}},mounted:function(){this.getWhoToFollow()},methods:{showWhoToFollow:function(e){var t=this;e.forEach((function(e,n){t.$store.state.api.backendInteractor.fetchUser({id:e.acct}).then((function(e){e.error||(t.$store.commit("addNewUsers",[e]),t.users.push(e))}))}))},getWhoToFollow:function(){var e=this,t=this.$store.state.users.currentUser.credentials;t&&h.ZP.suggestions({credentials:t}).then((function(t){e.showWhoToFollow(t)}))}}},Eh=(0,Jo.Z)(Oh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FollowCard");return(0,Co.wg)(),(0,Co.iD)("div",jh,[(0,Co._)("div",Fh,(0,So.zw)(e.$t("who_to_follow.who_to_follow")),1),(0,Co._)("div",Ah,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,user:e,class:"list-item"},null,8,["user"])})),128))])])}]]);var zh={class:"column-inner"},Ph={class:"panel panel-default"},Ih={class:"panel-body"},xh=["innerHTML"];const Th={computed:{content:function(){return this.$store.state.instance.tos}}},$h=(0,Jo.Z)(Th,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",null,[(0,Co._)("div",Ph,[(0,Co._)("div",Ih,[(0,Co._)("div",{class:"tos-content",innerHTML:e.content},null,8,xh)])])])}]]);var Bh={class:"staff-panel"},Uh={class:"panel panel-default base01-background"},Mh={class:"panel-heading timeline-heading base02-background"},Lh={class:"title"},Rh={class:"panel-body"};function qh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Nh(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qh(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qh(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Zh={created:function(){var e=this;this.$store.state.instance.staffAccounts.forEach((function(t){return e.$store.dispatch("fetchUserIfMissing",t)}))},components:{BasicUserCard:ed.Z},computed:Nh(Nh({groupedStaffAccounts:function(){var e=be()(this.staffAccounts,this.findUserByName).filter((function(e){return e})),t=Tt()(e,"role");return[{role:"admin",users:t.admin},{role:"moderator",users:t.moderator}].filter((function(e){return e.users}))}},(0,s.Se)(["findUserByName"])),(0,s.rn)({staffAccounts:function(e){return e.instance.staffAccounts}}))},Wh=(0,Jo.Z)(Zh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.iD)("div",Bh,[(0,Co._)("div",Uh,[(0,Co._)("div",Mh,[(0,Co._)("div",Lh,(0,So.zw)(e.$t("about.staff")),1)]),(0,Co._)("div",Rh,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.groupedStaffAccounts,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.role,class:"staff-group"},[(0,Co._)("h4",null,(0,So.zw)(e.$t("general.role."+t.role)),1),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(t.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.screen_name,user:e},null,8,["user"])})),128))])})),128))])])])}]]);var Hh={key:0,class:"mrf-transparency-panel"},Vh={class:"panel panel-default base01-background"},Kh={class:"panel-heading timeline-heading base02-background"},Gh={class:"title"},Yh={class:"panel-body"},Jh={class:"mrf-section"},Qh=["textContent"],Xh={key:0},ef={key:1},tf={key:0},nf={key:1},of={key:2},rf={key:0},sf={key:1},af={key:3},uf={key:0},cf={key:1},lf={key:4},df={key:0},pf={key:1},mf={key:5},hf={key:0},ff={key:1},gf={key:6},vf={key:0},wf={key:1},bf={key:7},yf={key:8},Df=["textContent"],_f={key:9},kf=["textContent"],Cf={key:10};function Sf(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function jf(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Sf(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Sf(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Ff=function(e,t,n){return e.map((function(e){return t[n]&&t[n][e]&&t[n][e].reason?{instance:e,reason:t[n][e].reason}:{instance:e,reason:""}}))};const Af={computed:jf(jf({},(0,s.rn)({federationPolicy:function(e){return Dt()(e,"instance.federationPolicy")},mrfPolicies:function(e){return Dt()(e,"instance.federationPolicy.mrf_policies",[])},quarantineInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.quarantined_instances",[]),Dt()(e,"instance.federationPolicy.quarantined_instances_info",[]),"quarantined_instances")},acceptInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.accept",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"accept")},rejectInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.reject",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"reject")},ftlRemovalInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.federated_timeline_removal",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"federated_timeline_removal")},mediaNsfwInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.media_nsfw",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"media_nsfw")},mediaRemovalInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.media_removal",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"media_removal")},keywordsFtlRemoval:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.federated_timeline_removal",[])},keywordsReject:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.reject",[])},keywordsReplace:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.replace",[])}})),{},{hasInstanceSpecificPolicies:function(){return this.quarantineInstances.length||this.acceptInstances.length||this.rejectInstances.length||this.ftlRemovalInstances.length||this.mediaNsfwInstances.length||this.mediaRemovalInstances.length},hasKeywordPolicies:function(){return this.keywordsFtlRemoval.length||this.keywordsReject.length||this.keywordsReplace.length}})},Of={components:{InstanceSpecificPanel:Ai,FeaturesPanel:Ri,TermsOfServicePanel:$h,StaffPanel:Wh,MRFTransparencyPanel:(0,Jo.Z)(Af,[["render",function(e,t,n,o,r,i){return e.federationPolicy?((0,Co.wg)(),(0,Co.iD)("div",Hh,[(0,Co._)("div",Vh,[(0,Co._)("div",Kh,[(0,Co._)("div",Gh,(0,So.zw)(e.$t("about.mrf.federation")),1)]),(0,Co._)("div",Yh,[(0,Co._)("div",Jh,[(0,Co._)("h2",null,(0,So.zw)(e.$t("about.mrf.mrf_policies")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.mrf_policies_desc")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mrfPolicies,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,Qh)})),128))]),e.hasInstanceSpecificPolicies?((0,Co.wg)(),(0,Co.iD)("h2",Xh,(0,So.zw)(e.$t("about.mrf.simple.simple_policies")),1)):(0,Co.kq)("",!0),e.acceptInstances.length?((0,Co.wg)(),(0,Co.iD)("div",ef,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.accept")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.accept_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.acceptInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_accept"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",tf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",nf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.rejectInstances.length?((0,Co.wg)(),(0,Co.iD)("div",of,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.reject")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.reject_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.rejectInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_reject"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",rf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",sf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.quarantineInstances.length?((0,Co.wg)(),(0,Co.iD)("div",af,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.quarantine")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.quarantine_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.quarantineInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_quarantine"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",uf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",cf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.ftlRemovalInstances.length?((0,Co.wg)(),(0,Co.iD)("div",lf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.ftl_removal")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.ftl_removal_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.ftlRemovalInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_ftl_removal"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",df,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",pf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.mediaNsfwInstances.length?((0,Co.wg)(),(0,Co.iD)("div",mf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.media_nsfw")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.media_nsfw_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mediaNsfwInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_media_nsfw"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",hf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",ff,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.mediaRemovalInstances.length?((0,Co.wg)(),(0,Co.iD)("div",gf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.media_removal")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.media_removal_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mediaRemovalInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_media_removal"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",vf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",wf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.hasKeywordPolicies?((0,Co.wg)(),(0,Co.iD)("h2",bf,(0,So.zw)(e.$t("about.mrf.keyword.keyword_policies")),1)):(0,Co.kq)("",!0),e.keywordsFtlRemoval.length?((0,Co.wg)(),(0,Co.iD)("div",yf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.ftl_removal")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsFtlRemoval,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,Df)})),128))])])):(0,Co.kq)("",!0),e.keywordsReject.length?((0,Co.wg)(),(0,Co.iD)("div",_f,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.reject")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsReject,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,kf)})),128))])])):(0,Co.kq)("",!0),e.keywordsReplace.length?((0,Co.wg)(),(0,Co.iD)("div",Cf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.replace")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsReplace,(function(t){return(0,Co.wg)(),(0,Co.iD)("li",{key:t},(0,So.zw)(t.pattern)+" "+(0,So.zw)(e.$t("about.mrf.keyword.is_replaced_by"))+" "+(0,So.zw)(t.replacement),1)})),128))])])):(0,Co.kq)("",!0)])])])])):(0,Co.kq)("",!0)}]])},computed:{showFeaturesPanel:function(){return this.$store.state.instance.showFeaturesPanel},showInstanceSpecificPanel:function(){return this.$store.state.instance.showInstanceSpecificPanel&&!this.$store.getters.mergedConfig.hideISP&&this.$store.state.instance.instanceSpecificPanelContent}}},Ef=(0,Jo.Z)(Of,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("instance-specific-panel"),a=(0,Co.up)("staff-panel"),u=(0,Co.up)("terms-of-service-panel"),c=(0,Co.up)("MRFTransparencyPanel"),l=(0,Co.up)("features-panel");return(0,Co.wg)(),(0,Co.iD)("div",zh,[e.showInstanceSpecificPanel?((0,Co.wg)(),(0,Co.j4)(s,{key:0})):(0,Co.kq)("",!0),(0,Co.Wm)(a),(0,Co.Wm)(u),(0,Co.Wm)(c),e.showFeaturesPanel?((0,Co.wg)(),(0,Co.j4)(l,{key:1})):(0,Co.kq)("",!0)])}]]);var zf={class:"panel panel-default"},Pf={class:"panel-heading"},If={class:"panel-body"},xf={key:0};const Tf={data:function(){return{error:!1}},mounted:function(){this.redirect()},methods:{redirect:function(){var e=this,t=this.$route.params.username+"@"+this.$route.params.hostname;this.$store.state.api.backendInteractor.fetchUser({id:t}).then((function(t){if(t.error)e.error=!0;else{e.$store.commit("addNewUsers",[t]);var n=t.id;e.$router.replace({name:"external-user-profile",params:{id:n}})}})).catch((function(){e.error=!0}))}}},$f=(0,Jo.Z)(Tf,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",zf,[(0,Co._)("div",Pf,(0,So.zw)(e.$t("remote_user_resolver.remote_user_resolver")),1),(0,Co._)("div",If,[(0,Co._)("p",null,(0,So.zw)(e.$t("remote_user_resolver.searching_for"))+" @"+(0,So.zw)(e.$route.params.username)+"@"+(0,So.zw)(e.$route.params.hostname),1),e.error?((0,Co.wg)(),(0,Co.iD)("p",xf,(0,So.zw)(e.$t("remote_user_resolver.error")),1)):(0,Co.kq)("",!0)])])}]]);var Bf={class:"Lists panel panel-default"},Uf={class:"panel-heading"},Mf={class:"title"},Lf={class:"panel-body"},Rf={class:"list-card"};Ht.vI.add(Vt.cNd);const qf={props:["list"]},Nf={data:function(){return{isNew:!1}},components:{ListsCard:(0,Jo.Z)(qf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Rf,[(0,Co.Wm)(s,{to:{name:"lists-timeline",params:{id:e.list.id}},class:"list-name"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.list.title),1)]})),_:1},8,["to"]),(0,Co.Wm)(s,{to:{name:"lists-edit",params:{id:e.list.id}},class:"button-list-edit"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"ellipsis-h"})]})),_:1},8,["to"])])}]])},computed:{lists:function(){return this.$store.state.lists.allLists}},methods:{cancelNewList:function(){this.isNew=!1},newList:function(){this.isNew=!0}}},Zf=(0,Jo.Z)(Nf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("ListsCard");return(0,Co.wg)(),(0,Co.iD)("div",Bf,[(0,Co._)("div",Uf,[(0,Co._)("div",Mf,(0,So.zw)(e.$t("lists.lists")),1),(0,Co.Wm)(s,{to:{name:"lists-new"},class:"button-default btn new-list-button"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("lists.new")),1)]})),_:1})]),(0,Co._)("div",Lf,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.lists.slice().reverse(),(function(e){return(0,Co.wg)(),(0,Co.j4)(a,{key:e,list:e,class:"list-item"},null,8,["list"])})),128))])])}]]),Wf=Zf,Hf={data:function(){return{listId:null}},components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.list}},watch:{$route:function(e){"lists-timeline"===e.name&&e.params.id!==this.listId&&(this.listId=e.params.id,this.$store.dispatch("stopFetchingTimeline","list"),this.$store.commit("clearTimeline",{timeline:"list"}),this.$store.dispatch("fetchList",{listId:this.listId}),this.$store.dispatch("startFetchingTimeline",{timeline:"list",listId:this.listId}))}},created:function(){this.listId=this.$route.params.id,this.$store.dispatch("fetchList",{listId:this.listId}),this.$store.dispatch("startFetchingTimeline",{timeline:"list",listId:this.listId})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","list"),this.$store.commit("clearTimeline",{timeline:"list"})}},Vf=(0,Jo.Z)(Hf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:"list.name",timeline:e.timeline,"list-id":e.listId,"timeline-name":"list"},null,8,["timeline","list-id"])}]]);var Kf={class:"panel-default panel ListEdit"},Gf={ref:"header",class:"panel-heading list-edit-heading"},Yf={class:"title"},Jf={class:"panel-body"},Qf={class:"input-wrap"},Xf={for:"list-edit-title"},eg=["label"],tg={class:"users-list"},ng=["onClick"],og=["label"],rg={key:0,class:"loading"},ig={key:1,class:"users-list"},sg={key:0},ag=["onClick"],ug=["onClick"],cg={class:"panel-footer"},lg=(0,Co._)("span",{class:"spacer"},null,-1),dg={class:"ListsUserSearch"},pg={class:"input-wrap"},mg={class:"input-search"},hg=["placeholder"],fg={class:"input-wrap"};Ht.vI.add(Vt.wn1,Vt.A35);const gg={components:{Checkbox:wi.Z},emits:["loading","loadingDone","results"],data:function(){return{loading:!1,query:"",followingOnly:!0}},methods:{onInput:ra()((function(){this.search(this.query)}),2e3),search:function(e){var t=this;e?(this.loading=!0,this.$emit("loading"),this.userIds=[],this.$store.dispatch("search",{q:e,resolve:!0,type:"accounts",following:this.followingOnly}).then((function(e){t.$emit("results",e.accounts.map((function(e){return e.id})))})).finally((function(){t.loading=!1,t.$emit("loadingDone")}))):this.loading=!1}}},vg=(0,Jo.Z)(gg,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Checkbox");return(0,Co.wg)(),(0,Co.iD)("div",dg,[(0,Co._)("div",pg,[(0,Co._)("div",mg,[(0,Co.Wm)(s,{class:"search-icon fa-scale-110 fa-old-padding",icon:"search"})]),(0,Co.wy)((0,Co._)("input",{ref:"search","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.query=t}),placeholder:e.$t("lists.search"),onInput:t[1]||(t[1]=function(){return e.onInput&&e.onInput.apply(e,arguments)})},null,40,hg),[[wo.nr,e.query]])]),(0,Co._)("div",fg,[(0,Co.Wm)(a,{modelValue:e.followingOnly,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.followingOnly=t}),onChange:e.onInput},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("lists.following_only")),1)]})),_:1},8,["modelValue","onChange"])])])}]]);var wg=n(29187);function bg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function yg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bg(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bg(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.wn1,Vt.A35);var Dg={components:{BasicUserCard:ed.Z,UserAvatar:Bl.default,ListsUserSearch:vg,TabSwitcher:fl.Z,PanelLoading:wg.Z},data:function(){return{title:"",titleDraft:"",membersUserIds:[],removedUserIds:new Set([]),searchUserIds:[],addedUserIds:new Set([]),searchLoading:!1,reallyDelete:!1}},created:function(){var e=this;this.id&&(this.$store.dispatch("fetchList",{listId:this.id}).then((function(){e.title=e.findListTitle(e.id),e.titleDraft=e.title})),this.$store.dispatch("fetchListAccounts",{listId:this.id}).then((function(){e.membersUserIds=e.findListAccounts(e.id),e.membersUserIds.forEach((function(t){e.$store.dispatch("fetchUserIfMissing",t)}))})))},computed:yg(yg({id:function(){return this.$route.params.id},membersUsers:function(){var e=this;return[].concat((0,l.Z)(this.membersUserIds),(0,l.Z)(this.addedUserIds)).map((function(t){return e.findUser(t)})).filter((function(e){return e}))},searchUsers:function(){var e=this;return this.searchUserIds.map((function(t){return e.findUser(t)})).filter((function(e){return e}))}},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),(0,s.Se)(["findUser","findListTitle","findListAccounts"])),methods:{onInput:function(){this.search(this.query)},toggleRemoveMember:function(e){this.removedUserIds.has(e.id)?(this.id&&this.addUser(e),this.removedUserIds.delete(e.id)):(this.id&&this.removeUser(e.id),this.removedUserIds.add(e.id))},toggleAddFromSearch:function(e){this.addedUserIds.has(e.id)?(this.id&&this.removeUser(e.id),this.addedUserIds.delete(e.id)):(this.id&&this.addUser(e),this.addedUserIds.add(e.id))},isRemoved:function(e){return this.removedUserIds.has(e.id)},isAdded:function(e){return this.addedUserIds.has(e.id)},addUser:function(e){this.$store.dispatch("addListAccount",{accountId:e.id,listId:this.id})},removeUser:function(e){this.$store.dispatch("removeListAccount",{accountId:e,listId:this.id})},onSearchLoading:function(e){this.searchLoading=!0},onSearchLoadingDone:function(e){this.searchLoading=!1},onSearchResults:function(e){this.searchLoading=!1,this.searchUserIds=e},updateListTitle:function(){var e=this;this.$store.dispatch("setList",{listId:this.id,title:this.titleDraft}).then((function(){e.title=e.findListTitle(e.id)}))},createList:function(){var e=this;this.$store.dispatch("createList",{title:this.titleDraft}).then((function(t){return e.$store.dispatch("setListAccounts",{listId:t.id,accountIds:(0,l.Z)(e.addedUserIds)}).then((function(){return t.id}))})).then((function(t){e.$router.push({name:"lists-timeline",params:{id:t}})})).catch((function(t){e.$store.dispatch("pushGlobalNotice",{messageKey:"lists.error",messageArgs:[t.message],level:"error"})}))},deleteList:function(){this.$store.dispatch("deleteList",{listId:this.id}),this.$router.push({name:"lists"})}}};const _g=Dg,kg=(0,Jo.Z)(_g,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("i18n-t"),u=(0,Co.up)("BasicUserCard"),c=(0,Co.up)("ListsUserSearch"),l=(0,Co.up)("PanelLoading"),d=(0,Co.up)("tab-switcher");return(0,Co.wg)(),(0,Co.iD)("div",Kf,[(0,Co._)("div",Gf,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){var t;return e.$router.back&&(t=e.$router).back.apply(t,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})]),(0,Co._)("div",Yf,[e.id?((0,Co.wg)(),(0,Co.j4)(a,{key:0,keypath:"lists.editing_list"},{listTitle:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.title),1)]})),_:1})):((0,Co.wg)(),(0,Co.j4)(a,{key:1,keypath:"lists.creating_list"}))])],512),(0,Co._)("div",Jf,[(0,Co._)("div",Qf,[(0,Co._)("label",Xf,(0,So.zw)(e.$t("lists.title")),1),(0,Co.Uk)(" "+(0,So.zw)(" ")+" "),(0,Co.wy)((0,Co._)("input",{id:"list-edit-title",ref:"title","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.titleDraft=t})},null,512),[[wo.nr,e.titleDraft]]),e.id?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"btn button-default follow-button",onClick:t[2]||(t[2]=function(){return e.updateListTitle&&e.updateListTitle.apply(e,arguments)})},(0,So.zw)(e.$t("lists.update_title")),1)):(0,Co.kq)("",!0)]),(0,Co.Wm)(d,{class:"list-member-management","scrollable-tabs":!0},{default:(0,Co.w5)((function(){return[e.id||e.addedUserIds.size>0?((0,Co.wg)(),(0,Co.iD)("div",{key:0,label:e.$t("lists.manage_members"),class:"members-list"},[(0,Co._)("div",tg,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.membersUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co.Wm)(u,{user:t},{default:(0,Co.w5)((function(){return[(0,Co._)("button",{class:"btn button-default follow-button",onClick:function(n){return e.toggleRemoveMember(t)}},(0,So.zw)(e.isRemoved(t)?e.$t("general.undo"):e.$t("lists.remove_from_list")),9,ng)]})),_:2},1032,["user"])])})),128))])],8,eg)):(0,Co.kq)("",!0),(0,Co._)("div",{class:"search-list",label:e.$t("lists.add_members")},[(0,Co.Wm)(c,{onResults:e.onSearchResults,onLoading:e.onSearchLoading,onLoadingDone:e.onSearchLoadingDone},null,8,["onResults","onLoading","onLoadingDone"]),e.searchLoading?((0,Co.wg)(),(0,Co.iD)("div",rg,[(0,Co.Wm)(l)])):((0,Co.wg)(),(0,Co.iD)("div",ig,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.searchUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co.Wm)(u,{user:t},{default:(0,Co.w5)((function(){return[e.membersUserIds.includes(t.id)?((0,Co.wg)(),(0,Co.iD)("span",sg,(0,So.zw)(e.$t("lists.is_in_list")),1)):(0,Co.kq)("",!0),e.membersUserIds.includes(t.id)?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"btn button-default follow-button",onClick:function(n){return e.toggleRemoveMember(t)}},(0,So.zw)(e.isRemoved(t)?e.$t("general.undo"):e.$t("lists.remove_from_list")),9,ug)):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default follow-button",onClick:function(n){return e.toggleAddFromSearch(t)}},(0,So.zw)(e.isAdded(t)?e.$t("general.undo"):e.$t("lists.add_to_list")),9,ag))]})),_:2},1032,["user"])])})),128))]))],8,og)]})),_:1})]),(0,Co._)("div",cg,[lg,e.id?e.reallyDelete?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[(0,Co.Uk)((0,So.zw)(e.$t("lists.really_delete"))+" ",1),(0,Co._)("button",{class:"btn button-default footer-button",onClick:t[5]||(t[5]=function(){return e.deleteList&&e.deleteList.apply(e,arguments)})},(0,So.zw)(e.$t("general.yes")),1),(0,Co._)("button",{class:"btn button-default footer-button",onClick:t[6]||(t[6]=function(t){return e.reallyDelete=!1})},(0,So.zw)(e.$t("general.no")),1)],64)):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default footer-button",onClick:t[4]||(t[4]=function(t){return e.reallyDelete=!0})},(0,So.zw)(e.$t("lists.delete")),1)):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"btn button-default footer-button",onClick:t[3]||(t[3]=function(){return e.createList&&e.createList.apply(e,arguments)})},(0,So.zw)(e.$t("lists.create")),1))])])}]]);var Cg={class:"panel panel-default announcements-page"},Sg={class:"panel-heading"},jg={class:"panel-body"},Fg={key:0},Ag={class:"post-form"},Og={class:"heading"},Eg={class:"body"},zg={class:"footer"},Pg=["disabled"],Ig={key:0,class:"alert error"},xg={class:"announcement"},Tg={class:"heading"},$g={class:"body"},Bg={class:"footer"},Ug={key:0,class:"times"},Mg={key:0},Lg={key:1},Rg={key:2},qg={key:1,class:"actions"},Ng=["disabled","title"],Zg={key:2,class:"actions"},Wg={key:0,class:"alert error"},Hg={class:"announcement-editor"},Vg=["placeholder","disabled"],Kg={class:"announcement-metadata"},Gg={for:"announcement-start-time"},Yg=["type","disabled"],Jg={class:"announcement-metadata"},Qg={for:"announcement-end-time"},Xg=["type","disabled"],ev={class:"announcement-metadata"},tv={for:"announcement-all-day"};const nv={components:{Checkbox:wi.Z},props:{announcement:Object,disabled:Boolean}},ov=(0,Jo.Z)(nv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Checkbox");return(0,Co.wg)(),(0,Co.iD)("div",Hg,[(0,Co.wy)((0,Co._)("textarea",{ref:"textarea","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.announcement.content=t}),class:"post-textarea",rows:"1",cols:"1",placeholder:e.$t("announcements.post_placeholder"),disabled:e.disabled},null,8,Vg),[[wo.nr,e.announcement.content]]),(0,Co._)("span",Kg,[(0,Co._)("label",Gg,(0,So.zw)(e.$t("announcements.start_time_prompt")),1),(0,Co.wy)((0,Co._)("input",{id:"announcement-start-time","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.announcement.startsAt=t}),type:e.announcement.allDay?"date":"datetime-local",disabled:e.disabled},null,8,Yg),[[wo.YZ,e.announcement.startsAt]])]),(0,Co._)("span",Jg,[(0,Co._)("label",Qg,(0,So.zw)(e.$t("announcements.end_time_prompt")),1),(0,Co.wy)((0,Co._)("input",{id:"announcement-end-time","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.announcement.endsAt=t}),type:e.announcement.allDay?"date":"datetime-local",disabled:e.disabled},null,8,Xg),[[wo.YZ,e.announcement.endsAt]])]),(0,Co._)("span",ev,[(0,Co.Wm)(s,{id:"announcement-all-day",modelValue:e.announcement.allDay,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.announcement.allDay=t}),disabled:e.disabled},null,8,["modelValue","disabled"]),(0,Co._)("label",tv,(0,So.zw)(e.$t("announcements.all_day_prompt")),1)])])}]]);function rv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function iv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rv(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const sv={components:{AnnouncementEditor:ov,RichContent:Rl.Z},data:function(){return{editing:!1,editedAnnouncement:{content:"",startsAt:void 0,endsAt:void 0,allDay:void 0},editError:""}},props:{announcement:Object},computed:iv(iv({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{canEditAnnouncement:function(){return this.currentUser&&this.currentUser.privileges.includes("announcements_manage_announcements")},content:function(){return this.announcement.content},isRead:function(){return this.announcement.read},publishedAt:function(){var e=this.announcement.published_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},startsAt:function(){var e=this.announcement.starts_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},endsAt:function(){var e=this.announcement.ends_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},inactive:function(){return this.announcement.inactive}}),methods:{markAsRead:function(){if(!this.isRead)return this.$store.dispatch("markAnnouncementAsRead",this.announcement.id)},deleteAnnouncement:function(){return this.$store.dispatch("deleteAnnouncement",this.announcement.id)},formatTimeOrDate:function(e,t){var n=new Date(e);return this.announcement.all_day?n.toLocaleDateString(t):n.toLocaleString(t)},enterEditMode:function(){this.editedAnnouncement.content=this.announcement.pleroma.raw_content,this.editedAnnouncement.startsAt=this.announcement.starts_at,this.editedAnnouncement.endsAt=this.announcement.ends_at,this.editedAnnouncement.allDay=this.announcement.all_day,this.editing=!0},submitEdit:function(){var e=this;this.$store.dispatch("editAnnouncement",iv({id:this.announcement.id},this.editedAnnouncement)).then((function(){e.editing=!1})).catch((function(t){e.editError=t.error}))},cancelEdit:function(){this.editing=!1},clearError:function(){this.editError=void 0}}};function av(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function uv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?av(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):av(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const cv={components:{Announcement:(0,Jo.Z)(sv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("rich-content"),a=(0,Co.up)("announcement-editor"),u=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",xg,[(0,Co._)("div",Tg,[(0,Co._)("h4",null,(0,So.zw)(e.$t("announcements.title")),1)]),(0,Co._)("div",$g,[e.editing?((0,Co.wg)(),(0,Co.j4)(a,{key:1,announcement:e.editedAnnouncement},null,8,["announcement"])):((0,Co.wg)(),(0,Co.j4)(s,{key:0,html:e.content,emoji:e.announcement.emojis,"handle-links":!0},null,8,["html","emoji"]))]),(0,Co._)("div",Bg,[e.editing?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Ug,[e.publishedAt?((0,Co.wg)(),(0,Co.iD)("span",Mg,(0,So.zw)(e.$t("announcements.published_time_display",{time:e.publishedAt})),1)):(0,Co.kq)("",!0),e.startsAt?((0,Co.wg)(),(0,Co.iD)("span",Lg,(0,So.zw)(e.$t("announcements.start_time_display",{time:e.startsAt})),1)):(0,Co.kq)("",!0),e.endsAt?((0,Co.wg)(),(0,Co.iD)("span",Rg,(0,So.zw)(e.$t("announcements.end_time_display",{time:e.endsAt})),1)):(0,Co.kq)("",!0)])),e.editing?((0,Co.wg)(),(0,Co.iD)("div",Zg,[(0,Co._)("button",{class:"btn button-default",onClick:t[3]||(t[3]=function(){return e.submitEdit&&e.submitEdit.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.submit_edit_action")),1),(0,Co._)("button",{class:"btn button-default",onClick:t[4]||(t[4]=function(){return e.cancelEdit&&e.cancelEdit.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.cancel_edit_action")),1),e.editing&&e.editError?((0,Co.wg)(),(0,Co.iD)("div",Wg,[(0,Co.Uk)((0,So.zw)(e.$t("announcements.edit_error",{error:e.error}))+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[5]||(t[5]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding",icon:"times",title:e.$t("announcements.close_error")},null,8,["title"])])])):(0,Co.kq)("",!0)])):((0,Co.wg)(),(0,Co.iD)("div",qg,[e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:(0,So.C_)(["btn button-default",{toggled:e.isRead}]),disabled:e.inactive,title:e.inactive?e.$t("announcements.inactive_message"):"",onClick:t[0]||(t[0]=function(){return e.markAsRead&&e.markAsRead.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.mark_as_read_action")),11,Ng)):(0,Co.kq)("",!0),e.canEditAnnouncement?((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default",onClick:t[1]||(t[1]=function(){return e.enterEditMode&&e.enterEditMode.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.edit_action")),1)):(0,Co.kq)("",!0),e.canEditAnnouncement?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"btn button-default",onClick:t[2]||(t[2]=function(){return e.deleteAnnouncement&&e.deleteAnnouncement.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.delete_action")),1)):(0,Co.kq)("",!0)]))])])}]]),AnnouncementEditor:ov},data:function(){return{newAnnouncement:{content:"",startsAt:void 0,endsAt:void 0,allDay:!1},posting:!1,error:void 0}},mounted:function(){this.$store.dispatch("fetchAnnouncements")},computed:uv(uv({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{announcements:function(){return this.$store.state.announcements.announcements},canPostAnnouncement:function(){return this.currentUser&&this.currentUser.privileges.includes("announcements_manage_announcements")}}),methods:{postAnnouncement:function(){var e=this;this.posting=!0,this.$store.dispatch("postAnnouncement",this.newAnnouncement).then((function(){e.newAnnouncement.content="",e.startsAt=void 0,e.endsAt=void 0})).catch((function(t){e.error=t.error})).finally((function(){e.posting=!1}))},clearError:function(){this.error=void 0}}},lv=(0,Jo.Z)(cv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("announcement-editor"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("announcement");return(0,Co.wg)(),(0,Co.iD)("div",Cg,[(0,Co._)("div",Sg,[(0,Co._)("span",null,(0,So.zw)(e.$t("announcements.page_header")),1)]),(0,Co._)("div",jg,[e.canPostAnnouncement?((0,Co.wg)(),(0,Co.iD)("section",Fg,[(0,Co._)("div",Ag,[(0,Co._)("div",Og,[(0,Co._)("h4",null,(0,So.zw)(e.$t("announcements.post_form_header")),1)]),(0,Co._)("div",Eg,[(0,Co.Wm)(s,{announcement:e.newAnnouncement,disabled:e.posting},null,8,["announcement","disabled"])]),(0,Co._)("div",zg,[(0,Co._)("button",{class:"btn button-default post-button",disabled:e.posting,onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.postAnnouncement&&e.postAnnouncement.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("announcements.post_action")),9,Pg),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ig,[(0,Co.Uk)((0,So.zw)(e.$t("announcements.post_error",{error:e.error}))+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[1]||(t[1]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"times",title:e.$t("announcements.close_error")},null,8,["title"])])])):(0,Co.kq)("",!0)])])])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.announcements,(function(e){return(0,Co.wg)(),(0,Co.iD)("section",{key:e.id},[(0,Co.Wm)(u,{announcement:e},null,8,["announcement"])])})),128))])])}]]),dv=function(e){var t=function(t,n,o){e.state.users.currentUser?o():o(e.state.instance.redirectRootNoLogin||"/main/all")},n=[{name:"root",path:"/",redirect:function(t){return(e.state.users.currentUser?e.state.instance.redirectRootLogin:e.state.instance.redirectRootNoLogin)||"/main/all"}},{name:"public-external-timeline",path:"/main/all",component:Jc},{name:"public-timeline",path:"/main/public",component:Gc},{name:"friends",path:"/main/friends",component:Xc,beforeEnter:t},{name:"tag-timeline",path:"/tag/:tag",component:tl},{name:"bookmarks",path:"/bookmarks",component:ol},{name:"conversation",path:"/notice/:id",component:il,meta:{dontScroll:!0}},{name:"remote-user-profile-acct",path:"/remote-users/:_(@)?:username([^/@]+)@:hostname([^/@]+)",component:$f,beforeEnter:t},{name:"remote-user-profile",path:"/remote-users/:hostname/:username",component:$f,beforeEnter:t},{name:"external-user-profile",path:"/users/$:id",component:fp},{name:"interactions",path:"/users/:username/interactions",component:wl,beforeEnter:t},{name:"dms",path:"/users/:username/dms",component:yl,beforeEnter:t},{name:"registration",path:"/registration",component:Vm},{name:"password-reset",path:"/password-reset",component:fh,props:!0},{name:"registration-token",path:"/registration/:token",component:Vm},{name:"friend-requests",path:"/friend-requests",component:kh,beforeEnter:t},{name:"notifications",path:"/:username/notifications",component:ya.default,props:function(){return{disableTeleport:!0}},beforeEnter:t},{name:"login",path:"/login",component:Pr},{name:"shout-panel",path:"/shout-panel",component:gs,props:function(){return{floating:!1}}},{name:"oauth-callback",path:"/oauth-callback",component:Sh,props:function(e){return{code:e.query.code}}},{name:"search",path:"/search",component:Wp,props:function(e){return{query:e.query.query}}},{name:"who-to-follow",path:"/who-to-follow",component:Eh,beforeEnter:t},{name:"about",path:"/about",component:Ef},{name:"announcements",path:"/announcements",component:lv},{name:"user-profile",path:"/users/:name",component:fp},{name:"legacy-user-profile",path:"/:name",component:fp},{name:"lists",path:"/lists",component:Wf},{name:"lists-timeline",path:"/lists/:id",component:Vf},{name:"lists-edit",path:"/lists/:id/edit",component:kg},{name:"lists-new",path:"/lists/new",component:kg},{name:"edit-navigation",path:"/nav-edit",component:_i,props:function(){return{forceExpand:!0,forceEditMode:!0}},beforeEnter:t}];return e.state.instance.pleromaChatMessagesAvailable&&(n=n.concat([{name:"chat",path:"/users/:username/chats/:recipient_id",component:Ld,meta:{dontScroll:!1},beforeEnter:t},{name:"chats",path:"/users/:username/chats",component:cd,meta:{dontScroll:!1},beforeEnter:t}])),n};var pv,mv,hv=n(58509),fv=new Set([]),gv=function(e){var t=window.innerWidth-document.documentElement.clientWidth;hv.Qp(e,{reserveScrollBarGap:!0}),fv.add(e),setTimeout((function(){if(fv.size<=1){if(void 0===pv){var e=document.getElementById("nav");pv=window.getComputedStyle(e).getPropertyValue("padding-right"),e.style.paddingRight=pv?"calc(".concat(pv," + ").concat(t,"px)"):"".concat(t,"px")}if(void 0===mv){var n=document.getElementById("app_bg_wrapper");mv=window.getComputedStyle(n).getPropertyValue("right"),n.style.right=mv?"calc(".concat(mv," + ").concat(t,"px)"):"".concat(t,"px")}document.body.classList.add("scroll-locked")}}))},vv=function(e){fv.delete(e),setTimeout((function(){0===fv.size&&(void 0!==pv&&(document.getElementById("nav").style.paddingRight=pv,pv=void 0),void 0!==mv&&(document.getElementById("app_bg_wrapper").style.right=mv,mv=void 0),document.body.classList.remove("scroll-locked"))})),hv.tG(e)},wv={mounted:function(e,t){t.value&&gv(e)},updated:function(e,t){t.oldValue!==t.value&&(t.value?gv(e):vv(e))},unmounted:function(e){vv(e)}};const bv=function(e){e.directive("body-scroll-lock",wv)};var yv=n(49753);function Dv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function _v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Dv(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var kv=null,Cv=function(e){var t=atob(e),n=Uint8Array.from((0,l.Z)(t).map((function(e){return e.charCodeAt(0)})));return(new TextDecoder).decode(n)},Sv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((n=document.getElementById("initial-results")?(kv||(kv=JSON.parse(document.getElementById("initial-results").textContent)),kv):null)&&n[t]){e.next=3;break}return e.abrupt("return",window.fetch(t));case 3:return o=Cv(n[t]),r=JSON.parse(o),e.abrupt("return",{ok:!0,json:function(){return r},text:function(){return r}});case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),jv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/api/v1/instance");case 4:if(!(o=e.sent).ok){e.next=18;break}return e.next=8,o.json();case 8:r=e.sent,s=r.max_toot_chars,a=r.pleroma.vapid_public_key,n.dispatch("setInstanceOption",{name:"textlimit",value:s}),n.dispatch("setInstanceOption",{name:"accountApprovalRequired",value:r.approval_required}),n.dispatch("setInstanceOption",{name:"birthdayRequired",value:!!r.pleroma.metadata.birthday_required}),n.dispatch("setInstanceOption",{name:"birthdayMinAge",value:r.pleroma.metadata.birthday_min_age||0}),a&&n.dispatch("setInstanceOption",{name:"vapidPublicKey",value:a}),e.next=19;break;case 18:throw o;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(1),console.error("Could not load instance config, potentially fatal"),console.error(e.t0);case 25:case"end":return e.stop()}}),e,null,[[1,21]])})));return function(t){return e.apply(this,arguments)}}(),Fv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.store,e.prev=1,e.next=4,window.fetch("/api/pleroma/frontend_configurations");case 4:if(!(n=e.sent).ok){e.next=12;break}return e.next=8,n.json();case 8:return o=e.sent,e.abrupt("return",o.pleroma_fe);case 12:throw n;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.error("Could not load backend-provided frontend config, potentially fatal"),console.error(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),Av=function(){var e=(0,o.Z)(i().mark((function e(){var t;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,window.fetch("/static/config.json");case 3:if(!(t=e.sent).ok){e.next=8;break}return e.abrupt("return",t.json());case 8:throw t;case 9:e.next=16;break;case 11:return e.prev=11,e.t0=e.catch(0),console.warn("Failed to load static/config.json, continuing without it."),console.warn(e.t0),e.abrupt("return",{});case 16:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}(),Ov=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.apiConfig,o=t.staticConfig,r=t.store,s=window.___pleromafe_dev_overrides||{},a=window.___pleromafe_mode.NODE_ENV,u={},s.staticConfigPreference&&"development"===a?(console.warn("OVERRIDING API CONFIG WITH STATIC CONFIG"),u=Object.assign({},n,o)):u=Object.assign({},o,n),(c=function(e){r.dispatch("setInstanceOption",{name:e,value:u[e]})})("nsfwCensorImage"),c("background"),c("hidePostStats"),c("hideBotIndication"),c("hideUserStats"),c("hideFilteredStatuses"),c("logo"),r.dispatch("setInstanceOption",{name:"logoMask",value:void 0===u.logoMask||u.logoMask}),r.dispatch("setInstanceOption",{name:"logoMargin",value:void 0===u.logoMargin?0:u.logoMargin}),c("logoLeft"),r.commit("authFlow/setInitialStrategy",u.loginMethod),c("redirectRootNoLogin"),c("redirectRootLogin"),c("showInstanceSpecificPanel"),c("minimalScopesMode"),c("hideMutedPosts"),c("collapseMessageWithSubject"),c("scopeCopy"),c("subjectLineBehavior"),c("postContentType"),c("alwaysShowSubjectInput"),c("showFeaturesPanel"),c("hideSitename"),c("sidebarRight"),e.abrupt("return",r.dispatch("setTheme",u.theme));case 31:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Ev=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,window.fetch("/static/terms-of-service.html");case 4:if(!(o=e.sent).ok){e.next=12;break}return e.next=8,o.text();case 8:r=e.sent,n.dispatch("setInstanceOption",{name:"tos",value:r}),e.next=13;break;case 12:throw o;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.warn("Can't load TOS"),console.warn(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),zv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/instance/panel.html");case 4:if(!(o=e.sent).ok){e.next=12;break}return e.next=8,o.text();case 8:r=e.sent,n.dispatch("setInstanceOption",{name:"instanceSpecificPanelContent",value:r}),e.next=13;break;case 12:throw o;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.warn("Can't load instance panel"),console.warn(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),Pv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,window.fetch("/static/stickers.json");case 4:if(!(r=e.sent).ok){e.next=15;break}return e.next=8,r.json();case 8:return s=e.sent,e.next=11,Promise.all(Object.entries(s).map(function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=(0,c.Z)(t,2),o=n[0],r=n[1],e.next=3,window.fetch(r+"pack.json");case 3:if(s=e.sent,a={},!s.ok){e.next=9;break}return e.next=8,s.json();case 8:a=e.sent;case 9:return e.abrupt("return",{pack:o,path:r,meta:a});case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 11:a=e.sent.sort((function(e,t){return e.meta.title.localeCompare(t.meta.title)})),n.dispatch("setInstanceOption",{name:"stickers",value:a}),e.next=16;break;case 15:throw r;case 16:e.next=22;break;case 18:e.prev=18,e.t0=e.catch(1),console.warn("Can't load stickers"),console.warn(e.t0);case 22:case"end":return e.stop()}}),e,null,[[1,18]])})));return function(t){return e.apply(this,arguments)}}(),Iv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,o=n.state,r=n.commit,s=o.oauth,a=o.instance,e.abrupt("return",Le(_v(_v({},s),{},{instance:a.server,commit:r})).then((function(e){return Re(_v(_v({},e),{},{instance:a.server}))})).then((function(e){r("setAppToken",e.access_token),r("setBackendInteractor",xe(n.getters.getToken()))})));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),xv=function(e){var t=e.store,n=e.accounts.map((function(e){return e.split("/").pop()}));t.dispatch("setInstanceOption",{name:"staffAccounts",value:n})},Tv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c,l,d,p,m,h,f;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/nodeinfo/2.0.json");case 4:if(!(o=e.sent).ok){e.next=52;break}return e.next=8,o.json();case 8:r=e.sent,s=r.metadata,a=s.features,n.dispatch("setInstanceOption",{name:"name",value:s.nodeName}),n.dispatch("setInstanceOption",{name:"registrationOpen",value:r.openRegistrations}),n.dispatch("setInstanceOption",{name:"mediaProxyAvailable",value:a.includes("media_proxy")}),n.dispatch("setInstanceOption",{name:"safeDM",value:a.includes("safe_dm_mentions")}),n.dispatch("setInstanceOption",{name:"shoutAvailable",value:a.includes("chat")}),n.dispatch("setInstanceOption",{name:"pleromaChatMessagesAvailable",value:a.includes("pleroma_chat_messages")}),n.dispatch("setInstanceOption",{name:"pleromaCustomEmojiReactionsAvailable",value:a.includes("pleroma_custom_emoji_reactions")}),n.dispatch("setInstanceOption",{name:"gopherAvailable",value:a.includes("gopher")}),n.dispatch("setInstanceOption",{name:"pollsAvailable",value:a.includes("polls")}),n.dispatch("setInstanceOption",{name:"editingAvailable",value:a.includes("editing")}),n.dispatch("setInstanceOption",{name:"pollLimits",value:s.pollLimits}),n.dispatch("setInstanceOption",{name:"mailerEnabled",value:s.mailerEnabled}),n.dispatch("setInstanceOption",{name:"quotingAvailable",value:a.includes("quote_posting")}),u=s.uploadLimits,n.dispatch("setInstanceOption",{name:"uploadlimit",value:parseInt(u.general)}),n.dispatch("setInstanceOption",{name:"avatarlimit",value:parseInt(u.avatar)}),n.dispatch("setInstanceOption",{name:"backgroundlimit",value:parseInt(u.background)}),n.dispatch("setInstanceOption",{name:"bannerlimit",value:parseInt(u.banner)}),n.dispatch("setInstanceOption",{name:"fieldsLimits",value:s.fieldsLimits}),n.dispatch("setInstanceOption",{name:"restrictedNicknames",value:s.restrictedNicknames}),n.dispatch("setInstanceOption",{name:"postFormats",value:s.postFormats}),c=s.suggestions,n.dispatch("setInstanceOption",{name:"suggestionsEnabled",value:c.enabled}),n.dispatch("setInstanceOption",{name:"suggestionsWeb",value:c.web}),l=r.software,n.dispatch("setInstanceOption",{name:"backendVersion",value:l.version}),n.dispatch("setInstanceOption",{name:"pleromaBackend",value:"pleroma"===l.name}),d=s.private,n.dispatch("setInstanceOption",{name:"private",value:d}),p=window.___pleromafe_commit_hash,n.dispatch("setInstanceOption",{name:"frontendVersion",value:p}),m=s.federation,n.dispatch("setInstanceOption",{name:"tagPolicyAvailable",value:void 0!==m.mrf_policies&&s.federation.mrf_policies.includes("TagPolicy")}),n.dispatch("setInstanceOption",{name:"federationPolicy",value:m}),n.dispatch("setInstanceOption",{name:"federating",value:void 0===m.enabled||m.enabled}),h=s.accountActivationRequired,n.dispatch("setInstanceOption",{name:"accountActivationRequired",value:h}),f=s.staffAccounts,xv({store:n,accounts:f}),e.next=53;break;case 52:throw o;case 53:e.next=59;break;case 55:e.prev=55,e.t0=e.catch(1),console.warn("Could not load nodeinfo"),console.warn(e.t0);case 59:case"end":return e.stop()}}),e,null,[[1,55]])})));return function(t){return e.apply(this,arguments)}}(),$v=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.next=3,Promise.all([Fv({store:n}),Av()]);case 3:return o=e.sent,r=o[0],s=o[1],e.next=8,Ov({store:n,apiConfig:r,staticConfig:s}).then(Iv({store:n}));case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Bv=function(){var e=(0,o.Z)(i().mark((function e(t){var n;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.abrupt("return",new Promise(function(){var e=(0,o.Z)(i().mark((function e(t,o){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!n.getters.getUserToken()){e.next=9;break}return e.prev=1,e.next=4,n.dispatch("loginUser",n.getters.getUserToken());case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:t();case 10:case"end":return e.stop()}}),e,null,[[1,6]])})));return function(t,n){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();const Uv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c,l,d,h;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,o=t.i18n,n.dispatch("setLayoutWidth",Te()),n.dispatch("setLayoutHeight",$e()),yv.Z.initFaviconService(),r=window.___pleromafe_dev_overrides||{},s=void 0!==r.target?r.target:window.location.origin,n.dispatch("setInstanceOption",{name:"server",value:s}),e.next=9,$v({store:n});case 9:return a=n.state.config,u=a.customTheme,c=a.customThemeSource,l=n.state.instance.theme,c||u?c&&c.themeEngineVersion===m.we?(0,p._v)(c):(0,p._v)(u):l||console.error("Failed to load any theme!"),(0,p.mg)(n.state.config),e.next=16,Promise.all([Bv({store:n}),zv({store:n}),Tv({store:n}),jv({store:n})]);case 16:return n.dispatch("fetchMutes"),n.dispatch("startFetchingAnnouncements"),Ev({store:n}),Pv({store:n}),d=(0,bo.p7)({history:(0,bo.PO)(),routes:dv(n),scrollBehavior:function(e,t,n){return!e.matched.some((function(e){return e.meta.dontScroll}))&&(n||{left:0,top:0})}}),(h=(0,wo.ri)(Au)).use(d),h.use(n),h.use(o),h.use(Do()),h.use(bv),h.use(_o.ZP),h.component("FAIcon",ko.GN),h.component("FALayers",ko.NH),h.config.unwrapInjectedRef=!0,h.mount("#app"),e.abrupt("return",h);case 33:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();var Mv=(window.navigator.language||"en").split("-")[0],Lv=(0,so.o)({locale:"en",fallbackLocale:"en",messages:vo.Z.default});vo.Z.setLanguage(Lv.global,Mv);var Rv={paths:["serverSideStorage.cache","config","users.lastLoginName","oauth"]};(0,o.Z)(i().mark((function e(){var t,n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!1,n=[go],e.prev=2,e.next=5,fo(Rv);case 5:o=e.sent,n.push(o),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),console.error(e.t0),t=!0;case 13:r=(0,s.MT)({modules:{i18n:{getters:{i18n:function(){return Lv.global}}},interface:u,instance:k,users:st,statuses:ae,lists:le,api:vt,config:f.ZP,profileConfig:Ft,serverSideStorage:ln,adminSettings:wn,shout:bn,oauth:yn,authFlow:jn,mediaViewer:En,oauthTokens:zn,reports:Tn,polls:$n,postStatus:Bn,editStatus:Un,statusHistory:Mn,chats:ro,announcements:io},plugins:n,strict:!1}),t&&r.dispatch("pushGlobalNotice",{messageKey:"errors.storage_unavailable",level:"error"}),Uv({store:r,i18n:Lv});case 16:case"end":return e.stop()}}),e,null,[[2,9]])})))(),window.___pleromafe_mode={NODE_ENV:"production"},window.___pleromafe_commit_hash="dbf14eee4\n",window.___pleromafe_dev_overrides=void 0},85565:(e,t,n)=>{"use strict";n.d(t,{Oi:()=>f,W2:()=>h,ZP:()=>g});var o=n(4942),r=n(29439),i=n(36968),s=n.n(i),a=n(6258),u=n(77394),c=n(72617),l=n(39776);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var h={expertLevel:0,colors:{},theme:void 0,customTheme:void 0,customThemeSource:void 0,hideISP:!1,hideInstanceWallpaper:!1,hideShoutbox:!1,hideMutedPosts:void 0,hideMutedThreads:void 0,hideWordFilteredPosts:void 0,muteBotStatuses:void 0,collapseMessageWithSubject:void 0,padEmoji:!0,hideAttachments:!1,hideAttachmentsInConv:!1,maxThumbnails:16,hideNsfw:!0,preloadImage:!0,loopVideo:!0,loopVideoSilentOnly:!0,streaming:!1,emojiReactionsOnTimeline:!0,alwaysShowNewPostButton:!1,autohideFloatingPostButton:!1,pauseOnUnfocused:!0,stopGifs:!0,replyVisibility:"all",thirdColumnMode:"notifications",notificationVisibility:{follows:!0,mentions:!0,likes:!0,repeats:!0,moves:!0,emojiReactions:!0,followRequest:!0,reports:!0,chatMention:!0,polls:!0},webPushNotifications:!1,muteWords:[],highlight:{},interfaceLanguage:(window.navigator.language||"en").split("-")[0],hideScopeNotice:!1,useStreamingApi:!1,sidebarRight:void 0,scopeCopy:void 0,subjectLineBehavior:void 0,alwaysShowSubjectInput:void 0,postContentType:void 0,minimalScopesMode:void 0,hideFilteredStatuses:void 0,modalOnRepeat:void 0,modalOnUnfollow:void 0,modalOnBlock:void 0,modalOnMute:void 0,modalOnDelete:void 0,modalOnLogout:void 0,modalOnApproveFollow:void 0,modalOnDenyFollow:void 0,modalOnRemoveUserFromFollowers:void 0,playVideosInModal:!1,useOneClickNsfw:!1,useContainFit:!0,disableStickyHeaders:!1,showScrollbars:!1,userPopoverAvatarAction:"open",userPopoverOverlay:!1,sidebarColumnWidth:"25rem",contentColumnWidth:"45rem",notifsColumnWidth:"25rem",emojiReactionsScale:1,navbarColumnStretch:!1,greentext:void 0,useAtIcon:void 0,mentionLinkDisplay:void 0,mentionLinkShowTooltip:void 0,mentionLinkShowAvatar:void 0,mentionLinkFadeDomain:void 0,mentionLinkShowYous:void 0,mentionLinkBoldenYou:void 0,hidePostStats:void 0,hideBotIndication:void 0,hideUserStats:void 0,virtualScrolling:void 0,sensitiveByDefault:void 0,conversationDisplay:void 0,conversationTreeAdvanced:void 0,conversationOtherRepliesButton:void 0,conversationTreeFadeAncestors:void 0,maxDepthInThread:void 0,autocompleteSelect:void 0},f=Object.entries(h).filter((function(e){var t=(0,r.Z)(e,2);return t[0],void 0===t[1]})).map((function(e){var t=(0,r.Z)(e,2),n=t[0];return t[1],n}));const g={state:m({},h),getters:{defaultConfig:function(e,t,n,o){var r=n.instance;return m(m({},h),Object.fromEntries(f.map((function(e){return[e,r[e]]}))))},mergedConfig:function(e,t,n,o){return m(m({},o.defaultConfig),Object.fromEntries(Object.entries(e).filter((function(e){var t=(0,r.Z)(e,2);return t[0],void 0!==t[1]}))))}},mutations:{setOption:function(e,t){var n=t.name,o=t.value;s()(e,n,o)},setHighlight:function(e,t){var n=t.user,o=t.color,r=t.type,i=this.state.config.highlight[n];o||r?e.highlight[n]={color:o||i.color,type:r||i.type}:delete e.highlight[n]}},actions:{loadSettings:function(e,t){var n,o=e.dispatch,r=new Set(Object.keys(h)),i=new Set(Object.keys(t)),s=new Set,a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(i);try{for(a.s();!(n=a.n()).done;){var u=n.value;r.has(u)&&s.add(u)}}catch(e){a.e(e)}finally{a.f()}s.forEach((function(e){return o("setOption",{name:e,value:t[e]})}))},setHighlight:function(e,t){var n=e.commit;e.dispatch,n("setHighlight",{user:t.user,color:t.color,type:t.type})},setOption:function(e,t){var n=e.commit,o=e.dispatch,r=e.state,i=t.name,s=t.value;if(new Set(["useStreamingApi"]).has(i))"useStreamingApi"===i&&o(s?"enableMastoSockets":"disableMastoSockets").then((function(){n("setOption",{name:"useStreamingApi",value:s})})).catch((function(e){console.error("Failed starting MastoAPI Streaming socket",e),o("disableMastoSockets"),o("setOption",{name:"useStreamingApi",value:!1})}));else switch(n("setOption",{name:i,value:s}),i){case"theme":(0,u.bY)(s);break;case"sidebarColumnWidth":case"contentColumnWidth":case"notifsColumnWidth":case"emojiReactionsScale":(0,u.mg)(r);break;case"customTheme":case"customThemeSource":(0,u._v)(s);break;case"interfaceLanguage":c.Z.setLanguage(this.getters.i18n,s),o("loadUnicodeEmojiData",s),a.Z.set("userLanguage",l.Z.internalToBackendLocaleMulti(s));break;case"thirdColumnMode":o("setLayoutWidth",void 0)}}}}},77776:(e,t,n)=>{"use strict";n.d(t,{ro:()=>$e,_z:()=>Ue,ZP:()=>Me,pR:()=>Ie});var o=n(15861),r=n(44925),i=n(29439),s=n(4942),a=n(27361),u=n.n(a),c=n(10928),l=n.n(c),d=n(57043),p=n.n(d),m=n(35161),h=n.n(m),f=n(66073),g=n.n(f),v=n(64687),w=n.n(v),b=n(27742),y=n(71002),D=n(43144),_=n(15671),k=n(97326),C=n(60136),S=n(82963),j=n(61120),F=n(72407),A=n(93433),O=n(48403),E=n.n(O);function z(e,t,n,o){this.name="StatusCodeError",this.statusCode=e,this.message=e+" - "+(JSON&&JSON.stringify?JSON.stringify(t):t),this.error=t,this.options=n,this.response=o,Error.captureStackTrace&&Error.captureStackTrace(this)}z.prototype=Object.create(Error.prototype),z.prototype.constructor=z;var P=function(e){(0,C.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,o=(0,j.Z)(t);if(n){var r=(0,j.Z)(this).constructor;e=Reflect.construct(o,arguments,r)}else e=o.apply(this,arguments);return(0,S.Z)(this,e)});function r(e){var t,n;(0,_.Z)(this,r),t=o.call(this),Error.captureStackTrace&&Error.captureStackTrace((0,k.Z)(t));try{if("string"==typeof e&&(e=JSON.parse(e)).hasOwnProperty("error")&&(e=JSON.parse(e.error)),"object"===(0,y.Z)(e)){var s=JSON.parse(e.error);s.ap_id&&(s.username=s.ap_id,delete s.ap_id),t.message=(n=s,Object.entries(n).reduce((function(e,t){var n=(0,i.Z)(t,2),o=n[0],r=n[1].reduce((function(e,t){return e+[E()(o.replace(/_/g," ")),t].join(" ")+". "}),"");return[].concat((0,A.Z)(e),[r])}),[]))}else t.message=e}catch(n){t.message=e}return t}return(0,D.Z)(r)}((0,F.Z)(Error)),I=["nickname"],x=["id","credentials"];function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?T(Object(n),!0).forEach((function(t){(0,s.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var B="/api/pleroma/aliases",U="/api/pleroma/admin/users/tag",M=function(e,t){return"/api/pleroma/admin/users/".concat(e,"/permission_group/").concat(t)},L=function(e){return"/api/v1/notifications/".concat(e,"/dismiss")},R=function(e){return"/api/v1/statuses/".concat(e,"/favourite")},q=function(e){return"/api/v1/statuses/".concat(e,"/unfavourite")},N=function(e){return"/api/v1/statuses/".concat(e,"/reblog")},Z=function(e){return"/api/v1/statuses/".concat(e,"/unreblog")},W=function(e){return"/api/v1/statuses/".concat(e)},H="/api/v1/timelines/public",V=function(e){return"/api/v1/statuses/".concat(e)},K=function(e){return"/api/v1/accounts/".concat(e,"/statuses")},G=function(e){return"/api/v1/lists/".concat(e)},Y=function(e){return"/api/v1/timelines/list/".concat(e)},J=function(e){return"/api/v1/lists/".concat(e,"/accounts")},Q=function(e){return"/api/v1/timelines/tag/".concat(e)},X=function(e){return"/api/v1/accounts/".concat(e,"/mute")},ee=function(e){return"/api/v1/accounts/".concat(e,"/unmute")},te=function(e){return"/api/v1/pleroma/accounts/".concat(e,"/subscribe")},ne=function(e){return"/api/v1/pleroma/accounts/".concat(e,"/unsubscribe")},oe=function(e){return"/api/v1/accounts/".concat(e,"/note")},re=function(e){return"/api/v1/statuses/".concat(e,"/bookmark")},ie=function(e){return"/api/v1/statuses/".concat(e,"/unbookmark")},se="/api/v1/media",ae=function(e){return"/api/v1/statuses/".concat(e,"/favourited_by")},ue=function(e){return"/api/v1/statuses/".concat(e,"/reblogged_by")},ce="/api/v1/accounts/update_credentials",le=function(e){return"/api/v1/statuses/".concat(e,"/pin")},de=function(e){return"/api/v1/statuses/".concat(e,"/unpin")},pe=function(e){return"/api/v1/statuses/".concat(e,"/mute")},me=function(e){return"/api/v1/statuses/".concat(e,"/unmute")},he="/api/v1/domain_blocks",fe=function(e){return"/api/v1/announcements/".concat(e,"/dismiss")},ge=function(e){return"/api/v1/pleroma/statuses/".concat(e,"/reactions")},ve=function(e,t){return"/api/v1/pleroma/statuses/".concat(e,"/reactions/").concat(t)},we=function(e,t){return"/api/v1/pleroma/statuses/".concat(e,"/reactions/").concat(t)},be=function(e){return"/api/v1/pleroma/chats/".concat(e,"/messages")},ye=function(e){return"/api/v1/pleroma/chats/".concat(e,"/read")},De=function(e,t){return"/api/v1/pleroma/chats/".concat(e,"/messages/").concat(t)},_e="/api/v1/pleroma/backups",ke=function(e){return"/api/v1/pleroma/admin/announcements/".concat(e)},Ce=function(e){return"/api/v1/pleroma/admin/announcements/".concat(e)},Se="/api/pleroma/admin/config",je=window.fetch,Fe=function(e,t){var n=""+e;return(t=t||{}).credentials="same-origin",je(n,t)},Ae=function(e){var t=e.method,n=e.url,o=e.params,r=e.payload,s=e.credentials,a=e.headers,u={method:t,headers:$({Accept:"application/json","Content-Type":"application/json"},void 0===a?{}:a)};return o&&(n+="?"+Object.entries(o).map((function(e){var t=(0,i.Z)(e,2),n=t[0],o=t[1];return encodeURIComponent(n)+"="+encodeURIComponent(o)})).join("&")),r&&(u.body=JSON.stringify(r)),s&&(u.headers=$($({},u.headers),Oe(s))),Fe(n,u).then((function(e){return new Promise((function(t,o){return e.json().then((function(r){return e.ok?t(r):o(new z(e.status,r,{url:n,options:u},e))})).catch((function(t){return o(new z(e.status,t,{url:n,options:u},e))}))}))}))},Oe=function(e){return e?{Authorization:"Bearer ".concat(e)}:{}},Ee=function(e){var t=e.id,n=e.credentials,o="".concat("/api/v1/accounts","/").concat(t);return Ae({url:o,credentials:n}).then((function(e){return(0,b.nL)(e)}))},ze=function(e){var t=e.id,n=e.maxId,o=e.sinceId,r=e.limit,i=void 0===r?20:r,s=e.credentials,a=function(e){return"/api/v1/accounts/".concat(e,"/following")}(t),u=[n&&"max_id=".concat(n),o&&"since_id=".concat(o),i&&"limit=".concat(i),"with_relationships=true"].filter((function(e){return e})).join("&");return Fe(a+=u?"?"+u:"",{headers:Oe(s)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},Pe=function(e){var t=e.content,n=e.startsAt,o=e.endsAt,r=e.allDay,i={content:t};return void 0!==n&&(i.starts_at=n?new Date(n).toISOString():null),void 0!==o&&(i.ends_at=o?new Date(o).toISOString():null),void 0!==r&&(i.all_day=r),i},Ie=function(e){var t=e.credentials,n=e.stream,o=e.args,r=void 0===o?{}:o;return Object.entries($($({},t?{access_token:t}:{}),{},{stream:n},r)).reduce((function(e,t){var n=(0,i.Z)(t,2),o=n[0],r=n[1];return e+"".concat(o,"=").concat(r,"&")}),"/api/v1/streaming?")},xe=new Set(["update","notification","delete","filters_changed","status.update"]),Te=new Set(["pleroma:chat_update"]),$e=function(e){var t=e.url,n=e.preprocessor,o=void 0===n?Be:n,r=e.id,i=void 0===r?"Unknown":r,s=new EventTarget,a=new WebSocket(t);if(!a)throw new Error("Failed to create socket ".concat(i));var u=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e};e.addEventListener(t,(function(e){s.dispatchEvent(new CustomEvent(t,{detail:n(e)}))}))};return a.addEventListener("open",(function(e){console.debug("[WS][".concat(i,"] Socket connected"),e)})),a.addEventListener("error",(function(e){console.debug("[WS][".concat(i,"] Socket errored"),e)})),a.addEventListener("close",(function(e){console.debug("[WS][".concat(i,"] Socket disconnected with code ").concat(e.code),e)})),u(a,"open"),u(a,"close"),u(a,"message",o),u(a,"error"),s.close=function(){a.close(1e3,"Shutting down socket")},s.getState=function(){return a.readyState},s},Be=function(e){var t=e.data;if(t){var n=JSON.parse(t),o=n.event,r=n.payload;if(!xe.has(o)&&!Te.has(o))return console.warn("Unknown event",e),null;if("delete"===o)return{event:o,id:r};var i=r?JSON.parse(r):null;return"update"===o||"status.update"===o?{event:o,status:(0,b.Wn)(i)}:"notification"===o?{event:o,notification:(0,b.eM)(i)}:"pleroma:chat_update"===o?{event:o,chatUpdate:(0,b._J)(i)}:void 0}},Ue=Object.freeze({JOINED:1,CLOSED:2,ERROR:3,DISABLED:4,STARTING:5,STARTING_INITIAL:6});const Me={verifyCredentials:function(e){return Fe("/api/v1/accounts/verify_credentials",{headers:Oe(e)}).then((function(e){return e.ok?e.json():{error:e}})).then((function(e){return e.error?e:(0,b.nL)(e)}))},fetchTimeline:function(e){var t=e.timeline,n=e.credentials,r=e.since,i=void 0!==r&&r,s=e.until,a=void 0!==s&&s,u=e.userId,c=void 0!==u&&u,l=e.listId,d=void 0!==l&&l,p=e.tag,m=void 0!==p&&p,f=e.withMuted,g=void 0!==f&&f,v=e.replyVisibility,y=void 0===v?"all":v,D=e.includeTypes,_=void 0===D?[]:D,k="notifications"===t,C=[],S={public:H,friends:"/api/v1/timelines/home",dms:"/api/v1/timelines/direct",notifications:"/api/v1/notifications",publicAndExternal:H,user:K,media:K,list:Y,favorites:"/api/v1/favourites",tag:Q,bookmarks:"/api/v1/bookmarks"}[t];"user"!==t&&"media"!==t||(S=S(c)),"list"===t&&(S=S(d)),i&&C.push(["since_id",i]),a&&C.push(["max_id",a]),m&&(S=S(m)),"media"===t&&C.push(["only_media",1]),"public"===t&&C.push(["local",!0]),"public"!==t&&"publicAndExternal"!==t||C.push(["only_media",!1]),"favorites"!==t&&"bookmarks"!==t&&C.push(["with_muted",g]),"all"!==y&&C.push(["reply_visibility",y]),_.length>0&&_.forEach((function(e){C.push(["include_types[]",e])})),C.push(["limit",20]);var j=h()(C,(function(e){return"".concat(e[0],"=").concat(e[1])})).join("&");return S+="?".concat(j),Fe(S,{headers:Oe(n)}).then(function(){var e=(0,o.Z)(w().mark((function e(n){var o,r,i;return w().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=n.ok,e.next=3,n.json();case 3:if(r=e.sent,!o||r.errors){e.next=9;break}return i=(0,b.Nw)(n.headers.get("Link"),{flakeId:"bookmarks"!==t&&"notifications"!==t}),e.abrupt("return",{data:r.map(k?b.eM:b.Wn),pagination:i});case 9:return r.errors||(r.errors=[]),r.status=n.status,r.statusText=n.statusText,e.abrupt("return",r);case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())},fetchPinnedStatuses:function(e){var t=e.id,n=e.credentials,o=K(t)+"?pinned=true";return Ae({url:o,credentials:n}).then((function(e){return e.map(b.Wn)}))},fetchConversation:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/statuses/".concat(e,"/context")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching timeline",e)})).then((function(e){return e.json()})).then((function(e){var t=e.ancestors,n=e.descendants;return{ancestors:t.map(b.Wn),descendants:n.map(b.Wn)}}))},fetchStatus:function(e){var t=e.id,n=e.credentials,o=V(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching timeline",e)})).then((function(e){return e.json()})).then((function(e){return(0,b.Wn)(e)}))},fetchStatusSource:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/statuses/".concat(e,"/source")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching source",e)})).then((function(e){return e.json()})).then((function(e){return(0,b.P7)(e)}))},fetchStatusHistory:function(e){var t,n=e.status,o=e.credentials,r=(t=n.id,"/api/v1/statuses/".concat(t,"/history"));return Ae({url:r,credentials:o}).then((function(e){return e.reverse(),e.map((function(e){return e.originalStatus=n,(0,b.Wn)(e)}))}))},fetchFriends:ze,exportFriends:function(e){var t=e.id,n=e.credentials;return new Promise(function(){var e=(0,o.Z)(w().mark((function e(o,r){var i,s,a,u;return w().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:e.prev=0,i=[],s=!0;case 3:if(!s){e.next=12;break}return a=i.length>0?l()(i).id:void 0,e.next=7,ze({id:t,maxId:a,credentials:n});case 7:u=e.sent,i=p()(i,u),0===u.length&&(s=!1),e.next=3;break;case 12:o(i),e.next=18;break;case 15:e.prev=15,e.t0=e.catch(0),r(e.t0);case 18:case"end":return e.stop()}}),e,null,[[0,15]])})));return function(t,n){return e.apply(this,arguments)}}())},fetchFollowers:function(e){var t=e.id,n=e.maxId,o=e.sinceId,r=e.limit,i=void 0===r?20:r,s=e.credentials,a=function(e){return"/api/v1/accounts/".concat(e,"/followers")}(t),u=[n&&"max_id=".concat(n),o&&"since_id=".concat(o),i&&"limit=".concat(i),"with_relationships=true"].filter((function(e){return e})).join("&");return Fe(a+=u?"?"+u:"",{headers:Oe(s)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},followUser:function(e){var t=e.id,n=e.credentials,o=(0,r.Z)(e,x),i=function(e){return"/api/v1/accounts/".concat(e,"/follow")}(t),s={};return void 0!==o.reblogs&&(s.reblogs=o.reblogs),Fe(i,{body:JSON.stringify(s),headers:$($({},Oe(n)),{},{"Content-Type":"application/json"}),method:"POST"}).then((function(e){return e.json()}))},unfollowUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/accounts/".concat(e,"/unfollow")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},pinOwnStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:le(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},unpinOwnStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:de(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},muteConversation:function(e){var t=e.id,n=e.credentials;return Ae({url:pe(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},unmuteConversation:function(e){var t=e.id,n=e.credentials;return Ae({url:me(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},blockUser:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/block")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},unblockUser:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/unblock")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},removeUserFromFollowers:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/remove_from_followers")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},editUserNote:function(e){var t=e.id,n=e.credentials,o=e.comment;return Ae({url:oe(t),credentials:n,payload:{comment:o},method:"POST"})},fetchUser:Ee,fetchUserByName:function(e){var t=e.name,n=e.credentials;return Ae({url:"/api/v1/accounts/lookup",credentials:n,params:{acct:t}}).then((function(e){return e.id})).catch((function(e){if(e&&404===e.statusCode)return t;throw e})).then((function(e){return Ee({id:e,credentials:n})}))},fetchUserRelationship:function(e){var t=e.id,n=e.credentials,o="".concat("/api/v1/accounts/relationships","/?id=").concat(t);return Fe(o,{headers:Oe(n)}).then((function(e){return new Promise((function(t,n){return e.json().then((function(r){return e.ok?t(r):n(new z(e.status,r,{url:o},e))}))}))}))},favorite:function(e){var t=e.id,n=e.credentials;return Ae({url:R(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},unfavorite:function(e){var t=e.id,n=e.credentials;return Ae({url:q(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},retweet:function(e){var t=e.id,n=e.credentials;return Ae({url:N(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},unretweet:function(e){var t=e.id,n=e.credentials;return Ae({url:Z(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},bookmarkStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:re(t),headers:Oe(n),method:"POST"})},unbookmarkStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:ie(t),headers:Oe(n),method:"POST"})},postStatus:function(e){var t=e.credentials,n=e.status,o=e.spoilerText,r=e.visibility,i=e.sensitive,s=e.poll,a=e.mediaIds,u=void 0===a?[]:a,c=e.inReplyToStatusId,l=e.quoteId,d=e.contentType,p=e.preview,m=e.idempotencyKey,h=new FormData,f=s.options||[];if(h.append("status",n),h.append("source","Pleroma FE"),o&&h.append("spoiler_text",o),r&&h.append("visibility",r),i&&h.append("sensitive",i),d&&h.append("content_type",d),u.forEach((function(e){h.append("media_ids[]",e)})),f.some((function(e){return""!==e}))){var g={expires_in:parseInt(s.expiresIn,10),multiple:s.multiple};Object.keys(g).forEach((function(e){h.append("poll[".concat(e,"]"),g[e])})),f.forEach((function(e){h.append("poll[options][]",e)}))}c&&h.append("in_reply_to_id",c),l&&h.append("quote_id",l),p&&h.append("preview","true");var v=Oe(t);return m&&(v["idempotency-key"]=m),Fe("/api/v1/statuses",{body:h,method:"POST",headers:v}).then((function(e){return e.json()})).then((function(e){return e.error?e:(0,b.Wn)(e)}))},editStatus:function(e){var t=e.id,n=e.credentials,o=e.status,r=e.spoilerText,i=e.sensitive,s=e.poll,a=e.mediaIds,u=void 0===a?[]:a,c=e.contentType,l=new FormData,d=s.options||[];if(l.append("status",o),r&&l.append("spoiler_text",r),i&&l.append("sensitive",i),c&&l.append("content_type",c),u.forEach((function(e){l.append("media_ids[]",e)})),d.some((function(e){return""!==e}))){var p={expires_in:parseInt(s.expiresIn,10),multiple:s.multiple};Object.keys(p).forEach((function(e){l.append("poll[".concat(e,"]"),p[e])})),d.forEach((function(e){l.append("poll[options][]",e)}))}var m=Oe(n);return Fe(V(t),{body:l,method:"PUT",headers:m}).then((function(e){return e.json()})).then((function(e){return e.error?e:(0,b.Wn)(e)}))},deleteStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:W(t),credentials:n,method:"DELETE"})},uploadMedia:function(e){var t=e.formData,n=e.credentials;return Fe(se,{body:t,method:"POST",headers:Oe(n)}).then((function(e){return e.json()})).then((function(e){return(0,b.cO)(e)}))},setMediaDescription:function(e){var t=e.id,n=e.description,o=e.credentials;return Ae({url:"".concat(se,"/").concat(t),method:"PUT",headers:Oe(o),payload:{description:n}}).then((function(e){return(0,b.cO)(e)}))},fetchMutes:function(e){var t=e.maxId,n=e.credentials,o=new URLSearchParams({with_relationships:!0});return t&&o.append("max_id",t),Ae({url:"".concat("/api/v1/mutes/","?").concat(o.toString()),credentials:n}).then((function(e){return e.map(b.nL)}))},muteUser:function(e){var t=e.id,n=e.expiresIn,o=e.credentials,r={};return n&&(r.expires_in=n),Ae({url:X(t),credentials:o,method:"POST",payload:r})},unmuteUser:function(e){var t=e.id,n=e.credentials;return Ae({url:ee(t),credentials:n,method:"POST"})},subscribeUser:function(e){var t=e.id,n=e.credentials;return Ae({url:te(t),credentials:n,method:"POST"})},unsubscribeUser:function(e){var t=e.id,n=e.credentials;return Ae({url:ne(t),credentials:n,method:"POST"})},fetchBlocks:function(e){var t=e.maxId,n=e.credentials,o=new URLSearchParams({with_relationships:!0});return t&&o.append("max_id",t),Ae({url:"".concat("/api/v1/blocks/","?").concat(o.toString()),credentials:n}).then((function(e){return e.map(b.nL)}))},fetchOAuthTokens:function(e){var t=e.credentials;return Fe("/api/oauth_tokens.json",{headers:Oe(t)}).then((function(e){if(e.ok)return e.json();throw new Error("Error fetching auth tokens",e)}))},revokeOAuthToken:function(e){var t=e.id,n=e.credentials,o="/api/oauth_tokens/".concat(t);return Fe(o,{headers:Oe(n),method:"DELETE"})},tagUser:function(e){var t=e.tag,n=e.credentials,o={nicknames:[e.user.screen_name],tags:[t]},r=Oe(n);return r["Content-Type"]="application/json",Fe(U,{method:"PUT",headers:r,body:JSON.stringify(o)})},untagUser:function(e){var t=e.tag,n=e.credentials,o={nicknames:[e.user.screen_name],tags:[t]},r=Oe(n);return r["Content-Type"]="application/json",Fe(U,{method:"DELETE",headers:r,body:JSON.stringify(o)})},deleteUser:function(e){var t=e.credentials,n=e.user.screen_name,o=Oe(t);return Fe("".concat("/api/pleroma/admin/users","?nickname=").concat(n),{method:"DELETE",headers:o})},addRight:function(e){var t=e.right,n=e.credentials,o=e.user.screen_name;return Fe(M(o,t),{method:"POST",headers:Oe(n),body:{}})},deleteRight:function(e){var t=e.right,n=e.credentials,o=e.user.screen_name;return Fe(M(o,t),{method:"DELETE",headers:Oe(n),body:{}})},activateUser:function(e){var t=e.credentials,n=e.user.screen_name;return Ae({url:"/api/pleroma/admin/users/activate",method:"PATCH",credentials:t,payload:{nicknames:[n]}}).then((function(e){return u()(e,"users.0")}))},deactivateUser:function(e){var t=e.credentials,n=e.user.screen_name;return Ae({url:"/api/pleroma/admin/users/deactivate",method:"PATCH",credentials:t,payload:{nicknames:[n]}}).then((function(e){return u()(e,"users.0")}))},register:function(e){var t=e.params,n=e.credentials,o=t.nickname,i=(0,r.Z)(t,I);return Fe("/api/v1/accounts",{method:"POST",headers:$($({},Oe(n)),{},{"Content-Type":"application/json"}),body:JSON.stringify($({nickname:o,locale:"en_US",agreement:!0},i))}).then((function(e){return e.ok?e.json():e.json().then((function(e){throw new P(e)}))}))},getCaptcha:function(){return Fe("/api/pleroma/captcha").then((function(e){return e.json()}))},updateProfileImages:function(e){var t=e.credentials,n=e.avatar,o=void 0===n?null:n,r=e.avatarName,i=void 0===r?null:r,s=e.banner,a=void 0===s?null:s,u=e.background,c=void 0===u?null:u,l=new FormData;return null!==o&&(null!==i?l.append("avatar",o,i):l.append("avatar",o)),null!==a&&l.append("header",a),null!==c&&l.append("pleroma_background_image",c),Fe(ce,{headers:Oe(t),method:"PATCH",body:l}).then((function(e){return e.json()})).then((function(e){if(e.error)throw new Error(e.error);return(0,b.nL)(e)}))},updateProfile:function(e){var t=e.credentials,n=e.params;return Ae({url:ce,method:"PATCH",payload:n,credentials:t}).then((function(e){return(0,b.nL)(e)}))},importMutes:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/mutes_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},importBlocks:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/blocks_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},importFollows:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/follow_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},deleteAccount:function(e){var t=e.credentials,n=e.password,o=new FormData;return o.append("password",n),Fe("/api/pleroma/delete_account",{body:o,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},changeEmail:function(e){var t=e.credentials,n=e.email,o=e.password,r=new FormData;return r.append("email",n),r.append("password",o),Fe("/api/pleroma/change_email",{body:r,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},moveAccount:function(e){var t=e.credentials,n=e.password,o=e.targetAccount,r=new FormData;return r.append("password",n),r.append("target_account",o),Fe("/api/pleroma/move_account",{body:r,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},addAlias:function(e){var t=e.credentials,n=e.alias;return Ae({url:B,method:"PUT",credentials:t,payload:{alias:n}})},deleteAlias:function(e){var t=e.credentials,n=e.alias;return Ae({url:B,method:"DELETE",credentials:t,payload:{alias:n}})},listAliases:function(e){var t=e.credentials;return Ae({url:B,method:"GET",credentials:t,params:{_cacheBooster:(new Date).getTime()}})},changePassword:function(e){var t=e.credentials,n=e.password,o=e.newPassword,r=e.newPasswordConfirmation,i=new FormData;return i.append("password",n),i.append("new_password",o),i.append("new_password_confirmation",r),Fe("/api/pleroma/change_password",{body:i,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},settingsMFA:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaDisableOTP:function(e){var t=e.credentials,n=e.password,o=new FormData;return o.append("password",n),Fe("/api/pleroma/accounts/mfa/totp",{body:o,method:"DELETE",headers:Oe(t)}).then((function(e){return e.json()}))},generateMfaBackupCodes:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa/backup_codes",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaSetupOTP:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa/setup/totp",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaConfirmOTP:function(e){var t=e.credentials,n=e.password,o=e.token,r=new FormData;return r.append("password",n),r.append("code",o),Fe("/api/pleroma/accounts/mfa/confirm/totp",{body:r,headers:Oe(t),method:"POST"}).then((function(e){return e.json()}))},addBackup:function(e){var t=e.credentials;return Ae({url:_e,method:"POST",credentials:t})},listBackups:function(e){var t=e.credentials;return Ae({url:_e,method:"GET",credentials:t,params:{_cacheBooster:(new Date).getTime()}})},fetchFollowRequests:function(e){var t=e.credentials;return Fe("/api/v1/follow_requests",{headers:Oe(t)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},fetchLists:function(e){var t=e.credentials;return Fe("/api/v1/lists",{headers:Oe(t)}).then((function(e){return e.json()}))},createList:function(e){var t=e.title,n=e.credentials,o=Oe(n);return o["Content-Type"]="application/json",Fe("/api/v1/lists",{headers:o,method:"POST",body:JSON.stringify({title:t})}).then((function(e){return e.json()}))},getList:function(e){var t=e.listId,n=e.credentials,o=G(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()}))},updateList:function(e){var t=e.listId,n=e.title,o=e.credentials,r=G(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"PUT",body:JSON.stringify({title:n})})},getListAccounts:function(e){var t=e.listId,n=e.credentials,o=J(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()})).then((function(e){return e.map((function(e){return e.id}))}))},addAccountsToList:function(e){var t=e.listId,n=e.accountIds,o=e.credentials,r=J(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"POST",body:JSON.stringify({account_ids:n})})},removeAccountsFromList:function(e){var t=e.listId,n=e.accountIds,o=e.credentials,r=J(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"DELETE",body:JSON.stringify({account_ids:n})})},deleteList:function(e){var t=e.listId,n=e.credentials,o=G(t);return Fe(o,{method:"DELETE",headers:Oe(n)})},approveUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/follow_requests/".concat(e,"/authorize")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},denyUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/follow_requests/".concat(e,"/reject")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},suggestions:function(e){var t=e.credentials;return Fe("/api/v1/suggestions",{headers:Oe(t)}).then((function(e){return e.json()}))},markNotificationsAsSeen:function(e){var t=e.id,n=e.credentials,o=e.single,r=void 0!==o&&o,i=new FormData;return r?i.append("id",t):i.append("max_id",t),Fe("/api/v1/pleroma/notifications/read",{body:i,headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},dismissNotification:function(e){var t=e.credentials,n=e.id;return Ae({url:L(n),method:"POST",payload:{id:n},credentials:t})},vote:function(e){var t,n=e.pollId,o=e.choices,r=e.credentials;return(new FormData).append("choices",o),Ae({url:(t=encodeURIComponent(n),"/api/v1/polls/".concat(t,"/votes")),method:"POST",credentials:r,payload:{choices:o}})},fetchPoll:function(e){var t,n=e.pollId,o=e.credentials;return Ae({url:(t=encodeURIComponent(n),"/api/v1/polls/".concat(t)),method:"GET",credentials:o})},fetchFavoritedByUsers:function(e){var t=e.id,n=e.credentials;return Ae({url:ae(t),method:"GET",credentials:n}).then((function(e){return e.map(b.nL)}))},fetchRebloggedByUsers:function(e){var t=e.id,n=e.credentials;return Ae({url:ue(t),method:"GET",credentials:n}).then((function(e){return e.map(b.nL)}))},fetchEmojiReactions:function(e){var t=e.id,n=e.credentials;return Ae({url:ge(t),credentials:n}).then((function(e){return e.map((function(e){return e.accounts=e.accounts.map(b.nL),e}))}))},reactWithEmoji:function(e){var t=e.id,n=e.emoji,o=e.credentials;return Ae({url:ve(t,n),method:"PUT",credentials:o}).then(b.Wn)},unreactWithEmoji:function(e){var t=e.id,n=e.emoji,o=e.credentials;return Ae({url:we(t,n),method:"DELETE",credentials:o}).then(b.Wn)},reportUser:function(e){var t=e.credentials,n=e.userId,o=e.statusIds,r=e.comment,i=e.forward;return Ae({url:"/api/v1/reports",method:"POST",payload:{account_id:n,status_ids:o,comment:r,forward:i},credentials:t})},updateNotificationSettings:function(e){var t=e.credentials,n=e.settings,o=new FormData;return g()(n,(function(e,t){o.append(t,e)})),Fe("".concat("/api/pleroma/notification_settings","?").concat(new URLSearchParams(n)),{headers:Oe(t),method:"PUT",body:o}).then((function(e){return e.json()}))},search2:function(e){var t=e.credentials,n=e.q,o=e.resolve,r=e.limit,i=e.offset,s=e.following,a=e.type,u="/api/v2/search",c=[];n&&c.push(["q",encodeURIComponent(n)]),o&&c.push(["resolve",o]),r&&c.push(["limit",r]),i&&c.push(["offset",i]),s&&c.push(["following",!0]),a&&c.push(["following",a]),c.push(["with_relationships",!0]);var l=h()(c,(function(e){return"".concat(e[0],"=").concat(e[1])})).join("&");return u+="?".concat(l),Fe(u,{headers:Oe(t)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching search result",e)})).then((function(e){return e.json()})).then((function(e){return e.accounts=e.accounts.slice(0,r).map((function(e){return(0,b.nL)(e)})),e.statuses=e.statuses.slice(0,r).map((function(e){return(0,b.Wn)(e)})),e}))},searchUsers:function(e){var t=e.credentials,n=e.query;return Ae({url:"/api/v1/accounts/search",params:{q:n,resolve:!0},credentials:t}).then((function(e){return e.map(b.nL)}))},fetchKnownDomains:function(e){var t=e.credentials;return Ae({url:"/api/v1/instance/peers",credentials:t})},fetchDomainMutes:function(e){var t=e.credentials;return Ae({url:he,credentials:t})},muteDomain:function(e){var t=e.domain,n=e.credentials;return Ae({url:he,method:"POST",payload:{domain:t},credentials:n})},unmuteDomain:function(e){var t=e.domain,n=e.credentials;return Ae({url:he,method:"DELETE",payload:{domain:t},credentials:n})},chats:function(e){var t=e.credentials;return Fe("/api/v1/pleroma/chats",{headers:Oe(t)}).then((function(e){return e.json()})).then((function(e){return{chats:e.map(b._J).filter((function(e){return e}))}}))},getOrCreateChat:function(e){var t,n=e.accountId,o=e.credentials;return Ae({url:(t=n,"/api/v1/pleroma/chats/by-account-id/".concat(t)),method:"POST",credentials:o})},chatMessages:function(e){var t=e.id,n=e.credentials,o=e.maxId,r=e.sinceId,i=e.limit,s=void 0===i?20:i,a=be(t),u=[o&&"max_id=".concat(o),r&&"since_id=".concat(r),s&&"limit=".concat(s)].filter((function(e){return e})).join("&");return Ae({url:a+=u?"?"+u:"",method:"GET",credentials:n})},sendChatMessage:function(e){var t=e.id,n=e.content,o=e.mediaId,r=void 0===o?null:o,i=e.idempotencyKey,s=e.credentials,a={content:n};r&&(a.media_id=r);var u={};return i&&(u["idempotency-key"]=i),Ae({url:be(t),method:"POST",payload:a,credentials:s,headers:u})},readChat:function(e){var t=e.id,n=e.lastReadId,o=e.credentials;return Ae({url:ye(t),method:"POST",payload:{last_read_id:n},credentials:o})},deleteChatMessage:function(e){var t=e.chatId,n=e.messageId,o=e.credentials;return Ae({url:De(t,n),method:"DELETE",credentials:o})},setReportState:function(e){var t=e.id,n=e.state,o=e.credentials;return Fe("/api/pleroma/admin/reports",{headers:$($({},Oe(o)),{},{Accept:"application/json","Content-Type":"application/json"}),method:"PATCH",body:JSON.stringify({reports:[{id:t,state:n}]})}).then((function(e){if(e.status>=500)throw Error(e.statusText);return e.status>=400?e.json():e})).then((function(e){if(e.errors)throw Error(e.errors[0].message)}))},fetchUserInLists:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/accounts/".concat(e,"/lists")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()}))},fetchAnnouncements:function(e){var t=e.credentials;return Ae({url:"/api/v1/announcements",credentials:t})},dismissAnnouncement:function(e){var t=e.id,n=e.credentials;return Ae({url:fe(t),credentials:n,method:"POST"})},postAnnouncement:function(e){var t=e.credentials,n=e.content,o=e.startsAt,r=e.endsAt,i=e.allDay;return Ae({url:"/api/v1/pleroma/admin/announcements",credentials:t,method:"POST",payload:Pe({content:n,startsAt:o,endsAt:r,allDay:i})})},editAnnouncement:function(e){var t=e.id,n=e.credentials,o=e.content,r=e.startsAt,i=e.endsAt,s=e.allDay;return Ae({url:ke(t),credentials:n,method:"PATCH",payload:Pe({content:o,startsAt:r,endsAt:i,allDay:s})})},deleteAnnouncement:function(e){var t=e.id,n=e.credentials;return Ae({url:Ce(t),credentials:n,method:"DELETE"})},adminFetchAnnouncements:function(e){var t=e.credentials;return Ae({url:"/api/v1/pleroma/admin/announcements",credentials:t})},fetchInstanceDBConfig:function(e){var t=e.credentials;return Fe(Se,{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},fetchInstanceConfigDescriptions:function(e){var t=e.credentials;return Fe("/api/pleroma/admin/config/descriptions",{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},fetchAvailableFrontends:function(e){var t=e.credentials;return Fe("/api/pleroma/admin/frontends",{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},pushInstanceDBConfig:function(e){var t=e.credentials,n=e.payload;return Fe(Se,{headers:$({Accept:"application/json","Content-Type":"application/json"},Oe(t)),method:"POST",body:JSON.stringify(n)}).then((function(e){return e.ok?e.json():{error:e}}))},installFrontend:function(e){var t=e.credentials,n=e.payload;return Fe("/api/pleroma/admin/frontends/install",{headers:$({Accept:"application/json","Content-Type":"application/json"},Oe(t)),method:"POST",body:JSON.stringify(n)}).then((function(e){return e.ok?e.json():{error:e}}))}}},37230:(e,t,n)=>{"use strict";n.d(t,{X:()=>i});var o=n(21804),r=n.n(o),i=function(e){return Object.keys(e).reduce((function(t,n){return t[r()(n)]=e[n],t}),{})}},21865:(e,t,n)=>{"use strict";n.d(t,{CO:()=>c,Rx:()=>h,Tj:()=>m,_I:()=>v,a4:()=>g,aj:()=>p,ov:()=>l,pP:()=>b,uu:()=>w,wK:()=>f});var o=n(4942),r=n(29439),i=n(71002),s=n(97332);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var c=function(e,t,n){if(null!=e){if("#"===e[0]||"transparent"===e)return e;if("object"===(0,i.Z)(e)){var o=e;e=o.r,t=o.g,n=o.b}var s=[e,t,n].map((function(e){return(e=(e=Math.ceil(e))<0?0:e)>255?255:e})),a=(0,r.Z)(s,3);return e=a[0],t=a[1],n=a[2],"#".concat(((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1))}},l=function(e){var t=function(e){return"rgb".split("").reduce((function(t,n){return t[n]=function(e){var t=e/255;return t<.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}(e[n]),t}),{})}(e);return.2126*t.r+.7152*t.g+.0722*t.b},d=function(e,t){var n=l(e),o=l(t),i=n>o?[n,o]:[o,n],s=(0,r.Z)(i,2);return(s[0]+.05)/(s[1]+.05)},p=function(e,t,n){return d(h(n,t),e)},m=function(e,t,n){return 1===t||void 0===t?e:"rgb".split("").reduce((function(o,r){return o[r]=e[r]*t+n[r]*(1-t),o}),{})},h=function(e,t){return t.reduce((function(e,t){var n=(0,r.Z)(t,2),o=n[0],i=n[1];return m(o,i,e)}),e)},f=function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},g=function(e,t){return"rgb".split("").reduce((function(n,o){return n[o]=(e[o]+t[o])/2,n}),{})},v=function(e){return"rgba(".concat(Math.floor(e.r),", ").concat(Math.floor(e.g),", ").concat(Math.floor(e.b),", ").concat(e.a,")")},w=function(e,t,n){if(d(e,t)<4.5){var o=void 0!==t.a?{a:t.a}:{},r=Object.assign(o,(0,s.Xp)(t).rgb);return!n&&d(e,r)<4.5?(0,s.wo)(e,t).rgb:r}return t},b=function(e,t){var n={};if("object"===(0,i.Z)(e))n=e;else if("string"==typeof e){if(!e.startsWith("#"))return e;n=f(e)}return v(u(u({},n),{},{a:t}))}},13562:(e,t,n)=>{"use strict";n.d(t,{g:()=>i});var o=n(23560),r=n.n(o),i=function(e){return function(e){return r()(e)?e.options:e}(e).props}},27483:(e,t,n)=>{"use strict";n.d(t,{GV:()=>l,_F:()=>d,cC:()=>p,dX:()=>m,x4:()=>s});var o=1e3,r=6e4,i=36e5,s=24*i,a=7*s,u=30*s,c=365.25*s,l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;"string"==typeof e&&(e=Date.parse(e));var n=Date.now()>e?Math.floor:Math.ceil,l=Math.abs(Date.now()-e),d={num:n(l/c),key:"time.unit.years"};return l<t*o?(d.num=0,d.key="time.now"):l<r?(d.num=n(l/o),d.key="time.unit.seconds"):l<i?(d.num=n(l/r),d.key="time.unit.minutes"):l<s?(d.num=n(l/i),d.key="time.unit.hours"):l<a?(d.num=n(l/s),d.key="time.unit.days"):l<u?(d.num=n(l/a),d.key="time.unit.weeks"):l<c&&(d.num=n(l/u),d.key="time.unit.months"),d},d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=l(e,t);return n.key+="_short",n},p=function(e,t){switch(e){case"minutes":return.001*t*r;case"hours":return.001*t*i;case"days":return.001*t*s}},m=function(e,t){switch(e){case"minutes":return 1e3*t/r;case"hours":return 1e3*t/i;case"days":return 1e3*t/s}}},64689:(e,t,n)=>{"use strict";n.d(t,{w:()=>o});var o=function(e,t){if("Notification"in window&&"granted"===window.Notification.permission&&!e.statuses.notifications.desktopNotificationSilence){var n=new window.Notification(t.title,t);setTimeout(n.close.bind(n),5e3)}}},27742:(e,t,n)=>{"use strict";n.d(t,{Nw:()=>w,P7:()=>h,UB:()=>y,Wn:()=>f,_J:()=>b,cO:()=>m,eM:()=>g,nL:()=>p});var o=n(4942),r=n(95573),i=n.n(r),s=n(28490),a=n.n(s),u=n(52230),c=n(35748);function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var p=function(e){var t={},n=Object.prototype.hasOwnProperty.call(e,"acct"),o=n&&!Object.prototype.hasOwnProperty.call(e,"avatar");if(t.inLists=null,t.id=String(e.id),t._original=e,n){if(t.screen_name=e.acct,t.fqn=e.fqn,t.statusnet_profile_url=e.url,o)return t;if(t.emoji=e.emojis,t.name=i()(e.display_name),t.name_html=t.name,t.name_unescaped=e.display_name,t.description=e.note,t.description_html=e.note,t.fields=e.fields,t.fields_html=e.fields.map((function(e){return{name:i()(e.name),value:e.value}})),t.fields_text=e.fields.map((function(e){return{name:unescape(e.name.replace(/<[^>]*>/g,"")),value:unescape(e.value.replace(/<[^>]*>/g,""))}})),t.profile_image_url=e.avatar,t.profile_image_url_original=e.avatar,t.cover_photo=e.header,t.friends_count=e.following_count,t.bot=e.bot,e.pleroma){e.pleroma.settings_store&&(t.storage=e.pleroma.settings_store["pleroma-fe"]);var r=e.pleroma.relationship;t.background_image=e.pleroma.background_image,t.favicon=e.pleroma.favicon,t.token=e.pleroma.chat_token,r&&(t.relationship=r),t.allow_following_move=e.pleroma.allow_following_move,t.hide_follows=e.pleroma.hide_follows,t.hide_followers=e.pleroma.hide_followers,t.hide_follows_count=e.pleroma.hide_follows_count,t.hide_followers_count=e.pleroma.hide_followers_count,t.rights={moderator:e.pleroma.is_moderator,admin:e.pleroma.is_admin},t.rights.admin?t.role="admin":t.rights.moderator?t.role="moderator":t.role="member",t.birthday=e.pleroma.birthday,e.pleroma.privileges?t.privileges=e.pleroma.privileges:e.pleroma.is_admin?t.privileges=["users_read","users_manage_invites","users_manage_activation_state","users_manage_tags","users_manage_credentials","users_delete","messages_read","messages_delete","instances_delete","reports_manage_reports","moderation_log_read","announcements_manage_announcements","emoji_manage_emoji","statistics_read"]:e.pleroma.is_moderator?t.privileges=["messages_delete","reports_manage_reports"]:t.privileges=[]}e.source&&(t.description=e.source.note,t.default_scope=e.source.privacy,t.fields=e.source.fields,e.source.pleroma&&(t.no_rich_text=e.source.pleroma.no_rich_text,t.show_role=e.source.pleroma.show_role,t.discoverable=e.source.pleroma.discoverable,t.show_birthday=e.pleroma.show_birthday)),t.is_local=!t.screen_name.includes("@")}else t.screen_name=e.screen_name,t.name=e.name,t.name_html=e.name_html,t.description=e.description,t.description_html=e.description_html,t.profile_image_url=e.profile_image_url,t.profile_image_url_original=e.profile_image_url_original,t.cover_photo=e.cover_photo,t.friends_count=e.friends_count,t.statusnet_profile_url=e.statusnet_profile_url,t.is_local=e.is_local,t.role=e.role,t.show_role=e.show_role,e.rights&&(t.rights={moderator:e.rights.delete_others_notice,admin:e.rights.admin}),t.no_rich_text=e.no_rich_text,t.default_scope=e.default_scope,t.hide_follows=e.hide_follows,t.hide_followers=e.hide_followers,t.hide_follows_count=e.hide_follows_count,t.hide_followers_count=e.hide_followers_count,t.background_image=e.background_image,t.token=e.token,t.relationship={muting:e.muted,blocking:e.statusnet_blocking,followed_by:e.follows_you,following:e.following};if(t.created_at=new Date(e.created_at),t.locked=e.locked,t.followers_count=e.followers_count,t.statuses_count=e.statuses_count,e.pleroma&&(t.follow_request_count=e.pleroma.follow_request_count,t.tags=e.pleroma.tags,t.deactivated=void 0!==e.pleroma.is_active?!e.pleroma.is_active:e.pleroma.deactivated,t.notification_settings=e.pleroma.notification_settings,t.unread_chat_count=e.pleroma.unread_chat_count),t.tags=t.tags||[],t.rights=t.rights||{},t.notification_settings=t.notification_settings||{},t.screen_name_ui=t.screen_name,t.screen_name&&t.screen_name.includes("@")){var s=t.screen_name.split("@"),a=c.ZP.toUnicode(s[1]);a!==s[1]?(t.screen_name_ui_contains_non_ascii=!0,t.screen_name_ui=[s[0],a].join("@")):t.screen_name_ui_contains_non_ascii=!1}return t},m=function(e){var t={};return Object.prototype.hasOwnProperty.call(e,"oembed")?t.mimetype=e.mimetype:(t.mimetype=e.pleroma?e.pleroma.mime_type:e.type,t.meta=e.meta,t.id=e.id),t.url=e.url,t.large_thumb_url=e.preview_url,t.description=e.description,t},h=function(e){var t={};return t.text=e.text,t.spoiler_text=e.spoiler_text,t.content_type=e.content_type,t},f=function e(t){var n={},o=Object.prototype.hasOwnProperty.call(t,"account");if(o){if(n.favorited=t.favourited,n.fave_num=t.favourites_count,n.repeated=t.reblogged,n.repeat_num=t.reblogs_count,n.bookmarked=t.bookmarked,n.type=t.reblog?"retweet":"status",n.nsfw=t.sensitive,n.raw_html=t.content,n.emojis=t.emojis,n.tags=t.tags,n.edited_at=t.edited_at,t.pleroma){var r=t.pleroma;n.text=r.content?t.pleroma.content["text/plain"]:t.content,n.summary=r.spoiler_text?t.pleroma.spoiler_text["text/plain"]:t.spoiler_text,n.statusnet_conversation_id=t.pleroma.conversation_id,n.is_local=r.local,n.in_reply_to_screen_name=t.pleroma.in_reply_to_account_acct,n.thread_muted=r.thread_muted,n.emoji_reactions=r.emoji_reactions,n.parent_visible=void 0===r.parent_visible||r.parent_visible,n.quote=r.quote?e(r.quote):void 0,n.quote_id=r.quote_id?r.quote_id:n.quote?n.quote.id:void 0,n.quote_url=r.quote_url,n.quote_visible=r.quote_visible}else n.text=t.content,n.summary=t.spoiler_text;n.in_reply_to_status_id=t.in_reply_to_id,n.in_reply_to_user_id=t.in_reply_to_account_id,n.replies_count=t.replies_count,"retweet"===n.type&&(n.retweeted_status=e(t.reblog)),n.summary_raw_html=i()(t.spoiler_text),n.external_url=t.url,n.poll=t.poll,n.poll&&(n.poll.options=(n.poll.options||[]).map((function(e){return d(d({},e),{},{title_html:i()(e.title)})}))),n.pinned=t.pinned,n.muted=t.muted}else n.favorited=t.favorited,n.fave_num=t.fave_num,n.repeated=t.repeated,n.repeat_num=t.repeat_num,n.type=function(e){return e.is_post_verb?"status":e.retweeted_status?"retweet":"string"==typeof e.uri&&e.uri.match(/(fave|objectType=Favourite)/)||"string"==typeof e.text&&e.text.match(/favorited/)?"favorite":e.text.match(/deleted notice {{tag/)||e.qvitter_delete_notice?"deletion":e.text.match(/started following/)||"follow"===e.activity_type?"follow":"unknown"}(t),void 0===t.nsfw?(n.nsfw=v(t),t.retweeted_status&&(n.nsfw=t.retweeted_status.nsfw)):n.nsfw=t.nsfw,n.raw_html=t.statusnet_html,n.text=t.text,n.in_reply_to_status_id=t.in_reply_to_status_id,n.in_reply_to_user_id=t.in_reply_to_user_id,n.in_reply_to_screen_name=t.in_reply_to_screen_name,n.statusnet_conversation_id=t.statusnet_conversation_id,"retweet"===n.type&&(n.retweeted_status=e(t.retweeted_status)),n.summary=t.summary,n.summary_html=t.summary_html,n.external_url=t.external_url,n.is_local=t.is_local;n.id=String(t.id),n.visibility=t.visibility,n.card=t.card,n.created_at=new Date(t.created_at),n.in_reply_to_status_id=n.in_reply_to_status_id?String(n.in_reply_to_status_id):null,n.in_reply_to_user_id=n.in_reply_to_user_id?String(n.in_reply_to_user_id):null,n.user=p(o?t.account:t.user),n.attentions=((o?t.mentions:t.attentions)||[]).map(p),n.attachments=((o?t.media_attachments:t.attachments)||[]).map(m);var s=o?t.reblog:t.retweeted_status;return s&&(n.retweeted_status=e(s)),n.favoritedBy=[],n.rebloggedBy=[],Object.prototype.hasOwnProperty.call(t,"originalStatus")&&Object.assign(n,t.originalStatus),n},g=function(e){var t={};if(Object.prototype.hasOwnProperty.call(e,"ntype")){var n=f(e.notice);t.type=e.ntype,t.seen=Boolean(e.is_seen),t.status="like"===t.type?f(e.notice.favorited_status):n,t.action=n,t.from_profile="pleroma:chat_mention"===t.type?p(e.account):p(e.from_profile)}else t.type={favourite:"like",reblog:"repeat"}[e.type]||e.type,t.seen=e.pleroma.is_seen,t.status=(0,u.Gr)(t.type)?f(e.status):null,t.action=t.status,t.target="move"!==t.type?null:p(e.target),t.from_profile=p(e.account),t.emoji=e.emoji,t.emoji_url=e.emoji_url,e.report&&(t.report=e.report,t.report.content=e.report.content,t.report.acct=p(e.report.account),t.report.actor=p(e.report.actor),t.report.statuses=e.report.statuses.map(f));return t.created_at=new Date(e.created_at),t.id=parseInt(e.id),t},v=function(e){return(e.tags||[]).includes("nsfw")||!!(e.text||"").match(/#nsfw/i)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.flakeId,o=a()(e);if(o){var r=o.next.max_id,i=o.prev.min_id;return{maxId:n?r:parseInt(r,10),minId:n?i:parseInt(i,10)}}},b=function(e){var t={};return t.id=e.id,t.account=p(e.account),t.unread=e.unread,t.lastMessage=y(e.last_message),t.updated_at=new Date(e.updated_at),t},y=function(e){if(e){if(e.isNormalized)return e;var t=e;return t.id=e.id,t.created_at=new Date(e.created_at),t.chat_id=e.chat_id,t.emojis=e.emojis,t.content=e.content,e.attachment?t.attachments=[m(e.attachment)]:t.attachments=[],t.pending=!!e.pending,t.error=!1,t.idempotency_key=e.idempotency_key,t.isNormalized=!0,t}}},49753:(e,t,n)=>{"use strict";var o,r,i,s,a;n.d(t,{Z:()=>u});const u=(o=[],r=128,i=128,s=function(e){return e.complete&&0!==e.naturalHeight},{initFaviconService:function(){document.querySelectorAll('link[rel="icon"]').forEach((function(e){if(e){var t=document.createElement("canvas");t.width=r,t.height=i;var n=new Image;n.crossOrigin="anonymous",n.src=e.href;var s=t.getContext("2d");o.push({favcanvas:t,favimg:n,favcontext:s,favicon:e})}}))},clearFaviconBadge:a=function(){0!==o.length&&o.forEach((function(e){var t=e.favimg,n=e.favcanvas,o=e.favcontext,a=e.favicon;t&&o&&a&&(o.clearRect(0,0,r,i),s(t)&&o.drawImage(t,0,0,t.width,t.height,0,0,r,i),a.href=n.toDataURL("image/png"))}))},drawFaviconBadge:function(){0!==o.length&&(a(),o.forEach((function(e){var t=e.favimg,n=e.favcanvas,o=e.favcontext,a=e.favicon;if(t&&o&&o){var u=getComputedStyle(document.body),c="".concat(u.getPropertyValue("--badgeNotification")||"rgb(240, 100, 100)");s(t)&&o.drawImage(t,0,0,t.width,t.height,0,0,r,i),o.fillStyle=c,o.beginPath(),o.arc(96,32,32,0,2*Math.PI,!1),o.fill(),a.href=n.toDataURL("image/png")}})))}})},65079:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o={fileSizeFormat:function(e){var t=["B","KiB","MiB","GiB","TiB"],n=e;if(n<1)return n+" "+t[0];var o=Math.min(Math.floor(Math.log(n)/Math.log(1024)),t.length-1);return{num:n=1*(n/Math.pow(1024,o)).toFixed(2),unit:t[o]}}}},58394:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>i,iL:()=>r});var o=function(e){return e.match(/flash/)?"flash":e.match(/text\/html/)?"html":e.match(/image/)?"image":e.match(/video/)?"video":e.match(/audio/)?"audio":"unknown"},r=function(e){return e.match(/\.(png|jpe?g|gif|webp|avif)$/)?"image":e.match(/\.(ogv|mp4|webm|mov)$/)?"video":e.match(/\.(it|s3m|mod|umx|mp3|aac|m4a|flac|alac|ogg|oga|opus|wav|ape|midi?)$/)?"audio":"unknown"};const i={fileType:o,fileTypeExt:r,fileMatchesSomeType:function(e,t){return e.some((function(e){return o(t.mimetype)===e}))}}},39776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(35161),r=n.n(o),i=n(72617),s=n(2900),a={ja_easy:"ja",zh_Hant:"zh-HANT",zh:"zh-Hans"},u=function(e){return a[e]||e},c=function(e){return u(e).replace("_","-")},l=function(e){var t={ja_easy:"やさしいにほんご","nan-TW":"臺語(閩南語)",zh:"简体中文",zh_Hant:"繁體中文"}[e]||s.Z.getNativeName(e),n=u(e);return t.charAt(0).toLocaleUpperCase(n)+t.slice(1)},d=r()(i.Z.languages,(function(e){return{code:e,name:l(e)}})).sort((function(e,t){return e.name.localeCompare(t.name)}));const p={internalToBrowserLocale:u,internalToBackendLocale:c,internalToBackendLocaleMulti:function(e){return(Array.isArray(e)?e:[e]).map(c).join(",")},languages:d,getLanguageName:l}},52230:(e,t,n)=>{"use strict";n.d(t,{Bt:()=>d,G2:()=>w,Gr:()=>h,Km:()=>b,nJ:()=>v,nU:()=>f});var o=n(64721),r=n.n(o),i=n(89734),s=n.n(i),a=n(63105),u=n.n(a),c=n(67828),l=n(64689),d=function(e){return e.state.statuses.notifications.data},p=function(e){var t=e.rootState||e.state;return[t.config.notificationVisibility.likes&&"like",t.config.notificationVisibility.mentions&&"mention",t.config.notificationVisibility.repeats&&"repeat",t.config.notificationVisibility.follows&&"follow",t.config.notificationVisibility.followRequest&&"follow_request",t.config.notificationVisibility.moves&&"move",t.config.notificationVisibility.emojiReactions&&"pleroma:emoji_reaction",t.config.notificationVisibility.reports&&"pleroma:report",t.config.notificationVisibility.polls&&"poll"].filter((function(e){return e}))},m=["like","mention","repeat","pleroma:emoji_reaction","poll"],h=function(e){return r()(m,e)},f=function(e){return!(h(e.type)&&!e.status)},g=function(e,t){var n=Number(e.id),o=Number(t.id),r=!Number.isNaN(n),i=!Number.isNaN(o);return r&&i?n>o?-1:1:r&&!i?1:!r&&i||e.id>t.id?-1:1},v=function(e,t){var n=e.rootState||e.state;if(!t.seen&&p(e).includes(t.type)&&("mention"!==t.type||!function(e,t){if(t.status)return t.status.muted||(0,c.u)(t.status,e.rootGetters.mergedConfig.muteWords).length>0}(e,t))){var o=y(t,e.rootGetters.i18n);(0,l.w)(n,o)}},w=function(e,t){var n=d(e).map((function(e){return e})).sort(g);return(n=s()(n,"seen")).filter((function(n){return(t||p(e)).includes(n.type)}))},b=function(e){return u()(w(e),(function(e){return!e.seen}))},y=function(e,t){var n,o={tag:e.id},r=e.status,i=e.from_profile.name;switch(o.title=i,o.icon=e.from_profile.profile_image_url,e.type){case"like":n="favorited_you";break;case"repeat":n="repeated_you";break;case"follow":n="followed_you";break;case"move":n="migrated_to";break;case"follow_request":n="follow_request";break;case"pleroma:report":n="submitted_report";break;case"poll":n="poll_ended"}return"pleroma:emoji_reaction"===e.type?o.body=t.t("notifications.reacted_with",[e.emoji]):n?o.body=t.t("notifications."+n):h(e.type)&&(o.body=e.status.text),r&&r.attachments&&r.attachments.length>0&&!r.nsfw&&r.attachments[0].mimetype.startsWith("image/")&&(o.image=r.attachments[0].url),o}},15568:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(93433),r=n(77776),i=n(22626),s=["mention","favourite","reblog","follow","move","pleroma:emoji_reaction","pleroma:report"],a=function(e){var t=e.store,n=e.credentials,r=e.older,i=void 0!==r&&r,a=e.since,c={credentials:n},l=t.getters,d=(t.rootState||t.state).statuses.notifications,p=l.mergedConfig.hideMutedPosts;if(c.includeTypes=s,c.withMuted=!p,c.timeline="notifications",i)return d.minId!==Number.POSITIVE_INFINITY&&(c.until=d.minId),u({store:t,args:c,older:i});void 0===a&&d.maxId!==Number.POSITIVE_INFINITY?c.since=d.maxId:null!==a&&(c.since=a);var m=u({store:t,args:c,older:i}),h=d.data,f=h.filter((function(e){return e.seen})).map((function(e){return e.id}));return h.length-f.length>0&&f.length>0&&(c.since=Math.max.apply(Math,(0,o.Z)(f)),u({store:t,args:c,older:i})),m},u=function(e){var t=e.store,n=e.args,o=e.older;return r.ZP.fetchTimeline(n).then((function(e){if(e.errors)throw new Error("".concat(e.status," ").concat(e.statusText));var n=e.data;return function(e){var t=e.notifications,n=e.older;e.store.dispatch("addNewNotifications",{notifications:t,older:n})}({store:t,notifications:n,older:o}),n})).catch((function(e){t.dispatch("pushGlobalNotice",{level:"error",messageKey:"notifications.error",messageArgs:[e.message],timeout:5e3}),console.error(e)}))};const c={fetchAndUpdate:a,startFetching:function(e){var t=e.credentials,n=e.store;setTimeout((function(){return n.dispatch("setNotificationsSilence",!1)}),1e4);var o=function(){return a({credentials:t,store:n})};return o(),(0,i.F)(o,1e4)}}},67952:(e,t,n)=>{"use strict";n.d(t,{y:()=>o});var o=function e(t,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=o.top,s=void 0===i?0:i,a=o.left,u=void 0===a?0:a,c=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],l={top:s+t.offsetTop,left:u+t.offsetLeft};if(!c&&t!==window){var d=r(t),p=d.topPadding,m=d.leftPadding;l.top+=c?0:p,l.left+=c?0:m}if(t.offsetParent&&"sticky"!==window.getComputedStyle(t.offsetParent).position&&(n===window||n.contains(t.offsetParent)||n===t.offsetParent))return e(t.offsetParent,n,l,!1);if(n!==window){var h=r(n),f=h.topPadding,g=h.leftPadding;l.top+=f,l.left+=g}return l},r=function(e){var t=window.getComputedStyle(e)["padding-top"],n=Number(t.substring(0,t.length-2)),o=window.getComputedStyle(e)["padding-left"];return{topPadding:n,leftPadding:Number(o.substring(0,o.length-2))}}},22626:(e,t,n)=>{"use strict";n.d(t,{F:()=>o});var o=function(e,t){var n=!1,o=null;return o=window.setTimeout((function r(){var i=e();i&&i.finally?i.finally((function(){n||(o=window.setTimeout(r,t))})):console.warn("promiseInterval: promise call did not return a promise, stopping interval.")}),t),{stop:function(){n=!0,window.clearTimeout(o)}}}},67828:(e,t,n)=>{"use strict";n.d(t,{u:()=>i});var o=n(63105),r=n.n(o),i=function(e,t){var n=e.text.toLowerCase(),o=e.summary.toLowerCase();return r()(t,(function(e){return n.includes(e.toLowerCase())||o.includes(e.toLowerCase())}))}},7257:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(35161),r=n.n(o),i=n(77776);const s={postStatus:function(e){var t=e.store,n=e.status,o=e.spoilerText,s=e.visibility,a=e.sensitive,u=e.poll,c=e.media,l=void 0===c?[]:c,d=e.inReplyToStatusId,p=void 0===d?void 0:d,m=e.quoteId,h=void 0===m?void 0:m,f=e.contentType,g=void 0===f?"text/plain":f,v=e.preview,w=void 0!==v&&v,b=e.idempotencyKey,y=void 0===b?"":b,D=r()(l,"id");return i.ZP.postStatus({credentials:t.state.users.currentUser.credentials,status:n,spoilerText:o,visibility:s,sensitive:a,mediaIds:D,inReplyToStatusId:p,quoteId:h,contentType:g,poll:u,preview:w,idempotencyKey:y}).then((function(e){return e.error||w||t.dispatch("addNewStatuses",{statuses:[e],timeline:"friends",showImmediately:!0,noIdUpdate:!0}),e})).catch((function(e){return{error:e.message}}))},editStatus:function(e){var t=e.store,n=e.statusId,o=e.status,s=e.spoilerText,a=e.sensitive,u=e.poll,c=e.media,l=void 0===c?[]:c,d=e.contentType,p=void 0===d?"text/plain":d,m=r()(l,"id");return i.ZP.editStatus({id:n,credentials:t.state.users.currentUser.credentials,status:o,spoilerText:s,sensitive:a,poll:u,mediaIds:m,contentType:p}).then((function(e){return e.error||t.dispatch("addNewStatuses",{statuses:[e],timeline:"friends",showImmediately:!0,noIdUpdate:!0}),e})).catch((function(e){return console.error("Error editing status",e),{error:e.message}}))},uploadMedia:function(e){var t=e.store,n=e.formData,o=t.state.users.currentUser.credentials;return i.ZP.uploadMedia({credentials:o,formData:n})},setMediaDescription:function(e){var t=e.store,n=e.id,o=e.description,r=t.state.users.currentUser.credentials;return i.ZP.setMediaDescription({credentials:r,id:n,description:o})}}},77394:(e,t,n)=>{"use strict";n.d(t,{H2:()=>F,I3:()=>I,LP:()=>b,Ot:()=>v,RC:()=>E,_v:()=>m,bY:()=>x,dE:()=>z,gm:()=>A,l9:()=>P,lD:()=>y,m:()=>D,mg:()=>g,vp:()=>j});var o=n(71002),r=n(93433),i=n(4942),s=n(29439),a=n(97332),u=n(21865),c=n(40454),l=n(85565);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,i.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m=function(e){var t=O(e).rules,n=document.head,o=document.body;o.classList.add("hidden");var r=document.createElement("style");n.appendChild(r);var i=r.sheet;i.toString(),i.insertRule(":root { ".concat(t.radii," }"),"index-max"),i.insertRule(":root { ".concat(t.colors," }"),"index-max"),i.insertRule(":root { ".concat(t.shadows," }"),"index-max"),i.insertRule(":root { ".concat(t.fonts," }"),"index-max"),o.classList.remove("hidden")},h=function(e){return{sidebarColumnWidth:e.sidebarColumnWidth,contentColumnWidth:e.contentColumnWidth,notifsColumnWidth:e.notifsColumnWidth,emojiReactionsScale:e.emojiReactionsScale}},f=h(l.W2),g=function(e){var t=h(e);if(t!==f){var n=document.head,o=document.body;o.classList.add("hidden");var r=Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,": ").concat(o)})).join(";"),i=document.createElement("style");n.appendChild(i);var a=i.sheet;a.toString(),a.insertRule(":root { ".concat(r," }"),"index-max"),o.classList.remove("hidden")}},v=function(e,t){return 0===e.length?"none":e.filter((function(e){return t?e.inset:e})).map((function(e){return[e.x,e.y,e.blur,e.spread].map((function(e){return e+"px"})).concat([(0,u.pP)(e.color,e.alpha),e.inset?"inset":""]).join(" ")})).join(", ")},w=function(e){return 0===e.length?"none":e.filter((function(e){return!e.inset&&0===Number(e.spread)})).map((function(e){return[e.x,e.y,e.blur/2].map((function(e){return e+"px"})).concat([(0,u.pP)(e.color,e.alpha)]).join(" ")})).map((function(e){return"drop-shadow(".concat(e,")")})).join(" ")},b=function(e){var t=e.themeEngineVersion?e.colors||e:z(e.colors||e),n=(0,c.EC)(t,e.opacity||{}),o=n.colors,r=n.opacity,i=Object.entries(o).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return r?(e.solid[o]=(0,u.CO)(r),e.complete[o]=void 0===r.a?(0,u.CO)(r):(0,u._I)(r),e):e}),{complete:{},solid:{}});return{rules:{colors:Object.entries(i.complete).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,": ").concat(o)})).join(";")},theme:{colors:i.solid,opacity:r}}},y=function(e){var t=e.radii||{};void 0!==e.btnRadius&&(t=Object.entries(e).filter((function(e){var t=(0,s.Z)(e,2),n=t[0];return t[1],n.endsWith("Radius")})).reduce((function(e,t){return e[t[0].split("Radius")[0]]=t[1],e}),{}));var n=Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),{btn:4,input:4,checkbox:2,panel:10,avatar:5,avatarAlt:50,tooltip:2,attachment:5,chatMessage:t.panel});return{rules:{radii:Object.entries(n).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,"Radius: ").concat(o,"px")})).join(";")},theme:{radii:n}}},D=function(e){var t=Object.entries(e.fonts||{}).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=Object.entries(r).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),e[o]),e}),{interface:{family:"sans-serif"},input:{family:"inherit"},post:{family:"inherit"},postCode:{family:"monospace"}});return{rules:{fonts:Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,"Font: ").concat(o.family)})).join(";")},theme:{fonts:t}}},_=function(e,t){return{x:0,y:e?1:-1,blur:0,spread:0,color:t?"#000000":"#FFFFFF",alpha:.2,inset:!0}},k=[_(!0,!1),_(!1,!0)],C=[_(!0,!0),_(!1,!1)],S={x:0,y:0,blur:4,spread:0,color:"--faint",alpha:1},j={panel:[{x:1,y:1,blur:4,spread:0,color:"#000000",alpha:.6}],topBar:[{x:0,y:0,blur:4,spread:0,color:"#000000",alpha:.6}],popup:[{x:2,y:2,blur:3,spread:0,color:"#000000",alpha:.5}],avatar:[{x:0,y:1,blur:8,spread:0,color:"#000000",alpha:.7}],avatarStatus:[],panelHeader:[],button:[{x:0,y:0,blur:2,spread:0,color:"#000000",alpha:1}].concat(k),buttonHover:[S].concat(k),buttonPressed:[S].concat(C),input:[].concat(C,[{x:0,y:0,blur:2,inset:!0,spread:0,color:"#000000",alpha:1}])},F=function(e,t){var n={button:"btn",panel:"bg",top:"topBar",popup:"popover",avatar:"bg",panelHeader:"panel",input:"input"},o=Object.fromEntries(Object.entries(e.shadows||{}).map((function(e){var t=(0,s.Z)(e,2);return[t[0],t[1].map((function(e){return p({color:"#000000"},e)}))]}))),l=o&&!e.themeEngineVersion?P(o,e.opacity):o||{},d=Object.entries(p(p({},j),l)).reduce((function(e,o){var l=(0,s.Z)(o,2),d=l[0],m=l[1],h=d.replace(/[A-Z].*$/,""),f=n[h],g=(0,u.ov)((0,a.OQ)(t[f]).rgb)<.5?1:-1,v=m.reduce((function(e,n){return[].concat((0,r.Z)(e),[p(p({},n),{},{color:(0,u.CO)((0,c.NI)(n.color,(function(e){return(0,a.OQ)(t[e]).rgb}),g))})])}),[]);return p(p({},e),{},(0,i.Z)({},d,v))}),{});return{rules:{shadows:Object.entries(d).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return["--".concat(n,"Shadow: ").concat(v(o)),"--".concat(n,"ShadowFilter: ").concat(w(o)),"--".concat(n,"ShadowInset: ").concat(v(o,!0))].join(";")})).join(";")},theme:{shadows:d}}},A=function(e,t,n,o){return{rules:p(p(p(p({},n.rules),e.rules),t.rules),o.rules),theme:p(p(p(p({},n.theme),e.theme),t.theme),o.theme)}},O=function(e){var t=b(e);return A(t,y(e),F(e,t.theme.colors,t.mod),D(e))},E=function(){var e="no-store";return window.fetch("/static/styles.json",{cache:e}).then((function(e){return e.json()})).then((function(t){return Object.entries(t).map((function(t){var n=(0,s.Z)(t,2),r=n[0],i=n[1],a=null;return"object"===(0,o.Z)(i)?a=Promise.resolve(i):"string"==typeof i&&(a=window.fetch(i,{cache:e}).then((function(e){return e.json()})).catch((function(e){return console.error(e),null}))),[r,a]}))})).then((function(e){return e.reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),{})}))},z=function(e){return Object.entries(e).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];switch(o){case"lightBg":return p(p({},e),{},{highlight:r});case"btnText":return p(p({},e),["","Panel","TopBar"].reduce((function(e,t){return p(p({},e),{},(0,i.Z)({},"btn"+t+"Text",r))}),{}));default:return p(p({},e),{},(0,i.Z)({},o,r))}}),{})},P=function(e,t){return Object.entries(e).reduce((function(e,n){var o=(0,s.Z)(n,2),a=o[0],u=o[1].reduce((function(e,n){return[].concat((0,r.Z)(e),[p(p({},n),{},{alpha:(s=n,a=s.color,(void 0===a?"#000000":a).startsWith("--")?(o=n,i=o.color,t[(0,c.AV)(i.substring(2).split(",")[0])]||1):n.alpha)})]);var o,i,s,a}),[]);return p(p({},e),{},(0,i.Z)({},a,u))}),{})},I=function(e){return E().then((function(t){return t[e]?t[e]:t["pleroma-dark"]})).then((function(e){var t=Array.isArray(e),n=t?{}:e.theme;if(t){var o=(0,u.wK)(e[1]),r=(0,u.wK)(e[2]),i=(0,u.wK)(e[3]),s=(0,u.wK)(e[4]),a=(0,u.wK)(e[5]||"#FF0000"),c=(0,u.wK)(e[6]||"#00FF00"),l=(0,u.wK)(e[7]||"#0000FF"),d=(0,u.wK)(e[8]||"#E3FF00");n.colors={bg:o,fg:r,text:i,link:s,cRed:a,cBlue:l,cGreen:c,cOrange:d}}return{theme:n,source:e.source}}))},x=function(e){return I(e).then((function(e){return m(e.theme)}))}},44551:(e,t,n)=>{"use strict";n.d(t,{em:()=>a,k0:()=>i,wB:()=>s});var o=n(97332),r=n(21865),i={undelay:null,topBar:null,badge:null,profileTint:null,fg:null,bg:"underlay",highlight:"bg",panel:"bg",popover:"bg",selectedMenu:"popover",btn:"bg",btnPanel:"panel",btnTopBar:"topBar",input:"bg",inputPanel:"panel",inputTopBar:"topBar",alert:"bg",alertPanel:"panel",poll:"bg",chatBg:"underlay",chatMessage:"chatBg"},s={profileTint:.5,alert:.5,input:.5,faint:.5,underlay:.15,alertPopup:.95},a={bg:{depends:[],opacity:"bg",priority:1},wallpaper:{depends:["bg"],color:function(e,t){return(0,o.Xu)(-2*e,t).rgb}},fg:{depends:[],priority:1},text:{depends:[],layer:"bg",opacity:null,priority:1},underlay:{default:"#000000",opacity:"underlay"},link:{depends:["accent"],priority:1},accent:{depends:["link"],priority:1},faint:{depends:["text"],opacity:"faint"},faintLink:{depends:["link"],opacity:"faint"},postFaintLink:{depends:["postLink"],opacity:"faint"},cBlue:"#0000ff",cRed:"#FF0000",cGreen:"#00FF00",cOrange:"#E3FF00",profileBg:{depends:["bg"],color:function(e,t){return{r:Math.floor(.53*t.r),g:Math.floor(.56*t.g),b:Math.floor(.59*t.b)}}},profileTint:{depends:["bg"],layer:"profileTint",opacity:"profileTint"},highlight:{depends:["bg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},highlightLightText:{depends:["lightText"],layer:"highlight",textColor:!0},highlightPostLink:{depends:["postLink"],layer:"highlight",textColor:"preserve"},highlightFaintText:{depends:["faint"],layer:"highlight",textColor:!0},highlightFaintLink:{depends:["faintLink"],layer:"highlight",textColor:"preserve"},highlightPostFaintLink:{depends:["postFaintLink"],layer:"highlight",textColor:"preserve"},highlightText:{depends:["text"],layer:"highlight",textColor:!0},highlightLink:{depends:["link"],layer:"highlight",textColor:"preserve"},highlightIcon:{depends:["highlight","highlightText"],color:function(e,t,n){return(0,r.a4)(t,n)}},popover:{depends:["bg"],opacity:"popover"},popoverLightText:{depends:["lightText"],layer:"popover",textColor:!0},popoverPostLink:{depends:["postLink"],layer:"popover",textColor:"preserve"},popoverFaintText:{depends:["faint"],layer:"popover",textColor:!0},popoverFaintLink:{depends:["faintLink"],layer:"popover",textColor:"preserve"},popoverPostFaintLink:{depends:["postFaintLink"],layer:"popover",textColor:"preserve"},popoverText:{depends:["text"],layer:"popover",textColor:!0},popoverLink:{depends:["link"],layer:"popover",textColor:"preserve"},popoverIcon:{depends:["popover","popoverText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedPost:"--highlight",selectedPostFaintText:{depends:["highlightFaintText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostLightText:{depends:["highlightLightText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostPostLink:{depends:["highlightPostLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostFaintLink:{depends:["highlightFaintLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostText:{depends:["highlightText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostLink:{depends:["highlightLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostIcon:{depends:["selectedPost","selectedPostText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedMenu:{depends:["bg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},selectedMenuLightText:{depends:["highlightLightText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuFaintText:{depends:["highlightFaintText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuFaintLink:{depends:["highlightFaintLink"],layer:"selectedMenu",variant:"selectedMenu",textColor:"preserve"},selectedMenuText:{depends:["highlightText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuLink:{depends:["highlightLink"],layer:"selectedMenu",variant:"selectedMenu",textColor:"preserve"},selectedMenuIcon:{depends:["selectedMenu","selectedMenuText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedMenuPopover:{depends:["popover"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},selectedMenuPopoverLightText:{depends:["selectedMenuLightText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverFaintText:{depends:["selectedMenuFaintText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverFaintLink:{depends:["selectedMenuFaintLink"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:"preserve"},selectedMenuPopoverText:{depends:["selectedMenuText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverLink:{depends:["selectedMenuLink"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:"preserve"},selectedMenuPopoverIcon:{depends:["selectedMenuPopover","selectedMenuText"],color:function(e,t,n){return(0,r.a4)(t,n)}},lightText:{depends:["text"],layer:"bg",textColor:"preserve",color:function(e,t){return(0,o.Xu)(20*e,t).rgb}},postLink:{depends:["link"],layer:"bg",textColor:"preserve"},postGreentext:{depends:["cGreen"],layer:"bg",textColor:"preserve"},postCyantext:{depends:["cBlue"],layer:"bg",textColor:"preserve"},border:{depends:["fg"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}},poll:{depends:["accent","bg"],copacity:"poll",color:function(e,t,n){return(0,r.Tj)(t,.4,n)}},pollText:{depends:["text"],layer:"poll",textColor:!0},icon:{depends:["bg","text"],inheritsOpacity:!1,color:function(e,t,n){return(0,r.a4)(t,n)}},fgText:{depends:["text"],layer:"fg",textColor:!0},fgLink:{depends:["link"],layer:"fg",textColor:"preserve"},panel:{depends:["fg"],opacity:"panel"},panelText:{depends:["text"],layer:"panel",textColor:!0},panelFaint:{depends:["fgText"],layer:"panel",opacity:"faint",textColor:!0},panelLink:{depends:["fgLink"],layer:"panel",textColor:"preserve"},topBar:"--fg",topBarText:{depends:["fgText"],layer:"topBar",textColor:!0},topBarLink:{depends:["fgLink"],layer:"topBar",textColor:"preserve"},tab:{depends:["btn"]},tabText:{depends:["btnText"],layer:"btn",textColor:!0},tabActiveText:{depends:["text"],layer:"bg",textColor:!0},btn:{depends:["fg"],variant:"btn",opacity:"btn"},btnText:{depends:["fgText"],layer:"btn",textColor:!0},btnPanelText:{depends:["btnText"],layer:"btnPanel",variant:"btn",textColor:!0},btnTopBarText:{depends:["btnText"],layer:"btnTopBar",variant:"btn",textColor:!0},btnPressed:{depends:["btn"],layer:"btn"},btnPressedText:{depends:["btnText"],layer:"btn",variant:"btnPressed",textColor:!0},btnPressedPanel:{depends:["btnPressed"],layer:"btn"},btnPressedPanelText:{depends:["btnPanelText"],layer:"btnPanel",variant:"btnPressed",textColor:!0},btnPressedTopBar:{depends:["btnPressed"],layer:"btn"},btnPressedTopBarText:{depends:["btnTopBarText"],layer:"btnTopBar",variant:"btnPressed",textColor:!0},btnToggled:{depends:["btn"],layer:"btn",color:function(e,t){return(0,o.Xu)(20*e,t).rgb}},btnToggledText:{depends:["btnText"],layer:"btn",variant:"btnToggled",textColor:!0},btnToggledPanelText:{depends:["btnPanelText"],layer:"btnPanel",variant:"btnToggled",textColor:!0},btnToggledTopBarText:{depends:["btnTopBarText"],layer:"btnTopBar",variant:"btnToggled",textColor:!0},btnDisabled:{depends:["btn","bg"],color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledText:{depends:["btnText","btnDisabled"],layer:"btn",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledPanelText:{depends:["btnPanelText","btnDisabled"],layer:"btnPanel",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledTopBarText:{depends:["btnTopBarText","btnDisabled"],layer:"btnTopBar",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},input:{depends:["fg"],opacity:"input"},inputText:{depends:["text"],layer:"input",textColor:!0},inputPanelText:{depends:["panelText"],layer:"inputPanel",variant:"input",textColor:!0},inputTopbarText:{depends:["topBarText"],layer:"inputTopBar",variant:"input",textColor:!0},alertError:{depends:["cRed"],opacity:"alert"},alertErrorText:{depends:["text"],layer:"alert",variant:"alertError",textColor:!0},alertErrorPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertError",textColor:!0},alertWarning:{depends:["cOrange"],opacity:"alert"},alertWarningText:{depends:["text"],layer:"alert",variant:"alertWarning",textColor:!0},alertWarningPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertWarning",textColor:!0},alertSuccess:{depends:["cGreen"],opacity:"alert"},alertSuccessText:{depends:["text"],layer:"alert",variant:"alertSuccess",textColor:!0},alertSuccessPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertSuccess",textColor:!0},alertNeutral:{depends:["text"],opacity:"alert"},alertNeutralText:{depends:["text"],layer:"alert",variant:"alertNeutral",color:function(e,t){return(0,o.Xp)(t).rgb},textColor:!0},alertNeutralPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertNeutral",textColor:!0},alertPopupError:{depends:["alertError"],opacity:"alertPopup"},alertPopupErrorText:{depends:["alertErrorText"],layer:"popover",variant:"alertPopupError",textColor:!0},alertPopupWarning:{depends:["alertWarning"],opacity:"alertPopup"},alertPopupWarningText:{depends:["alertWarningText"],layer:"popover",variant:"alertPopupWarning",textColor:!0},alertPopupSuccess:{depends:["alertSuccess"],opacity:"alertPopup"},alertPopupSuccessText:{depends:["alertSuccessText"],layer:"popover",variant:"alertPopupSuccess",textColor:!0},alertPopupNeutral:{depends:["alertNeutral"],opacity:"alertPopup"},alertPopupNeutralText:{depends:["alertNeutralText"],layer:"popover",variant:"alertPopupNeutral",textColor:!0},badgeNotification:"--cRed",badgeNotificationText:{depends:["text","badgeNotification"],layer:"badge",variant:"badgeNotification",textColor:"bw"},badgeNeutral:"--cGreen",badgeNeutralText:{depends:["text","badgeNeutral"],layer:"badge",variant:"badgeNeutral",textColor:"bw"},chatBg:{depends:["bg"]},chatMessageIncomingBg:{depends:["chatBg"]},chatMessageIncomingText:{depends:["text"],layer:"chatMessage",variant:"chatMessageIncomingBg",textColor:!0},chatMessageIncomingLink:{depends:["link"],layer:"chatMessage",variant:"chatMessageIncomingBg",textColor:"preserve"},chatMessageIncomingBorder:{depends:["border"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}},chatMessageOutgoingBg:{depends:["chatMessageIncomingBg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},chatMessageOutgoingText:{depends:["text"],layer:"chatMessage",variant:"chatMessageOutgoingBg",textColor:!0},chatMessageOutgoingLink:{depends:["link"],layer:"chatMessage",variant:"chatMessageOutgoingBg",textColor:"preserve"},chatMessageOutgoingBorder:{depends:["chatMessageOutgoingBg"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}}}},40454:(e,t,n)=>{"use strict";n.d(t,{AQ:()=>y,AV:()=>v,EC:()=>_,NI:()=>D,we:()=>p,xb:()=>h});var o=n(4942),r=n(29439),i=n(71002),s=n(93433),a=n(97332),u=n(21865),c=n(44551);function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var p=3,m=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.k0,n=[e],o=t[e];o;)n.unshift(o),o=t[o];return n},h=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;return m(e).map((function(i){return[i===e?o[t]:o[i],i===e?r[n]||1:r[i]]}))},f=function(e,t){var n=t[e];if("string"==typeof n&&n.startsWith("--"))return[n.substring(2)];if(null===n)return[];var o=n.depends,r=n.layer,i=n.variant,a=r?m(r).map((function(e){return e===r?i||r:e})):[];return Array.isArray(o)?[].concat((0,s.Z)(o),(0,s.Z)(a)):(0,s.Z)(a)},g=function(e){return"object"===(0,i.Z)(e)?e:{depends:e.startsWith("--")?[e.substring(2)]:[],default:e.startsWith("#")?e:void 0}},v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.em,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f,o=g(t[e]);if(null!==o.opacity){if(o.opacity)return o.opacity;var r=function o(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e],a=n(r,t)[0];if(void 0!==a){var u=t[a];if(void 0!==u)return u.opacity||null===u?u.opacity:u.depends&&i.includes(a)?o(a,[].concat((0,s.Z)(i),[a])):null}};return o.depends?r(e):void 0}},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.em,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f,o=g(t[e]);if(c.k0[e])return e;if(null!==o.layer){if(o.layer)return o.layer;var r=function o(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e],a=n(r,t)[0];if(void 0!==a){var u=t[a];if(void 0!==u)return u.layer||null===u?u.layer:u.depends?o(u,[].concat((0,s.Z)(i),[a])):null}};return o.depends?r(e):void 0}},b=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c.em,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f,n=Object.keys(e),o=new Set(n),r=new Set,i=new Set,s=[].concat(n),a=[],u=function n(s){if(o.has(s))o.delete(s),r.add(s),t(s,e).forEach(n),r.delete(s),i.add(s),a.push(s);else if(r.has(s))console.debug("Cyclic depenency in topoSort, ignoring"),a.push(s);else if(!i.has(s))throw new Error("Unintended condition in topoSort!")};s.length>0;)u(s.pop());return a.map((function(e,t){return{data:e,index:t}})).sort((function(n,o){var r=n.data,i=n.index,s=o.data,a=o.index,u=t(r,e).length,c=t(s,e).length;return u===c||0!==c&&0!==u?i-a:0===u&&0!==c?-1:0===c&&0!==u?1:0})).map((function(e){return e.data}))}(Object.entries(c.em).sort((function(e,t){var n=(0,r.Z)(e,2),o=(n[0],n[1]),i=(0,r.Z)(t,2),s=(i[0],i[1]);return(o&&o.priority||0)-(s&&s.priority||0)})).reduce((function(e,t){var n=(0,r.Z)(t,2),i=n[0],s=n[1];return d(d({},e),{},(0,o.Z)({},i,s))}),{})),y=Object.entries(c.em).reduce((function(e,t){var n=(0,r.Z)(t,2),i=n[0],a=(n[1],v(i,c.em,f));return a?d(d({},e),{},(0,o.Z)({},a,{defaultValue:c.wB[a]||1,affectedSlots:[].concat((0,s.Z)(e[a]&&e[a].affectedSlots||[]),[i])})):e}),{}),D=function(e,t,n){if("string"!=typeof e||!e.startsWith("--"))return e;var o=null,i=e.split(/,/g).map((function(e){return e.trim()})),s=(0,r.Z)(i,2),u=s[0],c=s[1];return o=t(u.substring(2)),c&&(o=(0,a.Xu)(Number.parseFloat(c)*n,o).rgb),o},_=function(e,t){return b.reduce((function(n,r){var i,l=n.colors,p=n.opacity,m=e[r],b=g(c.em[r]),_=f(r,c.em),k=!!b.textColor,C=b.variant||b.layer;i=k?(0,u.Rx)(d({},l[_[0]]||(0,a.OQ)(e[r]||"#FF00FF").rgb),h(w(r)||"bg",C||"bg",v(C),l,p)):C&&C!==r?l[C]||(0,a.OQ)(e[C]).rgb:l.bg||(0,a.OQ)(e.bg);var S=(0,u.ov)(i)<.5?1:-1,j=null;if(m){var F=m;if("transparent"===F){var A=h(w(r),r,v(r)||r,l,p).slice(0,-1);F=d(d({},(0,u.Rx)((0,a.OQ)("#FF00FF").rgb,A)),{},{a:0})}else"string"==typeof m&&m.startsWith("--")?F=D(m,(function(t){return l[t]||e[t]}),S):"string"==typeof m&&m.startsWith("#")&&(F=(0,a.OQ)(F).rgb);j=d({},F)}else if(b.default)j=(0,a.OQ)(b.default).rgb;else{var O=b.color||function(e,t){return d({},t)};if(b.textColor)if("bw"===b.textColor)j=(0,a.wo)(i).rgb;else{var E=d({},l[_[0]]);b.color&&(E=O.apply(void 0,[S].concat((0,s.Z)(_.map((function(e){return d({},l[e])})))))),j=(0,u.uu)(i,d({},E),"preserve"===b.textColor)}else j=O.apply(void 0,[S].concat((0,s.Z)(_.map((function(e){return d({},l[e])})))))}if(!j)throw new Error("Couldn't generate color for "+r);var z=b.opacity||v(r),P=b.opacity;if(null===P)j.a=1;else if("transparent"===m)j.a=0;else{var I=P&&void 0!==t[z],x=_[0],T=x&&l[x];P||!T||b.textColor||null===P?T||z?T&&0===T.a?j.a=0:j.a=Number(I?t[z]:(y[z]||{}).defaultValue):delete j.a:j.a=T.a}return(Number.isNaN(j.a)||void 0===j.a)&&(j.a=1),z?{colors:d(d({},l),{},(0,o.Z)({},r,j)),opacity:d(d({},p),{},(0,o.Z)({},z,j.a))}:{colors:d(d({},l),{},(0,o.Z)({},r,j)),opacity:p}}),{colors:{},opacity:{}})}},95052:(e,t,n)=>{"use strict";n.d(t,{M:()=>u,q:()=>a});var o=n(4942),r=n(21865);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var a=function(e){if(void 0!==e){var t=e.color,n=e.type;if("string"==typeof t){var o=(0,r.wK)(t);if(null!=o){var i="rgb(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),")"),a="rgba(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),", .1)"),u="rgba(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),", .2)"),c={"--____highlight-solidColor":i,"--____highlight-tintColor":a,"--____highlight-tintColor2":u};return"striped"===n?s({backgroundImage:["repeating-linear-gradient(135deg,","".concat(a," ,"),"".concat(a," 20px,"),"".concat(u," 20px,"),"".concat(u," 40px")].join(" "),backgroundPosition:"0 0"},c):"solid"===n?s({backgroundColor:u},c):"side"===n?s({backgroundImage:["linear-gradient(to right,","".concat(i," ,"),"".concat(i," 2px,"),"transparent 6px"].join(" "),backgroundPosition:"0 0"},c):void 0}}}},u=function(e){return"USER____"+e.screen_name.replace(/\./g,"_").replace(/@/g,"_AT_")}},4493:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(64721),r=n.n(o);const i=function(e,t,n){var o=!t||function(e){return e&&e.includes("@")}(t)||r()(n,t);return{name:o?"external-user-profile":"user-profile",params:o?{id:e}:{name:t}}}},66596:(e,t,n)=>{"use strict";n.d(t,{Z:()=>W});var o=n(66252),r=n(3577),i=n(49963),s=["href","alt","title"],a={key:1,class:"attachment-buttons"},u=["placeholder"],c={key:1},l={class:"attachment-wrapper"},d=["href","alt","title"],p=["src"],m={key:1,class:"attachment-buttons"},h=["title"],f=["title"],g=["title"],v=["title"],w=["title"],b=["title"],y=["title"],D=["href"],_=["href"],k={key:0},C=["href"],S=["src","alt","title"],j={key:0,class:"image"},F=["src"],A={class:"text"},O=["href"],E=["innerHTML"],z=["href"],P=["placeholder"],I={key:1},x=n(4942),T=n(32140),$=n(72884),B=n(34133);const U=n.p+"static/img/nsfw.2958239.png";var M=n(58394),L=n(989),R=n(9382),q=n(84131);function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}R.vI.add(q.gMD,q.Xig,q.VmB,q.IyC,q.aQp,q.NBC,q.Bg$,q.N7g,q.I7k,q.UJf,q.S3c);const Z={props:["attachment","compact","description","hideDescription","nsfw","size","setMedia","remove","shiftUp","shiftDn","edit"],data:function(){return{localDescription:this.description||this.attachment.description,nsfwImage:this.$store.state.instance.nsfwCensorImage||U,hideNsfwLocal:this.$store.getters.mergedConfig.hideNsfw,preloadImage:this.$store.getters.mergedConfig.preloadImage,loading:!1,img:"image"===M.ZP.fileType(this.attachment.mimetype)&&document.createElement("img"),modalOpen:!1,showHidden:!1,flashLoaded:!1,showDescription:!1}},components:{Flash:$.Z,StillImage:T.Z,VideoAttachment:B.Z},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){(0,x.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({classNames:function(){return[{"-loading":this.loading,"-nsfw-placeholder":this.hidden,"-editable":void 0!==this.edit,"-compact":this.compact},"-type-"+this.type,this.size&&"-size-"+this.size,"-".concat(this.useContainFit?"contain":"cover","-fit")]},usePlaceholder:function(){return"hide"===this.size},useContainFit:function(){return this.$store.getters.mergedConfig.useContainFit},placeholderName:function(){return""!==this.attachment.description&&this.attachment.description?this.attachment.description:this.type.toUpperCase()},placeholderIconClass:function(){return"image"===this.type?"image":"video"===this.type?"video":"audio"===this.type?"music":"file"},referrerpolicy:function(){return this.$store.state.instance.mediaProxyAvailable?"":"no-referrer"},type:function(){return M.ZP.fileType(this.attachment.mimetype)},hidden:function(){return this.nsfw&&this.hideNsfwLocal&&!this.showHidden},isEmpty:function(){return"html"===this.type&&!this.attachment.oembed},useModal:function(){var e=[];switch(this.size){case"hide":case"small":e=["image","video","audio","flash"];break;default:e=this.mergedConfig.playVideosInModal?["image","video","flash"]:["image"]}return e.includes(this.type)},videoTag:function(){return this.useModal?"button":"span"}},(0,L.Se)(["mergedConfig"])),watch:{"attachment.description":function(e){this.localDescription=e},localDescription:function(e){this.onEdit(e)}},methods:{linkClicked:function(e){var t=e.target;"A"===t.tagName&&window.open(t.href,"_blank")},openModal:function(e){this.useModal?(this.$emit("setMedia"),this.$store.dispatch("setCurrentMedia",this.attachment)):"unknown"===this.type&&window.open(this.attachment.url)},openModalForce:function(e){this.$emit("setMedia"),this.$store.dispatch("setCurrentMedia",this.attachment)},onEdit:function(e){this.edit&&this.edit(this.attachment,e)},onRemove:function(){this.remove&&this.remove(this.attachment)},onShiftUp:function(){this.shiftUp&&this.shiftUp(this.attachment)},onShiftDn:function(){this.shiftDn&&this.shiftDn(this.attachment)},stopFlash:function(){this.$refs.flash.closePlayer()},setFlashLoaded:function(e){this.flashLoaded=e},toggleDescription:function(){this.showDescription=!this.showDescription},toggleHidden:function(e){var t=this;!this.mergedConfig.useOneClickNsfw||this.showHidden||"video"===this.type&&!this.mergedConfig.playVideosInModal?this.img&&!this.preloadImage?this.img.onload?this.img.onload():(this.loading=!0,this.img.src=this.attachment.url,this.img.onload=function(){t.loading=!1,t.showHidden=!t.showHidden}):this.showHidden=!this.showHidden:this.openModal(e)},onImageLoad:function(e){var t=e.naturalWidth,n=e.naturalHeight;this.$emit("naturalSizeLoad",{id:this.attachment.id,width:t,height:n})}}},W=(0,n(83744).Z)(Z,[["render",function(e,t,n,x,T,$){var B=(0,o.up)("FAIcon"),U=(0,o.up)("StillImage"),M=(0,o.up)("VideoAttachment"),L=(0,o.up)("Flash");return e.usePlaceholder?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["Attachment -placeholder button-unstyled",e.classNames]),onClick:t[4]||(t[4]=function(){return e.openModal&&e.openModal.apply(e,arguments)})},["html"!==e.type?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"placeholder",target:"_blank",href:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,onClick:t[0]||(t[0]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(B,{icon:e.placeholderIconClass},null,8,["icon"]),(0,o._)("b",null,(0,r.zw)(e.nsfw?"NSFW / ":""),1),(0,o.Uk)((0,r.zw)(e.edit?"":e.placeholderName),1)],8,s)):(0,o.kq)("",!0),e.edit||e.remove?((0,o.wg)(),(0,o.iD)("div",a,[e.remove?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled attachment-button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.onRemove&&e.onRemove.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"trash-alt"})])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),"hide"!==e.size&&!e.hideDescription&&(e.edit||e.localDescription||e.showDescription)?((0,o.wg)(),(0,o.iD)("div",{key:2,class:(0,r.C_)(["description-container",{"-static":!e.edit}])},[e.edit?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.localDescription=t}),type:"text",class:"description-field",placeholder:e.$t("post_status.media_description"),onKeydown:t[3]||(t[3]=(0,i.D2)((0,i.iM)((function(){}),["prevent"]),["enter"]))},null,40,u)),[[i.nr,e.localDescription]]):((0,o.wg)(),(0,o.iD)("p",c,(0,r.zw)(e.localDescription),1))],2)):(0,o.kq)("",!0)],2)):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["Attachment",e.classNames])},[(0,o.wy)((0,o._)("div",l,[e.hidden?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"image-container",href:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,onClick:t[5]||(t[5]=(0,i.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[((0,o.wg)(),(0,o.iD)("img",{key:e.nsfwImage,class:"nsfw",src:e.nsfwImage},null,8,p)),"video"===e.type?((0,o.wg)(),(0,o.j4)(B,{key:0,class:"play-icon",icon:"play-circle"})):(0,o.kq)("",!0)],8,d)):(0,o.kq)("",!0),e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",m,["flash"===e.type&&e.flashLoaded?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled attachment-button",title:e.$t("status.attachment_stop_flash"),onClick:t[6]||(t[6]=(0,i.iM)((function(){return e.stopFlash&&e.stopFlash.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"stop"})],8,h)):(0,o.kq)("",!0),e.attachment.description&&"small"!==e.size&&!e.edit&&"unknown"!==e.type?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled attachment-button",title:e.$t("status.show_attachment_description"),onClick:t[7]||(t[7]=(0,i.iM)((function(){return e.toggleDescription&&e.toggleDescription.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"align-right"})],8,f)):(0,o.kq)("",!0),e.useModal||"unknown"===e.type?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled attachment-button",title:e.$t("status.show_attachment_in_modal"),onClick:t[8]||(t[8]=(0,i.iM)((function(){return e.openModalForce&&e.openModalForce.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"search-plus"})],8,g)),e.nsfw&&e.hideNsfwLocal?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-unstyled attachment-button",title:e.$t("status.hide_attachment"),onClick:t[9]||(t[9]=(0,i.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"times"})],8,v)):(0,o.kq)("",!0),e.shiftUp?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled attachment-button",title:e.$t("status.move_up"),onClick:t[10]||(t[10]=(0,i.iM)((function(){return e.onShiftUp&&e.onShiftUp.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"chevron-left"})],8,w)):(0,o.kq)("",!0),e.shiftDn?((0,o.wg)(),(0,o.iD)("button",{key:5,class:"button-unstyled attachment-button",title:e.$t("status.move_down"),onClick:t[11]||(t[11]=(0,i.iM)((function(){return e.onShiftDn&&e.onShiftDn.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"chevron-right"})],8,b)):(0,o.kq)("",!0),e.remove?((0,o.wg)(),(0,o.iD)("button",{key:6,class:"button-unstyled attachment-button",title:e.$t("status.remove_attachment"),onClick:t[12]||(t[12]=(0,i.iM)((function(){return e.onRemove&&e.onRemove.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"trash-alt"})],8,y)):(0,o.kq)("",!0)])),"image"!==e.type||e.hidden&&!e.preloadImage?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:2,class:(0,r.C_)(["image-container",{"-hidden":e.hidden&&e.preloadImage}]),href:e.attachment.url,target:"_blank",onClick:t[13]||(t[13]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(U,{class:"image",referrerpolicy:e.referrerpolicy,mimetype:e.attachment.mimetype,src:e.attachment.large_thumb_url||e.attachment.url,"image-load-handler":e.onImageLoad,alt:e.attachment.description},null,8,["referrerpolicy","mimetype","src","image-load-handler","alt"])],10,D)),"unknown"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:3,class:"placeholder-container",href:e.attachment.url,target:"_blank"},[(0,o.Wm)(B,{size:e.compact?"2x":"5x",icon:e.placeholderIconClass,title:e.localDescription},null,8,["size","icon","title"]),e.compact?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",k,(0,r.zw)(e.localDescription),1))],8,_)),"video"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)((0,o.LL)(e.videoTag),{key:4,class:(0,r.C_)(["video-container",{"button-unstyled":"isModal"}]),href:e.attachment.url,onClick:(0,i.iM)(e.openModal,["stop","prevent"])},{default:(0,o.w5)((function(){return[(0,o.Wm)(M,{class:"video",attachment:e.attachment,controls:!e.useModal,onPlay:t[14]||(t[14]=function(t){return e.$emit("play")}),onPause:t[15]||(t[15]=function(t){return e.$emit("pause")})},null,8,["attachment","controls"]),e.useModal?((0,o.wg)(),(0,o.j4)(B,{key:0,class:"play-icon",icon:"play-circle"})):(0,o.kq)("",!0)]})),_:1},8,["href","onClick"])),"audio"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",{key:5,class:"audio-container",href:e.attachment.url,onClick:t[18]||(t[18]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},["audio"===e.type?((0,o.wg)(),(0,o.iD)("audio",{key:0,src:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,controls:"",onPlay:t[16]||(t[16]=function(t){return e.$emit("play")}),onPause:t[17]||(t[17]=function(t){return e.$emit("pause")})},null,40,S)):(0,o.kq)("",!0)],8,C)),"html"===e.type&&e.attachment.oembed?((0,o.wg)(),(0,o.iD)("div",{key:6,class:"oembed-container",onClick:t[19]||(t[19]=(0,i.iM)((function(){return e.linkClicked&&e.linkClicked.apply(e,arguments)}),["prevent"]))},[e.attachment.thumb_url?((0,o.wg)(),(0,o.iD)("div",j,[(0,o._)("img",{src:e.attachment.thumb_url},null,8,F)])):(0,o.kq)("",!0),(0,o._)("div",A,[(0,o._)("h1",null,[(0,o._)("a",{href:e.attachment.url},(0,r.zw)(e.attachment.oembed.title),9,O)]),(0,o._)("div",{innerHTML:e.attachment.oembed.oembedHTML},null,8,E)])])):(0,o.kq)("",!0),"flash"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",{key:7,class:"flash-container",href:e.attachment.url,onClick:t[22]||(t[22]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(L,{ref:"flash",class:"flash",src:e.attachment.large_thumb_url||e.attachment.url,onPlayerOpened:t[20]||(t[20]=function(t){return e.setFlashLoaded(!0)}),onPlayerClosed:t[21]||(t[21]=function(t){return e.setFlashLoaded(!1)})},null,8,["src"])],8,z))],512),[[i.F8,!e.isEmpty]]),"hide"!==e.size&&!e.hideDescription&&(e.edit||e.localDescription&&e.showDescription)?((0,o.wg)(),(0,o.iD)("div",{key:0,class:(0,r.C_)(["description-container",{"-static":!e.edit}])},[e.edit?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,"onUpdate:modelValue":t[23]||(t[23]=function(t){return e.localDescription=t}),type:"text",class:"description-field",placeholder:e.$t("post_status.media_description"),onKeydown:t[24]||(t[24]=(0,i.D2)((0,i.iM)((function(){}),["prevent"]),["enter"]))},null,40,P)),[[i.nr,e.localDescription]]):((0,o.wg)(),(0,o.iD)("p",I,(0,r.zw)(e.localDescription),1))],2)):(0,o.kq)("",!0)],2))}]])},19066:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r={class:"avatars"},i=n(48173),s=n(4493);const a={props:["users"],computed:{slicedUsers:function(){return this.users?this.users.slice(0,15):[]}},components:{UserAvatar:i.default},methods:{userProfileLink:function(e){return(0,s.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserAvatar"),c=(0,o.up)("router-link");return(0,o.wg)(),(0,o.iD)("div",r,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.slicedUsers,(function(t){return(0,o.wg)(),(0,o.j4)(c,{key:t.id,to:e.userProfileLink(t),class:"avatars-item"},{default:(0,o.w5)((function(){return[(0,o.Wm)(u,{user:t,class:"avatar-small"},null,8,["user"])]})),_:2},1032,["to"])})),128))])}]])},29076:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o=n(66252),r=n(49963),i={class:"basic-user-card"},s={class:"basic-user-card-collapsed-content"},a=["title"],u=n(22588),c=n(48173),l=n(12061),d=n(92820),p=n(4493);const m={props:["user"],components:{UserPopover:u.default,UserAvatar:c.default,RichContent:d.Z,UserLink:l.Z},methods:{userProfileLink:function(e){return(0,p.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("UserAvatar"),p=(0,o.up)("UserPopover"),m=(0,o.up)("router-link"),h=(0,o.up)("RichContent"),f=(0,o.up)("user-link");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o.Wm)(m,{to:e.userProfileLink(e.user),onClick:t[1]||(t[1]=(0,r.iM)((function(){}),["prevent"]))},{default:(0,o.w5)((function(){return[(0,o.Wm)(p,{"user-id":e.user.id,"overlay-centers":!0,"overlay-centers-selector":".avatar"},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{class:"user-avatar avatar",user:e.user,onClick:t[0]||(t[0]=(0,r.iM)((function(){}),["prevent"]))},null,8,["user"])]})),_:1},8,["user-id"])]})),_:1},8,["to"]),(0,o._)("div",s,[(0,o._)("div",{title:e.user.name,class:"basic-user-card-user-name"},[(0,o.Wm)(h,{class:"basic-user-card-user-name-value",html:e.user.name,emoji:e.user.emoji},null,8,["html","emoji"])],8,a),(0,o._)("div",null,[(0,o.Wm)(f,{class:"basic-user-card-screen-name",user:e.user},null,8,["user"])]),(0,o.WI)(e.$slots,"default")])])}]])},66141:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i=["disabled","checked","indeterminate"],s={key:0,class:"label"};const a={props:["modelValue","indeterminate","disabled"],emits:["update:modelValue"],data:function(e){return{indeterminateTransitionFix:e.indeterminate}},watch:{indeterminate:function(e){e&&(this.indeterminateTransitionFix=!0)}},methods:{onTransitionEnd:function(e){this.indeterminate||(this.indeterminateTransitionFix=!1)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,a,u,c){return(0,o.wg)(),(0,o.iD)("label",{class:(0,r.C_)(["checkbox",{disabled:n.disabled,indeterminate:n.indeterminate,"indeterminate-fix":e.indeterminateTransitionFix}])},[(0,o._)("input",{type:"checkbox",class:"visible-for-screenreader-only",disabled:n.disabled,checked:n.modelValue,indeterminate:n.indeterminate,onChange:t[0]||(t[0]=function(t){return e.$emit("update:modelValue",t.target.checked)})},null,40,i),(0,o._)("i",{class:"checkbox-indicator","aria-hidden":!0,onTransitionendCapture:t[1]||(t[1]=function(){return c.onTransitionEnd&&c.onTransitionEnd.apply(c,arguments)})},null,32),e.$slots.default?((0,o.wg)(),(0,o.iD)("span",s,[(0,o.WI)(e.$slots,"default")])):(0,o.kq)("",!0)],2)}]])},1447:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(66252),r=n(3577),i=n(49963),s=["textContent"],a=["textContent"],u=["textContent"];const c={components:{DialogModal:n(71113).Z},props:{title:{type:String},cancelText:{type:String},confirmText:{type:String}},computed:{},methods:{onCancel:function(){this.$emit("cancelled")},onAccept:function(){this.$emit("accepted")}}},l=(0,n(83744).Z)(c,[["render",function(e,t,n,c,l,d){var p=(0,o.up)("dialog-modal"),m=(0,o.Q2)("body-scroll-lock");return(0,o.wy)(((0,o.wg)(),(0,o.j4)(p,{class:"confirm-modal","on-cancel":e.onCancel},{header:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.title)},null,8,s)]})),footer:(0,o.w5)((function(){return[(0,o._)("button",{class:"btn button-default",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.onAccept&&e.onAccept.apply(e,arguments)}),["prevent"])),textContent:(0,r.zw)(e.confirmText)},null,8,a),(0,o._)("button",{class:"btn button-default",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.onCancel&&e.onCancel.apply(e,arguments)}),["prevent"])),textContent:(0,r.zw)(e.cancelText)},null,8,u)]})),default:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),_:3},8,["on-cancel"])),[[m,!0]])}]])},71113:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(66252),r=n(3577),i=n(49963),s={class:"panel-heading dialog-modal-heading"},a={class:"title"},u={class:"dialog-modal-content"},c={class:"dialog-modal-footer user-interactions panel-footer"};const l={props:{darkOverlay:{default:!0,type:Boolean},onCancel:{default:function(){},type:Function}}},d=(0,n(83744).Z)(l,[["render",function(e,t,n,l,d,p){return(0,o.wg)(),(0,o.iD)("span",{class:(0,r.C_)({"dark-overlay":e.darkOverlay}),onClick:t[1]||(t[1]=(0,i.iM)((function(t){return e.onCancel()}),["self","stop"]))},[(0,o._)("div",{class:"dialog-modal panel panel-default",onClick:t[0]||(t[0]=(0,i.iM)((function(){}),["stop"]))},[(0,o._)("div",s,[(0,o._)("div",a,[(0,o.WI)(e.$slots,"header")])]),(0,o._)("div",u,[(0,o.WI)(e.$slots,"default")]),(0,o._)("div",c,[(0,o.WI)(e.$slots,"footer")])])],2)}]])},88671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Y});var o=n(66252),r=n(3577),i=n(49963),s={ref:"hiddenOverlayCaret",class:"caret"},a=["title"],u=["id"],c=["id","aria-label","aria-selected","onClick"],l={class:"image"},d=["src"],p={key:1},m={class:"label"},h={key:0,class:"displayText"},f={key:1,class:"displayText"},g={class:"detailText"},v=n(4942),w=n(44925),b=n(15861),y=n(93433),D=n(69572),_=n.n(D),k=n(64687),C=n.n(k),S=n(13311),j=n.n(S),F=n(54061),A=n.n(F),O=function(e){return A()(e,(function(e,t){var n={word:t,start:0,end:t.length};if(e.length>0){var o=e.pop();n.start+=o.end,n.end+=o.end,e.push(o)}return e.push(n),e}),[])},E=function(e){for(var t=[],n="",o=0;o<e.length;o++){var r=e[o];n?!!r.trim()==!!n.trim()?n+=r:(t.push(n),n=r):n=r}return n&&t.push(n),t};const z=function(e,t){var n=E(e),o=O(n);return j()(o,(function(e){var n=e.start,o=e.end;return n<=t&&o>t}))},P=function(e,t,n){return e.slice(0,t.start)+n+e.slice(t.end)};var I=n(98471),x=n(84535),T=["aria-live"];const $={props:{ariaLive:{type:String,defualt:"assertive"}},data:function(){return{currentText:""}},methods:{announce:function(e){var t=this;this.currentText=e,setTimeout((function(){t.currentText=""}),1e3)}}};var B=n(83744);const U=(0,B.Z)($,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("div",{class:"visible-for-screenreader-only","aria-live":e.ariaLive},(0,r.zw)(e.currentText),9,T)}]]);var M,L=n(42262),R=n(67952),q=n(8312),N=n(9382),Z=n(5737),W=["imageUrl"];function H(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function V(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?H(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function K(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}N.vI.add(Z.RKn);const G={emits:["update:modelValue","shown"],props:{suggest:{required:!0,type:Function},modelValue:{required:!0,type:String},enableEmojiPicker:{required:!1,type:Boolean,default:!1},hideEmojiButton:{required:!1,type:Boolean,default:!1},enableStickerPicker:{required:!1,type:Boolean,default:!1},placement:{required:!1,type:String,default:"auto"},newlineOnCtrlEnter:{required:!1,type:Boolean,default:!1}},data:function(){return{randomSeed:"".concat(Math.random()).replace(".","-"),input:void 0,caretEl:void 0,highlighted:-1,caret:0,focused:!1,blurTimeout:null,temporarilyHideSuggestions:!1,disableClickOutside:!1,suggestions:[],overlayStyle:{},pickerShown:!1}},components:{Popover:x.default,EmojiPicker:I.Z,UnicodeDomainIndicator:L.Z,ScreenReaderNotice:U},computed:{padEmoji:function(){return this.$store.getters.mergedConfig.padEmoji},defaultCandidateIndex:function(){return this.$store.getters.mergedConfig.autocompleteSelect?0:-1},preText:function(){return this.modelValue.slice(0,this.caret)},postText:function(){return this.modelValue.slice(this.caret)},showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length>0&&!this.pickerShown&&!this.temporarilyHideSuggestions},textAtCaret:function(){var e;return null===(e=this.wordAtCaret)||void 0===e?void 0:e.word},wordAtCaret:function(){if(this.modelValue&&this.caret)return z(this.modelValue,this.caret-1)||{}},languages:function(){return(0,q.ensureFinalFallback)(this.$store.getters.mergedConfig.interfaceLanguage)},maybeLocalizedEmojiNamesAndKeywords:function(){var e=this;return function(t){var n=[t.displayText],o=[];return t.displayTextI18n&&n.push(e.$t(t.displayTextI18n.key,t.displayTextI18n.args)),t.annotations&&e.languages.forEach((function(e){var r,i;n.push(null===(r=t.annotations[e])||void 0===r?void 0:r.name),o.push.apply(o,(0,y.Z)((null===(i=t.annotations[e])||void 0===i?void 0:i.keywords)||[]))})),{names:n.filter((function(e){return e})),keywords:o.filter((function(e){return e}))}}},maybeLocalizedEmojiName:function(){var e=this;return function(t){if(!t.annotations)return t.displayText;if(t.displayTextI18n)return e.$t(t.displayTextI18n.key,t.displayTextI18n.args);var n,o=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return K(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?K(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(e.languages);try{for(o.s();!(n=o.n()).done;){var r,i=n.value;if(null!==(r=t.annotations[i])&&void 0!==r&&r.name)return t.annotations[i].name}}catch(e){o.e(e)}finally{o.f()}return t.displayText}},onInputScroll:function(){this.$refs.hiddenOverlay.scrollTo({top:this.input.scrollTop,left:this.input.scrollLeft})},suggestionListId:function(){return"suggestions-".concat(this.randomSeed)},suggestionItemId:function(){var e=this;return function(t){return"suggestion-item-".concat(t,"-").concat(e.randomSeed)}}},mounted:function(){var e=this.$refs,t=e.root,n=e.hiddenOverlayCaret,o=e.suggestorPopover,r=t.querySelector(".emoji-input > input")||t.querySelector(".emoji-input > textarea");if(r){this.input=r,this.caretEl=n,o.setAnchorEl?(o.setAnchorEl(this.caretEl),this.$refs.picker.setAnchorEl(this.caretEl)):console.warn("setAnchorEl not found, are we in a unit test?");var i=getComputedStyle(this.input);this.overlayStyle.padding=i.padding,this.overlayStyle.border=i.border,this.overlayStyle.margin=i.margin,this.overlayStyle.lineHeight=i.lineHeight,this.overlayStyle.fontFamily=i.fontFamily,this.overlayStyle.fontSize=i.fontSize,this.overlayStyle.wordWrap=i.wordWrap,this.overlayStyle.whiteSpace=i.whiteSpace,this.resize(),r.addEventListener("blur",this.onBlur),r.addEventListener("focus",this.onFocus),r.addEventListener("paste",this.onPaste),r.addEventListener("keyup",this.onKeyUp),r.addEventListener("keydown",this.onKeyDown),r.addEventListener("click",this.onClickInput),r.addEventListener("transitionend",this.onTransition),r.addEventListener("input",this.onInput),r.addEventListener("scroll",this.onInputScroll)}},unmounted:function(){var e=this.input;e&&(e.removeEventListener("blur",this.onBlur),e.removeEventListener("focus",this.onFocus),e.removeEventListener("paste",this.onPaste),e.removeEventListener("keyup",this.onKeyUp),e.removeEventListener("keydown",this.onKeyDown),e.removeEventListener("click",this.onClickInput),e.removeEventListener("transitionend",this.onTransition),e.removeEventListener("input",this.onInput),e.removeEventListener("scroll",this.onInputScroll))},watch:{showSuggestions:function(e,t){this.$emit("shown",e),e?this.$refs.suggestorPopover.showPopover():this.$refs.suggestorPopover.hidePopover()},textAtCaret:(M=(0,b.Z)(C().mark((function e(t){var n,o;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0!==t){e.next=2;break}return e.abrupt("return");case 2:if(n=t.charAt(0),t!==n){e.next=6;break}return this.suggestions=[],e.abrupt("return");case 6:return e.next=8,this.suggest(t,this.maybeLocalizedEmojiNamesAndKeywords);case 8:if(o=e.sent,!(this.textAtCaret!==t||o.length<=0)){e.next=12;break}return this.suggestions=[],e.abrupt("return");case 12:this.suggestions=_()(o,5).map((function(e){var t=e.imageUrl;return V(V({},(0,w.Z)(e,W)),{},{img:t||""})})),this.highlighted=this.defaultCandidateIndex,this.$refs.screenReaderNotice.announce(this.$tc("tool_tip.autocomplete_available",this.suggestions.length,{number:this.suggestions.length}));case 15:case"end":return e.stop()}}),e,this)}))),function(e){return M.apply(this,arguments)})},methods:{triggerShowPicker:function(){var e=this;this.$nextTick((function(){e.$refs.picker.showPicker(),e.scrollIntoView()})),this.disableClickOutside=!0,setTimeout((function(){e.disableClickOutside=!1}),0)},togglePicker:function(){this.input.focus(),this.pickerShown?this.$refs.picker.hidePicker():(this.scrollIntoView(),this.$refs.picker.showPicker(),this.$refs.picker.startEmojiLoad())},replace:function(e){var t=P(this.modelValue,this.wordAtCaret,e);this.$emit("update:modelValue",t),this.caret=0},insert:function(e){var t=e.insertion,n=e.keepOpen,o=e.surroundingSpace,r=void 0===o||o,i=this.modelValue.substring(0,this.caret)||"",s=this.modelValue.substring(this.caret)||"",a=/\s/,u=r&&!a.exec(i.slice(-1))&&i.length&&this.padEmoji>0?" ":"",c=r&&!a.exec(s[0])&&this.padEmoji?" ":"",l=[i,u,t,c,s].join("");this.$emit("update:modelValue",l);var d=this.caret+(t+c+u).length;n||this.input.focus(),this.$nextTick((function(){this.input.setSelectionRange(d,d),this.caret=d}))},replaceText:function(e,t){var n=this.suggestions.length||0;if(1!==this.textAtCaret.length&&(n>0||t)){var o=(t||this.suggestions[this.highlighted]).replacement,r=P(this.modelValue,this.wordAtCaret,o);this.$emit("update:modelValue",r),this.highlighted=0;var i=this.wordAtCaret.start+o.length;this.$nextTick((function(){this.input.focus(),this.input.setSelectionRange(i,i),this.caret=i})),e.preventDefault()}},cycleBackward:function(e){var t=this.suggestions.length||0;this.highlighted-=1,-1===this.highlighted?this.input.focus():this.highlighted<-1&&(this.highlighted=t-1),t>0&&e.preventDefault()},cycleForward:function(e){var t=this.suggestions.length||0;this.highlighted+=1,this.highlighted>=t&&(this.highlighted=-1,this.input.focus()),t>0&&e.preventDefault()},scrollIntoView:function(){var e=this,t=this.$refs.picker.$el,n=this.$el.closest(".sidebar-scroller")||this.$el.closest(".post-form-modal-view")||window,o=n===window?n.scrollY:n.scrollTop,r=o+(n===window?n.innerHeight:n.offsetHeight),i=t.offsetHeight+(0,R.y)(t,n).top,s=o+Math.max(0,i-r);n===window?n.scroll(0,s):n.scrollTop=s,this.$nextTick((function(){var t=e.input.offsetHeight,n=e.$refs.picker;n.$el.getBoundingClientRect().bottom>window.innerHeight&&(n.$el.style.top="auto",n.$el.style.bottom=t+"px")}))},onPickerShown:function(){this.pickerShown=!0},onPickerClosed:function(){this.pickerShown=!1},onBlur:function(e){var t=this;this.blurTimeout=setTimeout((function(){t.focused=!1,t.setCaret(e)}),200)},onClick:function(e,t){this.replaceText(e,t)},onFocus:function(e){this.blurTimeout&&(clearTimeout(this.blurTimeout),this.blurTimeout=null),this.focused=!0,this.setCaret(e),this.temporarilyHideSuggestions=!1},onKeyUp:function(e){var t=e.key;this.setCaret(e),this.temporarilyHideSuggestions="Escape"===t},onPaste:function(e){this.setCaret(e)},onKeyDown:function(e){var t=this,n=e.ctrlKey,o=e.shiftKey,r=e.key;this.newlineOnCtrlEnter&&n&&"Enter"===r&&(this.insert({insertion:"\n",surroundingSpace:!1}),e.stopPropagation(),e.preventDefault(),this.$nextTick((function(){t.input.blur(),t.input.focus()}))),this.temporarilyHideSuggestions||("Tab"===r&&(o?this.cycleBackward(e):this.cycleForward(e)),"ArrowUp"===r?this.cycleBackward(e):"ArrowDown"===r&&this.cycleForward(e),"Enter"===r&&(n||this.replaceText(e))),"Escape"===r&&(this.temporarilyHideSuggestions||this.input.focus())},onInput:function(e){this.setCaret(e),this.$emit("update:modelValue",e.target.value)},onStickerUploaded:function(e){this.$emit("sticker-uploaded",e)},onStickerUploadFailed:function(e){this.$emit("sticker-upload-Failed",e)},setCaret:function(e){var t=this,n=e.target.selectionStart;this.caret=n,this.$nextTick((function(){t.$refs.suggestorPopover.updateStyles()}))},resize:function(){},autoCompleteItemLabel:function(e){return e.user?e.displayText+" "+e.detailText:this.maybeLocalizedEmojiName(e)}}},Y=(0,B.Z)(G,[["render",function(e,t,n,v,w,b){var y=(0,o.up)("screen-reader-notice"),D=(0,o.up)("FAIcon"),_=(0,o.up)("EmojiPicker"),k=(0,o.up)("UnicodeDomainIndicator"),C=(0,o.up)("Popover");return(0,o.wg)(),(0,o.iD)("div",{ref:"root",class:(0,r.C_)(["emoji-input",{"with-picker":!e.hideEmojiButton}])},[(0,o.WI)(e.$slots,"default",{id:"textbox-"+e.randomSeed,ariaOwns:e.suggestionListId,ariaAutocomplete:"both",ariaExpanded:e.showSuggestions,ariaActivedescendant:e.showSuggestions&&-1!==e.highlighted?e.suggestionItemId(e.highlighted):""}),(0,o._)("div",{ref:"hiddenOverlay",class:"hidden-overlay",style:(0,r.j5)(e.overlayStyle),"aria-hidden":!0},[(0,o._)("span",null,(0,r.zw)(e.preText),1),(0,o._)("span",s,"x",512),(0,o._)("span",null,(0,r.zw)(e.postText),1)],4),(0,o.Wm)(y,{ref:"screenReaderNotice","aria-live":"assertive"},null,512),e.enableEmojiPicker?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.hideEmojiButton?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled emoji-picker-icon",type:"button",title:e.$t("emoji.add_emoji"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.togglePicker&&e.togglePicker.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(D,{icon:["far","smile-beam"]})],8,a)),e.enableEmojiPicker?((0,o.wg)(),(0,o.j4)(_,{key:1,ref:"picker","enable-sticker-picker":e.enableStickerPicker,class:"emoji-picker-panel",onEmoji:e.insert,onStickerUploaded:e.onStickerUploaded,onStickerUploadFailed:e.onStickerUploadFailed,onShow:e.onPickerShown,onClose:e.onPickerClosed},null,8,["enable-sticker-picker","onEmoji","onStickerUploaded","onStickerUploadFailed","onShow","onClose"])):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),(0,o.Wm)(C,{ref:"suggestorPopover",class:"autocomplete-panel",placement:"bottom","trigger-attrs":{"aria-hidden":!0}},{content:(0,o.w5)((function(){return[(0,o._)("div",{id:e.suggestionListId,ref:"panel-body",class:"autocomplete-panel-body",role:"listbox"},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.suggestions,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{id:e.suggestionItemId(n),key:n,class:(0,r.C_)(["autocomplete-item",{highlighted:n===e.highlighted}]),role:"option","aria-label":e.autoCompleteItemLabel(t),"aria-selected":n===e.highlighted,onClick:(0,i.iM)((function(n){return e.onClick(n,t)}),["stop","prevent"])},[(0,o._)("span",l,[t.img?((0,o.wg)(),(0,o.iD)("img",{key:0,src:t.img},null,8,d)):((0,o.wg)(),(0,o.iD)("span",p,(0,r.zw)(t.replacement),1))]),(0,o._)("div",m,[t.user?((0,o.wg)(),(0,o.iD)("span",h,[(0,o.Uk)((0,r.zw)(t.displayText),1),(0,o.Wm)(k,{user:t.user,at:!1},null,8,["user"])])):(0,o.kq)("",!0),t.user?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",f,(0,r.zw)(e.maybeLocalizedEmojiName(t)),1)),(0,o._)("span",g,(0,r.zw)(t.detailText),1)])],10,c)})),128))],8,u)]})),_:1},512)],2)}]])},98471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>N});var o=n(66252),r=n(3577),i=n(49963),s={class:"heading"},a={ref:"header",class:"emoji-tabs"},u=["title","onClick"],c={key:0,class:"emoji-picker-header-image"},l={key:0,class:"additional-tabs"},d=["title"],p={key:0,class:"content"},m={class:"emoji-search"},h=["placeholder"],f={class:"emoji-group"},g={key:0,class:"emoji-group-title"},v=["title","onClick"],w={key:0,class:"emoji-picker-emoji -unicode"},b={class:"keep-open"},y={key:0,class:"stickers-content"},D=n(29439),_=n(4942),k=n(93433),C=n(8400),S=n.n(C),j=n(92742),F=n.n(j),A=n(23279),O=n.n(A),E=n(66141),z=n(84535),P=n(32140),I=n(8312),x=n(9382),T=n(84131);function $(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$(Object(n),!0).forEach((function(t){(0,_.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return M(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?M(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}x.vI.add(T.IA$,T.L4e,T.RKn,T.ctA,T.ILF,T.kQp,T.E1P,T.k0d,T.Elv,T.X8G,T.dT$,T.RrC);var L={"smileys-and-emotion":"smile","people-and-body":"user","animals-and-nature":"paw","food-and-drink":"ice-cream","travel-and-places":"bus",activities:"basketball-ball",objects:"lightbulb",symbols:"code",flags:"flag"},R=function(e,t,n){var o=[e.displayText,n(e)];return e.annotations&&t.forEach((function(t){var n,r,i=(null===(n=e.annotations[t])||void 0===n?void 0:n.keywords)||[],s=null===(r=e.annotations[t])||void 0===r?void 0:r.name;o.push.apply(o,(0,k.Z)(i.concat([s]).filter((function(e){return e}))))})),o};const q={props:{enableStickerPicker:{required:!1,type:Boolean,default:!1},hideCustomEmoji:{required:!1,type:Boolean,default:!1}},inject:["popoversZLayer"],data:function(){return{keyword:"",activeGroup:"custom",showingStickers:!1,groupsScrolledClass:"scrolled-top",keepOpen:!1,customEmojiTimeout:null,contentLoaded:!1,groupRefs:{},emojiRefs:{},filteredEmojiGroups:[],width:0}},components:{StickerPicker:(0,o.RC)((function(){return n.e(159).then(n.bind(n,30159))})),Checkbox:E.Z,StillImage:P.Z,Popover:z.default},methods:{showPicker:function(){this.$refs.popover.showPopover(),this.onShowing()},hidePicker:function(){this.$refs.popover.hidePopover()},setAnchorEl:function(e){this.$refs.popover.setAnchorEl(e)},setGroupRef:function(e){var t=this;return function(n){t.groupRefs[e]=n}},onPopoverShown:function(){this.$emit("show")},onPopoverClosed:function(){this.$emit("close")},onStickerUploaded:function(e){this.$emit("sticker-uploaded",e)},onStickerUploadFailed:function(e){this.$emit("sticker-upload-failed",e)},onEmoji:function(e){var t=e.imageUrl?":".concat(e.displayText,":"):e.replacement;this.keepOpen||this.$refs.popover.hidePopover(),this.$emit("emoji",{insertion:t,keepOpen:this.keepOpen})},onScroll:function(e,t,n,o){var r=this.$refs["emoji-groups"].$el;this.scrolledGroup(r,n,o)},scrolledGroup:function(e,t,n){var o=this,r=e.scrollTop+5;this.$nextTick((function(){o.emojiItems.slice(t,n+1).forEach((function(e){var t=e.id.replace(/^row-\d+-/,""),n=o.groupRefs["group-"+e.id];if(n){var i=n.$el.parentElement;i&&i&&function(e){var t=e.style.transform,n=/translateY\((\d+)px\)/.exec(t);return n?n[1]:0}(i)<=r&&(o.activeGroup=t)}})),o.scrollHeader()}))},scrollHeader:function(){var e=this.groupRefs["group-header-"+this.activeGroup],t=e.offsetLeft,n=t+e.offsetWidth,o=this.$refs.header,r=o.scrollLeft,i=r+o.clientWidth,s=function(e){o.scrollLeft=e};t-7<r?s(t-7):n+7>i&&s(n+7-o.clientWidth)},highlight:function(e){this.setShowStickers(!1);var t=this.emojiItems.findIndex((function(t){return t.id===e}));this.$refs["emoji-groups"].scrollToItem(t)},updateScrolledClass:function(e){e.scrollTop<=5?this.groupsScrolledClass="scrolled-top":e.scrollTop>=e.scrollTopMax-5?this.groupsScrolledClass="scrolled-bottom":this.groupsScrolledClass="scrolled-middle"},toggleStickers:function(){this.showingStickers=!this.showingStickers},setShowStickers:function(e){this.showingStickers=e},filterByKeyword:function(e,t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0;if(""===t)return e;var r,i=t.toLowerCase(),s=[],a=U(e);try{for(a.s();!(r=a.n()).done;){var u=r.value,c=R(u,n,o).map((function(e){return e.toLowerCase().indexOf(i)})).filter((function(e){return e>-1})),l=c.length?Math.min.apply(Math,(0,k.Z)(c)):-1;l>-1&&(Array.isArray(s[l])||(s[l]=[]),s[l].push(u))}}catch(e){a.e(e)}finally{a.f()}return s.flat()}(e,t,this.languages,this.maybeLocalizedEmojiName)},onShowing:function(){var e=this,t=this.contentLoaded;this.recalculateItemPerRow(),this.$nextTick((function(){e.$refs.search.focus()})),this.contentLoaded=!0,this.filteredEmojiGroups=this.getFilteredEmojiGroups(),t||this.$nextTick((function(){e.defaultGroup&&e.highlight(e.defaultGroup)}))},getFilteredEmojiGroups:function(){var e=this;return this.allEmojiGroups.map((function(t){return B(B({},t),{},{emojis:e.filterByKeyword(t.emojis,F()(e.keyword))})})).filter((function(e){return e.emojis.length>0}))},recalculateItemPerRow:function(){var e=this;this.$nextTick((function(){e.$refs["emoji-groups"]&&(e.width=e.$refs["emoji-groups"].$el.clientWidth)}))}},watch:{keyword:function(){this.onScroll(),this.debouncedHandleKeywordChange()},allCustomGroups:function(){this.filteredEmojiGroups=this.getFilteredEmojiGroups()}},computed:{minItemSize:function(){return this.emojiHeight},emojiHeight:function(){return 36},emojiWidth:function(){return 36},itemPerRow:function(){return this.width?Math.floor(this.width/this.emojiWidth-1):6},activeGroupView:function(){return this.showingStickers?"":this.activeGroup},stickersAvailable:function(){return this.$store.state.instance.stickers?this.$store.state.instance.stickers.length>0:0},allCustomGroups:function(){if(this.hideCustomEmoji)return{};var e=this.$store.getters.groupedCustomEmojis;return e.unpacked&&(e.unpacked.text=this.$t("emoji.unpacked")),e},defaultGroup:function(){return Object.keys(this.allCustomGroups)[0]},unicodeEmojiGroups:function(){var e=this;return this.$store.getters.standardEmojiGroupList.map((function(t){return{id:"standard-".concat(t.id),text:e.$t("emoji.unicode_groups.".concat(t.id)),icon:L[t.id],emojis:t.emojis}}))},allEmojiGroups:function(){return Object.entries(this.allCustomGroups).map((function(e){var t=(0,D.Z)(e,2);return t[0],t[1]})).concat(this.unicodeEmojiGroups)},stickerPickerEnabled:function(){return 0!==(this.$store.state.instance.stickers||[]).length},debouncedHandleKeywordChange:function(){var e=this;return O()((function(){e.filteredEmojiGroups=e.getFilteredEmojiGroups()}),500)},emojiItems:function(){var e=this;return this.filteredEmojiGroups.map((function(t){return S()(t.emojis,e.itemPerRow).map((function(e,n){return B(B({},t),{},{id:0===n?t.id:"row-".concat(n,"-").concat(t.id),emojis:e,isFirstRow:0===n})}))})).reduce((function(e,t){return e.concat(t)}),[])},languages:function(){return(0,I.ensureFinalFallback)(this.$store.getters.mergedConfig.interfaceLanguage)},maybeLocalizedEmojiName:function(){var e=this;return function(t){if(!t.annotations)return t.displayText;if(t.displayTextI18n)return e.$t(t.displayTextI18n.key,t.displayTextI18n.args);var n,o=U(e.languages);try{for(o.s();!(n=o.n()).done;){var r,i=n.value;if(null!==(r=t.annotations[i])&&void 0!==r&&r.name)return t.annotations[i].name}}catch(e){o.e(e)}finally{o.f()}return t.displayText}},isInModal:function(){return"modals"===this.popoversZLayer}}},N=(0,n(83744).Z)(q,[["render",function(e,t,n,D,_,k){var C=(0,o.up)("still-image"),S=(0,o.up)("FAIcon"),j=(0,o.up)("DynamicScrollerItem"),F=(0,o.up)("DynamicScroller"),A=(0,o.up)("Checkbox"),O=(0,o.up)("sticker-picker"),E=(0,o.up)("Popover"),z=(0,o.Q2)("body-scroll-lock");return(0,o.wg)(),(0,o.j4)(E,{ref:"popover",trigger:"click","popover-class":"emoji-picker popover-default","trigger-attrs":{"aria-hidden":!0},onShow:e.onPopoverShown,onClose:e.onPopoverClosed},{content:(0,o.w5)((function(){return[(0,o._)("div",s,[(0,o.wy)(((0,o.wg)(),(0,o.iD)("span",a,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.filteredEmojiGroups,(function(t){return(0,o.wg)(),(0,o.iD)("span",{ref_for:!0,ref:e.setGroupRef("group-header-"+t.id),key:t.id,class:(0,r.C_)(["emoji-tabs-item",{active:e.activeGroupView===t.id}]),title:t.text,role:"button",onClick:(0,i.iM)((function(n){return e.highlight(t.id)}),["prevent"])},[t.image?((0,o.wg)(),(0,o.iD)("span",c,[(0,o.Wm)(C,{alt:t.text,src:t.image},null,8,["alt","src"])])):((0,o.wg)(),(0,o.j4)(S,{key:1,icon:t.icon,"fixed-width":""},null,8,["icon"]))],10,u)})),128))])),[[z,e.isInModal]]),e.stickerPickerEnabled?((0,o.wg)(),(0,o.iD)("span",l,[(0,o._)("span",{class:(0,r.C_)(["stickers-tab-icon additional-tabs-item",{active:e.showingStickers}]),title:e.$t("emoji.stickers"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.toggleStickers&&e.toggleStickers.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(S,{icon:"sticky-note","fixed-width":""})],10,d)])):(0,o.kq)("",!0)]),e.contentLoaded?((0,o.wg)(),(0,o.iD)("div",p,[(0,o._)("div",{class:(0,r.C_)(["emoji-content",{hidden:e.showingStickers}])},[(0,o._)("div",m,[(0,o.wy)((0,o._)("input",{ref:"search","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.keyword=t}),type:"text",class:"form-control",placeholder:e.$t("emoji.search_emoji"),onInput:t[2]||(t[2]=function(e){return e.target.composing=!1})},null,40,h),[[i.nr,e.keyword]])]),(0,o.wy)(((0,o.wg)(),(0,o.j4)(F,{ref:"emoji-groups",class:(0,r.C_)(["emoji-groups",e.groupsScrolledClass]),"min-item-size":e.minItemSize,items:e.emojiItems,"emit-update":!0,onUpdate:e.onScroll,onVisible:e.recalculateItemPerRow,onResize:e.recalculateItemPerRow},{default:(0,o.w5)((function(t){var n=t.item,s=t.index,a=t.active;return[(0,o.Wm)(j,{ref:e.setGroupRef("group-"+n.id),item:n,active:a,"data-index":s,"size-dependencies":[n.emojis.length]},{default:(0,o.w5)((function(){return[(0,o._)("div",f,[n.isFirstRow?((0,o.wg)(),(0,o.iD)("h6",g,(0,r.zw)(n.text),1)):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.emojis,(function(t){return(0,o.wg)(),(0,o.iD)("span",{key:n.id+t.displayText,title:e.maybeLocalizedEmojiName(t),class:"emoji-item",role:"button",onClick:(0,i.iM)((function(n){return e.onEmoji(t)}),["stop","prevent"])},[t.imageUrl?((0,o.wg)(),(0,o.j4)(C,{key:1,class:"emoji-picker-emoji -custom",loading:"lazy",alt:e.maybeLocalizedEmojiName(t),src:t.imageUrl,"data-emoji-name":n.id+t.displayText},null,8,["alt","src","data-emoji-name"])):((0,o.wg)(),(0,o.iD)("span",w,(0,r.zw)(t.replacement),1))],8,v)})),128))])]})),_:2},1032,["item","active","data-index","size-dependencies"])]})),_:1},8,["class","min-item-size","items","onUpdate","onVisible","onResize"])),[[z,e.isInModal]]),(0,o._)("div",b,[(0,o.Wm)(A,{modelValue:e.keepOpen,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.keepOpen=t})},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("emoji.keep_open")),1)]})),_:1},8,["modelValue"])])],2),e.showingStickers?((0,o.wg)(),(0,o.iD)("div",y,[(0,o.Wm)(O,{onUploaded:e.onStickerUploaded,onUploadFailed:e.onStickerUploadFailed},null,8,["onUploaded","onUploadFailed"])])):(0,o.kq)("",!0)])):(0,o.kq)("",!0)]})),_:1},8,["onShow","onClose"])}]])},72884:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o,r=n(66252),i=n(3577),s={class:"Flash"},a={key:0,class:"label"},u={key:1,class:"label"},c={key:2,class:"label"};const l=(o=null,{getRuffle:function(){return new Promise((function(e,t){if(o)e(o);else{window.RufflePlayer={},window.RufflePlayer.config={polyfills:!1,publicPath:"/static/ruffle"};var n=document.createElement("script");n.src="/static/ruffle/ruffle.js",n.type="text/javascript",n.onerror=function(e){t(e)},n.onabort=function(e){t(e)},n.oncancel=function(e){t(e)},n.onload=function(){o=window.RufflePlayer,e(o)},document.body.appendChild(n)}}))}});var d=n(9382),p=n(84131);d.vI.add(p.Bg$,p.eHv);const m={props:["src"],data:function(){return{player:!1,loaded:!1,ruffleInstance:null}},methods:{openPlayer:function(){var e=this;this.player||(this.player="hidden",l.getRuffle().then((function(t){var n=t.newest().createPlayer();n.config={letterbox:"on"},e.$refs.container.appendChild(n),n.style.width="100%",n.style.height="100%",n.load(e.src).then((function(){e.player=!0})).catch((function(t){console.error("Error loading ruffle",t),e.player="error"})),e.ruffleInstance=n,e.$emit("playerOpened")})))},closePlayer:function(){this.ruffleInstance&&this.ruffleInstance.remove(),this.player=!1,this.$emit("playerClosed")}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,o,l,d){var p=(0,r.up)("FAIcon");return(0,r.wg)(),(0,r.iD)("div",s,[!0===e.player||"hidden"===e.player?((0,r.wg)(),(0,r.iD)("div",{key:0,ref:"container",class:(0,i.C_)(["player",{hidden:"hidden"===e.player}])},null,2)):(0,r.kq)("",!0),!0!==e.player?((0,r.wg)(),(0,r.iD)("button",{key:1,class:"button-unstyled placeholder",onClick:t[0]||(t[0]=function(){return e.openPlayer&&e.openPlayer.apply(e,arguments)})},["hidden"===e.player?((0,r.wg)(),(0,r.iD)("span",a,(0,i.zw)(e.$t("general.loading")),1)):(0,r.kq)("",!0),"error"===e.player?((0,r.wg)(),(0,r.iD)("span",u,(0,i.zw)(e.$t("general.flash_fail")),1)):((0,r.wg)(),(0,r.iD)("span",c,[(0,r._)("p",null,(0,i.zw)(e.$t("general.flash_content")),1),(0,r._)("p",null,[(0,r.Wm)(p,{icon:"exclamation-triangle"}),(0,r.Uk)(" "+(0,i.zw)(e.$t("general.flash_security")),1)])]))])):(0,r.kq)("",!0)])}]])},34837:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(66252),r=n(3577),i=["disabled","title"],s=["textContent"],a=n(1447),u=n(29439),c=function e(t,n,o){return new Promise((function(e,r){setTimeout((function(){o.state.api.backendInteractor.fetchUserRelationship({id:n}).then((function(e){return o.commit("updateUserRelationship",[e]),e})).then((function(n){return e([n.following,n.requested,n.locked,t])})).catch((function(e){return r(e)}))}),500)})).then((function(t){var r=(0,u.Z)(t,4),i=r[0],s=r[1],a=r[2],c=r[3];i||a&&s||!(c<=3)||e(++c,n,o)}))},l=function(e,t){return new Promise((function(n,o){t.state.api.backendInteractor.followUser({id:e}).then((function(e){if(t.commit("updateUserRelationship",[e]),!(e.following||e.locked&&e.requested))return c(1,e,t).then((function(){n()}));n()}))}))};const d={props:["relationship","user","labelFollowing","buttonClass"],components:{ConfirmModal:a.Z},data:function(){return{inProgress:!1,showingConfirmUnfollow:!1}},computed:{shouldConfirmUnfollow:function(){return this.$store.getters.mergedConfig.modalOnUnfollow},isPressed:function(){return this.inProgress||this.relationship.following},title:function(){return this.inProgress||this.relationship.following?this.$t("user_card.follow_unfollow"):this.relationship.requested?this.$t("user_card.follow_cancel"):this.$t("user_card.follow")},label:function(){return this.inProgress?this.$t("user_card.follow_progress"):this.relationship.following?this.labelFollowing||this.$t("user_card.following"):this.relationship.requested?this.$t("user_card.follow_sent"):this.$t("user_card.follow")},disabled:function(){return this.inProgress||this.user.deactivated}},methods:{showConfirmUnfollow:function(){this.showingConfirmUnfollow=!0},hideConfirmUnfollow:function(){this.showingConfirmUnfollow=!1},onClick:function(){this.relationship.following||this.relationship.requested?this.unfollow():this.follow()},follow:function(){var e=this;this.inProgress=!0,l(this.relationship.id,this.$store).then((function(){e.inProgress=!1}))},unfollow:function(){this.shouldConfirmUnfollow?this.showConfirmUnfollow():this.doUnfollow()},doUnfollow:function(){var e=this,t=this.$store;this.inProgress=!0,function(e,t){return new Promise((function(n,o){t.state.api.backendInteractor.unfollowUser({id:e}).then((function(e){t.commit("updateUserRelationship",[e]),n({updated:e})}))}))}(this.relationship.id,t).then((function(){e.inProgress=!1,t.commit("removeStatus",{timeline:"friends",userId:e.relationship.id})})),this.hideConfirmUnfollow()}}},p=(0,n(83744).Z)(d,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("i18n-t"),d=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("button",{class:(0,r.C_)(["btn button-default follow-button",{toggled:e.isPressed}]),disabled:e.disabled,title:e.title,onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[(0,o.Uk)((0,r.zw)(e.label)+" ",1),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmUnfollow?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("user_card.unfollow_confirm_title"),"confirm-text":e.$t("user_card.unfollow_confirm_accept_button"),"cancel-text":e.$t("user_card.unfollow_confirm_cancel_button"),onAccepted:e.doUnfollow,onCancelled:e.hideConfirmUnfollow},{default:(0,o.w5)((function(){return[(0,o.Wm)(l,{keypath:"user_card.unfollow_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,s)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))],10,i)}]])},67671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>w});var o=n(66252),r=n(3577),i={class:"gallery-rows"},s={key:0,class:"many-attachments"},a={class:"many-attachments-text"},u={class:"many-attachments-buttons"},c={key:0,class:"many-attachments-button"},l={key:1,class:"many-attachments-button"},d={key:2,class:"many-attachments-button"},p=n(93433),m=n(36968),h=n.n(m),f=n(73303),g=n.n(f);const v={props:["attachments","compact","limitRows","descriptions","limit","nsfw","setMedia","size","editable","removeAttachment","shiftUpAttachment","shiftDnAttachment","editAttachment","grid"],data:function(){return{sizes:{},hidingLong:!0}},components:{Attachment:n(66596).Z},computed:{rows:function(){var e=this;if(!this.attachments)return[];var t=this.limit>0?this.attachments.slice(0,this.limit):this.attachments;return"hide"===this.size?t.map((function(e){return{minimal:!0,items:[e]}})):this.grid?[{grid:!0,items:t}]:t.reduce((function(t,n,o){if(n.mimetype.includes("audio"))return[].concat((0,p.Z)(t),[{audio:!0,items:[n]},{items:[]}]);if(!(n.mimetype.includes("image")||n.mimetype.includes("video")||n.mimetype.includes("flash")))return[].concat((0,p.Z)(t),[{minimal:!0,items:[n]},{items:[]}]);var r=e.attachments.length-o+1,i=t[t.length-1].items;return i.push(n),i.length>=3&&r>3?[].concat((0,p.Z)(t),[{items:[]}]):t}),[{items:[]}]).filter((function(e){return e.items.length>0}))},attachmentsDimensionalScore:function(){return this.rows.reduce((function(e,t){var n=0;return t.minimal?n+=1/8:t.audio?n+=1/4:n+=1/(t.items.length+.6),e+n}),0)},tooManyAttachments:function(){return!this.editable&&"small"!==this.size&&("hide"===this.size?this.attachments.length>8:this.attachmentsDimensionalScore>1)}},methods:{onNaturalSizeLoad:function(e){var t=e.id,n=e.width,o=e.height;h()(this.sizes,t,{width:n,height:o})},rowStyle:function(e){return e.audio?{"padding-bottom":"25%"}:e.minimal||e.grid?void 0:{"padding-bottom":"".concat(100/(e.items.length+.6),"%")}},itemStyle:function(e,t){var n=this,o=g()(t,(function(e){return n.getAspectRatio(e.id)}));return{flex:"".concat(this.getAspectRatio(e)/o," 1 0%")}},getAspectRatio:function(e){var t=this.sizes[e];return t?t.width/t.height:1},toggleHidingLong:function(e){this.hidingLong=e},openGallery:function(){this.$store.dispatch("setMedia",this.attachments),this.$store.dispatch("setCurrentMedia",this.attachments[0])},onMedia:function(){this.$store.dispatch("setMedia",this.attachments)}}},w=(0,n(83744).Z)(v,[["render",function(e,t,n,p,m,h){var f=(0,o.up)("Attachment");return(0,o.wg)(),(0,o.iD)("div",{ref:"galleryContainer",class:(0,r.C_)(["Gallery",{"-long":e.tooManyAttachments&&e.hidingLong}])},[(0,o._)("div",i,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.rows,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{key:n,class:(0,r.C_)(["gallery-row",{"-audio":t.audio,"-minimal":t.minimal,"-grid":e.grid}]),style:(0,r.j5)(e.rowStyle(t))},[(0,o._)("div",{class:(0,r.C_)(["gallery-row-inner",{"-grid":e.grid}])},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(t.items,(function(i,s){return(0,o.wg)(),(0,o.j4)(f,{key:i.id,class:"gallery-item",compact:e.compact,nsfw:e.nsfw,attachment:i,size:e.size,editable:e.editable,remove:e.removeAttachment,"shift-up":!(0===s&&0===n)&&e.shiftUpAttachment,"shift-dn":!(s===t.items.length-1&&n===e.rows.length-1)&&e.shiftDnAttachment,edit:e.editAttachment,description:e.descriptions&&e.descriptions[i.id],"hide-description":"small"===e.size||e.tooManyAttachments&&e.hidingLong,style:(0,r.j5)(e.itemStyle(i.id,t.items)),onSetMedia:e.onMedia,onNaturalSizeLoad:e.onNaturalSizeLoad},null,8,["compact","nsfw","attachment","size","editable","remove","shift-up","shift-dn","edit","description","hide-description","style","onSetMedia","onNaturalSizeLoad"])})),128))],2)],6)})),128))]),e.tooManyAttachments?((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("div",a,(0,r.zw)(e.$t("status.many_attachments",{number:e.attachments.length})),1),(0,o._)("div",u,[e.hidingLong?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",c,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[0]||(t[0]=function(t){return e.toggleHidingLong(!0)})},(0,r.zw)(e.$t("status.collapse_attachments")),1)])),e.hidingLong?((0,o.wg)(),(0,o.iD)("span",l,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[1]||(t[1]=function(t){return e.toggleHidingLong(!1)})},(0,r.zw)(e.$t("status.show_all_attachments")),1)])):(0,o.kq)("",!0),e.hidingLong?((0,o.wg)(),(0,o.iD)("span",d,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[2]||(t[2]=function(){return e.openGallery&&e.openGallery.apply(e,arguments)})},(0,r.zw)(e.$t("status.open_gallery")),1)])):(0,o.kq)("",!0)])])):(0,o.kq)("",!0)],2)}]])},86269:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(66252),r=n(3577),i={class:"interface-language-switcher"},s={class:"setting-list"},a=["value"],u=["onClick"],c=n(93433),l=n(39776);const d={components:{Select:n(76990).Z},props:{promptText:{type:String,required:!0},language:{type:[Array,String],required:!0},setLanguage:{type:Function,required:!0}},computed:{languages:function(){return l.Z.languages},controlledLanguage:{get:function(){return Array.isArray(this.language)?this.language:[this.language]},set:function(e){this.setLanguage(e)}}},methods:{getLanguageName:function(e){return l.Z.getLanguageName(e)},addLanguage:function(){this.controlledLanguage=[].concat((0,c.Z)(this.controlledLanguage),[""])},setLanguageAt:function(e,t){var n=(0,c.Z)(this.controlledLanguage);n[e]=t,this.controlledLanguage=n},removeLanguageAt:function(e){var t=(0,c.Z)(this.controlledLanguage);t.splice(e,1),this.controlledLanguage=t}}},p=(0,n(83744).Z)(d,[["render",function(e,t,n,c,l,d){var p=(0,o.up)("Select");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("label",null,(0,r.zw)(n.promptText),1),(0,o._)("ul",s,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(d.controlledLanguage.keys(),(function(t){return(0,o.wg)(),(0,o.iD)("li",{key:t},[(0,o._)("label",null,[(0,o.Uk)((0,r.zw)(0===t?e.$t("settings.primary_language"):e.$tc("settings.fallback_language",t,{index:t}))+" ",1),(0,o.Wm)(p,{class:"language-select","model-value":d.controlledLanguage[t],"onUpdate:modelValue":function(e){return d.setLanguageAt(t,e)}},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(d.languages,(function(e){return(0,o.wg)(),(0,o.iD)("option",{key:e.code,value:e.code},(0,r.zw)(e.name),9,a)})),128))]})),_:2},1032,["model-value","onUpdate:modelValue"])]),d.controlledLanguage.length>1&&0!==t?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default btn",onClick:function(){return d.removeLanguageAt(t)}},(0,r.zw)(e.$t("settings.remove_language")),9,u)):(0,o.kq)("",!0)])})),128)),(0,o._)("li",null,[(0,o._)("button",{class:"button-default btn",onClick:t[0]||(t[0]=function(){return d.addLanguage&&d.addLanguage.apply(d,arguments)})},(0,r.zw)(e.$t("settings.add_language")),1)])])])}]])},92798:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var o=n(66252),r=n(3577),i=["href"],s={key:0,class:"card-image"},a=["src"],u={class:"card-content"},c={class:"card-host faint"},l={key:0,class:"nsfw-alert alert warning"},d={class:"card-title"},p={key:0,class:"card-description"},m=n(4942);function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const f={name:"LinkPreview",props:["card","size","nsfw"],data:function(){return{imageLoaded:!1}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?h(Object(n),!0).forEach((function(t){(0,m.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({useImage:function(){return this.card.image&&!this.censored&&"hide"!==this.size},censored:function(){return this.nsfw&&this.hideNsfwConfig},useDescription:function(){return this.card.description&&/\S/.test(this.card.description)},hideNsfwConfig:function(){return this.mergedConfig.hideNsfw}},(0,n(989).Se)(["mergedConfig"])),created:function(){var e=this;if(this.useImage){var t=new Image;t.onload=function(){e.imageLoaded=!0},t.src=this.card.image}}},g=(0,n(83744).Z)(f,[["render",function(e,t,n,m,h,f){return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("a",{class:"link-preview-card",href:e.card.url,target:"_blank",rel:"noopener"},[e.useImage&&e.imageLoaded?((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("img",{src:e.card.image},null,8,a)])):(0,o.kq)("",!0),(0,o._)("div",u,[(0,o._)("span",c,[e.censored?((0,o.wg)(),(0,o.iD)("span",l,(0,r.zw)(e.$t("status.nsfw")),1)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(e.card.provider_name),1)]),(0,o._)("h4",d,(0,r.zw)(e.card.title),1),e.useDescription?((0,o.wg)(),(0,o.iD)("p",p,(0,r.zw)(e.card.description),1)):(0,o.kq)("",!0)])],8,i)])}]])},88369:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r={class:"list",role:"list"},i={key:0,class:"list-empty-content faint"};const s={props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(e){return e.id}}}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("div",r,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.items,(function(t){return(0,o.wg)(),(0,o.iD)("div",{key:n.getKey(t),class:"list-item",role:"listitem"},[(0,o.WI)(e.$slots,"item",{item:t})])})),128)),0===n.items.length&&e.$slots.empty?((0,o.wg)(),(0,o.iD)("div",i,[(0,o.WI)(e.$slots,"empty")])):(0,o.kq)("",!0)])}]])},37804:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(66252),r=n(3577),i=["title"],s=["disabled","accept"],a=n(7257),u=n(65079),c=n(9382),l=n(84131);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}c.vI.add(l.cf$,l.IJ7);const p={data:function(){return{uploadCount:0,uploadReady:!0}},computed:{uploading:function(){return this.uploadCount>0}},methods:{onClick:function(){this.uploadReady&&this.$refs.input.click()},uploadFile:function(e){var t=this,n=this.$store;if(e.size>n.state.instance.uploadlimit){var o=u.Z.fileSizeFormat(e.size),r=u.Z.fileSizeFormat(n.state.instance.uploadlimit);t.$emit("upload-failed","file_too_big",{filesize:o.num,filesizeunit:o.unit,allowedsize:r.num,allowedsizeunit:r.unit})}else{var i=new FormData;i.append("file",e),t.$emit("uploading"),t.uploadCount++,a.Z.uploadMedia({store:n,formData:i}).then((function(e){t.$emit("uploaded",e),t.decreaseUploadCount()}),(function(e){console.error("Error uploading file",e),t.$emit("upload-failed","default"),t.decreaseUploadCount()}))}},decreaseUploadCount:function(){this.uploadCount--,0===this.uploadCount&&this.$emit("all-uploaded")},clearFile:function(){var e=this;this.uploadReady=!1,this.$nextTick((function(){e.uploadReady=!0}))},multiUpload:function(e){var t,n=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(e);try{for(n.s();!(t=n.n()).done;){var o=t.value;this.uploadFile(o)}}catch(e){n.e(e)}finally{n.f()}},change:function(e){var t=e.target;this.multiUpload(t.files)}},props:{dropFiles:Object,disabled:Boolean,normalButton:Boolean,acceptTypes:{type:String,default:"*/*"}},watch:{dropFiles:function(e){this.uploading||this.multiUpload(e)}}},m=(0,n(83744).Z)(p,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("button",{class:(0,r.C_)(["media-upload",[e.normalButton?"button-default btn":"button-unstyled",{disabled:e.disabled}]]),title:e.$t("tool_tip.media_upload"),onClick:t[1]||(t[1]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[e.uploading?((0,o.wg)(),(0,o.j4)(l,{key:0,class:"progress-icon",icon:"circle-notch",spin:""})):(0,o.kq)("",!0),e.uploading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(l,{key:1,class:"new-icon",icon:"upload"})),e.normalButton?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Uk)((0,r.zw)(" ")+" "+(0,r.zw)(e.uploading?e.$t("general.loading"):e.$t("tool_tip.media_upload")),1)],64)):(0,o.kq)("",!0),e.uploadReady?((0,o.wg)(),(0,o.iD)("input",{key:3,ref:"input",class:"hidden-input-file",disabled:e.disabled,type:"file",multiple:"true",accept:e.acceptTypes,onChange:t[0]||(t[0]=function(){return e.change&&e.change.apply(e,arguments)})},null,40,s)):(0,o.kq)("",!0)],10,i)}]])},20460:(e,t,n)=>{"use strict";n.d(t,{Z:()=>A});var o=n(66252),r=n(3577),i=n(49963),s={class:"MentionLink"},a=["href","innerHTML"],u=["href"],c={class:"shortName"},l=["innerHTML"],d=["innerHTML"],p={ref:"full",class:"full"},m=["innerHTML"],h=["innerHTML"],f=n(44925),g=n(4942),v=n(4493),w=n(989),b=n(95052),y=n(48173),D=n(42262),_=n(9382),k=n(84131),C=["backgroundColor","backgroundPosition","backgroundImage"];function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?S(Object(n),!0).forEach((function(t){(0,g.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}_.vI.add(k.IBq);const F={name:"MentionLink",components:{UserAvatar:y.default,UnicodeDomainIndicator:D.Z,UserPopover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},props:{url:{required:!0,type:String},content:{required:!0,type:String},userId:{required:!1,type:String},userScreenName:{required:!1,type:String}},data:function(){return{hasSelection:!1}},methods:{onClick:function(){if(!this.shouldShowTooltip){var e=(0,v.Z)(this.userId||this.user.id,this.userScreenName||this.user.screen_name);this.$router.push(e)}},handleSelection:function(){this.hasSelection=document.getSelection().containsNode(this.$refs.full,!0)}},mounted:function(){document.addEventListener("selectionchange",this.handleSelection)},unmounted:function(){document.removeEventListener("selectionchange",this.handleSelection)},computed:j(j({user:function(){return this.url&&this.$store&&this.$store.getters.findUserByUrl(this.url)},isYou:function(){return this.user&&this.user.id===this.currentUser.id},userName:function(){return this.user&&this.userNameFullUi.split("@")[0]},serverName:function(){return this.user&&(this.userNameFullUi.split("@")[1]||this.$store.getters.instanceDomain)},userNameFull:function(){return this.user&&this.user.screen_name},userNameFullUi:function(){return this.user&&this.user.screen_name_ui},highlight:function(){return this.user&&this.mergedConfig.highlight[this.user.screen_name]},highlightType:function(){return this.highlight&&"-"+this.highlight.type},highlightClass:function(){if(this.highlight)return(0,b.M)(this.user)},style:function(){if(this.highlight){var e=(0,b.q)(this.highlight);return e.backgroundColor,e.backgroundPosition,e.backgroundImage,(0,f.Z)(e,C)}},classnames:function(){return[{"-you":this.isYou&&this.shouldBoldenYou,"-highlighted":this.highlight,"-has-selection":this.hasSelection},this.highlightType]},useAtIcon:function(){return this.mergedConfig.useAtIcon},isRemote:function(){return this.userName!==this.userNameFull},shouldShowFullUserName:function(){var e=this.mergedConfig.mentionLinkDisplay;return"short"!==e&&("full"===e||this.isRemote)},shouldShowTooltip:function(){return this.mergedConfig.mentionLinkShowTooltip},shouldShowAvatar:function(){return this.mergedConfig.mentionLinkShowAvatar},shouldShowYous:function(){return this.mergedConfig.mentionLinkShowYous},shouldBoldenYou:function(){return this.mergedConfig.mentionLinkBoldenYou},shouldFadeDomain:function(){return this.mergedConfig.mentionLinkFadeDomain}},(0,w.Se)(["mergedConfig"])),(0,w.rn)({currentUser:function(e){return e.users.currentUser}}))},A=(0,n(83744).Z)(F,[["render",function(e,t,n,f,g,v){var w=(0,o.up)("UserAvatar"),b=(0,o.up)("FAIcon"),y=(0,o.up)("UnicodeDomainIndicator"),D=(0,o.up)("UserPopover");return(0,o.wg)(),(0,o.iD)("span",s,[e.user?((0,o.wg)(),(0,o.j4)(D,{key:1,"user-id":e.user.id,disabled:!e.shouldShowTooltip},{default:(0,o.w5)((function(){return[e.user?((0,o.wg)(),(0,o.iD)("span",{key:0,class:(0,r.C_)(["new",e.classnames]),style:(0,r.j5)(e.style)},[(0,o._)("a",{class:(0,r.C_)(["short button-unstyled",{"-with-tooltip":e.shouldShowTooltip}]),href:e.url,onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.onClick&&e.onClick.apply(e,arguments)}),["prevent"]))},[e.shouldShowAvatar?((0,o.wg)(),(0,o.j4)(w,{key:0,class:"mention-avatar",user:e.user},null,8,["user"])):(0,o.kq)("",!0),(0,o._)("span",c,[e.useAtIcon?((0,o.wg)(),(0,o.j4)(b,{key:0,size:"sm",icon:"at",class:"at"})):(0,o.kq)("",!0),(0,o.Uk)((0,r.zw)(e.useAtIcon?"":"@"),1),(0,o._)("span",{class:"userName",innerHTML:e.userName},null,8,l),e.shouldShowFullUserName?((0,o.wg)(),(0,o.iD)("span",{key:1,class:(0,r.C_)(["serverName",{"-faded":e.shouldFadeDomain}]),innerHTML:"@"+e.serverName},null,10,d)):(0,o.kq)("",!0),e.shouldShowFullUserName?((0,o.wg)(),(0,o.j4)(y,{key:2,user:e.user},null,8,["user"])):(0,o.kq)("",!0)]),e.isYou&&e.shouldShowYous?((0,o.wg)(),(0,o.iD)("span",{key:1,class:(0,r.C_)({"-you":e.shouldBoldenYou})},(0,r.zw)(" "+e.$t("status.you")),3)):(0,o.kq)("",!0)],10,u),(0,o._)("span",p,[(0,o.Uk)(" @"),(0,o._)("span",{innerHTML:e.userName},null,8,m),(0,o._)("span",{innerHTML:"@"+e.serverName},null,8,h)],512)],6)):(0,o.kq)("",!0)]})),_:1},8,["user-id","disabled"])):((0,o.wg)(),(0,o.iD)("a",{key:0,href:e.url,class:"original",target:"_blank",innerHTML:e.content},null,8,a))])}]])},21268:(e,t,n)=>{"use strict";n.d(t,{d:()=>p,Z:()=>h});var o=n(66252),r=n(3577),i={class:"MentionsLine"},s={key:0,class:"extraMentions"},a={key:0,class:"fullExtraMentions"},u=n(4942),c=n(20460),l=n(989);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var p=5;const m={name:"MentionsLine",props:{mentions:{required:!0,type:Array}},data:function(){return{expanded:!1}},components:{MentionLink:c.Z},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({mentionsComputed:function(){return this.mentions.slice(0,p)},extraMentions:function(){return this.mentions.slice(p)},manyMentions:function(){return this.extraMentions.length>0}},(0,l.Se)(["mergedConfig"])),methods:{toggleShowMore:function(){this.expanded=!this.expanded}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("MentionLink");return(0,o.wg)(),(0,o.iD)("span",i,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.mentionsComputed,(function(e){return(0,o.wg)(),(0,o.j4)(d,{key:e.index,class:"mention-link",content:e.content,url:e.url},null,8,["content","url"])})),128)),e.manyMentions?((0,o.wg)(),(0,o.iD)("span",s,[e.expanded?((0,o.wg)(),(0,o.iD)("span",a,[(0,o.Uk)((0,r.zw)(" ")),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.extraMentions,(function(e){return(0,o.wg)(),(0,o.j4)(d,{key:e.index,class:"mention-link",content:e.content,url:e.url},null,8,["content","url"])})),128))])):(0,o.kq)("",!0),e.expanded?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled showMoreLess",onClick:t[0]||(t[0]=function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)})},(0,r.zw)(e.$t("status.plus_more",{number:e.extraMentions.length})),1)),e.expanded?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled showMoreLess",onClick:t[1]||(t[1]=function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)})},(0,r.zw)(e.$t("general.show_less")),1)):(0,o.kq)("",!0)])):(0,o.kq)("",!0)])}]])},48328:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r=n(3577),i=n(49963);const s={provide:{popoversZLayer:"modals"},props:{isOpen:{type:Boolean,default:!0},noBackground:{type:Boolean,default:!1}},computed:{classes:function(){return{"modal-background":!this.noBackground,open:this.isOpen}}}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){var c=(0,o.Q2)("body-scroll-lock");return(0,o.wy)(((0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["modal-view",u.classes]),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.$emit("backdropClicked")}),["self"]))},[(0,o.WI)(e.$slots,"default")],2)),[[i.F8,n.isOpen],[c,n.isOpen&&!n.noBackground]])}]])},93737:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Be});var o=n(66252),r=n(3577),i=n(49963),s={key:0,class:"notifications-heading panel-heading -sticky"},a={class:"title"},u={key:0,class:"badge badge-notification unseen-count"},c={key:0,class:"rightside-button"},l=["title"],d={class:"panel-body",role:"feed"},p=(0,o._)("div",{class:"notification-overlay"},null,-1),m={class:"panel-footer"},h={key:0,class:"new-status-notification text-center faint"},f={class:"new-status-notification text-center"},g={key:2,class:"new-status-notification text-center"},v=n(4942),w=n(989),b={key:0},y={key:1},D={key:0,class:"Notification container -muted"},_=["href"],k={class:"notification-right"},C={class:"notification-details"},S={class:"name-and-action"},j={key:0},F=["title"],A={key:2},O={key:3},E={key:4},z={key:5},P={key:6},I={key:7},x=["src","alt","title"],T={key:1,class:"emoji-reaction-emoji"},$={key:8},B={key:9},U={key:0,class:"timeago"},M=["title","aria-expanded"],L={key:1,class:"timeago"},R={class:"faint"},q=["title","aria-expanded"],N={key:0,class:"follow-text"},Z={key:0,style:{"white-space":"nowrap"}},W=["title"],H=["title"],V={key:1,class:"move-text"},K=n(10252),G=n(96686),Y=n(48173),J=n(20392),Q=n(1840),X={class:"Report"},ee={class:"reported-user"},te={class:"reporter"},ne={class:"report-state"},oe=["value"],re={key:0},ie={class:"reported-status-heading"},se={class:"reported-status-name"},ae={key:1},ue=n(76990),ce=n(92820),le=n(4493);const de={props:["reportId"],components:{Select:ue.Z,StatusContent:K.Z,Timeago:Q.Z,RichContent:ce.Z},computed:{report:function(){return console.log(this.$store.state.reports.reports[this.reportId]||{}),this.$store.state.reports.reports[this.reportId]||{}},state:{get:function(){return this.report.state},set:function(e){this.setReportState(e)}}},methods:{generateUserProfileLink:function(e){return(0,le.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},setReportState:function(e){return this.$store.dispatch("setReportState",{id:this.report.id,state:e})}}};var pe=n(83744);const me=(0,pe.Z)(de,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("router-link"),c=(0,o.up)("Select"),l=(0,o.up)("RichContent"),d=(0,o.up)("Timeago"),p=(0,o.up)("status-content");return(0,o.wg)(),(0,o.iD)("div",X,[(0,o._)("div",ee,[(0,o._)("span",null,(0,r.zw)(e.$t("report.reported_user")),1),(0,o.Wm)(u,{to:e.generateUserProfileLink(e.report.acct)},{default:(0,o.w5)((function(){return[(0,o.Uk)(" @"+(0,r.zw)(e.report.acct.screen_name),1)]})),_:1},8,["to"])]),(0,o._)("div",te,[(0,o._)("span",null,(0,r.zw)(e.$t("report.reporter")),1),(0,o.Wm)(u,{to:e.generateUserProfileLink(e.report.actor)},{default:(0,o.w5)((function(){return[(0,o.Uk)(" @"+(0,r.zw)(e.report.actor.screen_name),1)]})),_:1},8,["to"])]),(0,o._)("div",ne,[(0,o._)("span",null,(0,r.zw)(e.$t("report.state")),1),(0,o.Wm)(c,{id:e.report-e.state,modelValue:e.state,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.state=t}),class:"form-control"},{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.iD)(o.HY,null,(0,o.Ko)(["open","closed","resolved"],(function(t){return(0,o._)("option",{key:t,value:t},(0,r.zw)(e.$t("report.state_"+t)),9,oe)})),64))]})),_:1},8,["id","modelValue"])]),(0,o.Wm)(l,{class:"report-content",html:e.report.content,emoji:[]},null,8,["html"]),e.report.statuses.length?((0,o.wg)(),(0,o.iD)("div",re,[(0,o._)("small",null,(0,r.zw)(e.$t("report.reported_statuses")),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.report.statuses,(function(e){return(0,o.wg)(),(0,o.j4)(u,{key:e.id,to:{name:"conversation",params:{id:e.id}},class:"reported-status"},{default:(0,o.w5)((function(){return[(0,o._)("div",ie,[(0,o._)("span",se,(0,r.zw)(e.user.name),1),(0,o.Wm)(d,{time:e.created_at,"auto-update":240,class:"faint"},null,8,["time"])]),(0,o.Wm)(p,{status:e},null,8,["status"])]})),_:2},1032,["to"])})),128))])):(0,o.kq)("",!0),e.report.notes.length?((0,o.wg)(),(0,o.iD)("div",ae,[(0,o._)("small",null,(0,r.zw)(e.$t("report.notes")),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.report.notes,(function(e){return(0,o.wg)(),(0,o.iD)("div",{key:e.id,class:"note"},[(0,o._)("span",null,(0,r.zw)(e.content),1),(0,o.Wm)(d,{time:e.created_at,"auto-update":240,class:"faint"},null,8,["time"])])})),128))])):(0,o.kq)("",!0)])}]]);var he=n(12061),fe=n(22588),ge=n(1447),ve=n(52230),we=n(95052),be=n(9382),ye=n(84131);function De(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.LEp,ye.NBC,ye.Tab,ye.x5v,ye.FKd,ye.ILF,ye.Aq,ye.gmr,ye.TTL,ye.V9$);var _e={data:function(){return{statusExpanded:!1,betterShadow:this.$store.state.interface.browserSupport.cssFilter,unmuted:!1,showingApproveConfirmDialog:!1,showingDenyConfirmDialog:!1}},props:["notification"],components:{StatusContent:K.Z,UserAvatar:Y.default,UserCard:J.Z,Timeago:Q.Z,Status:G.default,Report:me,RichContent:ce.Z,UserPopover:fe.default,UserLink:he.Z,ConfirmModal:ge.Z},methods:{toggleStatusExpanded:function(){this.statusExpanded=!this.statusExpanded},generateUserProfileLink:function(e){return(0,le.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},getUser:function(e){return this.$store.state.users.usersObject[e.from_profile.id]},toggleMute:function(){this.unmuted=!this.unmuted},showApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!0},hideApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!1},showDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!0},hideDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!1},approveUser:function(){this.shouldConfirmApprove?this.showApproveConfirmDialog():this.doApprove()},doApprove:function(){this.$store.state.api.backendInteractor.approveUser({id:this.user.id}),this.$store.dispatch("removeFollowRequest",this.user),this.$store.dispatch("markSingleNotificationAsSeen",{id:this.notification.id}),this.$store.dispatch("updateNotification",{id:this.notification.id,updater:function(e){e.type="follow"}}),this.hideApproveConfirmDialog()},denyUser:function(){this.shouldConfirmDeny?this.showDenyConfirmDialog():this.doDeny()},doDeny:function(){var e=this;this.$store.state.api.backendInteractor.denyUser({id:this.user.id}).then((function(){e.$store.dispatch("dismissNotificationLocal",{id:e.notification.id}),e.$store.dispatch("removeFollowRequest",e.user)})),this.hideDenyConfirmDialog()}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?De(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({userClass:function(){return(0,we.M)(this.notification.from_profile)},userStyle:function(){var e=this.$store.getters.mergedConfig.highlight,t=this.notification.from_profile;return(0,we.q)(e[t.screen_name])},user:function(){return this.$store.getters.findUser(this.notification.from_profile.id)},userProfileLink:function(){return this.generateUserProfileLink(this.user)},targetUser:function(){return this.$store.getters.findUser(this.notification.target.id)},targetUserProfileLink:function(){return this.generateUserProfileLink(this.targetUser)},needMute:function(){return this.$store.getters.relationship(this.user.id).muting},isStatusNotification:function(){return(0,ve.Gr)(this.notification.type)},mergedConfig:function(){return this.$store.getters.mergedConfig},shouldConfirmApprove:function(){return this.mergedConfig.modalOnApproveFollow},shouldConfirmDeny:function(){return this.mergedConfig.modalOnDenyFollow}},(0,w.rn)({currentUser:function(e){return e.users.currentUser}}))};const ke=_e,Ce=(0,pe.Z)(ke,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("Status"),l=(0,o.up)("user-link"),d=(0,o.up)("FAIcon"),p=(0,o.up)("UserAvatar"),m=(0,o.up)("UserPopover"),h=(0,o.up)("RichContent"),f=(0,o.up)("i18n-t"),g=(0,o.up)("Timeago"),v=(0,o.up)("router-link"),w=(0,o.up)("Report"),K=(0,o.up)("StatusContent"),G=(0,o.up)("confirm-modal");return"mention"===e.notification.type?((0,o.wg)(),(0,o.iD)("article",b,[(0,o.Wm)(c,{class:"Notification",compact:!0,statusoid:e.notification.status},null,8,["statusoid"])])):((0,o.wg)(),(0,o.iD)("article",y,[e.needMute&&!e.unmuted?((0,o.wg)(),(0,o.iD)("div",D,[(0,o._)("small",null,[(0,o.Wm)(l,{user:e.notification.from_profile,at:!1},null,8,["user"])]),(0,o._)("button",{class:"button-unstyled unmute",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110 fa-old-padding",icon:"eye-slash"})])])):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["Notification non-mention",[e.userClass,{highlighted:e.userStyle},"-type--"+e.notification.type]]),style:(0,r.j5)([e.userStyle])},[(0,o._)("a",{class:"avatar-container",href:e.$router.resolve(e.userProfileLink).href,onClick:t[1]||(t[1]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(m,{"user-id":e.notification.from_profile.id,"overlay-centers":!0},{default:(0,o.w5)((function(){return[(0,o.Wm)(p,{class:"post-avatar",bot:e.botIndicator,compact:!0,"better-shadow":e.betterShadow,user:e.notification.from_profile},null,8,["bot","better-shadow","user"])]})),_:1},8,["user-id"])],8,_),(0,o._)("div",k,[(0,o._)("span",C,[(0,o._)("div",S,[e.notification.from_profile.name_html?((0,o.wg)(),(0,o.iD)("bdi",j,[(0,o.Wm)(h,{class:"username",title:"@"+e.notification.from_profile.screen_name_ui,html:e.notification.from_profile.name_html,emoji:e.notification.from_profile.emoji},null,8,["title","html","emoji"])])):((0,o.wg)(),(0,o.iD)("span",{key:1,class:"username",title:"@"+e.notification.from_profile.screen_name_ui},(0,r.zw)(e.notification.from_profile.name),9,F)),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),"like"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",A,[(0,o.Wm)(d,{class:"type-icon",icon:"star"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.favorited_you")),1)])):(0,o.kq)("",!0),"repeat"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",O,[(0,o.Wm)(d,{class:"type-icon",icon:"retweet",title:e.$t("tool_tip.repeat")},null,8,["title"]),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.repeated_you")),1)])):(0,o.kq)("",!0),"follow"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",E,[(0,o.Wm)(d,{class:"type-icon",icon:"user-plus"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.followed_you")),1)])):(0,o.kq)("",!0),"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",z,[(0,o.Wm)(d,{class:"type-icon",icon:"user"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.follow_request")),1)])):(0,o.kq)("",!0),"move"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",P,[(0,o.Wm)(d,{class:"type-icon",icon:"suitcase-rolling"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.migrated_to")),1)])):(0,o.kq)("",!0),"pleroma:emoji_reaction"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",I,[(0,o._)("small",null,[(0,o.Wm)(f,{scope:"global",keypath:"notifications.reacted_with"},{default:(0,o.w5)((function(){return[e.notification.emoji_url?((0,o.wg)(),(0,o.iD)("img",{key:0,class:"emoji-reaction-emoji emoji-reaction-emoji-image",src:e.notification.emoji_url,alt:e.notification.emoji,title:e.notification.emoji},null,8,x)):((0,o.wg)(),(0,o.iD)("span",T,(0,r.zw)(e.notification.emoji),1))]})),_:1})])])):(0,o.kq)("",!0),"pleroma:report"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",$,[(0,o._)("small",null,(0,r.zw)(e.$t("notifications.submitted_report")),1)])):(0,o.kq)("",!0),"poll"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",B,[(0,o.Wm)(d,{class:"type-icon",icon:"poll-h"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.poll_ended")),1)])):(0,o.kq)("",!0)]),e.isStatusNotification?((0,o.wg)(),(0,o.iD)("div",U,[e.notification.status?((0,o.wg)(),(0,o.j4)(v,{key:0,to:{name:"conversation",params:{id:e.notification.status.id}},class:"timeago-link faint-link"},{default:(0,o.w5)((function(){return[(0,o.Wm)(g,{time:e.notification.created_at,"auto-update":240},null,8,["time"])]})),_:1},8,["to"])):(0,o.kq)("",!0),(0,o._)("button",{class:"button-unstyled expand-icon",title:e.$t("tool_tip.toggle_expand"),"aria-expanded":e.statusExpanded,onClick:t[2]||(t[2]=(0,i.iM)((function(){return e.toggleStatusExpanded&&e.toggleStatusExpanded.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110","fixed-width":"",icon:e.statusExpanded?"compress-alt":"expand-alt"},null,8,["icon"])],8,M)])):((0,o.wg)(),(0,o.iD)("div",L,[(0,o._)("span",R,[(0,o.Wm)(g,{time:e.notification.created_at,"auto-update":240},null,8,["time"])])])),e.needMute?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled",title:e.$t("tool_tip.toggle_mute"),"aria-expanded":!e.unmuted,onClick:t[3]||(t[3]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110 fa-old-padding",icon:"eye-slash"})],8,q)):(0,o.kq)("",!0)]),"follow"===e.notification.type||"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",N,[(0,o.Wm)(l,{class:"follow-name",user:e.notification.from_profile},null,8,["user"]),"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",Z,[(0,o._)("button",{class:"button-unstyled",title:e.$t("tool_tip.accept_follow_request"),onClick:t[4]||(t[4]=function(t){return e.approveUser()})},[(0,o.Wm)(d,{icon:"check",class:"fa-scale-110 fa-old-padding follow-request-accept"})],8,W),(0,o._)("button",{class:"button-unstyled",title:e.$t("tool_tip.reject_follow_request"),onClick:t[5]||(t[5]=function(t){return e.denyUser()})},[(0,o.Wm)(d,{icon:"times",class:"fa-scale-110 fa-old-padding follow-request-reject"})],8,H)])):(0,o.kq)("",!0)])):"move"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",V,[(0,o.Wm)(l,{user:e.notification.target},null,8,["user"])])):"pleroma:report"===e.notification.type?((0,o.wg)(),(0,o.j4)(w,{key:2,"report-id":e.notification.report.id},null,8,["report-id"])):((0,o.wg)(),(0,o.j4)(K,{key:3,class:(0,r.C_)({faint:!e.statusExpanded}),compact:!e.statusExpanded,status:e.notification.action},null,8,["class","compact","status"]))])],6)),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingApproveConfirmDialog?((0,o.wg)(),(0,o.j4)(G,{key:0,title:e.$t("user_card.approve_confirm_title"),"confirm-text":e.$t("user_card.approve_confirm_accept_button"),"cancel-text":e.$t("user_card.approve_confirm_cancel_button"),onAccepted:e.doApprove,onCancelled:e.hideApproveConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.approve_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0),e.showingDenyConfirmDialog?((0,o.wg)(),(0,o.j4)(G,{key:1,title:e.$t("user_card.deny_confirm_title"),"confirm-text":e.$t("user_card.deny_confirm_accept_button"),"cancel-text":e.$t("user_card.deny_confirm_cancel_button"),onAccepted:e.doDeny,onCancelled:e.hideDenyConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.deny_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))]))}]]);var Se={class:"dropdown-menu"},je={class:"filter-trigger-button button-unstyled"},Fe=n(84535);function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Oe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.G_j);const Ee={components:{Popover:Fe.default},computed:{filters:function(){return this.$store.getters.mergedConfig.notificationVisibility}},methods:{toggleNotificationFilter:function(e){this.$store.dispatch("setOption",{name:"notificationVisibility",value:Oe(Oe({},this.filters),{},(0,v.Z)({},e,!this.filters[e]))})}}},ze=(0,pe.Z)(Ee,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(c,{trigger:"click",class:"NotificationFilters",placement:"bottom","bound-to":{x:"container"}},{content:(0,o.w5)((function(){return[(0,o._)("div",Se,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[0]||(t[0]=function(e){return a.toggleNotificationFilter("likes")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.likes}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_likes")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[1]||(t[1]=function(e){return a.toggleNotificationFilter("repeats")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.repeats}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_repeats")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[2]||(t[2]=function(e){return a.toggleNotificationFilter("follows")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.follows}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_follows")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[3]||(t[3]=function(e){return a.toggleNotificationFilter("mentions")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.mentions}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_mentions")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[4]||(t[4]=function(e){return a.toggleNotificationFilter("emojiReactions")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.emojiReactions}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_emoji_reactions")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[5]||(t[5]=function(e){return a.toggleNotificationFilter("moves")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.moves}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_moves")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[6]||(t[6]=function(e){return a.toggleNotificationFilter("polls")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.polls}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_polls")),1)])])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",je,[(0,o.Wm)(u,{icon:"filter"})])]})),_:1})}]]);var Pe=n(15568),Ie=n(49753);function xe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.IJ7,ye.FPD,ye.Kl4);const Te={components:{Notification:Ce,NotificationFilters:ze},props:{minimalMode:Boolean,filterMode:Array,disableTeleport:Boolean},data:function(){return{showScrollTop:!1,bottomedOut:!1,seenToDisplayCount:30}},provide:function(){var e=this;return{popoversZLayer:(0,o.Fl)((function(){return e.popoversZLayer}))}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xe(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({mainClass:function(){return this.minimalMode?"":"panel panel-default"},notifications:function(){return(0,ve.Bt)(this.$store)},error:function(){return this.$store.state.statuses.notifications.error},unseenNotifications:function(){return(0,ve.Km)(this.$store)},filteredNotifications:function(){return(0,ve.G2)(this.$store,this.filterMode)},unseenCount:function(){return this.unseenNotifications.length},unseenCountTitle:function(){return this.unseenCount+this.unreadChatCount+this.unreadAnnouncementCount},loading:function(){return this.$store.state.statuses.notifications.loading},noHeading:function(){var e=this.$store.state.interface.layoutType;return this.minimalMode||"mobile"===e},teleportTarget:function(){return{wide:"#notifs-column",mobile:"#mobile-notifications"}[this.$store.state.interface.layoutType]||"#notifs-sidebar"},popoversZLayer:function(){return"mobile"===this.$store.state.interface.layoutType?"navbar":null},notificationsToDisplay:function(){return this.filteredNotifications.slice(0,this.unseenCount+this.seenToDisplayCount)},noSticky:function(){return this.$store.getters.mergedConfig.disableStickyHeaders}},(0,w.Se)(["unreadChatCount","unreadAnnouncementCount"])),mounted:function(){this.scrollerRef=this.$refs.root.closest(".column.-scrollable"),this.scrollerRef||(this.scrollerRef=this.$refs.root.closest(".mobile-notifications")),this.scrollerRef||(this.scrollerRef=this.$refs.root.closest(".column.main")),this.scrollerRef.addEventListener("scroll",this.updateScrollPosition)},unmounted:function(){this.scrollerRef&&this.scrollerRef.removeEventListener("scroll",this.updateScrollPosition)},watch:{unseenCountTitle:function(e){e>0?(Ie.Z.drawFaviconBadge(),this.$store.dispatch("setPageTitle","(".concat(e,")"))):(Ie.Z.clearFaviconBadge(),this.$store.dispatch("setPageTitle",""))},teleportTarget:function(){var e=this;this.$nextTick((function(){e.scrollerRef.removeEventListener("scroll",e.updateScrollPosition),e.scrollerRef=e.$refs.root.closest(".column.-scrollable"),e.scrollerRef||(e.scrollerRef=e.$refs.root.closest(".mobile-notifications")),e.scrollerRef.addEventListener("scroll",e.updateScrollPosition),e.updateScrollPosition()}))}},methods:{scrollToTop:function(){this.scrollerRef.scrollTo({top:this.$refs.root.offsetTop})},updateScrollPosition:function(){this.showScrollTop=this.$refs.root.offsetTop<this.scrollerRef.scrollTop},markAsSeen:function(){this.$store.dispatch("markNotificationsAsSeen"),this.seenToDisplayCount=30},fetchOlderNotifications:function(){var e=this;if(!this.loading){var t=this.filteredNotifications.length-this.unseenCount;if(this.seenToDisplayCount<t)this.seenToDisplayCount=Math.min(this.seenToDisplayCount+20,t);else{this.seenToDisplayCount>t&&(this.seenToDisplayCount=t);var n=this.$store,o=n.state.users.currentUser.credentials;n.commit("setNotificationsLoading",{value:!0}),Pe.Z.fetchAndUpdate({store:n,credentials:o,older:!0}).then((function(t){n.commit("setNotificationsLoading",{value:!1}),0===t.length&&(e.bottomedOut=!0),e.seenToDisplayCount+=t.length}))}}}}},$e=(0,pe.Z)(Te,[["render",function(e,t,n,v,w,b){var y=(0,o.up)("FAIcon"),D=(0,o.up)("FALayers"),_=(0,o.up)("NotificationFilters"),k=(0,o.up)("notification");return(0,o.wg)(),(0,o.j4)(o.lR,{disabled:e.minimalMode||e.disableTeleport,to:e.teleportTarget},[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.noHeading?"div":"aside"),{ref:"root",class:(0,r.C_)([{minimal:e.minimalMode},"Notifications"])},{default:(0,o.w5)((function(){return[(0,o._)("div",{class:(0,r.C_)(e.mainClass)},[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("div",a,[(0,o.Uk)((0,r.zw)(e.$t("notifications.notifications"))+" ",1),e.unseenCount?((0,o.wg)(),(0,o.iD)("span",u,(0,r.zw)(e.unseenCount),1)):(0,o.kq)("",!0)]),e.showScrollTop?((0,o.wg)(),(0,o.iD)("div",c,[(0,o._)("button",{class:"button-unstyled scroll-to-top-button",type:"button",title:e.$t("general.scroll_to_top"),onClick:t[0]||(t[0]=function(){return e.scrollToTop&&e.scrollToTop.apply(e,arguments)})},[(0,o.Wm)(D,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(y,{icon:"arrow-up"}),(0,o.Wm)(y,{icon:"minus",transform:"up-7"})]})),_:1})],8,l)])):(0,o.kq)("",!0),e.unseenCount?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default read-button",type:"button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.markAsSeen&&e.markAsSeen.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("notifications.read")),1)):(0,o.kq)("",!0),(0,o.Wm)(_,{class:"rightside-button"})])),(0,o._)("div",d,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.notificationsToDisplay,(function(t){return(0,o.wg)(),(0,o.iD)("div",{key:t.id,role:"listitem",class:(0,r.C_)(["notification",{unseen:!e.minimalMode&&!t.seen}])},[p,(0,o.Wm)(k,{notification:t},null,8,["notification"])],2)})),128))]),(0,o._)("div",m,[e.bottomedOut?((0,o.wg)(),(0,o.iD)("div",h,(0,r.zw)(e.$t("notifications.no_more_notifications")),1)):e.loading?((0,o.wg)(),(0,o.iD)("div",g,[(0,o.Wm)(y,{icon:"circle-notch",spin:"",size:"lg"})])):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled -link -fullwidth",onClick:t[2]||(t[2]=(0,i.iM)((function(t){return e.fetchOlderNotifications()}),["prevent"]))},[(0,o._)("div",f,(0,r.zw)(e.minimalMode?e.$t("interactions.load_older"):e.$t("notifications.load_older")),1)]))])],2)]})),_:1},8,["class"]))],8,["disabled","to"])}]]),Be=$e},29187:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(66252),r=n(3577),i={class:"panel-loading"},s={class:"loading-text"},a=n(9382),u=n(84131);a.vI.add(u.IJ7);const c={},l=(0,n(83744).Z)(c,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("span",s,[(0,o.Wm)(l,{icon:"circle-notch",spin:"",size:"3x"}),(0,o.Uk)(" "+(0,r.zw)(e.$t("general.loading")),1)])])}]])},84535:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var o=n(66252),r=n(49963),i=n(3577);const s={name:"Popover",props:{trigger:String,placement:String,boundTo:Object,boundToSelector:String,margin:Object,offset:Object,popoverClass:String,removePadding:Boolean,disabled:Boolean,overlayCenters:Boolean,overlayCentersSelector:String,stayOnClick:Boolean,normalButton:Boolean,triggerAttrs:{type:Object,default:{}}},inject:["popoversZLayer"],data:function(){return{anchorEl:null,teleport:!1,lockReEntry:!1,hidden:!0,styles:{},oldSize:{width:0,height:0},scrollable:null,graceTimeout:null,parentPopover:null,disableClickOutside:!1,childrenShown:new Set}},methods:{setAnchorEl:function(e){this.anchorEl=e,this.updateStyles()},containerBoundingClientRect:function(){return(this.boundToSelector?this.$el.closest(this.boundToSelector):this.$el.offsetParent).getBoundingClientRect()},updateStyles:function(){if(this.hidden)this.styles={};else{var e=this.anchorEl||this.$refs.trigger&&this.$refs.trigger.children[0]||this.$el,t=e.offsetHeight||e.clientHeight,n=e.offsetWidth||e.clientWidth,o=e.getBoundingClientRect(),r=getComputedStyle(e),i=parseFloat(r.paddingTop),s=parseFloat(r.paddingBottom),a=parseFloat(r.paddingRight),u=parseFloat(r.paddingLeft),c=o.left+.5*n,l=o.top+.5*t,d=this.$refs.content,p=this.overlayCenters?this.$refs.content.querySelector(this.overlayCentersSelector):null,m=this.boundTo&&("container"===this.boundTo.x||"container"===this.boundTo.y)&&this.containerBoundingClientRect(),h=this.margin||{},f=this.boundTo&&"container"===this.boundTo.x?{min:m.left+(h.left||0),max:m.right-(h.right||0)}:{min:0+(h.left||10),max:window.innerWidth-(h.right||10)},g=this.boundTo&&"container"===this.boundTo.y?{min:m.top+(h.top||0),max:m.bottom-(h.bottom||0)}:{min:0+(h.top||50),max:window.innerHeight-(h.bottom||5)},v=0,w=0;if(p){var b=d.getBoundingClientRect(),y=p.getBoundingClientRect(),D=y.left-b.left,_=y.top-b.top;v=-D-.5*p.offsetWidth,w=-_-.5*p.offsetHeight}else v=-.5*d.offsetWidth,w=-.5*d.offsetHeight;var k=c+v,C=k+d.offsetWidth,S=l+w,j=S+d.offsetHeight;k<f.min&&(v+=f.min-k),C>f.max&&(v-=C-f.max),S<g.min&&(w+=g.min-S),j>g.max&&(w-=j-g.max);var F=0,A=0;if(p)F=c+v,A=l+w;else if("right"!==this.placement&&"left"!==this.placement){var O="bottom"!==this.placement,E=l-.5*t+(this.removePadding?i:0),z=l+.5*t-(this.removePadding?s:0);z+d.offsetHeight>g.max&&(O=!0),E-d.offsetHeight<g.min&&(O=!1);var P=this.offset&&this.offset.y||0;A=O?E-P-d.offsetHeight:z+P,F=c+v+(this.offset&&this.offset.x||0)}else{var I="left"!==this.placement,x=c-.5*n+(this.removePadding?a:0),T=c+.5*n-(this.removePadding?u:0);T+d.offsetWidth>f.max&&(I=!0),x-d.offsetWidth<f.min&&(I=!1);var $=this.offset&&this.offset.x||0;F=I?x-$-d.offsetWidth:T+$,A=l+w+(this.offset&&this.offset.y||0)}this.styles={left:"".concat(Math.round(F),"px"),top:"".concat(Math.round(A),"px")},this.popoversZLayer&&(this.styles["--ZI_popover_override"]="var(--ZI_".concat(this.popoversZLayer,"_popovers)")),m&&(this.styles.maxWidth="".concat(Math.round(m.width),"px"))}},showPopover:function(){var e=this;if(!this.disabled){this.disableClickOutside=!0,setTimeout((function(){e.disableClickOutside=!1}),0);var t=this.hidden;this.hidden=!1,this.parentPopover&&this.parentPopover.onChildPopoverState(this,!0),("click"===this.trigger||this.stayOnClick)&&document.addEventListener("click",this.onClickOutside),this.scrollable.addEventListener("scroll",this.onScroll),this.scrollable.addEventListener("resize",this.onResize),this.$nextTick((function(){t&&e.$emit("show"),e.updateStyles()}))}},hidePopover:function(){this.disabled||(this.hidden||this.$emit("close"),this.hidden=!0,this.parentPopover&&this.parentPopover.onChildPopoverState(this,!1),"click"===this.trigger&&document.removeEventListener("click",this.onClickOutside),this.scrollable.removeEventListener("scroll",this.onScroll),this.scrollable.removeEventListener("resize",this.onResize))},onMouseenter:function(e){"hover"===this.trigger&&(this.lockReEntry=!1,clearTimeout(this.graceTimeout),this.graceTimeout=null,this.showPopover())},onMouseleave:function(e){var t=this;"hover"===this.trigger&&0===this.childrenShown.size&&(this.graceTimeout=setTimeout((function(){return t.hidePopover()}),1))},onMouseenterContent:function(e){"hover"!==this.trigger||this.lockReEntry||(this.lockReEntry=!0,clearTimeout(this.graceTimeout),this.graceTimeout=null,this.showPopover())},onMouseleaveContent:function(e){var t=this;"hover"===this.trigger&&0===this.childrenShown.size&&(this.graceTimeout=setTimeout((function(){return t.hidePopover()}),1))},onClick:function(e){"click"===this.trigger&&(this.hidden?this.showPopover():this.hidePopover())},onClickOutside:function(e){this.disableClickOutside||this.hidden||this.$refs.content&&this.$refs.content.contains(e.target)||this.$el.contains(e.target)||this.childrenShown.size>0||(this.hidePopover(),this.parentPopover&&this.parentPopover.onClickOutside(e))},onScroll:function(e){this.updateStyles()},onResize:function(e){this.updateStyles()},onChildPopoverState:function(e,t){t?this.childrenShown.add(e):this.childrenShown.delete(e)}},updated:function(){var e=this.$refs.content;e&&(this.oldSize.width===e.offsetWidth&&this.oldSize.height===e.offsetHeight||(this.updateStyles(),this.oldSize={width:e.offsetWidth,height:e.offsetHeight}))},mounted:function(){this.teleport=!0;var e=this.$refs.trigger.closest(".column.-scrollable")||this.$refs.trigger.closest(".mobile-notifications");e||(e=window),this.scrollable=e;for(var t=this.$parent;t&&"Popover"!==t.$.type.name;)t=t.$parent;this.parentPopover=t},beforeUnmount:function(){this.hidePopover()}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("span",{onMouseenter:t[4]||(t[4]=function(){return e.onMouseenter&&e.onMouseenter.apply(e,arguments)}),onMouseleave:t[5]||(t[5]=function(){return e.onMouseleave&&e.onMouseleave.apply(e,arguments)})},[(0,o._)("button",(0,o.dG)({ref:"trigger",class:["popover-trigger-button",e.normalButton?"button-default btn":"button-unstyled"],type:"button"},e.triggerAttrs,{onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})}),[(0,o.WI)(e.$slots,"trigger")],16),((0,o.wg)(),(0,o.j4)(o.lR,{disabled:!e.teleport,to:"#popovers"},[(0,o.Wm)(r.uT,{name:"fade"},{default:(0,o.w5)((function(){return[e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,ref:"content",style:(0,i.j5)(e.styles),class:(0,i.C_)(["popover",e.popoverClass||"popover-default"]),onMouseenter:t[1]||(t[1]=function(){return e.onMouseenterContent&&e.onMouseenterContent.apply(e,arguments)}),onMouseleave:t[2]||(t[2]=function(){return e.onMouseleaveContent&&e.onMouseleaveContent.apply(e,arguments)}),onClick:t[3]||(t[3]=function(){return e.onClickContent&&e.onClickContent.apply(e,arguments)})},[(0,o.WI)(e.$slots,"content",{class:"popover-inner",close:e.hidePopover})],38))]})),_:3})],8,["disabled"]))],32)}]])},45333:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ue});var o=n(66252),r=n(49963),i=n(3577),s={ref:"form",class:"post-status-form"},a={class:"form-group"},u={key:1,class:"visibility-notice notice-dismissible"},c=["title"],l={key:2,class:"visibility-notice notice-dismissible"},d=["title"],p={key:3,class:"visibility-notice notice-dismissible"},m=["title"],h={key:4,class:"visibility-notice"},f={key:0},g={key:1},v={key:5,class:"visibility-notice edit-warning"},w={key:6,class:"preview-heading faint"},b={class:"preview-spinner"},y={key:7,class:"preview-container"},D={key:0,class:"preview-status"},_={key:1,class:"preview-status preview-error"},k={key:8,role:"radiogroup",class:"btn-group reply-or-quote-selector"},C=["id","aria-labelledby","aria-checked"],S=["id","aria-labelledby","aria-checked"],j=["placeholder","disabled"],F=["placeholder","disabled"],A={key:10,class:"visibility-tray"},O={key:1,class:"text-format"},E=["value"],z={key:2,class:"text-format"},P={class:"only-format"},I={ref:"bottom",class:"form-bottom"},x={class:"form-bottom-left"},T=["title"],$=["title"],B={key:0,disabled:"",class:"btn button-default"},U={key:1,disabled:"",class:"btn button-default"},M=["disabled"],L={key:1,class:"alert error"},R={key:3,class:"upload_settings"},q=n(15861),N=n(4942),Z=n(93433),W=n(23279),H=n.n(W),V=n(45578),K=n.n(V),G=n(35161),Y=n.n(G),J=n(43063),Q=n.n(J),X=n(64687),ee=n.n(X),te=n(7257),ne=n(37804),oe=n(54110),re=n(88671),ie={key:0,class:"poll-form"},se={class:"input-container"},ae=["id","onUpdate:modelValue","placeholder","maxlength","onKeydown"],ue=["onClick"],ce={class:"poll-type-expiry"},le=["title"],de={value:"single"},pe={value:"multiple"},me=["title"],he=["min","max"],fe=["value"],ge=n(44908),ve=n.n(ge),we=n(27483),be=n(9382),ye=n(76990),De=n(84131);be.vI.add(De.NBC,De.r8p);const _e={components:{Select:ye.Z},name:"PollForm",props:["visible"],data:function(){return{pollType:"single",options:["",""],expiryAmount:10,expiryUnit:"minutes"}},computed:{pollLimits:function(){return this.$store.state.instance.pollLimits},maxOptions:function(){return this.pollLimits.max_options},maxLength:function(){return this.pollLimits.max_option_chars},expiryUnits:function(){var e=this,t=this.convertExpiryFromUnit;return["minutes","hours","days"].filter((function(n){return e.pollLimits.max_expiration>=t(n,1)}))},minExpirationInCurrentUnit:function(){return Math.ceil(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.min_expiration))},maxExpirationInCurrentUnit:function(){return Math.floor(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.max_expiration))}},methods:{clear:function(){this.pollType="single",this.options=["",""],this.expiryAmount=10,this.expiryUnit="minutes"},nextOption:function(e){var t=this.$el.querySelector("#poll-".concat(e+1));t?t.focus():this.addOption()&&this.$nextTick((function(){this.nextOption(e)}))},addOption:function(){return this.options.length<this.maxOptions&&(this.options.push(""),!0)},deleteOption:function(e,t){this.options.length>2&&(this.options.splice(e,1),this.updatePollToParent())},convertExpiryToUnit:function(e,t){return we.dX(e,t)},convertExpiryFromUnit:function(e,t){return we.cC(e,t)},expiryAmountChange:function(){this.expiryAmount=Math.max(this.minExpirationInCurrentUnit,this.expiryAmount),this.expiryAmount=Math.min(this.maxExpirationInCurrentUnit,this.expiryAmount),this.updatePollToParent()},updatePollToParent:function(){var e=this.convertExpiryFromUnit(this.expiryUnit,this.expiryAmount),t=ve()(this.options.filter((function(e){return""!==e})));t.length<2?this.$emit("update-poll",{error:this.$t("polls.not_enough_options")}):this.$emit("update-poll",{options:t,multiple:"multiple"===this.pollType,expiresIn:e})}}};var ke=n(83744);const Ce=(0,ke.Z)(_e,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("Select");return e.visible?((0,o.wg)(),(0,o.iD)("div",ie,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.options,(function(n,i){return(0,o.wg)(),(0,o.iD)("div",{key:i,class:"poll-option"},[(0,o._)("div",se,[(0,o.wy)((0,o._)("input",{id:"poll-".concat(i),"onUpdate:modelValue":function(t){return e.options[i]=t},size:"1",class:"poll-option-input",type:"text",placeholder:e.$t("polls.option"),maxlength:e.maxLength,onChange:t[0]||(t[0]=function(){return e.updatePollToParent&&e.updatePollToParent.apply(e,arguments)}),onKeydown:(0,r.D2)((0,r.iM)((function(t){return e.nextOption(i)}),["stop","prevent"]),["enter"])},null,40,ae),[[r.nr,e.options[i]]])]),e.options.length>2?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"delete-option button-unstyled -hover-highlight",onClick:function(t){return e.deleteOption(i)}},[(0,o.Wm)(c,{icon:"times"})],8,ue)):(0,o.kq)("",!0)])})),128)),e.options.length<e.maxOptions?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"add-option faint button-unstyled -hover-highlight",onClick:t[1]||(t[1]=function(){return e.addOption&&e.addOption.apply(e,arguments)})},[(0,o.Wm)(c,{icon:"plus",size:"sm"}),(0,o.Uk)(" "+(0,i.zw)(e.$t("polls.add_option")),1)])):(0,o.kq)("",!0),(0,o._)("div",ce,[(0,o._)("div",{class:"poll-type",title:e.$t("polls.type")},[(0,o.Wm)(l,{modelValue:e.pollType,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.pollType=t}),class:"poll-type-select",unstyled:"true",onChange:e.updatePollToParent},{default:(0,o.w5)((function(){return[(0,o._)("option",de,(0,i.zw)(e.$t("polls.single_choice")),1),(0,o._)("option",pe,(0,i.zw)(e.$t("polls.multiple_choices")),1)]})),_:1},8,["modelValue","onChange"])],8,le),(0,o._)("div",{class:"poll-expiry",title:e.$t("polls.expiry")},[(0,o.wy)((0,o._)("input",{"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.expiryAmount=t}),type:"number",class:"expiry-amount hide-number-spinner",min:e.minExpirationInCurrentUnit,max:e.maxExpirationInCurrentUnit,onChange:t[4]||(t[4]=function(){return e.expiryAmountChange&&e.expiryAmountChange.apply(e,arguments)})},null,40,he),[[r.nr,e.expiryAmount]]),(0,o.Uk)(" "+(0,i.zw)(" ")+" "),(0,o.Wm)(l,{modelValue:e.expiryUnit,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.expiryUnit=t}),unstyled:"true",class:"expiry-unit",onChange:e.expiryAmountChange},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.expiryUnits,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,i.zw)(e.$tc("time.unit.".concat(t,"_short"),e.expiryAmount,[""])),9,fe)})),128))]})),_:1},8,["modelValue","onChange"])],8,me)])])):(0,o.kq)("",!0)}]]);var Se=n(66596),je=n(67671),Fe=n(10252),Ae=n(58394),Oe=n(67952),Ee=n(37230),ze=n(19003),Pe=n(989),Ie=n(66141);function xe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Te(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xe(Object(n),!0).forEach((function(t){(0,N.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(De.RKn,De.Mm7,De.cf$,De.gPx,De.NBC,De.IJ7);var $e=function(e){return Number(e.substring(0,e.length-2))};const Be={props:["statusId","statusText","statusIsSensitive","statusPoll","statusFiles","statusMediaDescriptions","statusScope","statusContentType","replyTo","repliedUser","attentions","copyMessageScope","subject","disableSubject","disableScopeSelector","disableVisibilitySelector","disableNotice","disableLockWarning","disablePolls","disableSensitivityCheckbox","disableSubmit","disablePreview","placeholder","maxHeight","postHandler","preserveFocus","autoFocus","fileLimit","submitOnEnter","emojiPickerPlacement","optimisticPosting"],emits:["posted","resize","mediaplay","mediapause"],components:{MediaUpload:ne.Z,EmojiInput:re.Z,PollForm:Ce,ScopeSelector:oe.Z,Checkbox:Ie.Z,Select:ye.Z,Attachment:Se.Z,StatusContent:Fe.Z,Gallery:je.Z},mounted:function(){if(this.updateIdempotencyKey(),this.resize(this.$refs.textarea),this.replyTo){var e=this.$refs.textarea.value.length;this.$refs.textarea.setSelectionRange(e,e)}(this.replyTo||this.autoFocus)&&this.$refs.textarea.focus()},data:function(){var e=this.$route.query.message||"",t=this.$store.getters.mergedConfig.scopeCopy;if(this.replyTo){var n=this.$store.state.users.currentUser;e=function(e,t){var n=e.user,o=e.attentions,r=void 0===o?[]:o,i=(0,Z.Z)(r);i.unshift(n),i=K()(i,"id"),i=Q()(i,{id:t.id});var s=Y()(i,(function(e){return"@".concat(e.screen_name)}));return s.length>0?s.join(" ")+" ":""}({user:this.repliedUser,attentions:this.attentions},n)}var o=this.copyMessageScope&&t||"direct"===this.copyMessageScope?this.copyMessageScope:this.$store.state.users.currentUser.default_scope,r=this.$store.getters.mergedConfig,i=r.postContentType,s=r.sensitiveByDefault,a={spoilerText:this.subject||"",status:e,nsfw:!!s,files:[],poll:{},mediaDescriptions:{},visibility:o,contentType:i};if(this.statusId){var u=this.statusContentType||i;a={spoilerText:this.subject||"",status:this.statusText||"",nsfw:this.statusIsSensitive||!!s,files:this.statusFiles||[],poll:this.statusPoll||{},mediaDescriptions:this.statusMediaDescriptions||{},visibility:this.statusScope||o,contentType:u,quoting:!1}}return{randomSeed:"".concat(Math.random()).replace(".","-"),dropFiles:[],uploadingFiles:!1,error:null,posting:!1,highlighted:0,newStatus:a,caret:0,pollFormVisible:!1,showDropIcon:"hide",dropStopTimeout:null,preview:null,previewLoading:!1,emojiInputShown:!1,idempotencyKey:""}},computed:Te(Te({users:function(){return this.$store.state.users.users},userDefaultScope:function(){return this.$store.state.users.currentUser.default_scope},showAllScopes:function(){return!this.mergedConfig.minimalScopesMode},emojiUserSuggestor:function(){return(0,ze.ZP)({emoji:[].concat((0,Z.Z)(this.$store.getters.standardEmojiList),(0,Z.Z)(this.$store.state.instance.customEmoji)),store:this.$store})},emojiSuggestor:function(){return(0,ze.ZP)({emoji:[].concat((0,Z.Z)(this.$store.getters.standardEmojiList),(0,Z.Z)(this.$store.state.instance.customEmoji))})},emoji:function(){return this.$store.getters.standardEmojiList||[]},customEmoji:function(){return this.$store.state.instance.customEmoji||[]},statusLength:function(){return this.newStatus.status.length},spoilerTextLength:function(){return this.newStatus.spoilerText.length},statusLengthLimit:function(){return this.$store.state.instance.textlimit},hasStatusLengthLimit:function(){return this.statusLengthLimit>0},charactersLeft:function(){return this.statusLengthLimit-(this.statusLength+this.spoilerTextLength)},isOverLengthLimit:function(){return this.hasStatusLengthLimit&&this.charactersLeft<0},minimalScopesMode:function(){return this.$store.state.instance.minimalScopesMode},alwaysShowSubject:function(){return this.mergedConfig.alwaysShowSubjectInput},postFormats:function(){return this.$store.state.instance.postFormats||[]},safeDMEnabled:function(){return this.$store.state.instance.safeDM},pollsAvailable:function(){return this.$store.state.instance.pollsAvailable&&this.$store.state.instance.pollLimits.max_options>=2&&!0!==this.disablePolls},hideScopeNotice:function(){return this.disableNotice||this.$store.getters.mergedConfig.hideScopeNotice},pollContentError:function(){return this.pollFormVisible&&this.newStatus.poll&&this.newStatus.poll.error},showPreview:function(){return!this.disablePreview&&(!!this.preview||this.previewLoading)},emptyStatus:function(){return""===this.newStatus.status.trim()&&0===this.newStatus.files.length},uploadFileLimitReached:function(){return this.newStatus.files.length>=this.fileLimit},isEdit:function(){return void 0!==this.statusId&&""!==this.statusId.trim()},quotable:function(){if(!this.$store.state.instance.quotingAvailable)return!1;if(!this.replyTo)return!1;var e=this.$store.state.statuses.allStatusesObject[this.replyTo];return!!e&&("public"===e.visibility||"unlisted"===e.visibility||"local"===e.visibility||"private"===e.visibility&&e.user.id===this.$store.state.users.currentUser.id)}},(0,Pe.Se)(["mergedConfig"])),(0,Pe.rn)({mobileLayout:function(e){return e.interface.mobileLayout}})),watch:{newStatus:{deep:!0,handler:function(){this.statusChanged()}}},methods:{statusChanged:function(){this.autoPreview(),this.updateIdempotencyKey()},clearStatus:function(){var e=this,t=this.newStatus;this.newStatus={status:"",spoilerText:"",files:[],visibility:t.visibility,contentType:t.contentType,poll:{},mediaDescriptions:{},quoting:!1},this.pollFormVisible=!1,this.$refs.mediaUpload&&this.$refs.mediaUpload.clearFile(),this.clearPollForm(),this.preserveFocus&&this.$nextTick((function(){e.$refs.textarea.focus()}));var n=this.$el.querySelector("textarea");n.style.height="auto",n.style.height=void 0,this.error=null,this.preview&&this.previewStatus()},postStatus:function(e,t){var n=arguments,o=this;return(0,q.Z)(ee().mark((function r(){var i,s,a,u;return ee().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(n.length>2&&void 0!==n[2]&&n[2],!o.posting||o.optimisticPosting){r.next=3;break}return r.abrupt("return");case 3:if(!o.disableSubmit){r.next=5;break}return r.abrupt("return");case 5:if(!o.emojiInputShown){r.next=7;break}return r.abrupt("return");case 7:if(o.submitOnEnter&&(e.stopPropagation(),e.preventDefault()),!o.optimisticPosting||!o.emptyStatus&&!o.isOverLengthLimit){r.next=10;break}return r.abrupt("return");case 10:if(!o.emptyStatus){r.next=13;break}return o.error=o.$t("post_status.empty_status_error"),r.abrupt("return");case 13:if(s=o.pollFormVisible?o.newStatus.poll:{},!o.pollContentError){r.next=17;break}return o.error=o.pollContentError,r.abrupt("return");case 17:return o.posting=!0,r.prev=18,r.next=21,o.setAllMediaDescriptions();case 21:r.next=28;break;case 23:return r.prev=23,r.t0=r.catch(18),o.error=o.$t("post_status.media_description_error"),o.posting=!1,r.abrupt("return");case 28:a=t.quoting?"quoteId":"inReplyToStatusId",i={status:t.status,spoilerText:t.spoilerText||null,visibility:t.visibility,sensitive:t.nsfw,media:t.files,store:o.$store},(0,N.Z)(i,a,o.replyTo),(0,N.Z)(i,"contentType",t.contentType),(0,N.Z)(i,"poll",s),(0,N.Z)(i,"idempotencyKey",o.idempotencyKey),u=i,(o.postHandler?o.postHandler:te.Z.postStatus)(u).then((function(e){e.error?o.error=e.error:(o.clearStatus(),o.$emit("posted",e)),o.posting=!1}));case 32:case"end":return r.stop()}}),r,null,[[18,23]])})))()},previewStatus:function(){var e,t=this;if(this.emptyStatus&&""===this.newStatus.spoilerText.trim())return this.preview={error:this.$t("post_status.preview_empty")},void(this.previewLoading=!1);var n=this.newStatus;this.previewLoading=!0;var o=n.quoting?"quoteId":"inReplyToStatusId";te.Z.postStatus((e={status:n.status,spoilerText:n.spoilerText||null,visibility:n.visibility,sensitive:n.nsfw,media:[],store:this.$store},(0,N.Z)(e,o,this.replyTo),(0,N.Z)(e,"contentType",n.contentType),(0,N.Z)(e,"poll",{}),(0,N.Z)(e,"preview",!0),e)).then((function(e){t.previewLoading&&(e.error?t.preview={error:e.error}:t.preview=e)})).catch((function(e){t.preview={error:e}})).finally((function(){t.previewLoading=!1}))},debouncePreviewStatus:H()((function(){this.previewStatus()}),500),autoPreview:function(){this.preview&&(this.previewLoading=!0,this.debouncePreviewStatus())},closePreview:function(){this.preview=null,this.previewLoading=!1},togglePreview:function(){this.showPreview?this.closePreview():this.previewStatus()},addMediaFile:function(e){this.newStatus.files.push(e),this.$emit("resize",{delayed:!0})},removeMediaFile:function(e){var t=this.newStatus.files.indexOf(e);this.newStatus.files.splice(t,1),this.$emit("resize")},editAttachment:function(e,t){this.newStatus.mediaDescriptions[e.id]=t},shiftUpMediaFile:function(e){var t=this.newStatus.files,n=this.newStatus.files.indexOf(e);t.splice(n,1),t.splice(n-1,0,e)},shiftDnMediaFile:function(e){var t=this.newStatus.files,n=this.newStatus.files.indexOf(e);t.splice(n,1),t.splice(n+1,0,e)},uploadFailed:function(e,t){t=t||{},this.error=this.$t("upload.error.base")+" "+this.$t("upload.error."+e,t)},startedUploadingFiles:function(){this.uploadingFiles=!0},finishedUploadingFiles:function(){this.$emit("resize"),this.uploadingFiles=!1},type:function(e){return Ae.ZP.fileType(e.mimetype)},paste:function(e){this.autoPreview(),this.resize(e),e.clipboardData.files.length>0&&(e.preventDefault(),this.dropFiles=[e.clipboardData.files[0]])},fileDrop:function(e){e.dataTransfer&&e.dataTransfer.types.includes("Files")&&(e.preventDefault(),this.dropFiles=e.dataTransfer.files,clearTimeout(this.dropStopTimeout),this.showDropIcon="hide")},fileDragStop:function(e){var t=this;clearTimeout(this.dropStopTimeout),this.showDropIcon="fade",this.dropStopTimeout=setTimeout((function(){return t.showDropIcon="hide"}),500)},fileDrag:function(e){e.dataTransfer.dropEffect=this.uploadFileLimitReached?"none":"copy",e.dataTransfer&&e.dataTransfer.types.includes("Files")&&(clearTimeout(this.dropStopTimeout),this.showDropIcon="show")},onEmojiInputInput:function(e){var t=this;this.$nextTick((function(){t.resize(t.$refs.textarea)}))},resize:function(e){var t=e.target||e;if(t instanceof window.Element){if(""===t.value)return t.style.height=null,void this.$emit("resize");var n=this.$refs.form,o=this.$refs.bottom,r=window.getComputedStyle(o)["padding-bottom"],i=$e(r),s=this.$el.closest(".column.-scrollable")||this.$el.closest(".post-form-modal-view")||window,a=window.getComputedStyle(t)["padding-top"],u=window.getComputedStyle(t)["padding-bottom"],c=$e(a)+$e(u),l=$e(t.style.height),d=s===window?s.scrollY:s.scrollTop,p=s===window?s.innerHeight:s.offsetHeight,m=d+p;t.style.height="auto";var h=Math.floor(t.scrollHeight-c),f=this.maxHeight?Math.min(h,this.maxHeight):h;Math.abs(f-l)<=1&&(f=l),t.style.height="".concat(f,"px"),this.$emit("resize",f);var g=o.offsetHeight+(0,Oe.y)(o,s).top+i,v=m<g,w=p<n.offsetHeight,b=g-m,y=!v||w&&this.$refs.textarea.selectionStart!==this.$refs.textarea.value.length?0:b,D=Math.round(d+y);s===window?s.scroll(0,D):s.scrollTop=D}},showEmojiPicker:function(){this.$refs.textarea.focus(),this.$refs["emoji-input"].triggerShowPicker()},clearError:function(){this.error=null},changeVis:function(e){this.newStatus.visibility=e},togglePollForm:function(){this.pollFormVisible=!this.pollFormVisible},setPoll:function(e){this.newStatus.poll=e},clearPollForm:function(){this.$refs.pollForm&&this.$refs.pollForm.clear()},dismissScopeNotice:function(){this.$store.dispatch("setOption",{name:"hideScopeNotice",value:!0})},setMediaDescription:function(e){var t=this.newStatus.mediaDescriptions[e];if(t&&""!==t.trim())return te.Z.setMediaDescription({store:this.$store,id:e,description:t})},setAllMediaDescriptions:function(){var e=this,t=this.newStatus.files.map((function(e){return e.id}));return Promise.all(t.map((function(t){return e.setMediaDescription(t)})))},handleEmojiInputShow:function(e){this.emojiInputShown=e},updateIdempotencyKey:function(){this.idempotencyKey=Date.now().toString()},openProfileTab:function(){this.$store.dispatch("openSettingsModalTab","profile")},propsToNative:function(e){return(0,Ee.X)(e)}}},Ue=(0,ke.Z)(Be,[["render",function(e,t,n,q,N,Z){var W=(0,o.up)("i18n-t"),H=(0,o.up)("FAIcon"),V=(0,o.up)("StatusContent"),K=(0,o.up)("EmojiInput"),G=(0,o.up)("scope-selector"),Y=(0,o.up)("Select"),J=(0,o.up)("poll-form"),Q=(0,o.up)("media-upload"),X=(0,o.up)("gallery"),ee=(0,o.up)("Checkbox");return(0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("form",{autocomplete:"off",onSubmit:t[27]||(t[27]=(0,r.iM)((function(){}),["prevent"])),onDragover:t[28]||(t[28]=(0,r.iM)((function(){return e.fileDrag&&e.fileDrag.apply(e,arguments)}),["prevent"]))},[(0,o._)("div",a,[e.$store.state.users.currentUser.locked||"private"!=e.newStatus.visibility||e.disableLockWarning?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(W,{key:0,keypath:"post_status.account_not_locked_warning",tag:"p",class:"visibility-notice",scope:"global"},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled -link",onClick:t[0]||(t[0]=function(){return e.openProfileTab&&e.openProfileTab.apply(e,arguments)})},(0,i.zw)(e.$t("post_status.account_not_locked_warning_link")),1)]})),_:1})),e.hideScopeNotice||"public"!==e.newStatus.visibility?e.hideScopeNotice||"unlisted"!==e.newStatus.visibility?!e.hideScopeNotice&&"private"===e.newStatus.visibility&&e.$store.state.users.currentUser.locked?((0,o.wg)(),(0,o.iD)("p",p,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.private")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[3]||(t[3]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,m)])):"direct"===e.newStatus.visibility?((0,o.wg)(),(0,o.iD)("p",h,[e.safeDMEnabled?((0,o.wg)(),(0,o.iD)("span",f,(0,i.zw)(e.$t("post_status.direct_warning_to_first_only")),1)):((0,o.wg)(),(0,o.iD)("span",g,(0,i.zw)(e.$t("post_status.direct_warning_to_all")),1))])):(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",l,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.unlisted")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[2]||(t[2]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,d)])):((0,o.wg)(),(0,o.iD)("p",u,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.public")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[1]||(t[1]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,c)])),e.isEdit?((0,o.wg)(),(0,o.iD)("div",v,[(0,o._)("p",null,(0,i.zw)(e.$t("post_status.edit_remote_warning")),1),(0,o._)("p",null,(0,i.zw)(e.$t("post_status.edit_unsupported_warning")),1)])):(0,o.kq)("",!0),e.disablePreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",w,[(0,o._)("a",{class:"preview-toggle faint",onClick:t[4]||(t[4]=(0,r.iM)((function(){return e.togglePreview&&e.togglePreview.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Uk)((0,i.zw)(e.$t("post_status.preview"))+" ",1),(0,o.Wm)(H,{icon:e.showPreview?"chevron-left":"chevron-right"},null,8,["icon"])]),(0,o.wy)((0,o._)("div",b,[(0,o.Wm)(H,{class:"fa-old-padding",spin:"",icon:"circle-notch"})],512),[[r.F8,e.previewLoading]])])),e.showPreview?((0,o.wg)(),(0,o.iD)("div",y,[e.preview?e.preview.error?((0,o.wg)(),(0,o.iD)("div",_,(0,i.zw)(e.preview.error),1)):((0,o.wg)(),(0,o.j4)(V,{key:2,status:e.preview,class:"preview-status"},null,8,["status"])):((0,o.wg)(),(0,o.iD)("div",D,(0,i.zw)(e.$t("general.loading")),1))])):(0,o.kq)("",!0),e.quotable?((0,o.wg)(),(0,o.iD)("div",k,[(0,o._)("button",{id:"reply-or-quote-option-".concat(e.randomSeed,"-reply"),class:(0,i.C_)(["btn button-default reply-or-quote-option",{toggled:!e.newStatus.quoting}]),tabindex:"0",role:"radio","aria-labelledby":"reply-or-quote-option-".concat(e.randomSeed,"-reply"),"aria-checked":!e.newStatus.quoting,onClick:t[5]||(t[5]=function(t){return e.newStatus.quoting=!1})},(0,i.zw)(e.$t("post_status.reply_option")),11,C),(0,o._)("button",{id:"reply-or-quote-option-".concat(e.randomSeed,"-quote"),class:(0,i.C_)(["btn button-default reply-or-quote-option",{toggled:e.newStatus.quoting}]),tabindex:"0",role:"radio","aria-labelledby":"reply-or-quote-option-".concat(e.randomSeed,"-quote"),"aria-checked":e.newStatus.quoting,onClick:t[6]||(t[6]=function(t){return e.newStatus.quoting=!0})},(0,i.zw)(e.$t("post_status.quote_option")),11,S)])):(0,o.kq)("",!0),e.disableSubject||!e.newStatus.spoilerText&&!e.alwaysShowSubject?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(K,{key:9,modelValue:e.newStatus.spoilerText,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.newStatus.spoilerText=t}),"enable-emoji-picker":"",suggest:e.emojiSuggestor,class:"form-control"},{default:(0,o.w5)((function(n){return[(0,o.wy)((0,o._)("input",(0,o.dG)({"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.newStatus.spoilerText=t}),type:"text",placeholder:e.$t("post_status.content_warning"),disabled:e.posting&&!e.optimisticPosting},e.propsToNative(n),{size:"1",class:"form-post-subject"}),null,16,j),[[r.nr,e.newStatus.spoilerText]])]})),_:1},8,["modelValue","suggest"])),(0,o.Wm)(K,{ref:"emoji-input",modelValue:e.newStatus.status,"onUpdate:modelValue":t[16]||(t[16]=function(t){return e.newStatus.status=t}),suggest:e.emojiUserSuggestor,placement:e.emojiPickerPlacement,class:"form-control main-input","enable-emoji-picker":"","hide-emoji-button":"","newline-on-ctrl-enter":e.submitOnEnter,"enable-sticker-picker":"",onInput:e.onEmojiInputInput,onStickerUploaded:e.addMediaFile,onStickerUploadFailed:e.uploadFailed,onShown:e.handleEmojiInputShow},{default:(0,o.w5)((function(n){return[(0,o.wy)((0,o._)("textarea",(0,o.dG)({ref:"textarea","onUpdate:modelValue":t[9]||(t[9]=function(t){return e.newStatus.status=t}),placeholder:e.placeholder||e.$t("post_status.default"),rows:"1",cols:"1",disabled:e.posting&&!e.optimisticPosting,class:["form-post-body",{"scrollable-form":!!e.maxHeight}]},e.propsToNative(n),{onKeydown:[t[10]||(t[10]=(0,r.D2)((0,r.iM)((function(t){return e.submitOnEnter&&e.postStatus(t,e.newStatus)}),["exact"]),["enter"])),t[11]||(t[11]=(0,r.D2)((0,r.iM)((function(t){return e.postStatus(t,e.newStatus)}),["meta"]),["enter"])),t[12]||(t[12]=(0,r.D2)((0,r.iM)((function(t){return!e.submitOnEnter&&e.postStatus(t,e.newStatus)}),["ctrl"]),["enter"]))],onInput:t[13]||(t[13]=function(){return e.resize&&e.resize.apply(e,arguments)}),onCompositionupdate:t[14]||(t[14]=function(){return e.resize&&e.resize.apply(e,arguments)}),onPaste:t[15]||(t[15]=function(){return e.paste&&e.paste.apply(e,arguments)})}),null,16,F),[[r.nr,e.newStatus.status]]),e.hasStatusLengthLimit?((0,o.wg)(),(0,o.iD)("p",{key:0,class:(0,i.C_)(["character-counter faint",{error:e.isOverLengthLimit}])},(0,i.zw)(e.charactersLeft),3)):(0,o.kq)("",!0)]})),_:1},8,["modelValue","suggest","placement","newline-on-ctrl-enter","onInput","onStickerUploaded","onStickerUploadFailed","onShown"]),e.disableScopeSelector?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",A,[e.disableVisibilitySelector?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(G,{key:0,"show-all":e.showAllScopes,"user-default":e.userDefaultScope,"original-scope":e.copyMessageScope,"initial-scope":e.newStatus.visibility,"on-scope-change":e.changeVis},null,8,["show-all","user-default","original-scope","initial-scope","on-scope-change"])),e.postFormats.length>1?((0,o.wg)(),(0,o.iD)("div",O,[(0,o.Wm)(Y,{id:"post-content-type",modelValue:e.newStatus.contentType,"onUpdate:modelValue":t[17]||(t[17]=function(t){return e.newStatus.contentType=t}),class:"form-control",attrs:{"aria-label":e.$t("post_status.content_type_selection")}},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.postFormats,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,i.zw)(e.$t('post_status.content_type["'.concat(t,'"]'))),9,E)})),128))]})),_:1},8,["modelValue","attrs"])])):(0,o.kq)("",!0),1===e.postFormats.length&&"text/plain"!==e.postFormats[0]?((0,o.wg)(),(0,o.iD)("div",z,[(0,o._)("span",P,(0,i.zw)(e.$t('post_status.content_type["'.concat(e.postFormats[0],'"]'))),1)])):(0,o.kq)("",!0)]))]),e.pollsAvailable?((0,o.wg)(),(0,o.j4)(J,{key:0,ref:"pollForm",visible:e.pollFormVisible,onUpdatePoll:e.setPoll},null,8,["visible","onUpdatePoll"])):(0,o.kq)("",!0),(0,o._)("div",I,[(0,o._)("div",x,[(0,o.Wm)(Q,{ref:"mediaUpload",class:"media-upload-icon","drop-files":e.dropFiles,disabled:e.uploadFileLimitReached,onUploading:e.startedUploadingFiles,onUploaded:e.addMediaFile,onUploadFailed:e.uploadFailed,onAllUploaded:e.finishedUploadingFiles},null,8,["drop-files","disabled","onUploading","onUploaded","onUploadFailed","onAllUploaded"]),(0,o._)("button",{class:"emoji-icon button-unstyled",title:e.$t("emoji.add_emoji"),onClick:t[18]||(t[18]=function(){return e.showEmojiPicker&&e.showEmojiPicker.apply(e,arguments)})},[(0,o.Wm)(H,{icon:"smile-beam"})],8,T),e.pollsAvailable?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,i.C_)(["poll-icon button-unstyled",{selected:e.pollFormVisible}]),title:e.$t("polls.add_poll"),onClick:t[19]||(t[19]=function(){return e.togglePollForm&&e.togglePollForm.apply(e,arguments)})},[(0,o.Wm)(H,{icon:"poll-h"})],10,$)):(0,o.kq)("",!0)]),e.posting?((0,o.wg)(),(0,o.iD)("button",B,(0,i.zw)(e.$t("post_status.posting")),1)):e.isOverLengthLimit?((0,o.wg)(),(0,o.iD)("button",U,(0,i.zw)(e.$t("post_status.post")),1)):((0,o.wg)(),(0,o.iD)("button",{key:2,disabled:e.uploadingFiles||e.disableSubmit,class:"btn button-default",onClick:t[20]||(t[20]=(0,r.iM)((function(t){return e.postStatus(t,e.newStatus)}),["stop","prevent"]))},(0,i.zw)(e.$t("post_status.post")),9,M))],512),(0,o.wy)((0,o._)("div",{style:(0,i.j5)({animation:"show"===e.showDropIcon?"fade-in 0.25s":"fade-out 0.5s"}),class:"drop-indicator",onDragleave:t[21]||(t[21]=function(){return e.fileDragStop&&e.fileDragStop.apply(e,arguments)}),onDrop:t[22]||(t[22]=(0,r.iM)((function(){return e.fileDrop&&e.fileDrop.apply(e,arguments)}),["stop"]))},[(0,o.Wm)(H,{icon:e.uploadFileLimitReached?"ban":"upload"},null,8,["icon"])],36),[[r.F8,"hide"!==e.showDropIcon]]),e.error?((0,o.wg)(),(0,o.iD)("div",L,[(0,o.Uk)(" Error: "+(0,i.zw)(e.error)+" ",1),(0,o._)("button",{class:"button-unstyled",onClick:t[23]||(t[23]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,o.Wm)(H,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])):(0,o.kq)("",!0),e.newStatus.files&&e.newStatus.files.length>0?((0,o.wg)(),(0,o.j4)(X,{key:2,class:"attachments",grid:!0,nsfw:!1,attachments:e.newStatus.files,descriptions:e.newStatus.mediaDescriptions,"set-media":function(){return e.$store.dispatch("setMedia",e.newStatus.files)},editable:!0,"edit-attachment":e.editAttachment,"remove-attachment":e.removeMediaFile,"shift-up-attachment":e.newStatus.files.length>1&&e.shiftUpMediaFile,"shift-dn-attachment":e.newStatus.files.length>1&&e.shiftDnMediaFile,onPlay:t[24]||(t[24]=function(t){return e.$emit("mediaplay",e.attachment.id)}),onPause:t[25]||(t[25]=function(t){return e.$emit("mediapause",e.attachment.id)})},null,8,["attachments","descriptions","set-media","edit-attachment","remove-attachment","shift-up-attachment","shift-dn-attachment"])):(0,o.kq)("",!0),e.newStatus.files.length>0&&!e.disableSensitivityCheckbox?((0,o.wg)(),(0,o.iD)("div",R,[(0,o.Wm)(ee,{modelValue:e.newStatus.nsfw,"onUpdate:modelValue":t[26]||(t[26]=function(t){return e.newStatus.nsfw=t})},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,i.zw)(e.$t("post_status.attachments_sensitive")),1)]})),_:1},8,["modelValue"])])):(0,o.kq)("",!0)],32)],512)}]])},99507:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=["disabled"];const i={props:{disabled:{type:Boolean},click:{type:Function,default:function(){return Promise.resolve()}}},data:function(){return{progress:!1}},methods:{onClick:function(){var e=this;this.progress=!0,this.click().then((function(){e.progress=!1}))}}},s=(0,n(83744).Z)(i,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("button",{disabled:s.progress||n.disabled,onClick:t[0]||(t[0]=function(){return a.onClick&&a.onClick.apply(a,arguments)})},[s.progress&&e.$slots.progress?(0,o.WI)(e.$slots,"progress",{key:0}):(0,o.WI)(e.$slots,"default",{key:1})],8,r)}]])},72895:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(66252),r=n(3577),i={class:"remote-follow"},s=["action"],a=["value"],u=(0,o._)("input",{type:"hidden",name:"profile",value:""},null,-1),c={click:"submit",class:"button-default remote-button"};const l={props:["user"],computed:{subscribeUrl:function(){var e=new URL(this.user.statusnet_profile_url);return"".concat(e.protocol,"//").concat(e.host,"/main/ostatus")}}},d=(0,n(83744).Z)(l,[["render",function(e,t,n,l,d,p){return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("form",{method:"POST",action:e.subscribeUrl},[(0,o._)("input",{type:"hidden",name:"nickname",value:e.user.screen_name},null,8,a),u,(0,o._)("button",c,(0,r.zw)(e.$t("user_card.remote_follow")),1)],8,s)])}]])},54110:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(66252),r=n(3577),i={key:0,class:"ScopeSelector"},s=["title"],a=["title"],u=["title"],c=["title"],l=n(9382),d=n(84131);l.vI.add(d.FU$,d.g4A,d.byT,d._1N);const p={props:["showAll","userDefault","originalScope","initialScope","onScopeChange"],data:function(){return{currentScope:this.initialScope}},computed:{showNothing:function(){return!(this.showPublic||this.showUnlisted||this.showPrivate||this.showDirect)},showPublic:function(){return"direct"!==this.originalScope&&this.shouldShow("public")},showUnlisted:function(){return"direct"!==this.originalScope&&this.shouldShow("unlisted")},showPrivate:function(){return"direct"!==this.originalScope&&this.shouldShow("private")},showDirect:function(){return this.shouldShow("direct")},css:function(){return{public:{selected:"public"===this.currentScope},unlisted:{selected:"unlisted"===this.currentScope},private:{selected:"private"===this.currentScope},direct:{selected:"direct"===this.currentScope}}}},methods:{shouldShow:function(e){return this.showAll||this.currentScope===e||this.originalScope===e||this.userDefault===e||"direct"===e},changeVis:function(e){this.currentScope=e,this.onScopeChange&&this.onScopeChange(e)}}},m=(0,n(83744).Z)(p,[["render",function(e,t,n,l,d,p){var m=(0,o.up)("FAIcon");return e.showNothing?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",i,[e.showDirect?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled scope",e.css.direct]),title:e.$t("post_status.scope.direct"),type:"button",onClick:t[0]||(t[0]=function(t){return e.changeVis("direct")})},[(0,o.Wm)(m,{icon:"envelope",class:"fa-scale-110 fa-old-padding"})],10,s)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showPrivate?((0,o.wg)(),(0,o.iD)("button",{key:1,class:(0,r.C_)(["button-unstyled scope",e.css.private]),title:e.$t("post_status.scope.private"),type:"button",onClick:t[1]||(t[1]=function(t){return e.changeVis("private")})},[(0,o.Wm)(m,{icon:"lock",class:"fa-scale-110 fa-old-padding"})],10,a)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showUnlisted?((0,o.wg)(),(0,o.iD)("button",{key:2,class:(0,r.C_)(["button-unstyled scope",e.css.unlisted]),title:e.$t("post_status.scope.unlisted"),type:"button",onClick:t[2]||(t[2]=function(t){return e.changeVis("unlisted")})},[(0,o.Wm)(m,{icon:"lock-open",class:"fa-scale-110 fa-old-padding"})],10,u)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showPublic?((0,o.wg)(),(0,o.iD)("button",{key:3,class:(0,r.C_)(["button-unstyled scope",e.css.public]),title:e.$t("post_status.scope.public"),type:"button",onClick:t[3]||(t[3]=function(t){return e.changeVis("public")})},[(0,o.Wm)(m,{icon:"globe",class:"fa-scale-110 fa-old-padding"})],10,c)):(0,o.kq)("",!0)]))}]])},76990:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(66252),r=n(3577),i=["disabled","value"],s=n(9382),a=n(84131);s.vI.add(a.ptq);const u={emits:["update:modelValue"],props:["modelValue","disabled","unstyled","kind","attrs"]},c=(0,n(83744).Z)(u,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("label",{class:(0,r.C_)(["Select input",{disabled:e.disabled,unstyled:e.unstyled}])},[(0,o._)("select",(0,o.dG)({disabled:e.disabled,value:e.modelValue},e.attrs,{onChange:t[0]||(t[0]=function(t){return e.$emit("update:modelValue",t.target.value)})}),[(0,o.WI)(e.$slots,"default")],16,i),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(c,{class:"select-down-icon",icon:"chevron-down"})],2)}]])},96686:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Jt});var o=n(66252),r=n(3577),i=n(49963),s={key:0,class:"alert error"},a={key:1,class:"status-container muted"},u={class:"status-username"},c={key:0,class:"mute-thread"},l={key:1,class:"mute-thread"},d=["title"],p={key:0,class:"pin"},m={class:"faint"},h={class:"right-side faint"},f=["title"],g=["data-tags"],v={key:0,class:"left-side"},w=["href"],b={class:"right-side"},y={key:0,class:"status-heading"},D={class:"heading-name-row"},_={class:"heading-left"},k=["title"],C=["title"],S=["src"],j={class:"heading-right"},F=["title"],A=["title"],O=["title","aria-expanded"],E=["title"],z={key:0,class:"heading-reply-row"},P={key:0,class:"glued-label reply-glued-label"},I=["aria-label"],x={class:"reply-to-text"},T={key:1,class:"reply-to-no-popover"},$={class:"reply-to-text"},B={key:1,class:"glued-label"},U=["aria-label"],M={class:"mentions-text"},L={key:1,class:"heading-edited-row"},R={key:1,class:"quoted-status"},q=["aria-expanded"],N={key:2,class:"quoted-status -unavailable-prompt"},Z=["href"],W={key:3,class:"replies"},H=["title"],V={key:1,class:"faint"},K=["onClick"],G={key:0,class:"favs-repeated-users"},Y={class:"stats"},J={class:"stat-count"},Q={class:"stat-title"},X={class:"stat-number"},ee={class:"stat-count"},te={class:"stat-title"},ne={class:"stat-number"},oe={class:"avatar-row"},re={key:5,class:"status-actions"},ie={key:3,class:"gravestone"},se={class:"left-side"},ae={class:"right-side"},ue={class:"deleted-text"},ce={key:4,class:"status-container reply-form"},le=n(4942),de=n(45578),pe=n.n(de),me=n(27955),he=n.n(me),fe={class:"ReplyButton"},ge=["title"],ve=["href","title"],we={key:2,class:"action-counter"},be=n(9382),ye=n(84131);be.vI.add(ye.Lh7,ye.r8p,ye.NBC);const De={name:"ReplyButton",props:["status","replying"],computed:{loggedIn:function(){return!!this.$store.state.users.currentUser},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}}};var _e=n(83744);const ke=(0,_e.Z)(De,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("div",fe,[e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",{"-active":e.replying}]),title:e.$t("tool_tip.reply"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.$emit("toggle")}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"reply"}),e.replying?((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-8 right-11",icon:"times"})):((0,o.wg)(),(0,o.j4)(c,{key:0,class:"focus-marker",transform:"shrink-6 up-8 right-11",icon:"plus"}))]})),_:1})],10,ge)):((0,o.wg)(),(0,o.iD)("a",{key:1,class:"button-unstyled interactive",target:"_blank",role:"button",href:e.remoteInteractionLink,title:e.$t("tool_tip.reply")},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"reply"}),e.replying?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:0,class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"plus"}))]})),_:1})],8,ve)),e.status.replies_count>0?((0,o.wg)(),(0,o.iD)("span",we,(0,r.zw)(e.status.replies_count),1)):(0,o.kq)("",!0)])}]]);var Ce={class:"FavoriteButton"},Se=["title"],je=["title","href"],Fe={key:2,class:"action-counter"},Ae=n(989),Oe=n(5737);function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ze(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ee(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.Tab,Oe.Tab,ye.r8p,ye.Kl4,ye.LEp);const Pe={props:["status","loggedIn"],data:function(){return{animated:!1}},methods:{favorite:function(){var e=this;this.status.favorited?this.$store.dispatch("unfavorite",{id:this.status.id}):this.$store.dispatch("favorite",{id:this.status.id}),this.animated=!0,setTimeout((function(){e.animated=!1}),500)}},computed:ze(ze({},(0,Ae.Se)(["mergedConfig"])),{},{remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}})},Ie=(0,_e.Z)(Pe,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("div",Ce,[e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",e.status.favorited&&"-favorited"]),title:e.$t("tool_tip.favorite"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.favorite()}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:[e.status.favorited?"fas":"far","star"],spin:e.animated},null,8,["icon","spin"]),e.status.favorited?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"active-marker",transform:"shrink-6 up-9 right-12",icon:"check"})):(0,o.kq)("",!0),e.status.favorited?((0,o.wg)(),(0,o.j4)(c,{key:2,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"minus"})):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"}))]})),_:1})],10,Se)):((0,o.wg)(),(0,o.iD)("a",{key:1,class:"button-unstyled interactive",target:"_blank",role:"button",title:e.$t("tool_tip.favorite"),href:e.remoteInteractionLink},[(0,o.Wm)(l,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:["far","star"]}),(0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"})]})),_:1})],8,je)),!e.mergedConfig.hidePostStats&&e.status.fave_num>0?((0,o.wg)(),(0,o.iD)("span",Fe,(0,r.zw)(e.status.fave_num),1)):(0,o.kq)("",!0)])}]]);var xe={class:"ReactButton"},Te=["title"],$e=n(84535),Be=n(98471);be.vI.add(ye.r8p,ye.NBC,Oe.RKn);const Ue={props:["status"],data:function(){return{filterWord:"",expanded:!1}},components:{Popover:$e.default,EmojiPicker:Be.Z},methods:{addReaction:function(e){var t=e.insertion,n=this.status.emoji_reactions.find((function(e){return e.name===t}));n&&n.me?this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:t}):this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:t})},show:function(){this.expanded||this.$refs.picker.showPicker()},onShow:function(){this.expanded=!0},onClose:function(){this.expanded=!1}},computed:{hideCustomEmoji:function(){return!this.$store.state.instance.pleromaCustomEmojiReactionsAvailable}}},Me=(0,_e.Z)(Ue,[["render",function(e,t,n,r,s,a){var u=(0,o.up)("EmojiPicker"),c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("span",xe,[(0,o.Wm)(u,{ref:"picker","enable-sticker-picker":e.enableStickerPicker,"hide-custom-emoji":e.hideCustomEmoji,class:"emoji-picker-panel",onEmoji:e.addReaction,onShow:e.onShow,onClose:e.onClose},null,8,["enable-sticker-picker","hide-custom-emoji","onEmoji","onShow","onClose"]),(0,o._)("span",{class:"button-unstyled popover-trigger",title:e.$t("tool_tip.add_reaction"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.show&&e.show.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110 fa-old-padding",icon:["far","smile-beam"]}),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-17",icon:"plus"},null,512),[[i.F8,!e.expanded]]),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-17",icon:"times"},null,512),[[i.F8,e.expanded]])]})),_:1})],8,Te)])}]]);var Le={class:"RetweetButton"},Re=["title"],qe={key:1},Ne=["title","href"],Ze={key:3,class:"no-event"},We=n(1447);be.vI.add(ye.x5v,ye.r8p,ye.Kl4,ye.LEp);const He={props:["status","loggedIn","visibility"],components:{ConfirmModal:We.Z},data:function(){return{animated:!1,showingConfirmDialog:!1}},methods:{retweet:function(){!this.status.repeated&&this.shouldConfirmRepeat?this.showConfirmDialog():this.doRetweet()},doRetweet:function(){var e=this;this.status.repeated?this.$store.dispatch("unretweet",{id:this.status.id}):this.$store.dispatch("retweet",{id:this.status.id}),this.animated=!0,setTimeout((function(){e.animated=!1}),500),this.hideConfirmDialog()},showConfirmDialog:function(){this.showingConfirmDialog=!0},hideConfirmDialog:function(){this.showingConfirmDialog=!1}},computed:{mergedConfig:function(){return this.$store.getters.mergedConfig},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})},shouldConfirmRepeat:function(){return this.mergedConfig.modalOnRepeat}}},Ve=(0,_e.Z)(He,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers"),d=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",Le,["private"!==e.visibility&&"direct"!==e.visibility&&e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",e.status.repeated&&"-repeated"]),title:e.$t("tool_tip.repeat"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.retweet()}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"retweet",spin:e.animated},null,8,["spin"]),e.status.repeated?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"active-marker",transform:"shrink-6 up-9 right-12",icon:"check"})):(0,o.kq)("",!0),e.status.repeated?((0,o.wg)(),(0,o.j4)(c,{key:2,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"minus"})):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"}))]})),_:1})],10,Re)):e.loggedIn?((0,o.wg)(),(0,o.iD)("span",qe,[(0,o.Wm)(c,{class:"fa-scale-110 fa-old-padding",icon:"lock",title:e.$t("timeline.no_retweet_hint")},null,8,["title"])])):((0,o.wg)(),(0,o.iD)("a",{key:2,class:"button-unstyled interactive",target:"_blank",role:"button",title:e.$t("tool_tip.repeat"),href:e.remoteInteractionLink},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"retweet"}),(0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"})]})),_:1})],8,Ne)),!e.mergedConfig.hidePostStats&&e.status.repeat_num>0?((0,o.wg)(),(0,o.iD)("span",Ze,(0,r.zw)(e.status.repeat_num),1)):(0,o.kq)("",!0),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmDialog?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("status.repeat_confirm_title"),"confirm-text":e.$t("status.repeat_confirm_accept_button"),"cancel-text":e.$t("status.repeat_confirm_cancel_button"),onAccepted:e.doRetweet,onCancelled:e.hideConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("status.repeat_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))])}]]);var Ke={class:"dropdown-menu"},Ge=["onClick"],Ye=["onClick"],Je=["onClick"],Qe=["onClick"],Xe=["onClick"],et=["onClick"],tt=["onClick"],nt=["onClick"],ot=["href"],rt=["onClick"],it={class:"button-unstyled popover-trigger"},st=n(93433);function at(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.cNd,ye.xVw,Oe.xVw,ye.Aq,ye.RP7,ye.EfQ,ye.Xjp,Oe.RrC,ye.qO$,ye.r8p,ye.NBC);const ut={props:["status"],components:{Popover:$e.default,ConfirmModal:We.Z},data:function(){return{expanded:!1,showingDeleteDialog:!1}},methods:{onShow:function(){this.expanded=!0},onClose:function(){this.expanded=!1},deleteStatus:function(){this.shouldConfirmDelete?this.showDeleteStatusConfirmDialog():this.doDeleteStatus()},doDeleteStatus:function(){this.$store.dispatch("deleteStatus",{id:this.status.id}),this.hideDeleteStatusConfirmDialog()},showDeleteStatusConfirmDialog:function(){this.showingDeleteDialog=!0},hideDeleteStatusConfirmDialog:function(){this.showingDeleteDialog=!1},pinStatus:function(){var e=this;this.$store.dispatch("pinStatus",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unpinStatus:function(){var e=this;this.$store.dispatch("unpinStatus",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},muteConversation:function(){var e=this;this.$store.dispatch("muteConversation",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unmuteConversation:function(){var e=this;this.$store.dispatch("unmuteConversation",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},copyLink:function(){var e=this;navigator.clipboard.writeText(this.statusLink).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},bookmarkStatus:function(){var e=this;this.$store.dispatch("bookmark",{id:this.status.id}).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unbookmarkStatus:function(){var e=this;this.$store.dispatch("unbookmark",{id:this.status.id}).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},reportStatus:function(){this.$store.dispatch("openUserReportingModal",{userId:this.status.user.id,statusIds:[this.status.id]})},editStatus:function(){var e=this;this.$store.dispatch("fetchStatusSource",{id:this.status.id}).then((function(t){return e.$store.dispatch("openEditStatusModal",{statusId:e.status.id,subject:t.spoiler_text,statusText:t.text,statusIsSensitive:e.status.nsfw,statusPoll:e.status.poll,statusFiles:(0,st.Z)(e.status.attachments),visibility:e.status.visibility,statusContentType:t.content_type})}))},showStatusHistory:function(){var e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?at(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):at(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},this.status);["attachments","created_at","emojis","text","raw_html","nsfw","poll","summary","summary_raw_html"].forEach((function(t){return delete e[t]})),this.$store.dispatch("openStatusHistoryModal",e)}},computed:{currentUser:function(){return this.$store.state.users.currentUser},canDelete:function(){if(this.currentUser)return this.currentUser.privileges.includes("messages_delete")||this.status.user.id===this.currentUser.id},ownStatus:function(){return this.status.user.id===this.currentUser.id},canPin:function(){return this.ownStatus&&("public"===this.status.visibility||"unlisted"===this.status.visibility)},canMute:function(){return!!this.currentUser},canBookmark:function(){return!!this.currentUser},statusLink:function(){return"".concat(this.$store.state.instance.server).concat(this.$router.resolve({name:"conversation",params:{id:this.status.id}}).href)},isEdited:function(){return null!==this.status.edited_at},editingAvailable:function(){return this.$store.state.instance.editingAvailable},shouldConfirmDelete:function(){return this.$store.getters.mergedConfig.modalOnDelete}}},ct=(0,_e.Z)(ut,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers"),d=(0,o.up)("ConfirmModal"),p=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(p,{class:"ExtraButtons",trigger:"click",placement:"top",offset:{y:5},"bound-to":{x:"container"},"remove-padding":"",onShow:e.onShow,onClose:e.onClose},{content:(0,o.w5)((function(n){var s=n.close;return[(0,o._)("div",Ke,[e.canMute&&!e.status.thread_muted?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item dropdown-item-icon",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.muteConversation&&e.muteConversation.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(c,{"fixed-width":"",icon:"eye-slash"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.mute_conversation")),1)])):(0,o.kq)("",!0),e.canMute&&e.status.thread_muted?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item dropdown-item-icon",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.unmuteConversation&&e.unmuteConversation.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(c,{"fixed-width":"",icon:"eye-slash"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unmute_conversation")),1)])):(0,o.kq)("",!0),!e.status.pinned&&e.canPin?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[2]||(t[2]=(0,i.iM)((function(){return e.pinStatus&&e.pinStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"thumbtack"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.pin")),1)],8,Ge)):(0,o.kq)("",!0),e.status.pinned&&e.canPin?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[3]||(t[3]=(0,i.iM)((function(){return e.unpinStatus&&e.unpinStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"thumbtack"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unpin")),1)],8,Ye)):(0,o.kq)("",!0),e.canBookmark?((0,o.wg)(),(0,o.iD)(o.HY,{key:4},[e.status.bookmarked?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[4]||(t[4]=(0,i.iM)((function(){return e.bookmarkStatus&&e.bookmarkStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:["far","bookmark"]}),(0,o._)("span",null,(0,r.zw)(e.$t("status.bookmark")),1)],8,Je)),e.status.bookmarked?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[5]||(t[5]=(0,i.iM)((function(){return e.unbookmarkStatus&&e.unbookmarkStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"bookmark"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unbookmark")),1)],8,Qe)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),e.ownStatus&&e.editingAvailable?((0,o.wg)(),(0,o.iD)("button",{key:5,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[6]||(t[6]=(0,i.iM)((function(){return e.editStatus&&e.editStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"pen"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.edit")),1)],8,Xe)):(0,o.kq)("",!0),e.isEdited&&e.editingAvailable?((0,o.wg)(),(0,o.iD)("button",{key:6,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[7]||(t[7]=(0,i.iM)((function(){return e.showStatusHistory&&e.showStatusHistory.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"history"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.status_history")),1)],8,et)):(0,o.kq)("",!0),e.canDelete?((0,o.wg)(),(0,o.iD)("button",{key:7,class:"button-default dropdown-item dropdown-item-icon",onClick:[t[8]||(t[8]=(0,i.iM)((function(){return e.deleteStatus&&e.deleteStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"times"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.delete")),1)],8,tt)):(0,o.kq)("",!0),(0,o._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[t[9]||(t[9]=(0,i.iM)((function(){return e.copyLink&&e.copyLink.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"share-alt"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.copy_link")),1)],8,nt),e.status.is_local?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:8,class:"button-default dropdown-item dropdown-item-icon",title:"Source",href:e.status.external_url,target:"_blank"},[(0,o.Wm)(c,{"fixed-width":"",icon:"external-link-alt"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.external_source")),1)],8,ot)),(0,o._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:[t[10]||(t[10]=(0,i.iM)((function(){return e.reportStatus&&e.reportStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:["far","flag"]}),(0,o._)("span",null,(0,r.zw)(e.$t("user_card.report")),1)],8,rt)])]})),trigger:(0,o.w5)((function(){return[(0,o._)("span",it,[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"ellipsis-h"}),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"plus"},null,512),[[i.F8,!e.expanded]]),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"times"},null,512),[[i.F8,e.expanded]])]})),_:1})]),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingDeleteDialog?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("status.delete_confirm_title"),"cancel-text":e.$t("status.delete_confirm_cancel_button"),"confirm-text":e.$t("status.delete_confirm_accept_button"),onCancelled:e.hideDeleteStatusConfirmDialog,onAccepted:e.doDeleteStatus},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("status.delete_confirm")),1)]})),_:1},8,["title","cancel-text","confirm-text","onCancelled","onAccepted"])):(0,o.kq)("",!0)]))]})),_:1},8,["onShow","onClose"])}]]);var lt=n(45333),dt=n(48173),pt=n(19066),mt=n(1840),ht=n(10252),ft=n(92820),gt={key:1,class:"status-preview-no-content faint"},vt={key:2,class:"status-preview-no-content"},wt=n(13311),bt=n.n(wt);be.vI.add(ye.IJ7);const yt={name:"StatusPopover",props:["statusId"],data:function(){return{error:!1}},computed:{status:function(){return bt()(this.$store.state.statuses.allStatuses,{id:this.statusId})}},components:{Status:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,96686))})),Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))}))},methods:{enter:function(){var e=this;if(!this.status){if(!this.statusId)return void(this.error=!0);this.$store.dispatch("fetchStatus",this.statusId).then((function(t){return e.error=!1})).catch((function(t){return e.error=!0}))}}},watch:{status:function(e,t){var n=this;e!==t&&this.$nextTick((function(){return n.$refs.popover.updateStyles()}))}}},Dt=(0,_e.Z)(yt,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("Status"),c=(0,o.up)("FAIcon"),l=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(l,{ref:"popover",trigger:"hover","stay-on-click":!0,"popover-class":"popover-default status-popover","bound-to":{x:"container"},onShow:e.enter},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(){return[e.status?((0,o.wg)(),(0,o.j4)(u,{key:0,"is-preview":!0,statusoid:e.status,compact:!0},null,8,["statusoid"])):e.error?((0,o.wg)(),(0,o.iD)("div",gt,(0,r.zw)(e.$t("status.status_unavailable")),1)):((0,o.wg)(),(0,o.iD)("div",vt,[(0,o.Wm)(c,{icon:"circle-notch",spin:"",size:"2x"})]))]})),_:3},8,["onShow"])}]]);var _t=n(22588),kt={class:"user-list-popover"},Ct={class:"user-list-names"},St={class:"user-list-screen-name"},jt=n(42262);be.vI.add(ye.IJ7);const Ft={name:"UserListPopover",props:["users"],components:{RichContent:ft.Z,UnicodeDomainIndicator:jt.Z,Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))})),UserAvatar:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,48173))}))},computed:{usersCapped:function(){return this.users.slice(0,16)}}},At=(0,_e.Z)(Ft,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserAvatar"),c=(0,o.up)("RichContent"),l=(0,o.up)("UnicodeDomainIndicator"),d=(0,o.up)("FAIcon"),p=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(p,{trigger:"hover",placement:"top",offset:{y:5}},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(){return[(0,o._)("div",kt,[e.users.length?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:0},(0,o.Ko)(e.usersCapped,(function(e){return(0,o.wg)(),(0,o.iD)("div",{key:e.id,class:"user-list-row"},[(0,o.Wm)(u,{user:e,class:"avatar-small",compact:!0},null,8,["user"]),(0,o._)("div",Ct,[(0,o.Wm)(c,{class:"username",title:"@"+e.screen_name_ui,html:e.name_html,emoji:e.emoji},null,8,["title","html","emoji"]),(0,o._)("span",St,(0,r.zw)(e.screen_name_ui),1),(0,o.Wm)(l,{user:e},null,8,["user"])])])})),128)):((0,o.wg)(),(0,o.j4)(d,{key:1,icon:"circle-notch",spin:"",size:"3x"}))])]})),_:3})}]]);var Ot={class:"EmojiReactions"},Et={class:"reaction-emoji"},zt=["src"],Pt={key:1,class:"reaction-emoji reaction-emoji-content"},It={class:"emoji-reaction-counts"},xt=n(15861),Tt=n(64687),$t=n.n(Tt);be.vI.add(ye.r8p,ye.Kl4,ye.LEp);const Bt={name:"EmojiReactions",components:{UserAvatar:dt.default,UserListPopover:At},props:["status"],data:function(){return{showAll:!1}},computed:{tooManyReactions:function(){return this.status.emoji_reactions.length>12},emojiReactions:function(){return this.showAll?this.status.emoji_reactions:this.status.emoji_reactions.slice(0,12)},showMoreString:function(){return"+".concat(this.status.emoji_reactions.length-12)},accountsForEmoji:function(){return this.status.emoji_reactions.reduce((function(e,t){return e[t.name]=t.accounts||[],e}),{})},loggedIn:function(){return!!this.$store.state.users.currentUser},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}},methods:{toggleShowAll:function(){this.showAll=!this.showAll},reactedWith:function(e){return this.status.emoji_reactions.find((function(t){return t.name===e})).me},fetchEmojiReactionsByIfMissing:function(){var e=this;return(0,xt.Z)($t().mark((function t(){return $t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.status.emoji_reactions.find((function(e){return!e.accounts}))){t.next=5;break}return t.next=4,e.$store.dispatch("fetchEmojiReactionsBy",e.status.id);case 4:return t.abrupt("return",t.sent);case 5:case"end":return t.stop()}}),t)})))()},reactWith:function(e){this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:e})},unreact:function(e){this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:e})},emojiOnClick:function(e,t){var n=this;return(0,xt.Z)($t().mark((function t(){return $t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.loggedIn){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,n.fetchEmojiReactionsByIfMissing();case 4:n.reactedWith(e)?n.unreact(e):n.reactWith(e);case 5:case"end":return t.stop()}}),t)})))()},counterTriggerAttrs:function(e){return{class:["btn","button-default","emoji-reaction-count-button",{"-picked-reaction":this.reactedWith(e.name)}],"aria-label":this.$tc("status.reaction_count_label",e.count,{num:e.count})}}}},Ut=(0,_e.Z)(Bt,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("FALayers"),l=(0,o.up)("UserListPopover");return(0,o.wg)(),(0,o.iD)("div",Ot,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.emojiReactions,(function(n){return(0,o.wg)(),(0,o.iD)("span",{key:n.url||n.name,class:"emoji-reaction-container btn-group"},[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.loggedIn?"button":"a"),(0,o.dG)(e.loggedIn?{}:{href:e.remoteInteractionLink},{role:"button",class:["emoji-reaction btn button-default",{"-picked-reaction":e.reactedWith(n.name)}],title:n.url?n.name:void 0,"aria-pressed":e.reactedWith(n.name),onClick:function(t){return e.emojiOnClick(n.name,t)}}),{default:(0,o.w5)((function(){return[(0,o._)("span",Et,[n.url?((0,o.wg)(),(0,o.iD)("img",{key:0,src:n.url,class:"reaction-emoji-content",width:"1em"},null,8,zt)):((0,o.wg)(),(0,o.iD)("span",Pt,(0,r.zw)(n.name),1))]),(0,o.Wm)(c,null,{default:(0,o.w5)((function(){return[e.reactedWith(n.name)?((0,o.wg)(),(0,o.j4)(u,{key:0,class:"active-marker",transform:"shrink-6 up-9",icon:"check"})):(0,o.kq)("",!0),e.reactedWith(n.name)?((0,o.wg)(),(0,o.j4)(u,{key:2,class:"focus-marker",transform:"shrink-6 up-9",icon:"minus"})):((0,o.wg)(),(0,o.j4)(u,{key:1,class:"focus-marker",transform:"shrink-6 up-9",icon:"plus"}))]})),_:2},1024)]})),_:2},1040,["class","title","aria-pressed","onClick"])),(0,o.Wm)(l,{users:e.accountsForEmoji[n.name],class:"emoji-reaction-popover","trigger-attrs":e.counterTriggerAttrs(n),onShow:t[0]||(t[0]=function(t){return e.fetchEmojiReactionsByIfMissing()})},{default:(0,o.w5)((function(){return[(0,o._)("span",It,(0,r.zw)(n.count),1)]})),_:2},1032,["users","trigger-attrs"])])})),128)),e.tooManyReactions?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"emoji-reaction-expand faint",href:"javascript:void(0)",onClick:t[1]||(t[1]=function(){return e.toggleShowAll&&e.toggleShowAll.apply(e,arguments)})},(0,r.zw)(e.showAll?e.$t("general.show_less"):e.showMoreString),1)):(0,o.kq)("",!0)])}]]);var Mt=n(12061),Lt=n(21268),Rt=n(20460),qt=n(4493),Nt=n(95052),Zt=n(67828);function Wt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ht(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Wt(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Wt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.FU$,ye.g4A,ye.byT,ye._1N,ye.NBC,ye.x5v,ye.Lh7,ye.CPW,ye.Tab,ye.RKn,ye.cNd,ye.Aq,ye.Mdf,ye.RP7,ye.mTx,ye.ptq,ye.cLY);var Vt,Kt=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},Gt=function(e,t,n){var o=Kt(t),r="controlledSet".concat(o),i="uncontrolled".concat(o);e[r]?e[r](n):e[i]=n};const Yt={name:"Status",components:{ReplyButton:ke,FavoriteButton:Ie,ReactButton:Me,RetweetButton:Ve,ExtraButtons:ct,PostStatusForm:lt.Z,UserAvatar:dt.default,AvatarList:pt.Z,Timeago:mt.Z,StatusPopover:Dt,UserListPopover:At,EmojiReactions:Ut,StatusContent:ht.Z,RichContent:ft.Z,MentionLink:Rt.Z,MentionsLine:Lt.Z,UserPopover:_t.default,UserLink:Mt.Z},props:["statusoid","expandable","inConversation","focused","highlight","compact","replies","isPreview","noHeading","inlineExpanded","showPinned","inProfile","profileUserId","inQuote","simpleTree","controlledThreadDisplayStatus","controlledToggleThreadDisplay","showOtherRepliesAsButton","controlledShowingTall","controlledToggleShowingTall","controlledExpandingSubject","controlledToggleExpandingSubject","controlledShowingLongSubject","controlledToggleShowingLongSubject","controlledReplying","controlledToggleReplying","controlledMediaPlaying","controlledSetMediaPlaying","dive"],data:function(){return{uncontrolledReplying:!1,unmuted:!1,userExpanded:!1,uncontrolledMediaPlaying:[],suspendable:!0,error:null,headTailLinks:null,displayQuote:!this.inQuote}},computed:Ht(Ht({},(Vt=["replying","mediaPlaying"],Vt.reduce((function(e,t){var n=Kt(t),o="controlledToggle".concat(n),r="controlled".concat(n),i="uncontrolled".concat(n);return e[t]=function(){return void 0===this.$data[o]&&void 0===this.$props[o]||!this[o]?this[i]:this[r]},e}),{}))),{},{muteWords:function(){return this.mergedConfig.muteWords},showReasonMutedThread:function(){return(this.status.thread_muted||this.status.reblog&&this.status.reblog.thread_muted)&&!this.inConversation},repeaterClass:function(){var e=this.statusoid.user;return(0,Nt.M)(e)},userClass:function(){var e=this.retweet?this.statusoid.retweeted_status.user:this.statusoid.user;return(0,Nt.M)(e)},deleted:function(){return this.statusoid.deleted},repeaterStyle:function(){var e=this.statusoid.user,t=this.mergedConfig.highlight;return(0,Nt.q)(t[e.screen_name])},userStyle:function(){if(!this.noHeading){var e=this.retweet?this.statusoid.retweeted_status.user:this.statusoid.user,t=this.mergedConfig.highlight;return(0,Nt.q)(t[e.screen_name])}},userProfileLink:function(){return this.generateUserProfileLink(this.status.user.id,this.status.user.screen_name)},replyProfileLink:function(){if(this.isReply){var e=this.$store.getters.findUser(this.status.in_reply_to_user_id);return e?e.statusnet_profile_url:"NOT_FOUND"}},retweet:function(){return!!this.statusoid.retweeted_status},retweeterUser:function(){return this.statusoid.user},retweeter:function(){return this.statusoid.user.name||this.statusoid.user.screen_name_ui},retweeterHtml:function(){return this.statusoid.user.name},retweeterProfileLink:function(){return this.generateUserProfileLink(this.statusoid.user.id,this.statusoid.user.screen_name)},status:function(){return this.retweet?this.statusoid.retweeted_status:this.statusoid},statusFromGlobalRepository:function(){return this.$store.state.statuses.allStatusesObject[this.status.id]},loggedIn:function(){return!!this.currentUser},muteWordHits:function(){return(0,Zt.u)(this.status,this.muteWords)},rtBotStatus:function(){return this.statusoid.user.bot},botStatus:function(){return this.status.user.bot},botIndicator:function(){return this.botStatus&&!this.hideBotIndication},rtBotIndicator:function(){return this.rtBotStatus&&!this.hideBotIndication},mentionsLine:function(){var e=this;if(!this.headTailLinks)return[];var t=new Set(this.headTailLinks.writtenMentions.map((function(e){return e.url})));return this.status.attentions.filter((function(n){return n.id!==e.status.in_reply_to_user_id&&n.statusnet_profile_url!==e.status.user.statusnet_profile_url&&!t.has(n.statusnet_profile_url)})).map((function(e){return{url:e.statusnet_profile_url,content:e.screen_name,userId:e.id}}))},hasMentionsLine:function(){return this.mentionsLine.length>0},muted:function(){if(this.statusoid.user.id===this.currentUser.id)return!1;var e=this.userIsMuted||status.thread_muted||this.muteWordHits.length>0||this.muteBotStatuses&&this.botStatus&&!this.compact;return!this.unmuted&&!this.shouldNotMute&&e},userIsMuted:function(){if(this.statusoid.user.id===this.currentUser.id)return!1;var e=this.status,t=e.reblog,n=this.$store.getters.relationship(e.user.id),o=t&&this.$store.getters.relationship(t.user.id);return e.muted||t&&t.muted||n.muting||o&&o.muting},shouldNotMute:function(){var e=this.status,t=e.reblog;return(this.inProfile&&(!t&&e.user.id===this.profileUserId||t&&t.user.id===this.profileUserId)||this.inConversation&&e.thread_muted)&&!this.muteWordHits.length>0},hideMutedUsers:function(){return this.mergedConfig.hideMutedPosts},hideMutedThreads:function(){return this.mergedConfig.hideMutedThreads},hideFilteredStatuses:function(){return this.mergedConfig.hideFilteredStatuses},hideWordFilteredPosts:function(){return this.mergedConfig.hideWordFilteredPosts},hideStatus:function(){return!this.shouldNotMute&&(this.muted&&this.hideFilteredStatuses||this.userIsMuted&&this.hideMutedUsers||this.status.thread_muted&&this.hideMutedThreads||this.muteWordHits.length>0&&this.hideWordFilteredPosts)},isFocused:function(){return!!this.focused||!!this.inConversation&&this.status.id===this.highlight},isReply:function(){return!(!this.status.in_reply_to_status_id||!this.status.in_reply_to_user_id)},replyToName:function(){if(this.status.in_reply_to_screen_name)return this.status.in_reply_to_screen_name;var e=this.$store.getters.findUser(this.status.in_reply_to_user_id);return e&&e.screen_name_ui},replySubject:function(){if(!this.status.summary)return"";var e=he()(this.status.summary),t=this.mergedConfig.subjectLineBehavior,n=e.match(/^re[: ]/i);return"noop"!==t&&n||"masto"===t?e:"email"===t?"re: ".concat(e):"noop"===t?"":void 0},combinedFavsAndRepeatsUsers:function(){var e=[].concat(this.statusFromGlobalRepository.favoritedBy,this.statusFromGlobalRepository.rebloggedBy);return pe()(e,"id")},tags:function(){return this.status.tags.filter((function(e){return e.hasOwnProperty("name")})).map((function(e){return e.name})).join(" ")},hidePostStats:function(){return this.mergedConfig.hidePostStats},muteBotStatuses:function(){return this.mergedConfig.muteBotStatuses},hideBotIndication:function(){return this.mergedConfig.hideBotIndication},currentUser:function(){return this.$store.state.users.currentUser},betterShadow:function(){return this.$store.state.interface.browserSupport.cssFilter},mergedConfig:function(){return this.$store.getters.mergedConfig},isSuspendable:function(){return!this.replying&&0===this.mediaPlaying.length},inThreadForest:function(){return!!this.controlledThreadDisplayStatus},threadShowing:function(){return"showing"===this.controlledThreadDisplayStatus},visibilityLocalized:function(){return this.$i18n.t("general.scope_in_timeline."+this.status.visibility)},isEdited:function(){return null!==this.status.edited_at},editingAvailable:function(){return this.$store.state.instance.editingAvailable},hasVisibleQuote:function(){return this.status.quote_url&&this.status.quote_visible},hasInvisibleQuote:function(){return this.status.quote_url&&!this.status.quote_visible},quotedStatus:function(){return this.status.quote_id?this.$store.state.statuses.allStatusesObject[this.status.quote_id]:void 0},shouldDisplayQuote:function(){return this.quotedStatus&&this.displayQuote}}),methods:{visibilityIcon:function(e){switch(e){case"private":return"lock";case"unlisted":return"lock-open";case"direct":return"envelope";default:return"globe"}},showError:function(e){this.error=e},clearError:function(){this.error=void 0},toggleReplying:function(){var e,t,n,o;e=this,t=Kt("replying"),n="controlledToggle".concat(t),o="uncontrolled".concat(t),e[n]?e[n]():e[o]=!e[o]},gotoOriginal:function(e){this.inConversation&&this.$emit("goto",e)},toggleExpanded:function(){this.$emit("toggleExpanded")},toggleMute:function(){this.unmuted=!this.unmuted},toggleUserExpanded:function(){this.userExpanded=!this.userExpanded},generateUserProfileLink:function(e,t){return(0,qt.Z)(e,t,this.$store.state.instance.restrictedNicknames)},addMediaPlaying:function(e){Gt(this,"mediaPlaying",this.mediaPlaying.concat(e))},removeMediaPlaying:function(e){Gt(this,"mediaPlaying",this.mediaPlaying.filter((function(t){return t!==e})))},setHeadTailLinks:function(e){this.headTailLinks=e},toggleThreadDisplay:function(){this.controlledToggleThreadDisplay()},scrollIfHighlighted:function(e){var t=e;if(this.status.id===t){var n=this.$el.getBoundingClientRect();n.top<100||n.height>=window.innerHeight-50?window.scrollBy(0,n.top-100):n.bottom>window.innerHeight-50&&window.scrollBy(0,n.bottom-window.innerHeight+50)}},toggleDisplayQuote:function(){var e=this;this.shouldDisplayQuote?this.displayQuote=!1:this.quotedStatus?this.displayQuote=!0:this.$store.dispatch("fetchStatus",this.status.quote_id).then((function(){e.displayQuote=!0}))}},watch:{highlight:function(e){this.scrollIfHighlighted(e)},"status.repeat_num":function(e){this.isFocused&&this.statusFromGlobalRepository.rebloggedBy&&this.statusFromGlobalRepository.rebloggedBy.length!==e&&this.$store.dispatch("fetchRepeats",this.status.id)},"status.fave_num":function(e){this.isFocused&&this.statusFromGlobalRepository.favoritedBy&&this.statusFromGlobalRepository.favoritedBy.length!==e&&this.$store.dispatch("fetchFavs",this.status.id)},isSuspendable:function(e){this.suspendable=e}}},Jt=(0,_e.Z)(Yt,[["render",function(e,t,n,le,de,pe){var me=(0,o.up)("FAIcon"),he=(0,o.up)("user-link"),fe=(0,o.up)("UserAvatar"),ge=(0,o.up)("RichContent"),ve=(0,o.up)("router-link"),we=(0,o.up)("UserPopover"),be=(0,o.up)("Timeago"),ye=(0,o.up)("StatusPopover"),De=(0,o.up)("MentionLink"),_e=(0,o.up)("MentionsLine"),ke=(0,o.up)("i18n-t"),Ce=(0,o.up)("StatusContent"),Se=(0,o.up)("Status",!0),je=(0,o.up)("UserListPopover"),Fe=(0,o.up)("AvatarList"),Ae=(0,o.up)("EmojiReactions"),Oe=(0,o.up)("reply-button"),Ee=(0,o.up)("retweet-button"),ze=(0,o.up)("favorite-button"),Pe=(0,o.up)("ReactButton"),Ie=(0,o.up)("extra-buttons"),xe=(0,o.up)("PostStatusForm");return e.hideStatus?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,ref:"root",class:(0,r.C_)(["Status",[{"-focused":e.isFocused},{"-conversation":e.inlineExpanded}]])},[e.error?((0,o.wg)(),(0,o.iD)("div",s,[(0,o.Uk)((0,r.zw)(e.error)+" ",1),(0,o._)("span",{class:"fa-scale-110 fa-old-padding",onClick:t[0]||(t[0]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,o.Wm)(me,{icon:"times"})])])):(0,o.kq)("",!0),e.muted&&!e.isPreview?((0,o.wg)(),(0,o.iD)("div",a,[(0,o._)("small",u,[e.muted&&e.retweet?((0,o.wg)(),(0,o.j4)(me,{key:0,class:"fa-scale-110 fa-old-padding repeat-icon",icon:"retweet"})):(0,o.kq)("",!0),(0,o.Wm)(he,{user:e.status.user,at:!1},null,8,["user"])]),e.showReasonMutedThread?((0,o.wg)(),(0,o.iD)("small",c,(0,r.zw)(e.$t("status.thread_muted")),1)):(0,o.kq)("",!0),e.showReasonMutedThread&&e.muteWordHits.length>0?((0,o.wg)(),(0,o.iD)("small",l,(0,r.zw)(e.$t("status.thread_muted_and_words")),1)):(0,o.kq)("",!0),(0,o._)("small",{class:"mute-words",title:e.muteWordHits.join(", ")},(0,r.zw)(e.muteWordHits.join(", ")),9,d),(0,o._)("button",{class:"unmute button-unstyled",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{icon:"eye-slash",class:"fa-scale-110 fa-old-padding"})])])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[e.showPinned?((0,o.wg)(),(0,o.iD)("div",p,[(0,o.Wm)(me,{icon:"thumbtack",class:"faint"}),(0,o._)("span",m,(0,r.zw)(e.$t("status.pinned")),1)])):(0,o.kq)("",!0),!e.retweet||e.noHeading||e.inConversation?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)([[e.repeaterClass,{highlighted:e.repeaterStyle}],"status-container repeat-info"]),style:(0,r.j5)([e.repeaterStyle])},[e.retweet?((0,o.wg)(),(0,o.j4)(fe,{key:0,class:"left-side repeater-avatar",bot:e.rtBotIndicator,"better-shadow":e.betterShadow,user:e.statusoid.user},null,8,["bot","better-shadow","user"])):(0,o.kq)("",!0),(0,o._)("div",h,[(0,o._)("bdi",{class:"status-username repeater-name",title:e.retweeter},[e.retweeterHtml?((0,o.wg)(),(0,o.j4)(ve,{key:0,to:e.retweeterProfileLink},{default:(0,o.w5)((function(){return[(0,o.Wm)(ge,{html:e.retweeterHtml,emoji:e.retweeterUser.emoji},null,8,["html","emoji"])]})),_:1},8,["to"])):((0,o.wg)(),(0,o.j4)(ve,{key:1,to:e.retweeterProfileLink},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.retweeter),1)]})),_:1},8,["to"]))],8,f),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(me,{icon:"retweet",class:"repeat-icon",title:e.$t("tool_tip.repeat")},null,8,["title"]),(0,o.Uk)(" "+(0,r.zw)(e.$t("timeline.repeated")),1)])],6)),e.deleted?((0,o.wg)(),(0,o.iD)("div",ie,[(0,o._)("div",se,[(0,o.Wm)(fe,{class:"post-avatar",compact:e.compact,bot:e.botIndicator},null,8,["compact","bot"])]),(0,o._)("div",ae,[(0,o._)("div",ue,(0,r.zw)(e.$t("status.status_deleted")),1),e.replying?((0,o.wg)(),(0,o.j4)(Oe,{key:0,replying:e.replying,status:e.status,onToggle:e.toggleReplying},null,8,["replying","status","onToggle"])):(0,o.kq)("",!0)])])):((0,o.wg)(),(0,o.iD)("div",{key:2,class:(0,r.C_)([[e.userClass,{highlighted:e.userStyle,"-repeat":e.retweet&&!e.inConversation}],"status-container"]),style:(0,r.j5)([e.userStyle]),"data-tags":e.tags},[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",v,[(0,o._)("a",{href:e.$router.resolve(e.userProfileLink).href,onClick:t[2]||(t[2]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(we,{"user-id":e.status.user.id,"overlay-centers":!0},{default:(0,o.w5)((function(){return[(0,o.Wm)(fe,{class:"post-avatar",bot:e.botIndicator,compact:e.compact,"better-shadow":e.betterShadow,user:e.status.user},null,8,["bot","compact","better-shadow","user"])]})),_:1},8,["user-id"])],8,w)])),(0,o._)("div",b,[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",y,[(0,o._)("div",D,[(0,o._)("div",_,[e.status.user.name_html?((0,o.wg)(),(0,o.iD)("h4",{key:0,class:"status-username",title:e.status.user.name},[(0,o.Wm)(ge,{html:e.status.user.name,emoji:e.status.user.emoji},null,8,["html","emoji"])],8,k)):((0,o.wg)(),(0,o.iD)("h4",{key:1,class:"status-username",title:e.status.user.name},(0,r.zw)(e.status.user.name),9,C)),(0,o.Wm)(he,{class:"account-name",title:e.status.user.screen_name_ui,user:e.status.user,at:!1},null,8,["title","user"]),e.status.user&&e.status.user.favicon?((0,o.wg)(),(0,o.iD)("img",{key:2,class:"status-favicon",src:e.status.user.favicon},null,8,S)):(0,o.kq)("",!0)]),(0,o._)("span",j,[(0,o.Wm)(ve,{class:"timeago faint-link",to:{name:"conversation",params:{id:e.status.id}}},{default:(0,o.w5)((function(){return[(0,o.Wm)(be,{time:e.status.created_at,"auto-update":60},null,8,["time"])]})),_:1},8,["to"]),e.status.visibility?((0,o.wg)(),(0,o.iD)("span",{key:0,class:"visibility-icon",title:e.visibilityLocalized},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:e.visibilityIcon(e.status.visibility)},null,8,["icon"])],8,F)):(0,o.kq)("",!0),e.expandable&&!e.isPreview?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled",title:e.$t("status.expand"),onClick:t[3]||(t[3]=(0,i.iM)((function(){return e.toggleExpanded&&e.toggleExpanded.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:"plus-square"})],8,A)):(0,o.kq)("",!0),e.unmuted?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled",onClick:t[4]||(t[4]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",icon:"eye-slash",class:"fa-scale-110"})])):(0,o.kq)("",!0),e.inThreadForest&&e.replies&&e.replies.length&&!e.simpleTree?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-unstyled",title:e.threadShowing?e.$t("status.thread_hide"):e.$t("status.thread_show"),"aria-expanded":e.threadShowing?"true":"false",onClick:t[5]||(t[5]=(0,i.iM)((function(){return e.toggleThreadDisplay&&e.toggleThreadDisplay.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:e.threadShowing?"chevron-up":"chevron-down"},null,8,["icon"])],8,O)):(0,o.kq)("",!0),e.dive&&!e.simpleTree?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled",title:e.$t("status.show_only_conversation_under_this"),onClick:t[6]||(t[6]=(0,i.iM)((function(){return e.dive&&e.dive.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:"angle-double-right"})],8,E)):(0,o.kq)("",!0)])]),e.isReply||e.hasMentionsLine?((0,o.wg)(),(0,o.iD)("div",z,[e.isReply?((0,o.wg)(),(0,o.iD)("span",P,[e.isPreview?((0,o.wg)(),(0,o.iD)("span",T,[(0,o._)("span",$,(0,r.zw)(e.$t("status.reply_to")),1)])):((0,o.wg)(),(0,o.j4)(ye,{key:0,"status-id":e.status.parent_visible&&e.status.in_reply_to_status_id,class:(0,r.C_)(["reply-to-popover",{"-strikethrough":!e.status.parent_visible}]),style:{"min-width":"0"}},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled reply-to","aria-label":e.$t("tool_tip.reply"),onClick:t[7]||(t[7]=(0,i.iM)((function(t){return e.gotoOriginal(e.status.in_reply_to_status_id)}),["prevent"]))},[(0,o.Wm)(me,{class:"fa-scale-110 fa-old-padding",icon:"reply",flip:"horizontal"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("span",x,(0,r.zw)(e.$t("status.reply_to")),1)],8,I)]})),_:1},8,["status-id","class"])),(0,o.Wm)(De,{content:e.replyToName,url:e.replyProfileLink,"user-id":e.status.in_reply_to_user_id,"user-screen-name":e.status.in_reply_to_screen_name},null,8,["content","url","user-id","user-screen-name"])])):(0,o.kq)("",!0),e.hasMentionsLine?((0,o.wg)(),(0,o.iD)("span",B,[(0,o._)("span",{class:"mentions","aria-label":e.$t("tool_tip.mentions"),onClick:t[8]||(t[8]=(0,i.iM)((function(t){return e.gotoOriginal(e.status.in_reply_to_status_id)}),["prevent"]))},[(0,o._)("span",M,(0,r.zw)(e.$t("status.mentions")),1)],8,U),e.hasMentionsLine?((0,o.wg)(),(0,o.j4)(_e,{key:0,mentions:e.mentionsLine.slice(0,1),class:"mentions-line-first"},null,8,["mentions"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.hasMentionsLine?((0,o.wg)(),(0,o.j4)(_e,{key:2,mentions:e.mentionsLine.slice(1),class:"mentions-line"},null,8,["mentions"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),e.isEdited&&e.editingAvailable&&!e.isPreview?((0,o.wg)(),(0,o.iD)("div",L,[(0,o.Wm)(ke,{keypath:"status.edited_at",tag:"span"},{time:(0,o.w5)((function(){return[(0,o.Wm)(be,{"template-key":"time.in_past",time:e.status.edited_at,"auto-update":60,"long-format":!0},null,8,["time"])]})),_:1})])):(0,o.kq)("",!0)])),(0,o.Wm)(Ce,{ref:"content",status:e.status,"no-heading":e.noHeading,highlight:e.highlight,focused:e.isFocused,"controlled-showing-tall":e.controlledShowingTall,"controlled-expanding-subject":e.controlledExpandingSubject,"controlled-showing-long-subject":e.controlledShowingLongSubject,"controlled-toggle-showing-tall":e.controlledToggleShowingTall,"controlled-toggle-expanding-subject":e.controlledToggleExpandingSubject,"controlled-toggle-showing-long-subject":e.controlledToggleShowingLongSubject,onMediaplay:t[9]||(t[9]=function(t){return e.addMediaPlaying(t)}),onMediapause:t[10]||(t[10]=function(t){return e.removeMediaPlaying(t)}),onParseReady:e.setHeadTailLinks},null,8,["status","no-heading","highlight","focused","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","onParseReady"]),e.hasVisibleQuote?((0,o.wg)(),(0,o.iD)("article",R,[(0,o._)("button",{class:"button-unstyled -link display-quoted-status-button","aria-expanded":e.shouldDisplayQuote,onClick:t[11]||(t[11]=function(){return e.toggleDisplayQuote&&e.toggleDisplayQuote.apply(e,arguments)})},[(0,o.Uk)((0,r.zw)(e.shouldDisplayQuote?e.$t("status.hide_quote"):e.$t("status.display_quote"))+" ",1),(0,o.Wm)(me,{class:"display-quoted-status-button-icon",icon:e.shouldDisplayQuote?"chevron-up":"chevron-down"},null,8,["icon"])],8,q),e.shouldDisplayQuote?((0,o.wg)(),(0,o.j4)(Se,{key:0,statusoid:e.quotedStatus,"in-quote":!0},null,8,["statusoid"])):(0,o.kq)("",!0)])):e.hasInvisibleQuote?((0,o.wg)(),(0,o.iD)("p",N,[(0,o.Wm)(ke,{keypath:"status.invisible_quote"},{link:(0,o.w5)((function(){return[(0,o._)("bdi",null,[(0,o._)("a",{href:e.status.quote_url,target:"_blank"},(0,r.zw)(e.status.quote_url),9,Z)])]})),_:1})])):(0,o.kq)("",!0),e.inConversation&&!e.isPreview&&e.replies&&e.replies.length?((0,o.wg)(),(0,o.iD)("div",W,[e.showOtherRepliesAsButton&&e.replies.length>1?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled -link faint",title:e.$tc("status.ancestor_follow",e.replies.length-1,{numReplies:e.replies.length-1}),onClick:t[12]||(t[12]=(0,i.iM)((function(){return e.dive&&e.dive.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$tc("status.replies_list_with_others",e.replies.length-1,{numReplies:e.replies.length-1})),9,H)):((0,o.wg)(),(0,o.iD)("span",V,(0,r.zw)(e.$t("status.replies_list")),1)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.replies,(function(t){return(0,o.wg)(),(0,o.j4)(ye,{key:t.id,"status-id":t.id},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled -link reply-link",onClick:(0,i.iM)((function(n){return e.gotoOriginal(t.id)}),["prevent"])},(0,r.zw)(t.name),9,K)]})),_:2},1032,["status-id"])})),128))])):(0,o.kq)("",!0),(0,o.Wm)(i.uT,{name:"fade"},{default:(0,o.w5)((function(){return[!e.hidePostStats&&e.isFocused&&e.combinedFavsAndRepeatsUsers.length>0?((0,o.wg)(),(0,o.iD)("div",G,[(0,o._)("div",Y,[e.statusFromGlobalRepository.rebloggedBy&&e.statusFromGlobalRepository.rebloggedBy.length>0?((0,o.wg)(),(0,o.j4)(je,{key:0,users:e.statusFromGlobalRepository.rebloggedBy},{default:(0,o.w5)((function(){return[(0,o._)("div",J,[(0,o._)("a",Q,(0,r.zw)(e.$t("status.repeats")),1),(0,o._)("div",X,(0,r.zw)(e.statusFromGlobalRepository.rebloggedBy.length),1)])]})),_:1},8,["users"])):(0,o.kq)("",!0),e.statusFromGlobalRepository.favoritedBy&&e.statusFromGlobalRepository.favoritedBy.length>0?((0,o.wg)(),(0,o.j4)(je,{key:1,users:e.statusFromGlobalRepository.favoritedBy},{default:(0,o.w5)((function(){return[(0,o._)("div",ee,[(0,o._)("a",te,(0,r.zw)(e.$t("status.favorites")),1),(0,o._)("div",ne,(0,r.zw)(e.statusFromGlobalRepository.favoritedBy.length),1)])]})),_:1},8,["users"])):(0,o.kq)("",!0),(0,o._)("div",oe,[(0,o.Wm)(Fe,{users:e.combinedFavsAndRepeatsUsers},null,8,["users"])])])])):(0,o.kq)("",!0)]})),_:1}),!e.mergedConfig.emojiReactionsOnTimeline&&!e.isFocused||e.noHeading||e.isPreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(Ae,{key:4,status:e.status},null,8,["status"])),e.noHeading||e.isPreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",re,[(0,o.Wm)(Oe,{replying:e.replying,status:e.status,onToggle:e.toggleReplying},null,8,["replying","status","onToggle"]),(0,o.Wm)(Ee,{visibility:e.status.visibility,"logged-in":e.loggedIn,status:e.status},null,8,["visibility","logged-in","status"]),(0,o.Wm)(ze,{"logged-in":e.loggedIn,status:e.status},null,8,["logged-in","status"]),e.loggedIn?((0,o.wg)(),(0,o.j4)(Pe,{key:0,status:e.status},null,8,["status"])):(0,o.kq)("",!0),(0,o.Wm)(Ie,{status:e.status,onOnError:e.showError,onOnSuccess:e.clearError},null,8,["status","onOnError","onOnSuccess"])]))])],14,g)),e.replying?((0,o.wg)(),(0,o.iD)("div",ce,[(0,o.Wm)(xe,{class:"reply-body","reply-to":e.status.id,attentions:e.status.attentions,"replied-user":e.status.user,"copy-message-scope":e.status.visibility,subject:e.replySubject,onPosted:e.toggleReplying},null,8,["reply-to","attentions","replied-user","copy-message-scope","subject","onPosted"])])):(0,o.kq)("",!0)],64))],2))}]])},10252:(e,t,n)=>{"use strict";n.d(t,{Z:()=>V});var o=n(66252),r=n(3577),i={key:0},s={key:1},a={key:3,class:"link-preview media-body"},u=n(4942),c=n(66596),l=["role"],d=["title"],p={class:"option-result-label"},m={class:"result-percentage"},h=["role","aria-labelledby","aria-checked","onClick"],f=["disabled","value"],g=["disabled","value"],v={class:"option-vote"},w={class:"footer faint"},b=["disabled"],y={class:"total"},D=n(35161),_=n.n(D),k=n(84486),C=n.n(k),S=n(1840),j=n(92820);const F={name:"Poll",props:["basePoll","emoji"],components:{Timeago:S.Z,RichContent:j.Z},data:function(){return{loading:!1,choices:[],randomSeed:"".concat(Math.random()).replace(".","-")}},created:function(){this.$store.state.polls.pollsObject[this.pollId]||this.$store.dispatch("mergeOrAddPoll",this.basePoll),this.$store.dispatch("trackPoll",this.pollId)},unmounted:function(){this.$store.dispatch("untrackPoll",this.pollId)},computed:{pollId:function(){return this.basePoll.id},poll:function(){return this.$store.state.polls.pollsObject[this.pollId]||{}},options:function(){return this.poll&&this.poll.options||[]},expiresAt:function(){return this.poll&&this.poll.expires_at||0},expired:function(){return this.poll&&this.poll.expired||!1},loggedIn:function(){return this.$store.state.users.currentUser},showResults:function(){return this.poll.voted||this.expired||!this.loggedIn},totalVotesCount:function(){return this.poll.votes_count},containerClass:function(){return{loading:this.loading}},choiceIndices:function(){return this.choices.map((function(e,t){return e&&t})).filter((function(e){return"number"==typeof e}))},isDisabled:function(){var e=0===this.choiceIndices.length;return this.loading||e}},methods:{percentageForOption:function(e){return 0===this.totalVotesCount?0:Math.round(e/this.totalVotesCount*100)},resultTitle:function(e){return"".concat(e.votes_count,"/").concat(this.totalVotesCount," ").concat(this.$t("polls.votes"))},fetchPoll:function(){this.$store.dispatch("refreshPoll",{id:this.statusId,pollId:this.poll.id})},activateOption:function(e){var t=this.$el.querySelectorAll("input"),n=this.$el.querySelector('input[value="'.concat(e,'"]'));this.poll.multiple?n.checked=!n.checked:(C()(t,(function(e){e.checked=!1})),n.checked=!0),this.choices=_()(t,(function(e){return e.checked}))},optionId:function(e){return"poll".concat(this.poll.id,"-").concat(e)},vote:function(){var e=this;0!==this.choiceIndices.length&&(this.loading=!0,this.$store.dispatch("votePoll",{id:this.statusId,pollId:this.poll.id,choices:this.choiceIndices}).then((function(t){e.loading=!1})))}}};var A=n(83744);const O=(0,A.Z)(F,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("RichContent"),c=(0,o.up)("Timeago"),D=(0,o.up)("i18n-t");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["poll",e.containerClass])},[(0,o._)("div",{role:e.showResults?"section":e.poll.multiple?"group":"radiogroup"},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.options,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{key:n,class:"poll-option"},[e.showResults?((0,o.wg)(),(0,o.iD)("div",{key:0,title:e.resultTitle(t),class:"option-result"},[(0,o._)("div",p,[(0,o._)("span",m,(0,r.zw)(e.percentageForOption(t.votes_count))+"% ",1),(0,o.Wm)(u,{html:t.title_html,"handle-links":!1,emoji:e.emoji},null,8,["html","emoji"])]),(0,o._)("div",{class:"result-fill",style:(0,r.j5)({width:"".concat(e.percentageForOption(t.votes_count),"%")})},null,4)],8,d)):((0,o.wg)(),(0,o.iD)("div",{key:1,tabindex:"0",role:e.poll.multiple?"checkbox":"radio","aria-labelledby":"option-vote-".concat(e.randomSeed,"-").concat(n),"aria-checked":e.choices[n],onClick:function(t){return e.activateOption(n)}},[e.poll.multiple?((0,o.wg)(),(0,o.iD)("input",{key:0,type:"checkbox",class:"poll-checkbox",disabled:e.loading,value:n},null,8,f)):((0,o.wg)(),(0,o.iD)("input",{key:1,type:"radio",disabled:e.loading,value:n},null,8,g)),(0,o._)("label",v,[(0,o.Wm)(u,{id:"option-vote-".concat(e.randomSeed,"-").concat(n),html:t.title_html,"handle-links":!1,emoji:e.emoji},null,8,["id","html","emoji"])])],8,h))])})),128))],8,l),(0,o._)("div",w,[e.showResults?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default poll-vote-button",type:"button",disabled:e.isDisabled,onClick:t[0]||(t[0]=function(){return e.vote&&e.vote.apply(e,arguments)})},(0,r.zw)(e.$t("polls.vote")),9,b)),(0,o._)("div",y,["number"==typeof e.poll.voters_count?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.$tc("polls.people_voted_count",e.poll.voters_count,{count:e.poll.voters_count}))+" ·  ",1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.$tc("polls.votes_count",e.poll.votes_count,{count:e.poll.votes_count}))+" ·  ",1)],64))]),(0,o._)("span",null,[(0,o.Wm)(D,{scope:"global",keypath:e.expired?"polls.expired":"polls.expires_in"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{time:e.expiresAt,"auto-update":60,"now-threshold":0},null,8,["time"])]})),_:1},8,["keypath"])])])],2)}]]);var E=n(67671),z=n(49963),P={class:"body"},I=n(58394),x=n(989),T=n(9382),$=n(84131);function B(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}T.vI.add($.gMD,$.Xig,$.VmB,$.nNP,$.Mm7);const U={name:"StatusContent",props:["compact","status","focused","noHeading","fullContent","singleLine","showingTall","expandingSubject","showingLongSubject","toggleShowingTall","toggleExpandingSubject","toggleShowingLongSubject"],data:function(){return{postLength:this.status.text.length,parseReadyDone:!1}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?B(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):B(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({localCollapseSubjectDefault:function(){return this.mergedConfig.collapseMessageWithSubject},tallStatus:function(){return!this.singleLine&&!this.compact&&this.status.raw_html.split(/<p|<br/).length+this.postLength/80>20},longSubject:function(){return this.status.summary.length>240},mightHideBecauseSubject:function(){return!!this.status.summary&&this.localCollapseSubjectDefault},mightHideBecauseTall:function(){return this.tallStatus&&!(this.status.summary&&this.localCollapseSubjectDefault)},hideSubjectStatus:function(){return this.mightHideBecauseSubject&&!this.expandingSubject},hideTallStatus:function(){return this.mightHideBecauseTall&&!this.showingTall},showingMore:function(){return this.mightHideBecauseTall&&this.showingTall||this.mightHideBecauseSubject&&this.expandingSubject},attachmentTypes:function(){return this.status.attachments.map((function(e){return I.ZP.fileType(e.mimetype)}))}},(0,x.Se)(["mergedConfig"])),components:{RichContent:j.Z},mounted:function(){var e=this;this.status.attentions&&this.status.attentions.forEach((function(t){var n=t.id;e.$store.dispatch("fetchUserIfMissing",n)}))},methods:{onParseReady:function(e){var t=this;if(!this.parseReadyDone){this.parseReadyDone=!0,this.$emit("parseReady",e);var n=e.writtenMentions,o=e.invisibleMentions;n.filter((function(e){return!e.notifying})).forEach((function(e){var n=e.content,o=e.url,r=n.replace(/<[^>]+?>/gi,"");if(r.startsWith("@")){var i=r.slice(1),s=o.replace(/^https?:\/\//,"").replace(/\/.+?$/,"");t.$store.dispatch("fetchUserIfMissing","".concat(i,"@").concat(s))}})),this.postLength=o.reduce((function(e,t){return e-t.textContent.length-1}),this.postLength)}},toggleShowMore:function(){this.mightHideBecauseTall?this.toggleShowingTall():this.mightHideBecauseSubject&&this.toggleExpandingSubject()},generateTagLink:function(e){return"/tag/".concat(e)}}},M=(0,A.Z)(U,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("RichContent"),c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["StatusBody",{"-compact":e.compact}])},[(0,o._)("div",P,[e.status.summary_raw_html?((0,o.wg)(),(0,o.iD)("div",{key:0,class:(0,r.C_)(["summary-wrapper",{"-tall":e.longSubject&&!e.showingLongSubject}])},[(0,o.Wm)(u,{class:"media-body summary",html:e.status.summary_raw_html,emoji:e.status.emojis},null,8,["html","emoji"]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link tall-subject-hider",onClick:t[0]||(t[0]=(0,z.iM)((function(){return e.toggleShowingLongSubject&&e.toggleShowingLongSubject.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("status.hide_full_subject")),513),[[z.F8,e.longSubject&&e.showingLongSubject]]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link tall-subject-hider",onClick:t[1]||(t[1]=(0,z.iM)((function(){return e.toggleShowingLongSubject&&e.toggleShowingLongSubject.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("status.show_full_subject")),513),[[z.F8,e.longSubject&&!e.showingLongSubject]])],2)):(0,o.kq)("",!0),(0,o._)("div",{class:(0,r.C_)([{"-tall-status":e.hideTallStatus},"text-wrapper"])},[(0,o.wy)((0,o._)("button",{class:(0,r.C_)(["button-unstyled -link tall-status-hider",{"-focused":e.focused}]),onClick:t[2]||(t[2]=(0,z.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("general.show_more")),3),[[z.F8,e.hideTallStatus]]),e.hideSubjectStatus||e.singleLine&&e.status.summary_raw_html?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(u,{key:0,class:(0,r.C_)([{"-single-line":e.singleLine},"text media-body"]),html:e.status.raw_html,emoji:e.status.emojis,"handle-links":!0,greentext:e.mergedConfig.greentext,attentions:e.status.attentions,onParseReady:e.onParseReady},null,8,["class","html","emoji","greentext","attentions","onParseReady"])),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link cw-status-hider",onClick:t[3]||(t[3]=(0,z.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},[(0,o.Uk)((0,r.zw)(e.$t("status.show_content"))+" ",1),e.attachmentTypes.includes("image")?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"image"})):(0,o.kq)("",!0),e.attachmentTypes.includes("video")?((0,o.wg)(),(0,o.j4)(c,{key:1,icon:"video"})):(0,o.kq)("",!0),e.attachmentTypes.includes("audio")?((0,o.wg)(),(0,o.j4)(c,{key:2,icon:"music"})):(0,o.kq)("",!0),e.attachmentTypes.includes("unknown")?((0,o.wg)(),(0,o.j4)(c,{key:3,icon:"file"})):(0,o.kq)("",!0),e.status.poll&&e.status.poll.options?((0,o.wg)(),(0,o.j4)(c,{key:4,icon:"poll-h"})):(0,o.kq)("",!0),e.status.card?((0,o.wg)(),(0,o.j4)(c,{key:5,icon:"link"})):(0,o.kq)("",!0)],512),[[z.F8,e.hideSubjectStatus]]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link status-unhider",onClick:t[4]||(t[4]=(0,z.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.tallStatus?e.$t("general.show_less"):e.$t("status.hide_content")),513),[[z.F8,e.showingMore&&!e.fullContent]])],2)]),e.hideSubjectStatus?(0,o.kq)("",!0):(0,o.WI)(e.$slots,"default",{key:0})],2)}]]);var L=n(92798);function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?R(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}T.vI.add($.IJ7,$.gMD,$.Xig,$.VmB,$.nNP,$.Mm7);var N,Z=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},W=function(e,t){var n=Z(t),o="controlledToggle".concat(n),r="uncontrolled".concat(n);e[o]?e[o]():e[r]=!e[r]};const H={name:"StatusContent",props:["status","compact","focused","noHeading","fullContent","singleLine","controlledShowingTall","controlledExpandingSubject","controlledToggleShowingTall","controlledToggleExpandingSubject","controlledShowingLongSubject","controlledToggleShowingLongSubject"],data:function(){return{uncontrolledShowingTall:this.fullContent||this.inConversation&&this.focused,uncontrolledShowingLongSubject:!1,uncontrolledExpandingSubject:!this.$store.getters.mergedConfig.collapseMessageWithSubject}},computed:q(q(q({},(N=["showingTall","expandingSubject","showingLongSubject"],N.reduce((function(e,t){var n=Z(t),o="controlledToggle".concat(n),r="controlled".concat(n),i="uncontrolled".concat(n);return e[t]=function(){return void 0===this.$data[o]&&void 0===this.$props[o]||!this[o]?this[i]:this[r]},e}),{}))),{},{statusCard:function(){return this.status.card?this.status.card.url===this.status.quote_url?null:this.status.card:null},hideAttachments:function(){return this.mergedConfig.hideAttachments&&!this.inConversation||this.mergedConfig.hideAttachmentsInConv&&this.inConversation},nsfwClickthrough:function(){return!(!this.status.nsfw||this.status.summary&&this.localCollapseSubjectDefault)},attachmentSize:function(){return this.compact?"small":this.mergedConfig.hideAttachments&&!this.inConversation||this.mergedConfig.hideAttachmentsInConv&&this.inConversation||this.status.attachments.length>this.maxThumbnails?"hide":"normal"},maxThumbnails:function(){return this.mergedConfig.maxThumbnails}},(0,x.Se)(["mergedConfig"])),(0,x.rn)({currentUser:function(e){return e.users.currentUser}})),components:{Attachment:c.Z,Poll:O,Gallery:E.Z,LinkPreview:L.Z,StatusBody:M},methods:{toggleShowingTall:function(){W(this,"showingTall")},toggleExpandingSubject:function(){W(this,"expandingSubject")},toggleShowingLongSubject:function(){W(this,"showingLongSubject")},setMedia:function(){var e=this,t="hide"===this.attachmentSize?this.status.attachments:this.galleryAttachments;return function(){return e.$store.dispatch("setMedia",t)}}}},V=(0,A.Z)(H,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("Poll"),p=(0,o.up)("FAIcon"),m=(0,o.up)("gallery"),h=(0,o.up)("link-preview"),f=(0,o.up)("StatusBody");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["StatusContent",{"-compact":e.compact}])},[(0,o.WI)(e.$slots,"header"),(0,o.Wm)(f,{status:e.status,compact:e.compact,"single-line":e.singleLine,"showing-tall":e.showingTall,"expanding-subject":e.expandingSubject,"showing-long-subject":e.showingLongSubject,"toggle-showing-tall":e.toggleShowingTall,"toggle-expanding-subject":e.toggleExpandingSubject,"toggle-showing-long-subject":e.toggleShowingLongSubject,onParseReady:t[2]||(t[2]=function(t){return e.$emit("parseReady",t)})},{default:(0,o.w5)((function(){return[e.status.poll&&e.status.poll.options&&!e.compact?((0,o.wg)(),(0,o.iD)("div",i,[(0,o.Wm)(d,{"base-poll":e.status.poll,emoji:e.status.emojis},null,8,["base-poll","emoji"])])):e.status.poll&&e.status.poll.options&&e.compact?((0,o.wg)(),(0,o.iD)("div",s,[(0,o.Wm)(p,{icon:"poll-h",size:"2x"})])):(0,o.kq)("",!0),0!==e.status.attachments.length?((0,o.wg)(),(0,o.j4)(m,{key:2,class:"attachments media-body",compact:e.compact,nsfw:e.nsfwClickthrough,attachments:e.status.attachments,limit:e.compact?1:0,size:e.attachmentSize,onPlay:t[0]||(t[0]=function(t){return e.$emit("mediaplay",e.attachment.id)}),onPause:t[1]||(t[1]=function(t){return e.$emit("mediapause",e.attachment.id)})},null,8,["compact","nsfw","attachments","limit","size"])):(0,o.kq)("",!0),!e.statusCard||e.noHeading||e.compact?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",a,[(0,o.Wm)(h,{card:e.status.card,size:e.attachmentSize,nsfw:e.nsfwClickthrough},null,8,["card","size","nsfw"])]))]})),_:1},8,["status","compact","single-line","showing-tall","expanding-subject","showing-long-subject","toggle-showing-tall","toggle-expanding-subject","toggle-showing-long-subject"]),(0,o.WI)(e.$slots,"footer")],2)}]])},32140:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i={key:0,ref:"canvas"},s=["alt","title","data-src","src","referrerpolicy","loading"];const a={props:["src","referrerpolicy","mimetype","imageLoadError","imageLoadHandler","alt","height","width","dataSrc","loading"],data:function(){return{realSrc:this.src,stopGifs:this.$store.getters.mergedConfig.stopGifs}},computed:{animated:function(){return!!this.realSrc&&this.stopGifs&&("image/gif"===this.mimetype||this.realSrc.endsWith(".gif"))},style:function(){var e=function(e){return/\d$/.test(e)?e+"px":e};return{height:this.height?e(this.height):null,width:this.width?e(this.width):null}}},methods:{loadLazy:function(){this.dataSrc&&(this.realSrc=this.dataSrc)},onLoad:function(){if(this.realSrc){var e=this.$refs.src;if(e){this.imageLoadHandler&&this.imageLoadHandler(e);var t=this.$refs.canvas;if(t){var n=e.naturalWidth,o=e.naturalHeight;t.width=n,t.height=o,t.getContext("2d").drawImage(e,0,0,n,o)}}}},onError:function(){this.imageLoadError&&this.imageLoadError()}},watch:{src:function(){this.realSrc=this.src},dataSrc:function(){this.$el.removeAttribute("data-loaded")}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,a,u,c){return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["still-image",{animated:e.animated}]),style:(0,r.j5)(e.style)},[e.animated?((0,o.wg)(),(0,o.iD)("canvas",i,null,512)):(0,o.kq)("",!0),((0,o.wg)(),(0,o.iD)("img",{ref:"src",key:e.realSrc,alt:e.alt,title:e.alt,"data-src":e.dataSrc,src:e.realSrc,referrerpolicy:e.referrerpolicy,loading:e.loading,onLoad:t[0]||(t[0]=function(){return e.onLoad&&e.onLoad.apply(e,arguments)}),onError:t[1]||(t[1]=function(){return e.onError&&e.onError.apply(e,arguments)})},null,40,s)),(0,o.WI)(e.$slots,"default")],6)}]])},1840:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(66252),r=n(3577),i=["datetime","title"],s=n(27483),a=n(39776);const u={name:"Timeago",props:["time","autoUpdate","longFormat","nowThreshold","templateKey"],data:function(){return{relativeTime:{key:"time.now",num:0},interval:null}},computed:{localeDateString:function(){var e=a.Z.internalToBrowserLocale(this.$i18n.locale);return"string"==typeof this.time?new Date(Date.parse(this.time)).toLocaleString(e):this.time.toLocaleString(e)},relativeTimeString:function(){var e=this.$i18n.tc(this.relativeTime.key,this.relativeTime.num,[this.relativeTime.num]);return"string"==typeof this.templateKey&&"time.now"!==this.relativeTime.key?this.$i18n.t(this.templateKey,[e]):e}},watch:{time:function(e,t){t!==e&&(clearTimeout(this.interval),this.refreshRelativeTimeObject())}},created:function(){this.refreshRelativeTimeObject()},unmounted:function(){clearTimeout(this.interval)},methods:{refreshRelativeTimeObject:function(){var e="number"==typeof this.nowThreshold?this.nowThreshold:1;this.relativeTime=this.longFormat?s.GV(this.time,e):s._F(this.time,e),this.autoUpdate&&(this.interval=setTimeout(this.refreshRelativeTimeObject,1e3*this.autoUpdate))}}},c=(0,n(83744).Z)(u,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("time",{datetime:n.time,title:u.localeDateString},(0,r.zw)(u.relativeTimeString),9,i)}]])},42262:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r=n(9382),i=n(84131);r.vI.add(i.dT$);const s={props:{user:Object}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,r,i,s){var a=(0,o.up)("FAIcon");return e.user&&e.user.screen_name_ui_contains_non_ascii?((0,o.wg)(),(0,o.j4)(a,{key:0,icon:"code",title:e.$t("unicode_domain_indicator.tooltip")},null,8,["title"])):(0,o.kq)("",!0)}]])},48173:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var o=n(66252),r=n(3577),i=n(32140),s=n(9382),a=n(84131);s.vI.add(a.VE0);const u={props:["user","betterShadow","compact","bot"],data:function(){return{showPlaceholder:!1,defaultAvatar:"".concat(this.$store.state.instance.server+this.$store.state.instance.defaultAvatar)}},components:{StillImage:i.Z},methods:{imgSrc:function(e){return!e||this.showPlaceholder?this.defaultAvatar:e},imageLoadError:function(){this.showPlaceholder=!0}}},c=(0,n(83744).Z)(u,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("StillImage"),c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("span",{class:(0,r.C_)(["Avatar",{"-compact":e.compact}])},[e.user?((0,o.wg)(),(0,o.j4)(u,{key:0,class:(0,r.C_)(["avatar",{"-compact":e.compact,"-better-shadow":e.betterShadow}]),alt:e.user.screen_name_ui,title:e.user.screen_name_ui,src:e.imgSrc(e.user.profile_image_url_original),"image-load-error":e.imageLoadError},null,8,["alt","title","src","image-load-error","class"])):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["avatar -placeholder",{"-compact":e.compact}])},null,2)),e.bot?((0,o.wg)(),(0,o.j4)(c,{key:2,icon:"robot",class:"bot-indicator"})):(0,o.kq)("",!0)],2)}]])},20392:(e,t,n)=>{"use strict";n.d(t,{Z:()=>$e});var o=n(66252),r=n(3577),i=n(49963),s={class:"user-info"},a={class:"container"},u={class:"user-info-avatar -link -overlay"},c={class:"user-summary"},l={class:"top-line"},d=["href"],p={class:"bottom-line"},m={key:0,class:"alert user-role"},h={key:1,class:"alert user-role"},f={key:2,class:"alert user-role"},g={key:1},v={key:2,class:"dailyAvg"},w={class:"user-meta"},b={key:0,class:"following"},y={key:1,class:"highlighter"},D=["id"],_=["id"],k={value:"disabled"},C={value:"solid"},S={value:"striped"},j={value:"side"},F={key:0,class:"user-interactions"},A={class:"btn-group"},O=["disabled"],E=["disabled"],z=["disabled"],P={key:1,class:"user-interactions"},I={key:0,class:"panel-body"},x={key:0,class:"user-counts"},T=(0,o._)("br",null,null,-1),$=["textContent"],B={class:"mute-expiry"},U=["value"],M=n(4942),L=n(27483),R=n(48173),q=n(72895),N=n(99507),Z=n(34837),W={class:"dropdown-menu"},H={key:0},V={key:0,role:"separator",class:"dropdown-divider"},K={key:3,role:"separator",class:"dropdown-divider"},G={key:4},Y=n(9382),J=n(84131),Q=n(71113),X=n(84535);Y.vI.add(J.ptq);const ee={props:["user"],data:function(){return{tags:{FORCE_NSFW:"mrf_tag:media-force-nsfw",STRIP_MEDIA:"mrf_tag:media-strip",FORCE_UNLISTED:"mrf_tag:force-unlisted",DISABLE_REMOTE_SUBSCRIPTION:"mrf_tag:disable-remote-subscription",DISABLE_ANY_SUBSCRIPTION:"mrf_tag:disable-any-subscription",SANDBOX:"mrf_tag:sandbox",QUARANTINE:"mrf_tag:quarantine"},showDeleteUserDialog:!1,toggled:!1}},components:{DialogModal:Q.Z,Popover:X.default},computed:{tagsSet:function(){return new Set(this.user.tags)},canGrantRole:function(){return this.user.is_local&&!this.user.deactivated&&"admin"===this.$store.state.users.currentUser.role},canChangeActivationState:function(){return this.privileged("users_manage_activation_state")},canDeleteAccount:function(){return this.privileged("users_delete")},canUseTagPolicy:function(){return this.$store.state.instance.tagPolicyAvailable&&this.privileged("users_manage_tags")}},methods:{hasTag:function(e){return this.tagsSet.has(e)},privileged:function(e){return this.$store.state.users.currentUser.privileges.includes(e)},toggleTag:function(e){var t=this,n=this.$store;this.tagsSet.has(e)?n.state.api.backendInteractor.untagUser({user:this.user,tag:e}).then((function(o){o.ok&&n.commit("untagUser",{user:t.user,tag:e})})):n.state.api.backendInteractor.tagUser({user:this.user,tag:e}).then((function(o){o.ok&&n.commit("tagUser",{user:t.user,tag:e})}))},toggleRight:function(e){var t=this,n=this.$store;this.user.rights[e]?n.state.api.backendInteractor.deleteRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!1})})):n.state.api.backendInteractor.addRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!0})}))},toggleActivationStatus:function(){this.$store.dispatch("toggleActivationStatus",{user:this.user})},deleteUserDialog:function(e){this.showDeleteUserDialog=e},deleteUser:function(){var e=this,t=this.$store,n=this.user,o=n.id,r=n.name;t.state.api.backendInteractor.deleteUser({user:n}).then((function(t){e.$store.dispatch("markStatusesAsDeleted",(function(e){return n.id===e.user.id}));var i="external-user-profile"===e.$route.name||"user-profile"===e.$route.name,s=e.$route.params.name===r||e.$route.params.id===o;i&&s&&window.history.back()}))},setToggled:function(e){this.toggled=e}}};var te=n(83744);const ne=(0,te.Z)(ee,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover"),l=(0,o.up)("DialogModal");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(c,{trigger:"click",class:"moderation-tools-popover",placement:"bottom",offset:{y:5},onShow:t[11]||(t[11]=function(t){return e.setToggled(!0)}),onClose:t[12]||(t[12]=function(t){return e.setToggled(!1)})},{content:(0,o.w5)((function(){return[(0,o._)("div",W,[e.canGrantRole?((0,o.wg)(),(0,o.iD)("span",H,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[0]||(t[0]=function(t){return e.toggleRight("admin")})},(0,r.zw)(e.$t(e.user.rights.admin?"user_card.admin_menu.revoke_admin":"user_card.admin_menu.grant_admin")),1),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[1]||(t[1]=function(t){return e.toggleRight("moderator")})},(0,r.zw)(e.$t(e.user.rights.moderator?"user_card.admin_menu.revoke_moderator":"user_card.admin_menu.grant_moderator")),1),e.canChangeActivationState||e.canDeleteAccount?((0,o.wg)(),(0,o.iD)("div",V)):(0,o.kq)("",!0)])):(0,o.kq)("",!0),e.canChangeActivationState?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item",onClick:t[2]||(t[2]=function(t){return e.toggleActivationStatus()})},(0,r.zw)(e.$t(e.user.deactivated?"user_card.admin_menu.activate_account":"user_card.admin_menu.deactivate_account")),1)):(0,o.kq)("",!0),e.canDeleteAccount?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item",onClick:t[3]||(t[3]=function(t){return e.deleteUserDialog(!0)})},(0,r.zw)(e.$t("user_card.admin_menu.delete_account")),1)):(0,o.kq)("",!0),e.canUseTagPolicy?((0,o.wg)(),(0,o.iD)("div",K)):(0,o.kq)("",!0),e.canUseTagPolicy?((0,o.wg)(),(0,o.iD)("span",G,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[4]||(t[4]=function(t){return e.toggleTag(e.tags.FORCE_NSFW)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.FORCE_NSFW)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.force_nsfw")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[5]||(t[5]=function(t){return e.toggleTag(e.tags.STRIP_MEDIA)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.STRIP_MEDIA)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.strip_media")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[6]||(t[6]=function(t){return e.toggleTag(e.tags.FORCE_UNLISTED)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.FORCE_UNLISTED)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.force_unlisted")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[7]||(t[7]=function(t){return e.toggleTag(e.tags.SANDBOX)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.SANDBOX)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.sandbox")),1)]),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item",onClick:t[8]||(t[8]=function(t){return e.toggleTag(e.tags.DISABLE_REMOTE_SUBSCRIPTION)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.DISABLE_REMOTE_SUBSCRIPTION)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.disable_remote_subscription")),1)])):(0,o.kq)("",!0),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item",onClick:t[9]||(t[9]=function(t){return e.toggleTag(e.tags.DISABLE_ANY_SUBSCRIPTION)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.DISABLE_ANY_SUBSCRIPTION)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.disable_any_subscription")),1)])):(0,o.kq)("",!0),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item",onClick:t[10]||(t[10]=function(t){return e.toggleTag(e.tags.QUARANTINE)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.QUARANTINE)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.quarantine")),1)])):(0,o.kq)("",!0)])):(0,o.kq)("",!0)])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",{class:(0,r.C_)(["btn button-default btn-block moderation-tools-button",{toggled:e.toggled}])},[(0,o.Uk)((0,r.zw)(e.$t("user_card.admin_menu.moderation"))+" ",1),(0,o.Wm)(u,{icon:"chevron-down"})],2)]})),_:1}),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showDeleteUserDialog?((0,o.wg)(),(0,o.j4)(l,{key:0,"on-cancel":e.deleteUserDialog.bind(this,!1)},{header:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.admin_menu.delete_user")),1)]})),footer:(0,o.w5)((function(){return[(0,o._)("button",{class:"btn button-default",onClick:t[13]||(t[13]=function(t){return e.deleteUserDialog(!1)})},(0,r.zw)(e.$t("general.cancel")),1),(0,o._)("button",{class:"btn button-default danger",onClick:t[14]||(t[14]=function(t){return e.deleteUser()})},(0,r.zw)(e.$t("user_card.admin_menu.delete_user")),1)]})),default:(0,o.w5)((function(){return[(0,o._)("p",null,(0,r.zw)(e.$t("user_card.admin_menu.delete_user_confirmation")),1)]})),_:1},8,["on-cancel"])):(0,o.kq)("",!0)]))])}]]);var oe={class:"AccountActions"},re={class:"dropdown-menu"},ie=(0,o._)("div",{role:"separator",class:"dropdown-divider"},null,-1),se={class:"button-unstyled ellipsis-button"},ae=["textContent"],ue=["textContent"],ce=n(989),le={class:"UserListMenu"},de={class:"dropdown-menu"},pe=["onClick"],me={class:"btn button-default dropdown-item -has-submenu"};function he(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?he(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):he(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Y.vI.add(J._tD);const ge={props:["user"],data:function(){return{}},components:{DialogModal:Q.Z,Popover:X.default},created:function(){this.$store.dispatch("fetchUserInLists",this.user.id)},computed:fe(fe({},(0,ce.rn)({allLists:function(e){return e.lists.allLists}})),{},{inListsSet:function(){return new Set(this.user.inLists.map((function(e){return e.id})))},lists:function(){var e=this;return this.user.inLists?this.allLists.map((function(t){return fe(fe({},t),{},{inList:e.inListsSet.has(t.id)})})):[]}}),methods:{toggleList:function(e){var t=this;this.inListsSet.has(e)?this.$store.dispatch("removeListAccount",{accountId:this.user.id,listId:e}).then((function(e){e.ok&&t.$store.dispatch("fetchUserInLists",t.user.id)})):this.$store.dispatch("addListAccount",{accountId:this.user.id,listId:e}).then((function(e){e.ok&&t.$store.dispatch("fetchUserInLists",t.user.id)}))},toggleRight:function(e){var t=this,n=this.$store;this.user.rights[e]?n.state.api.backendInteractor.deleteRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!1})})):n.state.api.backendInteractor.addRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!0})}))},toggleActivationStatus:function(){this.$store.dispatch("toggleActivationStatus",{user:this.user})},deleteUserDialog:function(e){this.showDeleteUserDialog=e},deleteUser:function(){var e=this,t=this.$store,n=this.user,o=n.id,r=n.name;t.state.api.backendInteractor.deleteUser({user:n}).then((function(t){e.$store.dispatch("markStatusesAsDeleted",(function(e){return n.id===e.user.id}));var i="external-user-profile"===e.$route.name||"user-profile"===e.$route.name,s=e.$route.params.name===r||e.$route.params.id===o;i&&s&&window.history.back()}))},setToggled:function(e){this.toggled=e}}},ve=(0,te.Z)(ge,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover");return(0,o.wg)(),(0,o.iD)("div",le,[(0,o.Wm)(c,{trigger:"hover",placement:"left","remove-padding":""},{content:(0,o.w5)((function(){return[(0,o._)("div",de,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.lists,(function(t){return(0,o.wg)(),(0,o.iD)("button",{key:t.id,class:"button-default dropdown-item",onClick:function(n){return e.toggleList(t.id)}},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":t.inList}])},null,2),(0,o.Uk)(" "+(0,r.zw)(t.title),1)],8,pe)})),128))])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",me,[(0,o.Uk)((0,r.zw)(e.$t("lists.manage_lists"))+" ",1),(0,o.Wm)(u,{class:"chevron-icon",size:"lg",icon:"chevron-right"})])]})),_:1})])}]]);var we=n(1447);function be(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Y.vI.add(J.iV1);const ye={props:["user","relationship"],data:function(){return{showingConfirmBlock:!1,showingConfirmRemoveFollower:!1}},components:{ProgressButton:N.Z,Popover:X.default,UserListMenu:ve,ConfirmModal:we.Z},methods:{showConfirmBlock:function(){this.showingConfirmBlock=!0},hideConfirmBlock:function(){this.showingConfirmBlock=!1},showConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!0},hideConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!1},showRepeats:function(){this.$store.dispatch("showReblogs",this.user.id)},hideRepeats:function(){this.$store.dispatch("hideReblogs",this.user.id)},blockUser:function(){this.shouldConfirmBlock?this.showConfirmBlock():this.doBlockUser()},doBlockUser:function(){this.$store.dispatch("blockUser",this.user.id),this.hideConfirmBlock()},unblockUser:function(){this.$store.dispatch("unblockUser",this.user.id)},removeUserFromFollowers:function(){this.shouldConfirmRemoveUserFromFollowers?this.showConfirmRemoveUserFromFollowers():this.doRemoveUserFromFollowers()},doRemoveUserFromFollowers:function(){this.$store.dispatch("removeUserFromFollowers",this.user.id),this.hideConfirmRemoveUserFromFollowers()},reportUser:function(){this.$store.dispatch("openUserReportingModal",{userId:this.user.id})},openChat:function(){this.$router.push({name:"chat",params:{username:this.$store.state.users.currentUser.screen_name,recipient_id:this.user.id}})}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({shouldConfirmBlock:function(){return this.$store.getters.mergedConfig.modalOnBlock},shouldConfirmRemoveUserFromFollowers:function(){return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers}},(0,ce.rn)({pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable}}))},De=(0,te.Z)(ye,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserListMenu"),c=(0,o.up)("FAIcon"),l=(0,o.up)("Popover"),d=(0,o.up)("i18n-t"),p=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",oe,[(0,o.Wm)(l,{trigger:"click",placement:"bottom","bound-to":{x:"container"},"remove-padding":""},{content:(0,o.w5)((function(){return[(0,o._)("div",re,[e.relationship.following?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.relationship.showing_reblogs?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default dropdown-item",onClick:t[0]||(t[0]=function(){return e.hideRepeats&&e.hideRepeats.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.hide_repeats")),1)):(0,o.kq)("",!0),e.relationship.showing_reblogs?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default dropdown-item",onClick:t[1]||(t[1]=function(){return e.showRepeats&&e.showRepeats.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.show_repeats")),1)),ie],64)):(0,o.kq)("",!0),(0,o.Wm)(u,{user:e.user},null,8,["user"]),e.relationship.followed_by?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default btn-block dropdown-item",onClick:t[2]||(t[2]=function(){return e.removeUserFromFollowers&&e.removeUserFromFollowers.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.remove_follower")),1)):(0,o.kq)("",!0),e.relationship.blocking?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"btn button-default btn-block dropdown-item",onClick:t[3]||(t[3]=function(){return e.unblockUser&&e.unblockUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.unblock")),1)):((0,o.wg)(),(0,o.iD)("button",{key:3,class:"btn button-default btn-block dropdown-item",onClick:t[4]||(t[4]=function(){return e.blockUser&&e.blockUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.block")),1)),(0,o._)("button",{class:"btn button-default btn-block dropdown-item",onClick:t[5]||(t[5]=function(){return e.reportUser&&e.reportUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.report")),1),e.pleromaChatMessagesAvailable?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"btn button-default btn-block dropdown-item",onClick:t[6]||(t[6]=function(){return e.openChat&&e.openChat.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.message")),1)):(0,o.kq)("",!0)])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",se,[(0,o.Wm)(c,{class:"icon",icon:"ellipsis-v"})])]})),_:1}),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmBlock?((0,o.wg)(),(0,o.j4)(p,{key:0,title:e.$t("user_card.block_confirm_title"),"confirm-text":e.$t("user_card.block_confirm_accept_button"),"cancel-text":e.$t("user_card.block_confirm_cancel_button"),onAccepted:e.doBlockUser,onCancelled:e.hideConfirmBlock},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{keypath:"user_card.block_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,ae)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)])),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmRemoveFollower?((0,o.wg)(),(0,o.j4)(p,{key:0,title:e.$t("user_card.remove_follower_confirm_title"),"confirm-text":e.$t("user_card.remove_follower_confirm_accept_button"),"cancel-text":e.$t("user_card.remove_follower_confirm_cancel_button"),onAccepted:e.doRemoveUserFromFollowers,onCancelled:e.hideConfirmRemoveUserFromFollowers},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{keypath:"user_card.remove_follower_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,ue)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))])}]]);var _e={class:"user-note"},ke={class:"heading"},Ce={class:"buttons"},Se=["disabled"],je=["disabled"];const Fe={props:{user:Object,relationship:Object,editable:Boolean},data:function(){return{localNote:"",editing:!1,frozen:!1}},computed:{shouldShow:function(){return this.relationship.note||this.editing}},methods:{startEditing:function(){this.localNote=this.relationship.note,this.editing=!0},cancelEditing:function(){this.editing=!1},finalizeEditing:function(){var e=this;this.frozen=!0,this.$store.dispatch("editUserNote",{id:this.user.id,comment:this.localNote}).then((function(){e.frozen=!1,e.editing=!1})).catch((function(){e.frozen=!1}))}}},Ae=(0,te.Z)(Fe,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("div",_e,[(0,o._)("div",ke,[(0,o._)("span",null,(0,r.zw)(e.$t("user_card.note")),1),(0,o._)("div",Ce,[(0,o.wy)((0,o._)("button",{class:"button-default btn",onClick:t[0]||(t[0]=function(){return e.startEditing&&e.startEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note")),513),[[i.F8,!e.editing&&e.editable]]),(0,o.wy)((0,o._)("button",{class:"button-default btn",disabled:e.frozen,onClick:t[1]||(t[1]=function(){return e.finalizeEditing&&e.finalizeEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note_apply")),9,Se),[[i.F8,e.editing]]),(0,o.wy)((0,o._)("button",{class:"button-default btn",disabled:e.frozen,onClick:t[2]||(t[2]=function(){return e.cancelEditing&&e.cancelEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note_cancel")),9,je),[[i.F8,e.editing]])])]),(0,o.wy)((0,o._)("textarea",{"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.localNote=t}),class:"note-text"},null,512),[[i.F8,e.editing],[i.nr,e.localNote]]),(0,o.wy)((0,o._)("span",{class:(0,r.C_)(["note-text",{"-blank":!e.relationship.note}])},(0,r.zw)(e.relationship.note||e.$t("user_card.note_blank")),3),[[i.F8,!e.editing]])])}]]);var Oe=n(76990),Ee=n(12061),ze=n(92820),Pe=n(4493);function Ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ie(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Y.vI.add(J.Fwd,J.qmU,J.N7g,J.Xjp,J.Xcf,J.NBC,J.TTL);const Te={props:["userId","switcher","selected","hideBio","rounded","bordered","avatarAction","onClose","hasNoteEditor"],data:function(){return{followRequestInProgress:!1,betterShadow:this.$store.state.interface.browserSupport.cssFilter,showingConfirmMute:!1,muteExpiryAmount:0,muteExpiryUnit:"minutes"}},created:function(){this.$store.dispatch("fetchUserRelationship",this.user.id)},computed:xe({user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},classes:function(){return[{"-rounded-t":"top"===this.rounded,"-rounded":!0===this.rounded,"-bordered":!0===this.bordered,"-popover":!!this.onClose}]},style:function(){return{backgroundImage:["linear-gradient(to bottom, var(--profileTint), var(--profileTint))","url(".concat(this.user.cover_photo,")")].join(", ")}},isOtherUser:function(){return this.user.id!==this.$store.state.users.currentUser.id},subscribeUrl:function(){var e=new URL(this.user.statusnet_profile_url);return"".concat(e.protocol,"//").concat(e.host,"/main/ostatus")},loggedIn:function(){return this.$store.state.users.currentUser},dailyAvg:function(){var e=Math.ceil((new Date-new Date(this.user.created_at))/864e5);return Math.round(this.user.statuses_count/e)},userHighlightType:xe({get:function(){var e=this.$store.getters.mergedConfig.highlight[this.user.screen_name];return e&&e.type||"disabled"},set:function(e){var t=this.$store.getters.mergedConfig.highlight[this.user.screen_name];"disabled"!==e?this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:t&&t.color||"#FFFFFF",type:e}):this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:void 0})}},(0,ce.Se)(["mergedConfig"])),userHighlightColor:{get:function(){var e=this.$store.getters.mergedConfig.highlight[this.user.screen_name];return e&&e.color},set:function(e){this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:e})}},visibleRole:function(){var e=this.user.rights;if(e){var t=e.admin||e.moderator,n=e.admin?"admin":"moderator";return t&&n}},hideFollowsCount:function(){return this.isOtherUser&&this.user.hide_follows_count},hideFollowersCount:function(){return this.isOtherUser&&this.user.hide_followers_count},showModerationMenu:function(){var e=this.loggedIn.privileges;return"admin"===this.loggedIn.role||e.includes("users_manage_activation_state")||e.includes("users_delete")||e.includes("users_manage_tags")},hasNote:function(){return this.relationship.note},supportsNote:function(){return"note"in this.relationship},shouldConfirmMute:function(){return this.mergedConfig.modalOnMute},muteExpiryUnits:function(){return["minutes","hours","days"]}},(0,ce.Se)(["mergedConfig"])),components:{UserAvatar:R.default,RemoteFollow:q.Z,ModerationTools:ne,AccountActions:De,ProgressButton:N.Z,FollowButton:Z.Z,Select:Oe.Z,RichContent:ze.Z,UserLink:Ee.Z,UserNote:Ae,ConfirmModal:we.Z},methods:{showConfirmMute:function(){this.showingConfirmMute=!0},hideConfirmMute:function(){this.showingConfirmMute=!1},muteUser:function(){this.shouldConfirmMute?this.showConfirmMute():this.doMuteUser()},doMuteUser:function(){this.$store.dispatch("muteUser",{id:this.user.id,expiresIn:this.shouldConfirmMute?(0,L.cC)(this.muteExpiryUnit,this.muteExpiryAmount):0}),this.hideConfirmMute()},unmuteUser:function(){this.$store.dispatch("unmuteUser",this.user.id)},subscribeUser:function(){return this.$store.dispatch("subscribeUser",this.user.id)},unsubscribeUser:function(){return this.$store.dispatch("unsubscribeUser",this.user.id)},setProfileView:function(e){this.switcher&&this.$store.commit("setProfileView",{v:e})},linkClicked:function(e){var t=e.target;"SPAN"===t.tagName&&(t=t.parentNode),"A"===t.tagName&&window.open(t.href,"_blank")},userProfileLink:function(e){return(0,Pe.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},openProfileTab:function(){this.$store.dispatch("openSettingsModalTab","profile")},zoomAvatar:function(){var e={url:this.user.profile_image_url_original,mimetype:"image"};this.$store.dispatch("setMedia",[e]),this.$store.dispatch("setCurrentMedia",e)},mentionUser:function(){this.$store.dispatch("openPostStatusModal",{replyTo:!0,repliedUser:this.user})},onAvatarClickHandler:function(e){this.onAvatarClick&&(e.preventDefault(),this.onAvatarClick())}}},$e=(0,te.Z)(Te,[["render",function(e,t,n,M,L,R){var q=(0,o.up)("UserAvatar"),N=(0,o.up)("FAIcon"),Z=(0,o.up)("router-link"),W=(0,o.up)("RichContent"),H=(0,o.up)("AccountActions"),V=(0,o.up)("user-link"),K=(0,o.up)("Select"),G=(0,o.up)("FollowButton"),Y=(0,o.up)("ProgressButton"),J=(0,o.up)("FALayers"),Q=(0,o.up)("ModerationTools"),X=(0,o.up)("RemoteFollow"),ee=(0,o.up)("UserNote"),te=(0,o.up)("i18n-t"),ne=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["user-card",e.classes])},[(0,o._)("div",{class:(0,r.C_)([{"hide-bio":e.hideBio},"background-image"]),style:(0,r.j5)(e.style)},null,6),(0,o._)("div",{class:(0,r.C_)(e.onClose?"":e.panel-e.heading-e.flexible-e.height)},[(0,o._)("div",s,[(0,o._)("div",a,["zoom"===e.avatarAction?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"user-info-avatar -link",onClick:t[0]||(t[0]=function(){return e.zoomAvatar&&e.zoomAvatar.apply(e,arguments)})},[(0,o.Wm)(q,{"better-shadow":e.betterShadow,user:e.user},null,8,["better-shadow","user"]),(0,o._)("div",u,[(0,o.Wm)(N,{class:"fa-scale-110 fa-old-padding",icon:"search-plus"})])])):"function"==typeof e.avatarAction?((0,o.wg)(),(0,o.j4)(q,{key:1,class:"user-info-avatar","better-shadow":e.betterShadow,user:e.user,onClick:e.avatarAction},null,8,["better-shadow","user","onClick"])):((0,o.wg)(),(0,o.j4)(Z,{key:2,to:e.userProfileLink(e.user)},{default:(0,o.w5)((function(){return[(0,o.Wm)(q,{"better-shadow":e.betterShadow,user:e.user},null,8,["better-shadow","user"])]})),_:1},8,["to"])),(0,o._)("div",c,[(0,o._)("div",l,[(0,o.Wm)(Z,{to:e.userProfileLink(e.user),class:"user-name"},{default:(0,o.w5)((function(){return[(0,o.Wm)(W,{title:e.user.name,html:e.user.name,emoji:e.user.emoji},null,8,["title","html","emoji"])]})),_:1},8,["to"]),!e.isOtherUser&&e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled edit-profile-button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.openProfileTab&&e.openProfileTab.apply(e,arguments)}),["stop"]))},[(0,o.Wm)(N,{"fixed-width":"",class:"icon",icon:"edit",title:e.$t("user_card.edit_profile")},null,8,["title"])])):(0,o.kq)("",!0),e.isOtherUser&&!e.user.is_local?((0,o.wg)(),(0,o.iD)("a",{key:1,href:e.user.statusnet_profile_url,target:"_blank",class:"button-unstyled external-link-button"},[(0,o.Wm)(N,{class:"icon",icon:"external-link-alt"})],8,d)):(0,o.kq)("",!0),e.isOtherUser&&e.loggedIn?((0,o.wg)(),(0,o.j4)(H,{key:2,user:e.user,relationship:e.relationship},null,8,["user","relationship"])):(0,o.kq)("",!0),e.onClose?((0,o.wg)(),(0,o.j4)(Z,{key:3,to:e.userProfileLink(e.user),class:"button-unstyled external-link-button",onClick:e.onClose},{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{class:"icon",icon:"expand-alt"})]})),_:1},8,["to","onClick"])):(0,o.kq)("",!0),e.onClose?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled external-link-button",onClick:t[2]||(t[2]=function(){return e.onClose&&e.onClose.apply(e,arguments)})},[(0,o.Wm)(N,{class:"icon",icon:"times"})])):(0,o.kq)("",!0)]),(0,o._)("div",p,[(0,o.Wm)(V,{class:"user-screen-name",user:e.user},null,8,["user"]),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.user.deactivated?((0,o.wg)(),(0,o.iD)("span",m,(0,r.zw)(e.$t("user_card.deactivated")),1)):(0,o.kq)("",!0),e.visibleRole?((0,o.wg)(),(0,o.iD)("span",h,(0,r.zw)(e.$t("general.role.".concat(e.visibleRole))),1)):(0,o.kq)("",!0),e.user.bot?((0,o.wg)(),(0,o.iD)("span",f,(0,r.zw)(e.$t("user_card.bot")),1)):(0,o.kq)("",!0)],64)),e.user.locked?((0,o.wg)(),(0,o.iD)("span",g,[(0,o.Wm)(N,{class:"lock-icon",icon:"lock",size:"sm"})])):(0,o.kq)("",!0),e.mergedConfig.hideUserStats||e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",v,(0,r.zw)(e.dailyAvg)+" "+(0,r.zw)(e.$t("user_card.per_day")),1))])])]),(0,o._)("div",w,[e.relationship.followed_by&&e.loggedIn&&e.isOtherUser?((0,o.wg)(),(0,o.iD)("div",b,(0,r.zw)(e.$t("user_card.follows_you")),1)):(0,o.kq)("",!0),!e.isOtherUser||!e.loggedIn&&e.switcher?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",y,["disabled"!==e.userHighlightType?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,id:"userHighlightColorTx"+e.user.id,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.userHighlightColor=t}),class:"userHighlightText",type:"text"},null,8,D)),[[i.nr,e.userHighlightColor]]):(0,o.kq)("",!0),"disabled"!==e.userHighlightType?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:1,id:"userHighlightColor"+e.user.id,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.userHighlightColor=t}),class:"userHighlightCl",type:"color"},null,8,_)),[[i.nr,e.userHighlightColor]]):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(K,{id:"userHighlightSel"+e.user.id,modelValue:e.userHighlightType,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.userHighlightType=t}),class:"userHighlightSel"},{default:(0,o.w5)((function(){return[(0,o._)("option",k,(0,r.zw)(e.$t("user_card.highlight.disabled")),1),(0,o._)("option",C,(0,r.zw)(e.$t("user_card.highlight.solid")),1),(0,o._)("option",S,(0,r.zw)(e.$t("user_card.highlight.striped")),1),(0,o._)("option",j,(0,r.zw)(e.$t("user_card.highlight.side")),1)]})),_:1},8,["id","modelValue"])]))]),e.loggedIn&&e.isOtherUser?((0,o.wg)(),(0,o.iD)("div",F,[(0,o._)("div",A,[(0,o.Wm)(G,{relationship:e.relationship,user:e.user},null,8,["relationship","user"]),e.relationship.following?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.relationship.subscribing?((0,o.wg)(),(0,o.j4)(Y,{key:1,class:"btn button-default toggled",click:e.unsubscribeUser,title:e.$t("user_card.unsubscribe")},{default:(0,o.w5)((function(){return[(0,o.Wm)(J,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{icon:"rss",transform:"left-5 shrink-6 up-3 rotate-20",flip:"horizontal"}),(0,o.Wm)(N,{icon:"rss",transform:"right-5 shrink-6 up-3 rotate-20"}),(0,o.Wm)(N,{icon:"bell"})]})),_:1})]})),_:1},8,["click","title"])):((0,o.wg)(),(0,o.j4)(Y,{key:0,class:"btn button-default",click:e.subscribeUser,title:e.$t("user_card.subscribe")},{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{icon:"bell"})]})),_:1},8,["click","title"]))],64)):(0,o.kq)("",!0)]),(0,o._)("div",null,[e.relationship.muting?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default btn-block toggled",disabled:e.user.deactivated,onClick:t[6]||(t[6]=function(){return e.unmuteUser&&e.unmuteUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.muted")),9,O)):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default btn-block",disabled:e.user.deactivated,onClick:t[7]||(t[7]=function(){return e.muteUser&&e.muteUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.mute")),9,E))]),(0,o._)("div",null,[(0,o._)("button",{class:"btn button-default btn-block",disabled:e.user.deactivated,onClick:t[8]||(t[8]=function(){return e.mentionUser&&e.mentionUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.mention")),9,z)]),e.showModerationMenu?((0,o.wg)(),(0,o.j4)(Q,{key:0,user:e.user},null,8,["user"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),!e.loggedIn&&e.user.is_local?((0,o.wg)(),(0,o.iD)("div",P,[(0,o.Wm)(X,{user:e.user},null,8,["user"])])):(0,o.kq)("",!0),e.loggedIn&&e.isOtherUser&&(e.hasNote||e.hasNoteEditor&&e.supportsNote)?((0,o.wg)(),(0,o.j4)(ee,{key:2,user:e.user,relationship:e.relationship,editable:e.hasNoteEditor},null,8,["user","relationship","editable"])):(0,o.kq)("",!0)])],2),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",I,[!e.mergedConfig.hideUserStats&&e.switcher?((0,o.wg)(),(0,o.iD)("div",x,[(0,o._)("div",{class:"user-count",onClick:t[9]||(t[9]=(0,i.iM)((function(t){return e.setProfileView("statuses")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.statuses")),1),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(e.user.statuses_count)+" ",1),T])]),(0,o._)("div",{class:"user-count",onClick:t[10]||(t[10]=(0,i.iM)((function(t){return e.setProfileView("friends")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.followees")),1),(0,o._)("span",null,(0,r.zw)(e.hideFollowsCount?e.$t("user_card.hidden"):e.user.friends_count),1)]),(0,o._)("div",{class:"user-count",onClick:t[11]||(t[11]=(0,i.iM)((function(t){return e.setProfileView("followers")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.followers")),1),(0,o._)("span",null,(0,r.zw)(e.hideFollowersCount?e.$t("user_card.hidden"):e.user.followers_count),1)])])):(0,o.kq)("",!0),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(W,{key:1,class:"user-card-bio",html:e.user.description_html,emoji:e.user.emoji,"handle-links":!0},null,8,["html","emoji"]))])),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmMute?((0,o.wg)(),(0,o.j4)(ne,{key:0,title:e.$t("user_card.mute_confirm_title"),"confirm-text":e.$t("user_card.mute_confirm_accept_button"),"cancel-text":e.$t("user_card.mute_confirm_cancel_button"),onAccepted:e.doMuteUser,onCancelled:e.hideConfirmMute},{default:(0,o.w5)((function(){return[(0,o.Wm)(te,{keypath:"user_card.mute_confirm",tag:"div"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,$)]})),_:1}),(0,o._)("div",B,[(0,o._)("label",null,(0,r.zw)(e.$t("user_card.mute_duration_prompt")),1),(0,o.wy)((0,o._)("input",{"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.muteExpiryAmount=t}),type:"number",class:"expiry-amount hide-number-spinner",min:0},null,512),[[i.nr,e.muteExpiryAmount]]),(0,o.Wm)(K,{modelValue:e.muteExpiryUnit,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.muteExpiryUnit=t}),unstyled:"true",class:"expiry-unit"},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.muteExpiryUnits,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,r.zw)(e.$t("time.".concat(t,"_short"),[""])),9,U)})),128))]})),_:1},8,["modelValue"])])]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))],2)}]])},12061:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i=n(42262),s=n(4493);const a={props:{user:Object,at:{type:Boolean,default:!0}},components:{UnicodeDomainIndicator:i.Z},methods:{userProfileLink:function(e){return(0,s.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UnicodeDomainIndicator"),c=(0,o.up)("router-link");return(0,o.wg)(),(0,o.j4)(c,{title:e.user.screen_name_ui,to:e.userProfileLink(e.user)},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.at?"@":"")+(0,r.zw)(e.user.screen_name_ui),1),(0,o.Wm)(u,{user:e.user},null,8,["user"])]})),_:1},8,["title","to"])}]])},22588:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var o=n(66252);const r={name:"UserPopover",props:["userId","overlayCenters","disabled","overlayCentersSelector"],components:{UserCard:n(20392).Z,Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))}))},computed:{userPopoverAvatarAction:function(){return this.$store.getters.mergedConfig.userPopoverAvatarAction},userPopoverOverlay:function(){return this.$store.getters.mergedConfig.userPopoverOverlay}}},i=(0,n(83744).Z)(r,[["render",function(e,t,n,r,i,s){var a=(0,o.up)("UserCard"),u=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(u,{trigger:"click","popover-class":"popover-default user-popover","overlay-centers-selector":e.overlayCentersSelector||".user-info .Avatar","overlay-centers":e.overlayCenters&&e.userPopoverOverlay,disabled:e.disabled},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(t){var n=t.close;return[(0,o.Wm)(a,{class:"user-popover","user-id":e.userId,"hide-bio":!0,"avatar-action":"close"==e.userPopoverAvatarAction?n:e.userPopoverAvatarAction,"on-close":n},null,8,["user-id","avatar-action","on-close"])]})),_:3},8,["overlay-centers-selector","overlay-centers","disabled"])}]])},34133:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=["src","loop","controls","alt","title"];const i={props:["attachment","controls"],data:function(){return{blocksSuspend:!1,hasAudio:!0}},computed:{loopVideo:function(){return this.$store.getters.mergedConfig.loopVideoSilentOnly?!this.hasAudio:this.$store.getters.mergedConfig.loopVideo}},methods:{onPlaying:function(e){this.setHasAudio(e),this.loopVideo?this.$emit("play",{looping:!0}):this.$emit("play")},onPaused:function(e){this.$emit("pause")},setHasAudio:function(e){var t=e.srcElement||e.target;this.hasAudio&&(void 0!==t.webkitAudioDecodedByteCount&&t.webkitAudioDecodedByteCount>0||void 0!==t.mozHasAudio&&t.mozHasAudio||void 0!==t.audioTracks&&t.audioTracks.length>0||(this.hasAudio=!1))}}},s=(0,n(83744).Z)(i,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("video",{class:"video",preload:"metadata",src:e.attachment.url,loop:e.loopVideo,controls:e.controls,alt:e.attachment.description,title:e.attachment.description,playsinline:"",onPlaying:t[0]||(t[0]=function(){return e.onPlaying&&e.onPlaying.apply(e,arguments)}),onPause:t[1]||(t[1]=function(){return e.onPaused&&e.onPaused.apply(e,arguments)})},null,40,r)}]])},27650:(e,t,n)=>{var o={"./ar.json":[36224,7808],"./ca.json":[49394,6234],"./cs.json":[87436,7433],"./de.json":[25195,9459],"./en.json":[88797],"./eo.json":[97898,4646],"./es.json":[98559,3968],"./et.json":[13230,4451],"./eu.json":[84826,4542],"./fa.json":[52006,2953],"./fi.json":[70823,9738],"./fr.json":[61341,3746],"./ga.json":[41647,830],"./he.json":[92215,379],"./hu.json":[95028,5494],"./id.json":[62263,2513],"./it.json":[2533,1159],"./ja_easy.json":[8439,8714],"./ja_pedantic.json":[22838,325],"./ko.json":[10707,9670],"./nan-TW.json":[42101,9862],"./nb.json":[72358,7845],"./nl.json":[49922,6256],"./oc.json":[47297,617],"./pl.json":[82098,5571],"./pt.json":[94465,4047],"./ro.json":[64367,6342],"./ru.json":[73289,5964],"./sk.json":[31478,1547],"./te.json":[32781,2044],"./uk.json":[8411,5253],"./vi.json":[6294,4975],"./zh.json":[4425,5929],"./zh_Hant.json":[37644,6544]};function r(e){if(!n.o(o,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=o[e],r=t[0];return Promise.all(t.slice(1).map(n.e)).then((()=>n(r)))}r.keys=()=>Object.keys(o),r.id=27650,e.exports=r},31934:(e,t,n)=>{"use strict";e.exports=n.p+"static/img/pleromatan_apology.f9d5180.png"},95326:(e,t,n)=>{"use strict";e.exports=n.p+"static/img/pleromatan_apology_fox.038b0bb.png"},68789:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAACvCAQAAAChxLOoAAAK0klEQVR42u2de3BU1R3HP7tJeGd5RCAqiGIECUiB1qACllpbn2DUEUalM7U+sPbhWB1UdKrWccbiTDtqrcVaGVuttZaKYnVQEBEkiihRUJQhQkSxaJ7EvLP77R9Jl93s69695969cfjdP5K7uefcfPf8fuf3OL/zOwHxzaAgh4EcBtJngAxntPdAAi4I++8o5rJvApAvOIKT+Ch6P5KfU8mzLiOR6etcRSTdLkQ7KtfNalREpcLdy3yX90uSKoXQkeqmVk1yG4h5YS8B4FtMJZ8/9Hw2gEqW0c9Nzso33mNXz8/zmcVF0U/7cSMjuBr5HshBQmM5m0mc0PPBRUzpNdFfSSRyTdDnwl6mdUpOnTG/h7VCs/wr7MfqKYVTwIjEAemmj7VMMxUwC8S5HrmM5QzJghE+YRUTWUCrH1irQEsUkROau90HrBXUMw5hSB16VGNzC2Sg7pMZ+lpLlJcrICXaJZO0zakRk12zS1Un09SiGxT0Esj52iq36A2N9wbIUXpJrXKTGjT/ZdeBXKwDjmepzBTWra4B+QDN0Bp1egCjm8pdABJBx+tZeUVd2qBrs5mMM5koRdzLlQRcd7kPsI1tVLBxR8MUF3z2W7gtCzvKOnWwlkoq2coeN22ti11mo5X6VIO9cHW30OYqO9Uz35jtmxbIPhZR5SKQn3AS/b2KawWYyenM5nsMIUzQuNiHOcg+mrmAr7zxR4bqbscTq1J6kQs8Cwfd38gch99YXooISguX80/PgtgziAmBZs3GCZ+0s5qZPOVl7LeErQw1Lu67uibmezBrddNAjuQi1vbAqDEKZEL+MO8CdFN5kImEgL2sZi3PGYUyjgavgLxVVXYcASBMPiwyzFxNHoZMj499dLzBEGcAUZuTpbflMDv6bzgHAh/RmBMgi49nLgDNBjR8EHg1N4uhAf5IAbCF66OLB9bH5qW4b7+71ZO5icb/VpK0R8UaqXabBkqn7tXmqEmyQk9IqjYZyLb6YJGWS5I2a4zoQCuztrm+0lL107WS7vI8Gn+A0XcxjvVsiOzt4cU5vO6ADR6ijgXMNCfq2Ufj87RNktSUdej0JrMrJNk3naFWSWGdrC+i/1ytWvS1WixCeVEhP6zqvstVhAlSxBzei1qzR/GA5XnsHDZylD/WEJeoXQ8roEH6mXZKCusRddhisPc1yAdriCvRWaro5vUuVKTrYtjMKv3eZ5kPjegKNWe1zDPUV5kPoek8zKAsGg7mcs9trTQ0gsezDu1c5aWrm54G8RxnOmhfzAF/jMidjmDAJb5grYcPeSnZ0mn+YK3R7KPAUQ81FBPOPWuVOYQBISb4QUZOM8DgM/0AZLiBEMh+PwCJGOijxg9Aig308X0/ACky0Mfseh8AMbH4UzbcB0DyjLDnSd8MYYfyHAMJk5XxnkhnOuRvAybKTMpp4C6HK7QdDI6JX3rss8deDzpOIBjnj9z49Qb0uw88RNjqeNFmmD+AfMp2hz2U+gMI/Mdh+6l+AfIvh/plgl+A7GJ33H0Fq2y1H+sXILAx7m4Wd/OhjdbjO30DZE2v+4UspMVy68ICJ9l6RndxDOu1JPdZlz1FWeoHhQjQwCtx90fnTWCdjfZn+IW1SEhYWmwrhvhjv7AWKlJbHLNUKmQr7bnUH6zFiloei/tgEvm8aaODa3JpxsfTUD6MW1BbzDiWWm7dxFT2+kFGoJHb4+5/aSuRqZCnO3wyIlDAJ4yJuX+XMYyy0X6yLTXq2ohAJwvpjDMGR9lq/0N/sBbQvjnOgMzPOHH2BjLAJ0D6JxorduJi53CANdzCdFsRM5f2l89KuenVDlXpJo28Nkcb87uvgB41tKehQ6/pvOacAUFHaKfBLRp/zZQh4V5dlDrnax4x9CN2Me9Tr4W9h7L3LpLpxJGsPGZ5miCga6z1Kxf2KDbrLY1xaz97Kv97ByHjvYaBOhbxsnesNZc8DjrwLZJTHnmMZHWyBIOAa2UxglRQlmXbrrTWgGjnlGiym+vC3s9BnKorbRZegAH8vffavntATnAQy+2fMQ+ilJu9Yq0JfIyb1MrY2C0CeXe69aJaRhOJ80tMez3/jXWiA64W0zubl1zsfX1s+Mjd0m1zXe3927Fzm7tAjnO191BsFoy7QCa52nskWnDJDpA3gTqbgQ2DG5mSq9wS6/50tNEp05gzYjxDKAAOUEsnO9ka+TLNN3Eqg10ekQJ7QE7nes5Irt6Cn/MClexhC/UJdlEZuDwiX1sHks893Jgm2+RoFvf8VkM1nVTTSiFjCFHiQYGFTqt6pJCnOA//UhlvWxmRUp5mCn6mfVZG5GReM5Quk60oZ5pR62JT3lI9fCKrcgrDimLYkfnxYbxicK+NW1SRCUg+G120Ws3RvzMB+YXPRbyb9h+asZIDKeU2+gK9GO8OJwJ5wkH6q5eVwh9LPzcsZbqDzgPejUdbRTqfvYhqlw09U/56ae8l0/gRua5PwIA7Eld+Y0ekPx9xbB+AsZ0ZifmosSNyZ5+A0cTCZGm1h0akgL19QJu3c27yAgvBGCOx2PcwOliQqk7EISDTjQYi3NAoLZRHnk/tAf6fJhp9qXmNUscFbApaMJYLfc1UOziZTdas/jyjLw4b7e0RyvgkU3DBHWYwJ2+f81NW23lhxJcysoJSKzDcKIBvjj5j0cENIdssUOM7IO+wIZQFL1f5Dsjg1qyEcpPvgGigjYejMtL5fsHu2Oi2Bd1dxRa+pAv4jDZmMZ3JPULeZUT27HmqMWkQSy0nU1TqEoXaeiVRdKChOkcPaK+RXC1pt52iPLE3w9VgqdTzbzJUEw9omREgNeqXXQJzvYUKlk2cxa8z6BwZykIZYSe/KF4Dp6/7E6aROay10OsoI0ACHJklkIodPJ7yyU6CXNo7A8QFIIox20dnJ+zdVWT3pOTZzZZrb33pKIfxUNXZq7JP8m+kPGV6UrXF72YaIx2MSEEMaxVnKyMA73FBiu1E37EYLJqNKSp1AgReY27SorglvB7l2nxSq11zIXAb6/SpVqz6cwVLkmQuNLOKDymknvtSznDvMMMQkBobTJpWaOdrfdL9OM9oQJoNY50Gz1kImisUNlnPx3Tdphc0O+3z5xnNLJ1gFUhm4+4D5nMc05hHkFdZlTHlcp4DDdKVULxnqFMZyZ6qHGSghBNCIAutFv42nR003lEiTTDJpENugEw2HLIYlBMga+Bq2g12WB+/lp7t9Gv/Gqva6HTdrHccnSDToAc1wvq7zYaDhrOaY2ikmk28yZNJWKWVzylMadWKANDJ3/gzW2xG2lzaqxDSsrTjkcwZblNEYf1DJf44M5QWFNI9WbBVhzr03e3+2KsLMHAQV3Nr0qDpk6xMa8AXMHmKsZnbuYN6IfcmgbGfyw8u6lVypCXOYRBvZ0xDD3glIwGdrqYk3H+HBgrN63UKSb261KQuVetP+oGOdVKT2TSQ8b1KS0dUpb9oqhCapNqEg+q6YU50/mbT0fhQdPDreYZXeIMvon97iBG9xQmIcLeRfQ3GZ62HJB3UDQn7BsuTzlQf61SfHtncgSYnOZ2qv3YngGjXMlOFpN3cGRp/LU04YGidTtvn60O0k10n9jpFcaeu0HAn51HmBkhe9FSF7in3Ho01fTywN0DOiIGxTtOU3zfOZ0+8Rmm/JOldXakhbr0l4Eka4lAupIYKcwfZeBF8yBEFOQzkMJDDQNLR/wB7JNbnLtPZmwAAAABJRU5ErkJggg=="},43011:e=>{"use strict";e.exports="data:image/png;base64,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"}},s={};function a(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={id:e,loaded:!1,exports:{}};return i[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,e=[],a.O=(t,n,o,r)=>{if(!n){var i=1/0;for(l=0;l<e.length;l++){for(var[n,o,r]=e[l],s=!0,u=0;u<n.length;u++)(!1&r||i>=r)&&Object.keys(a.O).every((e=>a.O[e](n[u])))?n.splice(u--,1):(s=!1,r<i&&(i=r));if(s){e.splice(l--,1);var c=o();void 0!==c&&(t=c)}}return t}r=r||0;for(var l=e.length;l>0&&e[l-1][2]>r;l--)e[l]=e[l-1];e[l]=[n,o,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var r=Object.create(null);a.r(r);var i={};t=t||[null,n({}),n([]),n(n)];for(var s=2&o&&e;"object"==typeof s&&!~t.indexOf(s);s=n(s))Object.getOwnPropertyNames(s).forEach((t=>i[t]=()=>e[t]));return i.default=()=>e,a.d(r,i),r},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>"static/js/"+({50:"emoji-annotations/en_GB-json",227:"emoji-annotations/ha-json",278:"emoji-annotations/kn-json",313:"emoji-annotations/tg-json",325:"i18n/ja_pedantic-json",346:"emoji-annotations/rw-json",379:"i18n/he-json",420:"emoji-annotations/fi-json",457:"emoji-annotations/zh-json",577:"emoji-annotations/en_001-json",617:"i18n/oc-json",625:"emoji-annotations/so-json",678:"emoji-annotations/ps-json",786:"emoji-annotations/xh-json",830:"i18n/ga-json",1012:"emoji-annotations/or-json",1044:"emoji-annotations/zh_Hant_HK-json",1056:"emoji-annotations/uz-json",1095:"emoji-annotations/pl-json",1159:"i18n/it-json",1162:"emoji-annotations/ccp-json",1236:"emoji-annotations/fil-json",1290:"emoji-annotations/ja-json",1404:"emoji-annotations/km-json",1452:"emoji-annotations/yue-json",1546:"emoji-annotations/pt_PT-json",1547:"i18n/sk-json",1553:"emoji-annotations/sl-json",1584:"emoji-annotations/to-json",1596:"emoji-annotations/da-json",1613:"emoji-annotations/mai-json",1780:"emoji-annotations/tk-json",1790:"emoji-annotations/dsb-json",1821:"emoji-annotations/fr_CA-json",1911:"emoji-annotations/mr-json",1959:"emoji-annotations/su-json",2044:"i18n/te-json",2223:"emoji-annotations/fr-json",2243:"emoji-annotations/sa-json",2342:"emoji-annotations/az-json",2350:"emoji-annotations/sk-json",2397:"emoji-annotations/kl-json",2479:"emoji-annotations/jv-json",2513:"i18n/id-json",2569:"emoji-annotations/tt-json",2599:"emoji-annotations/kok-json",2656:"emoji-annotations/ckb-json",2685:"emoji-annotations/ml-json",2699:"emoji-annotations/es_MX-json",2767:"emoji-annotations/zh_Hant-json",2861:"emoji-annotations/hr-json",2873:"emoji-annotations/kk-json",2874:"emoji-annotations/sc-json",2883:"emoji-annotations/ku-json",2953:"i18n/fa-json",2966:"emoji-annotations/ko-json",2992:"emoji-annotations/eu-json",3056:"emoji-annotations/hi_Latn-json",3241:"emoji-annotations/sv-json",3276:"emoji-annotations/et-json",3313:"emoji-annotations/es_US-json",3377:"emoji-annotations/as-json",3568:"emoji-annotations/ti-json",3687:"emoji",3746:"i18n/fr-json",3887:"emoji-annotations/sr-json",3951:"emoji-annotations/th-json",3968:"i18n/es-json",3974:"emoji-annotations/bg-json",3994:"emoji-annotations/sw_KE-json",4047:"i18n/pt-json",4209:"emoji-annotations/doi-json",4354:"emoji-annotations/si-json",4368:"emoji-annotations/sq-json",4424:"emoji-annotations/yue_Hans-json",4451:"i18n/et-json",4542:"i18n/eu-json",4571:"emoji-annotations/ga-json",4646:"i18n/eo-json",4691:"emoji-annotations/ca-json",4710:"emoji-annotations/cs-json",4718:"emoji-annotations/mn-json",4770:"emoji-annotations/lb-json",4785:"emoji-annotations/ky-json",4786:"emoji-annotations/te-json",4879:"emoji-annotations/en_CA-json",4902:"emoji-annotations/hu-json",4975:"i18n/vi-json",5041:"emoji-annotations/pt-json",5104:"emoji-annotations/pcm-json",5115:"emoji-annotations/sr_Latn_BA-json",5119:"emoji-annotations/am-json",5224:"emoji-annotations/vi-json",5253:"i18n/uk-json",5304:"emoji-annotations/ha_NE-json",5401:"emoji-annotations/mni-json",5494:"i18n/hu-json",5521:"emoji-annotations/fa-json",5548:"emoji-annotations/he-json",5571:"i18n/pl-json",5728:"emoji-annotations/en-json",5887:"emoji-annotations/rm-json",5929:"i18n/zh-json",5964:"i18n/ru-json",5968:"emoji-annotations/hi-json",6060:"emoji-annotations/sr_Cyrl_BA-json",6068:"emoji-annotations/ka-json",6116:"emoji-annotations/gd-json",6126:"emoji-annotations/gl-json",6148:"emoji-annotations/br-json",6226:"emoji-annotations/de-json",6234:"i18n/ca-json",6256:"i18n/nl-json",6272:"emoji-annotations/cy-json",6342:"i18n/ro-json",6344:"emoji-annotations/hy-json",6355:"emoji-annotations/af-json",6544:"i18n/zh_Hant-json",6701:"emoji-annotations/mi-json",6773:"emoji-annotations/nl-json",6790:"emoji-annotations/my-json",6797:"emoji-annotations/ur-json",6826:"emoji-annotations/sd-json",6831:"emoji-annotations/es-json",6869:"emoji-annotations/chr-json",6936:"emoji-annotations/ia-json",6946:"emoji-annotations/pa-json",7164:"emoji-annotations/de_CH-json",7169:"emoji-annotations/lt-json",7261:"emoji-annotations/gu-json",7300:"emoji-annotations/is-json",7303:"emoji-annotations/wo-json",7304:"emoji-annotations/be-json",7360:"emoji-annotations/ar_SA-json",7433:"i18n/cs-json",7464:"emoji-annotations/lo-json",7569:"emoji-annotations/ast-json",7585:"emoji-annotations/sw-json",7808:"i18n/ar-json",7845:"i18n/nb-json",7855:"emoji-annotations/sat-json",7879:"emoji-annotations/el-json",7897:"emoji-annotations/ta-json",8015:"emoji-annotations/hsb-json",8031:"emoji-annotations/qu-json",8134:"emoji-annotations/bs-json",8395:"emoji-annotations/ru-json",8681:"emoji-annotations/sr_Latn-json",8714:"i18n/ja_easy-json",8732:"emoji-annotations/yo-json",8873:"emoji-annotations/es_419-json",8898:"emoji-annotations/lv-json",8970:"emoji-annotations/it-json",8988:"emoji-annotations/en_IN-json",8995:"emoji-annotations/fo-json",9064:"emoji-annotations/bn-json",9319:"emoji-annotations/zu-json",9360:"emoji-annotations/en_AU-json",9377:"emoji-annotations/ne-json",9399:"emoji-annotations/mt-json",9414:"emoji-annotations/nn-json",9459:"i18n/de-json",9465:"emoji-annotations/id-json",9670:"i18n/ko-json",9738:"i18n/fi-json",9757:"emoji-annotations/ug-json",9780:"emoji-annotations/kab-json",9790:"emoji-annotations/ceb-json",9862:"i18n/nan-TW-json",9864:"emoji-annotations/ro-json",9871:"emoji-annotations/uk-json",9873:"emoji-annotations/ar-json",9895:"emoji-annotations/ig-json",9921:"emoji-annotations/mk-json",9924:"emoji-annotations/ms-json",9926:"emoji-annotations/yo_BJ-json",9978:"emoji-annotations/tr-json",9979:"emoji-annotations/no-json",9994:"emoji-annotations/pa_Arab-json"}[e]||e)+"."+{48:"b5ecdbc517423af07ca4",50:"bd687f904492facc81d1",159:"903e90c9de8ef6c67077",227:"2a08912b38925c10f970",278:"efdac8ac0cb00991ba1e",313:"9647f559a4477d7d8e96",325:"b52fa70f0bf89ae01cfb",346:"031838c5374676191131",379:"03c5d271a4034de06e6f",420:"0f254bb4b0faaba4abcc",457:"e42a28127d5c1aff6c85",577:"72d8c47269350f59aa9f",617:"4f52bf1b6e3213acc33c",625:"f75abd16637c8924c075",678:"a0d9eea5b81bcad11e64",786:"21e88c05ad3113dfc7f2",830:"3f1981817977a16f1d7e",1012:"b007c2f6f92dcc95efac",1044:"7eee03c705347a21c612",1056:"ac43f4c54d4587324a20",1095:"e9e8f1ed84dc6c169516",1159:"99a21d5c98376af17141",1162:"02836537ffe2b02291cb",1236:"4fca833f178d1b889b69",1290:"0bd51f8c40c106355b0e",1404:"9bc922b2e0faa64b4c53",1452:"15102c0ddfdf19bdfb4c",1546:"c381b13e323f91b0e6b3",1547:"d8d0eba80f94e6f55145",1553:"a40c5548da34fce6f1d0",1584:"50ac37d101caaf592c94",1596:"8d074e27df71edafc543",1613:"302386b3358f4d34f9c8",1780:"23a9a6229829921704ad",1790:"7635686ffd8d62264466",1821:"59ed6b59e2ca68707292",1911:"cb0a87d9aabf8a52161d",1959:"daff15251020cbecea7d",2044:"ce6db28261b2f824064f",2223:"da49ed0d1a6622fe1c67",2243:"21b06234a08c7469ccb4",2342:"9a32f2941d9c4d1f834c",2350:"5d96bdb4da82655d0314",2397:"87ab8661b4bdecd09faf",2479:"1c8d5ffcff22b46b6214",2513:"e5c9ee768155f88128b9",2569:"4c089389ba9983ec8ef7",2599:"116e4f72db3bfb846233",2656:"13dc83db1e15aa76051a",2685:"3f2902a84240faff1b48",2699:"ee359d4b611fdb1aeb33",2767:"9cbb765c181d443828a9",2861:"fe847ade1f18a60e513c",2873:"a20b59d47bdfe99786ad",2874:"c84c9c47d2e104c43e4c",2883:"2173ed87f8d7372ee209",2953:"a19100f6a5a9431e2adb",2966:"d175900fe48f48ce87c8",2992:"931b429f5fcc141549a5",3056:"3cb73c456f31261f1908",3241:"8b0374cbca3a77519876",3276:"c42e3f186a55ecb061cd",3313:"280bdb036dfd651d079a",3377:"34cf67edc1cecd195738",3568:"5b173bd33bb960be805b",3687:"33eab91b64f59431137d",3746:"36ef21ccb1203d3e65ae",3887:"e29a20e59a708df0c6a8",3951:"34709bae223bb9d2587c",3968:"4a302899a65e1f67d8a2",3974:"7c69c52572a7bf87e1db",3994:"f3563cbeac1c158563d5",4047:"3fc5593e030268bcd291",4209:"7841c3f3ceb4e3da0bd1",4354:"841b356da03623c10dbf",4368:"bcf154ed8a6138aa089c",4424:"cc60bb10d32fab3d8207",4451:"580b101d6bb83a8aee75",4542:"d2eab39b0427995fc314",4571:"cb3f9e613a8c445aea23",4646:"6c62eef99e850912498b",4691:"ce029e860b10b242c6a5",4710:"48d8bba230dc9fe6b3dc",4718:"764169f1168d0432640f",4770:"499c526f3a653618ea9b",4785:"310bda579c819eda9472",4786:"8a69a10f62cdf626244e",4879:"5de965778a6b8a5a4bb4",4902:"1faf52040deda872b416",4975:"703c1e731be6e857bbf3",5041:"2b2512ee44291bdb2ae7",5104:"eac3a5ad0b4b5b33289d",5115:"72933405032b81344754",5119:"94388548f7c18233fec3",5224:"f6a364b2add7f8c8bc67",5253:"003908af9b15becdd382",5304:"e4855d92aaccfdd6ba57",5401:"7db7f76ab1ce34e3683d",5494:"0487899ca7a7a8505ed8",5521:"819c7f263c8594ccf4fa",5548:"a3d7631f32182b0955a2",5571:"c963247822381b05579b",5728:"6c3947f7c49c3952084d",5887:"985d4934f386fd05a75c",5929:"5831b903c3e6d281f122",5964:"b913eb7f7e9f0c642438",5968:"04bc5f73dc2169def97e",6060:"83c7c64b9696ae2339f2",6068:"567e7b051d90a37003f3",6116:"e3d0aea3725be774ad81",6126:"ce89036f0ae72224c994",6148:"c7175423d8965ed10bae",6226:"e1443c01a191af1665e1",6234:"1eb24bc001efa3c0627f",6256:"3fb9758b10c29434b613",6272:"e09dd13da5ad56530ead",6342:"3fd9977ed1c1413059ae",6344:"2d819f7faabfeba8457f",6355:"96c988285a6a2cce6246",6464:"eb9c90a1c948cde554e9",6544:"f7e1d0f4b873c60d6396",6701:"9efe6f146ecd8987f80a",6773:"52f4b93b8fa5e22cb585",6790:"8e7dd1485813d15bba7e",6797:"983c02109444c883a18f",6826:"8f2a6a06dc3cf185f79d",6831:"f593b0dc2367a9d7fb30",6869:"e7e542ab5a74167dec10",6936:"8e8365e2bf41779e2beb",6946:"7d60d69762a108270669",7164:"b4a5891ea2f38d616ec0",7169:"ced4d5e70edc60127df6",7261:"8a899f364cf260376905",7300:"62e220c65215b034533d",7303:"e0d689e22cda0dd77e9a",7304:"f92f80669873a4100c69",7360:"4a6f4402931a867070f0",7433:"5eedbe9f7084c349fbe8",7464:"ecb06d61465a355b8157",7569:"7e4da8cb7e539c19a9b9",7585:"d5f350641b9cbcc0e126",7586:"981b2305a0019f6042a5",7808:"4916f840147303aa65fe",7845:"a54af3b1f47d576ad4aa",7855:"71e92700b2aaca8e021c",7879:"b36610f2ea16d56c2314",7897:"675cc6c7607449d4a91b",7962:"e25d40b042f8ee7389c3",8015:"438721731b4171bc6fc3",8031:"55f4df57e71076dbad9f",8134:"48ef42da1c7976cf083c",8395:"a81d0df34460837ccacc",8681:"ff27d1f455bf2afb8d70",8714:"1d5ea7e755b066ac2cdd",8732:"ea1150d6bc360dd86f2e",8873:"d81991295392b6ed83bb",8898:"5600c2eb6d59fa0aa2e2",8970:"9c1758f4fd3391f7f61a",8988:"002faa48c09121928fca",8995:"9b060e8009b3a8be4597",9060:"24271e167e0471a1a732",9064:"657aac057f36ad06c58d",9319:"e0cb7cd3890583fd0f6d",9360:"33aac9bbd887273a34b1",9377:"a0118dca2096a101b8e8",9399:"3ddf7dbc114adf90c500",9414:"7293cd5d7205681cf48c",9459:"bfa48615ac92f87ff37a",9465:"55f83c46d753b0b69330",9670:"9029d09084bb22d8b705",9738:"d1934c18f12d80493ab1",9757:"bf768bd32e9ff02b0a8a",9780:"1a2de4774f4ddc2b51dd",9790:"9db0336f168aa77ee395",9801:"99ace6b5dc657bf1a65b",9862:"7f2789d8a461e86d1734",9864:"cb62f86ce78c94d1e813",9871:"af110c8eef232638fc4d",9873:"5527466d349f2954d49b",9895:"f19fa5fe3582463ba73c",9921:"a254cabb8570419cc426",9924:"272ee4735aabc37015dd",9926:"650318c25fe4da92bad8",9978:"6462e8cfd5006cf5b6cf",9979:"22bdbbc77cc3c14ada58",9994:"5ae021308b1c5f6dd8a7"}[e]+".js",a.miniCssF=e=>"static/css/"+e+"."+{159:"1d523a00378ebd68c5b3",6464:"169260b661120cc50815",7586:"0d43f70bc6240422f179",7962:"76663e78ad5ea0bb0b90",9801:"cfe503d4c949ae0c3813"}[e]+".css",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},r="pleroma_fe:",a.l=(e,t,n,i)=>{if(o[e])o[e].push(t);else{var s,u;if(void 0!==n)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==r+n){s=d;break}}s||(u=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,a.nc&&s.setAttribute("nonce",a.nc),s.setAttribute("data-webpack",r+n),s.src=e),o[e]=[t];var p=(t,n)=>{s.onerror=s.onload=null,clearTimeout(m);var r=o[e];if(delete o[e],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(n))),t)return t(n)},m=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),u&&document.head.appendChild(s)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="/",(()=>{if("undefined"!=typeof document){var e={2143:0};a.f.miniCss=(t,n)=>{e[t]?n.push(e[t]):0!==e[t]&&{159:1,6464:1,7586:1,7962:1,9801:1}[t]&&n.push(e[t]=(e=>new Promise(((t,n)=>{var o=a.miniCssF(e),r=a.p+o;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),o=0;o<n.length;o++){var r=(s=n[o]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(r===e||r===t))return s}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){var s;if((r=(s=i[o]).getAttribute("data-href"))===e||r===t)return s}})(o,r))return t();((e,t,n,o,r)=>{var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onerror=i.onload=n=>{if(i.onerror=i.onload=null,"load"===n.type)o();else{var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.href||t,u=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");u.code="CSS_CHUNK_LOAD_FAILED",u.type=s,u.request=a,i.parentNode&&i.parentNode.removeChild(i),r(u)}},i.href=t,document.head.appendChild(i)})(e,r,0,t,n)})))(t).then((()=>{e[t]=0}),(n=>{throw delete e[t],n})))}}})(),(()=>{var e={2143:0};a.f.j=(t,n)=>{var o=a.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,r)=>o=e[t]=[n,r]));n.push(o[2]=r);var i=a.p+a.u(t),s=new Error;a.l(i,(n=>{if(a.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+t,t)}},a.O.j=t=>0===e[t];var t=(t,n)=>{var o,r,[i,s,u]=n,c=0;if(i.some((t=>0!==e[t]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(u)var l=u(a)}for(t&&t(n);c<i.length;c++)r=i[c],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(l)},n=self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var u=a.O(void 0,[3733],(()=>a(2514)));u=a.O(u)})(); -//# sourceMappingURL=app.7c4b412b26221a7c8572.js.map -\ No newline at end of file diff --git a/priv/static/static/js/app.7c4b412b26221a7c8572.js.map b/priv/static/static/js/app.7c4b412b26221a7c8572.js.map @@ -1 +0,0 @@ -{"version":3,"file":"static/js/app.7c4b412b26221a7c8572.js","mappings":"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CA,MAED,YAAa,CACZ,MACA,KAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,eAAgB,CACf,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,eAAgB,CACf,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa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AuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBA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","sources":["webpack://pleroma_fe/webpack/runtime/chunk loaded","webpack://pleroma_fe/webpack/runtime/create fake namespace object","webpack://pleroma_fe/webpack/runtime/load script","webpack://pleroma_fe/./src/i18n/en.json","webpack://pleroma_fe/./node_modules/@kazvmoe-infra/unicode-emoji-json/annotations/ lazy ^\\.\\/.*\\.json$ chunkName: emoji-annotations/[request] namespace object","webpack://pleroma_fe/./src/components/emoji_input/suggestor.js","webpack://pleroma_fe/./src/services/html_converter/utility.service.js","webpack://pleroma_fe/./src/services/html_converter/html_line_converter.service.js","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.vue","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.js","webpack://pleroma_fe/./src/services/matcher/matcher.service.js","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.vue?7c0f","webpack://pleroma_fe/./src/components/rich_content/rich_content.jsx","webpack://pleroma_fe/./src/services/html_converter/html_tree_converter.service.js","webpack://pleroma_fe/./src/components/tab_switcher/tab_switcher.jsx","webpack://pleroma_fe/./src/hocs/with_load_more/with_load_more.jsx","webpack://pleroma_fe/./src/i18n/languages.js","webpack://pleroma_fe/./src/i18n/messages.js","webpack://pleroma_fe/./src/lib/event_target_polyfill.js","webpack://pleroma_fe/./src/modules/interface.js","webpack://pleroma_fe/./src/modules/instance.js","webpack://pleroma_fe/./src/modules/statuses.js","webpack://pleroma_fe/./src/modules/lists.js","webpack://pleroma_fe/./src/services/timeline_fetcher/timeline_fetcher.service.js","webpack://pleroma_fe/./src/services/follow_request_fetcher/follow_request_fetcher.service.js","webpack://pleroma_fe/./src/services/lists_fetcher/lists_fetcher.service.js","webpack://pleroma_fe/./src/services/backend_interactor_service/backend_interactor_service.js","webpack://pleroma_fe/./src/services/window_utils/window_utils.js","webpack://pleroma_fe/./src/services/new_api/oauth.js","webpack://pleroma_fe/./src/services/push/push.js","webpack://pleroma_fe/./src/modules/users.js","webpack://pleroma_fe/./src/services/chat_utils/chat_utils.js","webpack://pleroma_fe/./src/modules/api.js","webpack://pleroma_fe/./src/modules/profileConfig.js","webpack://pleroma_fe/./src/components/update_notification/update_notification.js","webpack://pleroma_fe/./src/modules/serverSideStorage.js","webpack://pleroma_fe/./src/modules/adminSettings.js","webpack://pleroma_fe/./src/modules/shout.js","webpack://pleroma_fe/./src/modules/oauth.js","webpack://pleroma_fe/./src/modules/auth_flow.js","webpack://pleroma_fe/./src/modules/media_viewer.js","webpack://pleroma_fe/./src/modules/oauth_tokens.js","webpack://pleroma_fe/./src/modules/reports.js","webpack://pleroma_fe/./src/modules/polls.js","webpack://pleroma_fe/./src/modules/postStatus.js","webpack://pleroma_fe/./src/modules/editStatus.js","webpack://pleroma_fe/./src/modules/statusHistory.js","webpack://pleroma_fe/./src/services/chat_service/chat_service.js","webpack://pleroma_fe/./src/modules/chats.js","webpack://pleroma_fe/./src/modules/announcements.js","webpack://pleroma_fe/./src/lib/persisted_state.js","webpack://pleroma_fe/./src/lib/push_notifications_plugin.js","webpack://pleroma_fe/./src/App.vue","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue","webpack://pleroma_fe/./src/components/login_form/login_form.vue","webpack://pleroma_fe/./src/components/login_form/login_form.js","webpack://pleroma_fe/./src/components/login_form/login_form.vue?7e2c","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.vue","webpack://pleroma_fe/./src/services/new_api/mfa.js","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.js","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.vue?75db","webpack://pleroma_fe/./src/components/mfa_form/totp_form.vue","webpack://pleroma_fe/./src/components/mfa_form/totp_form.js","webpack://pleroma_fe/./src/components/mfa_form/totp_form.vue?e31f","webpack://pleroma_fe/./src/components/auth_form/auth_form.js","webpack://pleroma_fe/./src/components/user_panel/user_panel.js","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue?62d1","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue","webpack://pleroma_fe/./src/components/navigation/navigation.js","webpack://pleroma_fe/./src/components/optional_router_link/optional_router_link.vue","webpack://pleroma_fe/./src/components/optional_router_link/optional_router_link.vue?aa8e","webpack://pleroma_fe/./src/components/navigation/navigation_entry.js","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue?57fe","webpack://pleroma_fe/./src/components/navigation/filter.js","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.js","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.vue?5439","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.js","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue?9359","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.js","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue?ec9c","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.vue","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.js","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.vue?b4d3","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue","webpack://pleroma_fe/./src/components/features_panel/features_panel.js","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue?e52c","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.js","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue?c79e","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.js","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue?452f","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.js","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.vue?6a4b","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.vue","webpack://pleroma_fe/./src/services/gesture_service/gesture_service.js","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.js","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.vue?cb15","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.vue","webpack://pleroma_fe/./src/components/media_modal/media_modal.js","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue?9f8e","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.js","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue?c115","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.js","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue?cc2d","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.js","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue?67f1","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.js","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue?d1ca","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.js","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.vue?6641","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.js","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue?df82","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.js","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue?03f9","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.js","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue?9c44","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.js","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue?4ee0","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.js","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue?1667","webpack://pleroma_fe/./src/App.js","webpack://pleroma_fe/./src/App.vue?3b2b","webpack://pleroma_fe/./src/components/timeline/timeline.vue","webpack://pleroma_fe/./src/components/conversation/conversation.vue","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.js","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue?7311","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.vue","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.js","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.vue?f71f","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.vue","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.js","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.vue?4eaf","webpack://pleroma_fe/./src/components/conversation/conversation.js","webpack://pleroma_fe/./src/components/conversation/conversation.vue?6723","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.js","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue?96c1","webpack://pleroma_fe/./src/components/timeline/timeline.js","webpack://pleroma_fe/./src/components/timeline/timeline.vue?7060","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.js","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.vue?daf2","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.vue","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.js","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.vue?9b62","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.vue","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.js","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.vue?a3f1","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.vue","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.js","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.vue?be7b","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.vue","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.js","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.vue?863c","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.vue","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.js","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.vue?2386","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.vue","webpack://pleroma_fe/./src/components/interactions/interactions.vue","webpack://pleroma_fe/./src/components/interactions/interactions.js","webpack://pleroma_fe/./src/components/interactions/interactions.vue?3dc7","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.js","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.vue?fced","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.vue","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.vue","webpack://pleroma_fe/./src/components/chat_title/chat_title.js","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue?723f","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.js","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.vue?9103","webpack://pleroma_fe/./src/components/chat_new/chat_new.vue","webpack://pleroma_fe/./src/components/chat_new/chat_new.js","webpack://pleroma_fe/./src/components/chat_new/chat_new.vue?e65f","webpack://pleroma_fe/./src/components/chat_list/chat_list.js","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue?39cf","webpack://pleroma_fe/./src/components/chat/chat.vue","webpack://pleroma_fe/./src/components/chat_message/chat_message.vue","webpack://pleroma_fe/./src/components/chat_message_date/chat_message_date.vue","webpack://pleroma_fe/./src/components/chat_message_date/chat_message_date.vue?a1e2","webpack://pleroma_fe/./src/components/chat_message/chat_message.js","webpack://pleroma_fe/./src/components/chat_message/chat_message.vue?38f9","webpack://pleroma_fe/./src/components/chat/chat_layout_utils.js","webpack://pleroma_fe/./src/components/chat/chat.js","webpack://pleroma_fe/./src/components/chat/chat.vue?0265","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.js","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.vue?a06d","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.vue","webpack://pleroma_fe/./src/components/follow_card/follow_card.js","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue?a7d5","webpack://pleroma_fe/./src/components/user_profile/user_profile.js","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue?c6a1","webpack://pleroma_fe/./src/components/search/search.vue","webpack://pleroma_fe/./src/components/search/search.js","webpack://pleroma_fe/./src/components/search/search.vue?853e","webpack://pleroma_fe/./src/components/registration/registration.vue","webpack://pleroma_fe/./src/components/registration/registration.js","webpack://pleroma_fe/./src/components/registration/registration.vue?5788","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue","webpack://pleroma_fe/./src/components/password_reset/password_reset.js","webpack://pleroma_fe/./src/services/new_api/password_reset.js","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue?e9fd","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.js","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.js","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue?64bb","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.vue?427b","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.js","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.vue?a7e1","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.vue","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.vue","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.js","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.vue?d712","webpack://pleroma_fe/./src/components/about/about.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.js","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue?39d2","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.js","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue?16a1","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.vue","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.js","webpack://pleroma_fe/./src/components/about/about.js","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.vue?cbb1","webpack://pleroma_fe/./src/components/about/about.vue?07c3","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.vue","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.js","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.vue?ac33","webpack://pleroma_fe/./src/components/lists/lists.vue","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue","webpack://pleroma_fe/./src/components/lists_card/lists_card.js","webpack://pleroma_fe/./src/components/lists/lists.js","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue?16e6","webpack://pleroma_fe/./src/components/lists/lists.vue?7e21","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.js","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.vue?804f","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.vue","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.js","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue?4447","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.js","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue?056b","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue","webpack://pleroma_fe/./src/components/announcement/announcement.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.js","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue?cdb9","webpack://pleroma_fe/./src/components/announcement/announcement.js","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.js","webpack://pleroma_fe/./src/components/announcement/announcement.vue?a400","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue?89ce","webpack://pleroma_fe/./src/boot/routes.js","webpack://pleroma_fe/./src/directives/body_scroll_lock.js","webpack://pleroma_fe/./src/boot/after_store.js","webpack://pleroma_fe/./src/main.js","webpack://pleroma_fe/./src/modules/config.js","webpack://pleroma_fe/./src/services/errors/errors.js","webpack://pleroma_fe/./src/modules/errors.js","webpack://pleroma_fe/./src/services/api/api.service.js","webpack://pleroma_fe/./src/services/attributes_helper/attributes_helper.service.js","webpack://pleroma_fe/./src/services/color_convert/color_convert.js","webpack://pleroma_fe/./src/services/component_utils/component_utils.js","webpack://pleroma_fe/./src/services/date_utils/date_utils.js","webpack://pleroma_fe/./src/services/desktop_notification_utils/desktop_notification_utils.js","webpack://pleroma_fe/./src/services/entity_normalizer/entity_normalizer.service.js","webpack://pleroma_fe/./src/services/favicon_service/favicon_service.js","webpack://pleroma_fe/./src/services/file_size_format/file_size_format.js","webpack://pleroma_fe/./src/services/file_type/file_type.service.js","webpack://pleroma_fe/./src/services/locale/locale.service.js","webpack://pleroma_fe/./src/services/notification_utils/notification_utils.js","webpack://pleroma_fe/./src/services/notifications_fetcher/notifications_fetcher.service.js","webpack://pleroma_fe/./src/services/offset_finder/offset_finder.service.js","webpack://pleroma_fe/./src/services/promise_interval/promise_interval.js","webpack://pleroma_fe/./src/services/status_parser/status_parser.js","webpack://pleroma_fe/./src/services/status_poster/status_poster.service.js","webpack://pleroma_fe/./src/services/style_setter/style_setter.js","webpack://pleroma_fe/./src/services/theme_data/pleromafe.js","webpack://pleroma_fe/./src/services/theme_data/theme_data.service.js","webpack://pleroma_fe/./src/services/user_highlighter/user_highlighter.js","webpack://pleroma_fe/./src/services/user_profile_link_generator/user_profile_link_generator.js","webpack://pleroma_fe/./src/components/attachment/attachment.vue","webpack://pleroma_fe/./src/components/attachment/attachment.js","webpack://pleroma_fe/./src/components/attachment/attachment.vue?6808","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.js","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue?171c","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.js","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue?95ff","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue?4d95","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.js","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.vue?dff7","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.js","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue?60df","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue","webpack://pleroma_fe/./src/services/completion/completion.js","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.js","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.vue?a18c","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.vue","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.js","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue?cc95","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.vue","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.js","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.vue?6411","webpack://pleroma_fe/./src/services/ruffle_service/ruffle_service.js","webpack://pleroma_fe/./src/components/flash/flash.vue","webpack://pleroma_fe/./src/components/flash/flash.js","webpack://pleroma_fe/./src/components/flash/flash.vue?8f01","webpack://pleroma_fe/./src/services/follow_manipulate/follow_manipulate.js","webpack://pleroma_fe/./src/components/follow_button/follow_button.js","webpack://pleroma_fe/./src/components/follow_button/follow_button.vue?fbc0","webpack://pleroma_fe/./src/components/follow_button/follow_button.vue","webpack://pleroma_fe/./src/components/gallery/gallery.vue","webpack://pleroma_fe/./src/components/gallery/gallery.js","webpack://pleroma_fe/./src/components/gallery/gallery.vue?c41d","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue?f2c7","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue","webpack://pleroma_fe/./src/components/link-preview/link-preview.js","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue?5c9b","webpack://pleroma_fe/./src/components/list/list.vue","webpack://pleroma_fe/./src/components/list/list.vue?b52f","webpack://pleroma_fe/./src/components/media_upload/media_upload.js","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue?73d1","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.js","webpack://pleroma_fe/./src/components/mention_link/mention_link.vue?f0cb","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.vue","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.js","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.vue?e8e7","webpack://pleroma_fe/./src/components/modal/modal.vue","webpack://pleroma_fe/./src/components/modal/modal.vue?8c58","webpack://pleroma_fe/./src/components/notifications/notifications.vue","webpack://pleroma_fe/./src/components/notification/notification.vue","webpack://pleroma_fe/./src/components/report/report.vue","webpack://pleroma_fe/./src/components/report/report.js","webpack://pleroma_fe/./src/components/report/report.vue?5c84","webpack://pleroma_fe/./src/components/notification/notification.js","webpack://pleroma_fe/./src/components/notification/notification.vue?17c8","webpack://pleroma_fe/./src/components/notifications/notification_filters.vue","webpack://pleroma_fe/./src/components/notifications/notification_filters.vue?4a98","webpack://pleroma_fe/./src/components/notifications/notifications.js","webpack://pleroma_fe/./src/components/notifications/notifications.vue?770b","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue?50c2","webpack://pleroma_fe/./src/components/popover/popover.js","webpack://pleroma_fe/./src/components/popover/popover.vue?237b","webpack://pleroma_fe/./src/components/popover/popover.vue","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue","webpack://pleroma_fe/./src/components/poll/poll_form.vue","webpack://pleroma_fe/./src/components/poll/poll_form.js","webpack://pleroma_fe/./src/components/poll/poll_form.vue?5434","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.js","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue?b98e","webpack://pleroma_fe/./src/components/progress_button/progress_button.vue","webpack://pleroma_fe/./src/components/progress_button/progress_button.vue?2d10","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.js","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue?188a","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.js","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue?cbff","webpack://pleroma_fe/./src/components/select/select.js","webpack://pleroma_fe/./src/components/select/select.vue?fa00","webpack://pleroma_fe/./src/components/select/select.vue","webpack://pleroma_fe/./src/components/status/status.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.js","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue?f8cc","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.js","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue?4c13","webpack://pleroma_fe/./src/components/react_button/react_button.vue","webpack://pleroma_fe/./src/components/react_button/react_button.js","webpack://pleroma_fe/./src/components/react_button/react_button.vue?64d4","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.js","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue?774a","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.js","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue?2a14","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue","webpack://pleroma_fe/./src/components/status_popover/status_popover.js","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue?2f31","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.js","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue?32eb","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.js","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue?be26","webpack://pleroma_fe/./src/components/status/status.js","webpack://pleroma_fe/./src/components/status/status.vue?f274","webpack://pleroma_fe/./src/components/status_content/status_content.vue","webpack://pleroma_fe/./src/components/poll/poll.vue","webpack://pleroma_fe/./src/components/poll/poll.js","webpack://pleroma_fe/./src/components/poll/poll.vue?09ad","webpack://pleroma_fe/./src/components/status_body/status_body.vue","webpack://pleroma_fe/./src/components/status_body/status_body.js","webpack://pleroma_fe/./src/components/status_body/status_body.vue?a029","webpack://pleroma_fe/./src/components/status_content/status_content.js","webpack://pleroma_fe/./src/components/status_content/status_content.vue?5b7b","webpack://pleroma_fe/./src/components/still-image/still-image.vue","webpack://pleroma_fe/./src/components/still-image/still-image.js","webpack://pleroma_fe/./src/components/still-image/still-image.vue?7a8d","webpack://pleroma_fe/./src/components/timeago/timeago.vue","webpack://pleroma_fe/./src/components/timeago/timeago.vue?3167","webpack://pleroma_fe/./src/components/unicode_domain_indicator/unicode_domain_indicator.vue","webpack://pleroma_fe/./src/components/unicode_domain_indicator/unicode_domain_indicator.vue?760a","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.js","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue?84fc","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue","webpack://pleroma_fe/./src/components/user_card/user_card.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.js","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue?98d7","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.vue","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.js","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.vue?e3cb","webpack://pleroma_fe/./src/components/account_actions/account_actions.js","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue?26a0","webpack://pleroma_fe/./src/components/user_note/user_note.vue","webpack://pleroma_fe/./src/components/user_note/user_note.js","webpack://pleroma_fe/./src/components/user_note/user_note.vue?302a","webpack://pleroma_fe/./src/components/user_card/user_card.js","webpack://pleroma_fe/./src/components/user_card/user_card.vue?bb36","webpack://pleroma_fe/./src/components/user_link/user_link.vue","webpack://pleroma_fe/./src/components/user_link/user_link.vue?e5f2","webpack://pleroma_fe/./src/components/user_popover/user_popover.js","webpack://pleroma_fe/./src/components/user_popover/user_popover.vue?dfdb","webpack://pleroma_fe/./src/components/user_popover/user_popover.vue","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.js","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.vue?da03","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.vue","webpack://pleroma_fe/./src/i18n/ lazy ^\\.\\/.*\\.json$ include: \\.json$ chunkName: i18n/[request] namespace object","webpack://pleroma_fe/webpack/bootstrap","webpack://pleroma_fe/webpack/runtime/compat get default export","webpack://pleroma_fe/webpack/runtime/define property getters","webpack://pleroma_fe/webpack/runtime/ensure chunk","webpack://pleroma_fe/webpack/runtime/get javascript chunk filename","webpack://pleroma_fe/webpack/runtime/get mini-css chunk filename","webpack://pleroma_fe/webpack/runtime/global","webpack://pleroma_fe/webpack/runtime/hasOwnProperty shorthand","webpack://pleroma_fe/webpack/runtime/make namespace object","webpack://pleroma_fe/webpack/runtime/node module decorator","webpack://pleroma_fe/webpack/runtime/publicPath","webpack://pleroma_fe/webpack/runtime/css loading","webpack://pleroma_fe/webpack/runtime/jsonp chunk loading","webpack://pleroma_fe/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"pleroma_fe:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","export default {\n \"about\": {\n \"mrf\": {\n \"federation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Federation\"])},\n \"keyword\": {\n \"keyword_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keyword policies\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Removal from \\\"The Whole Known Network\\\" Timeline\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject\"])},\n \"replace\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replace\"])},\n \"is_replaced_by\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"→\"])}\n },\n \"mrf_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enabled MRF policies\"])},\n \"mrf_policies_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:\"])},\n \"simple\": {\n \"simple_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance-specific policies\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reason\"])},\n \"not_applicable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N/A\"])},\n \"accept\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accept\"])},\n \"accept_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance only accepts messages from the following instances:\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject\"])},\n \"reject_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance will not accept messages from the following instances:\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quarantine\"])},\n \"quarantine_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance will send only public posts to the following instances:\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Removal from \\\"Known Network\\\" Timeline\"])},\n \"ftl_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance removes these instances from \\\"Known Network\\\" timeline:\"])},\n \"media_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media Removal\"])},\n \"media_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance removes media from posts on the following instances:\"])},\n \"media_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media force-set as sensitive\"])},\n \"media_nsfw_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance forces media to be set sensitive in posts on the following instances:\"])}\n }\n },\n \"staff\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Staff\"])}\n },\n \"announcements\": {\n \"page_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcements\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcement\"])},\n \"mark_as_read_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark as read\"])},\n \"post_form_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post announcement\"])},\n \"post_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Type your announcement content here...\"])},\n \"post_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post\"])},\n \"post_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error: \", _interpolate(_named(\"error\"))])},\n \"close_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"delete_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"start_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start time: \"])},\n \"end_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"End time: \"])},\n \"all_day_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is an all-day event\"])},\n \"published_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Published at \", _interpolate(_named(\"time\"))])},\n \"start_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Starts at \", _interpolate(_named(\"time\"))])},\n \"end_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Ends at \", _interpolate(_named(\"time\"))])},\n \"edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"submit_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"cancel_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"inactive_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This announcement is inactive\"])}\n },\n \"shoutbox\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shoutbox\"])}\n },\n \"domain_mute_card\": {\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muting…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmuting…\"])}\n },\n \"exporter\": {\n \"export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export\"])},\n \"processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Processing, you'll soon be asked to download your file\"])}\n },\n \"features_panel\": {\n \"shout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shoutbox\"])},\n \"pleroma_chat_messages\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma Chat\"])},\n \"gopher\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gopher\"])},\n \"media_proxy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media proxy\"])},\n \"scope_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope options\"])},\n \"text_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Text limit\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Features\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])},\n \"upload_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload limit\"])}\n },\n \"finder\": {\n \"error_fetching_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error fetching user\"])},\n \"find_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Find user\"])}\n },\n \"general\": {\n \"apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Apply\"])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"loading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loading…\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occured\"])},\n \"generic_error_message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"An error occured: \", _interpolate(_list(0))])},\n \"error_retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please try again\"])},\n \"retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Try again\"])},\n \"optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"optional\"])},\n \"show_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show more\"])},\n \"show_less\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show less\"])},\n \"never_show_again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Never show again\"])},\n \"dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dismiss\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"disable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm\"])},\n \"verify\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verify\"])},\n \"close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"undo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Undo\"])},\n \"yes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])},\n \"no\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"peek\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Peek\"])},\n \"scroll_to_top\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scroll to top\"])},\n \"role\": {\n \"admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Moderator\"])}\n },\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpin item\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pin item\"])},\n \"flash_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Click to show Flash content using Ruffle (Experimental, may not work).\"])},\n \"flash_security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Note that this can be potentially dangerous since Flash content is still arbitrary code.\"])},\n \"flash_fail\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Failed to load flash content, see console for details.\"])},\n \"scope_in_timeline\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers-only\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unlisted\"])}\n }\n },\n \"image_cropper\": {\n \"crop_picture\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Crop picture\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save\"])},\n \"save_without_cropping\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save without cropping\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])}\n },\n \"importer\": {\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"success\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imported successfully.\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occured while importing this file.\"])}\n },\n \"login\": {\n \"login\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in with OAuth\"])},\n \"logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log out\"])},\n \"logout_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout confirmation\"])},\n \"logout_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to logout?\"])},\n \"logout_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"logout_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not logout\"])},\n \"password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. lain\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"username\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in to join the discussion\"])},\n \"authentication_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authentication code\"])},\n \"enter_recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a recovery code\"])},\n \"enter_two_factor_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a two-factor code\"])},\n \"recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Recovery code\"])},\n \"heading\": {\n \"totp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor authentication\"])},\n \"recovery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor recovery\"])}\n }\n },\n \"media_modal\": {\n \"previous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous\"])},\n \"next\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next\"])},\n \"counter\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"current\")), \" / \", _interpolate(_named(\"total\"))])},\n \"hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close media viewer\"])}\n },\n \"nav\": {\n \"about\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"About\"])},\n \"administration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"back\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"friend_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow requests\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"interactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interactions\"])},\n \"dms\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct messages\"])},\n \"public_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public timeline\"])},\n \"timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timeline\"])},\n \"home_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home timeline\"])},\n \"twkn\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Known Network\"])},\n \"bookmarks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmarks\"])},\n \"user_search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Search\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search\"])},\n \"search_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close search bar\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])},\n \"preferences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timelines\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chats\"])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lists\"])},\n \"edit_nav_mobile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Customize navigation bar\"])},\n \"edit_pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit pinned items\"])},\n \"edit_finish\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Done editing\"])},\n \"mobile_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Toggle mobile sidebar\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open notifications\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open notifications (there are unread ones)\"])},\n \"mobile_notifications_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close notifications\"])},\n \"announcements\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcements\"])}\n },\n \"notifications\": {\n \"broken_favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unknown status, searching for it…\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error fetching notifications: \", _interpolate(_list(0))])},\n \"favorited_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"favorited your status\"])},\n \"followed_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"followed you\"])},\n \"follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wants to follow you\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older notifications\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"read\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Read!\"])},\n \"repeated_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeated your status\"])},\n \"no_more_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more notifications\"])},\n \"migrated_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"migrated to\"])},\n \"reacted_with\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"reacted with \", _interpolate(_list(0))])},\n \"submitted_report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"submitted a report\"])},\n \"poll_ended\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"poll has ended\"])}\n },\n \"polls\": {\n \"add_poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add poll\"])},\n \"add_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add option\"])},\n \"option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Option\"])},\n \"votes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"votes\"])},\n \"people_voted_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" person voted\"]), _normalize([_interpolate(_named(\"count\")), \" people voted\"])])},\n \"votes_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" vote\"]), _normalize([_interpolate(_named(\"count\")), \" votes\"])])},\n \"vote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vote\"])},\n \"type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll type\"])},\n \"single_choice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Single choice\"])},\n \"multiple_choices\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Multiple choices\"])},\n \"expiry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll age\"])},\n \"expires_in\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Poll ends in \", _interpolate(_list(0))])},\n \"expired\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Poll ended \", _interpolate(_list(0)), \" ago\"])},\n \"not_enough_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Too few unique options in poll\"])}\n },\n \"emoji\": {\n \"stickers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stickers\"])},\n \"emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Emoji\"])},\n \"keep_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep picker open\"])},\n \"search_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search for an emoji\"])},\n \"add_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insert emoji\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Custom emoji\"])},\n \"unpacked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpacked emoji\"])},\n \"unicode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unicode emoji\"])},\n \"unicode_groups\": {\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activities\"])},\n \"animals-and-nature\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Animals & Nature\"])},\n \"flags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Flags\"])},\n \"food-and-drink\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Food & Drink\"])},\n \"objects\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Objects\"])},\n \"people-and-body\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"People & Body\"])},\n \"smileys-and-emotion\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Smileys & Emotion\"])},\n \"symbols\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Symbols\"])},\n \"travel-and-places\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Travel & Places\"])}\n },\n \"load_all_hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Loaded first \", _interpolate(_named(\"saneAmount\")), \" emoji, loading all emoji may cause performance issues.\"])},\n \"load_all\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Loading all \", _interpolate(_named(\"emojiAmount\")), \" emoji\"])},\n \"regional_indicator\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Regional indicator \", _interpolate(_named(\"letter\"))])}\n },\n \"errors\": {\n \"storage_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies.\"])}\n },\n \"interactions\": {\n \"favs_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats and favorites\"])},\n \"follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New follows\"])},\n \"emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Emoji Reactions\"])},\n \"reports\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reports\"])},\n \"moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User migrates\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older interactions\"])}\n },\n \"post_status\": {\n \"edit_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit status\"])},\n \"new_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post new status\"])},\n \"reply_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply to this status\"])},\n \"quote_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quote this status\"])},\n \"account_not_locked_warning\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your account is not \", _interpolate(_list(0)), \". Anyone can follow you to view your follower-only posts.\"])},\n \"account_not_locked_warning_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"locked\"])},\n \"attachments_sensitive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark attachments as sensitive\"])},\n \"media_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media description\"])},\n \"content_type\": {\n \"text/plain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Plain text\"])},\n \"text/html\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"HTML\"])},\n \"text/markdown\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Markdown\"])},\n \"text/bbcode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"BBCode\"])}\n },\n \"content_type_selection\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post format\"])},\n \"content_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Subject (optional)\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just landed in L.A.\"])},\n \"direct_warning_to_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to all the mentioned users.\"])},\n \"direct_warning_to_first_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will only be visible to the mentioned users at the beginning of the message.\"])},\n \"edit_remote_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Other remote instances may not support editing and unable to receive the latest version of your post.\"])},\n \"edit_unsupported_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma does not support editing mentions or polls.\"])},\n \"posting\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posting\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"preview_empty\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Empty\"])},\n \"empty_status_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Can't post an empty status with no files\"])},\n \"media_description_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Failed to update media, try again\"])},\n \"scope_notice\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to everyone\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to your followers only\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will not be visible in Public Timeline and The Whole Known Network\"])}\n },\n \"scope_notice_dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close this notice\"])},\n \"scope\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct - post to mentioned users only\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers-only - post to followers only\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public - post to public timelines\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unlisted - do not post to public timelines\"])}\n }\n },\n \"registration\": {\n \"bio_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio (optional)\"])},\n \"email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"email_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email (optional)\"])},\n \"fullname\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display name\"])},\n \"password_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password confirmation\"])},\n \"registration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invite token\"])},\n \"captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"new_captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Click the image to get a new captcha\"])},\n \"username_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. lain\"])},\n \"fullname_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. Lain Iwakura\"])},\n \"bio_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g.\\nHi, I'm Lain.\\nI’m an anime girl living in suburban Japan. You may know me from the Wired.\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reason to register\"])},\n \"reason_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance approves registrations manually.\\nLet the administration know why you want to register.\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"validations\": {\n \"username_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"fullname_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"email_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_confirmation_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_confirmation_match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"should be the same as password\"])},\n \"birthday_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"birthday_min_age\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"must be on or before \", _interpolate(_named(\"date\"))])}\n },\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"In which language do you want to receive emails from the server?\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday:\"])},\n \"birthday_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday (optional):\"])}\n },\n \"remote_user_resolver\": {\n \"remote_user_resolver\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remote user resolver\"])},\n \"searching_for\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Searching for\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Not found.\"])}\n },\n \"report\": {\n \"reporter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reporter:\"])},\n \"reported_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reported user:\"])},\n \"reported_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reported statuses:\"])},\n \"notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notes:\"])},\n \"state\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"State:\"])},\n \"state_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open\"])},\n \"state_closed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Closed\"])},\n \"state_resolved\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resolved\"])}\n },\n \"selectable_list\": {\n \"select_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Select all\"])}\n },\n \"settings\": {\n \"add_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add fallback language\"])},\n \"remove_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"primary_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Primary language:\"])},\n \"fallback_language\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Fallback language \", _interpolate(_named(\"index\")), \":\"])},\n \"app_name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"App name\"])},\n \"expert_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show advanced\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save changes\"])},\n \"security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Security\"])},\n \"setting_changed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Setting is different from default\"])},\n \"setting_server_side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This setting is tied to your profile and affects all sessions and clients\"])},\n \"enter_current_password_to_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter your current password to confirm your identity\"])},\n \"post_look_feel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts Look & Feel\"])},\n \"mention_links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mention links\"])},\n \"mfa\": {\n \"otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OTP\"])},\n \"setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Setup OTP\"])},\n \"wait_pre_setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"presetting OTP\"])},\n \"confirm_and_enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm & enable OTP\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor Authentication\"])},\n \"generate_new_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Generate new recovery codes\"])},\n \"warning_of_generate_new_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"When you generate new recovery codes, your old codes won’t work anymore.\"])},\n \"recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Recovery codes.\"])},\n \"waiting_a_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Receiving backup codes…\"])},\n \"recovery_codes_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.\"])},\n \"authentication_methods\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authentication methods\"])},\n \"scan\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scan\"])},\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Using your two-factor app, scan this QR code or enter text key:\"])},\n \"secret_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Key\"])}\n },\n \"verify\": {\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"To enable two-factor authentication, enter the code from your two-factor app:\"])}\n }\n },\n \"lists_navigation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show lists in navigation\"])},\n \"allow_following_move\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow auto-follow when following account moves\"])},\n \"attachmentRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments\"])},\n \"attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatar\"])},\n \"avatarAltRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatars (notifications)\"])},\n \"avatarRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatars\"])},\n \"background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background\"])},\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language for receiving emails from the server\"])},\n \"block_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block export\"])},\n \"block_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your blocks to a csv file\"])},\n \"block_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block import\"])},\n \"block_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing blocks\"])},\n \"blocks_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocks imported! Processing them will take a while.\"])},\n \"mute_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute export\"])},\n \"mute_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your mutes to a csv file\"])},\n \"mute_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute import\"])},\n \"mute_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing mutes\"])},\n \"mutes_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes imported! Processing them will take a while.\"])},\n \"import_mutes_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import mutes from a csv file\"])},\n \"account_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account backup\"])},\n \"account_backup_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This allows you to download an archive of your account information and your posts, but they cannot yet be imported into a Pleroma account.\"])},\n \"account_backup_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup\"])},\n \"download_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Download\"])},\n \"backup_not_ready\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This backup is not ready yet.\"])},\n \"backup_running\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"This backup is in progress, processed \", _interpolate(_named(\"number\")), \" record.\"]), _normalize([\"This backup is in progress, processed \", _interpolate(_named(\"number\")), \" records.\"])])},\n \"backup_failed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This backup has failed.\"])},\n \"remove_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"list_backups_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error fetching backup list: \", _interpolate(_named(\"error\"))])},\n \"add_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Create a new backup\"])},\n \"added_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Added a new backup.\"])},\n \"add_backup_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error adding a new backup: \", _interpolate(_named(\"error\"))])},\n \"blocks_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocks\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is a bot account\"])},\n \"btnRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Buttons\"])},\n \"cBlue\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blue (Reply, follow)\"])},\n \"cGreen\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Green (Retweet)\"])},\n \"cOrange\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Orange (Favorite)\"])},\n \"cRed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Red (Cancel)\"])},\n \"change_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Change email\"])},\n \"change_email_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue changing your email.\"])},\n \"changed_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email changed successfully!\"])},\n \"change_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Change password\"])},\n \"change_password_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue changing your password.\"])},\n \"changed_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password changed successfully!\"])},\n \"chatMessageRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chat message\"])},\n \"collapse_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse posts with subjects\"])},\n \"composing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Composing\"])},\n \"confirm_new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm new password\"])},\n \"current_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"confirm_dialogs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ask for confirmation when\"])},\n \"confirm_dialogs_repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeating a status\"])},\n \"confirm_dialogs_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"unfollowing a user\"])},\n \"confirm_dialogs_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"blocking a user\"])},\n \"confirm_dialogs_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"muting a user\"])},\n \"confirm_dialogs_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"deleting a status\"])},\n \"confirm_dialogs_logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"logging out\"])},\n \"confirm_dialogs_approve_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"approving a follower\"])},\n \"confirm_dialogs_deny_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"denying a follower\"])},\n \"confirm_dialogs_remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"removing a follower\"])},\n \"mutes_and_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes and Blocks\"])},\n \"data_import_export_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Data import / export\"])},\n \"default_vis\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default visibility scope\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete account\"])},\n \"delete_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Permanently delete your data and deactivate your account.\"])},\n \"delete_account_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue deleting your account. If this persists please contact your instance administrator.\"])},\n \"delete_account_instructions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Type your password in the input below to confirm account deletion.\"])},\n \"account_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account aliases\"])},\n \"account_alias_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alias\"])},\n \"list_aliases_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error fetching aliases: \", _interpolate(_named(\"error\"))])},\n \"hide_list_aliases_error_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"remove_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove this alias\"])},\n \"new_alias_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Add a new alias (e.g. \", _interpolate(_named(\"example\")), \")\"])},\n \"added_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alias is added.\"])},\n \"add_alias_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error adding alias: \", _interpolate(_named(\"error\"))])},\n \"move_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Move account\"])},\n \"move_account_notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you want to move the account somewhere else, you must go to your target account and add an alias pointing here.\"])},\n \"move_account_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Target account (e.g. \", _interpolate(_named(\"example\")), \")\"])},\n \"moved_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account is moved.\"])},\n \"move_account_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error moving account: \", _interpolate(_named(\"error\"))])},\n \"discoverable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow discovery of this account in search results and other services\"])},\n \"domain_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Domains\"])},\n \"avatar_size_instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The recommended minimum size for avatar images is 150x150 pixels.\"])},\n \"pad_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pad emoji with spaces when adding from picker\"])},\n \"autocomplete_select_first\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically select the first candidate when autocomplete results are available\"])},\n \"emoji_reactions_on_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show emoji reactions on timeline\"])},\n \"emoji_reactions_scale\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reactions scale factor\"])},\n \"export_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save preset\"])},\n \"filtering\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtering\"])},\n \"wordfilter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wordfilter\"])},\n \"filtering_explanation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All statuses containing these words will be muted, one per line\"])},\n \"word_filter_and_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Word filter and more...\"])},\n \"follow_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow export\"])},\n \"follow_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your follows to a csv file\"])},\n \"follow_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow import\"])},\n \"follow_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing followers\"])},\n \"follows_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows imported! Processing them will take a while.\"])},\n \"accent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accent\"])},\n \"foreground\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Foreground\"])},\n \"general\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"General\"])},\n \"hide_attachments_in_convo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachments in conversations\"])},\n \"hide_attachments_in_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachments in timeline\"])},\n \"hide_media_previews\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide media previews\"])},\n \"hide_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide posts of muted users\"])},\n \"mute_bot_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute bot posts\"])},\n \"hide_bot_indication\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide bot indication in posts\"])},\n \"hide_all_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide muted posts\"])},\n \"max_thumbnails\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximum amount of thumbnails per post (empty = no limit)\"])},\n \"hide_isp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance-specific panel\"])},\n \"hide_shoutbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance shoutbox\"])},\n \"right_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reverse order of columns\"])},\n \"navbar_column_stretch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stretch navbar to columns width\"])},\n \"always_show_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Always show floating New Post button\"])},\n \"hide_wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance wallpaper\"])},\n \"preload_images\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preload images\"])},\n \"use_one_click_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open NSFW attachments with just one click\"])},\n \"hide_post_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide post statistics (e.g. the number of favorites)\"])},\n \"hide_user_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide user statistics (e.g. the number of followers)\"])},\n \"hide_filtered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide all filtered posts\"])},\n \"hide_wordfiltered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide word-filtered statuses\"])},\n \"hide_muted_threads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide muted threads\"])},\n \"import_blocks_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import blocks from a csv file\"])},\n \"import_followers_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import follows from a csv file\"])},\n \"import_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load preset\"])},\n \"inputRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"checkboxRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Checkboxes\"])},\n \"instance_default\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(default: \", _interpolate(_named(\"value\")), \")\"])},\n \"instance_default_simple\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(default)\"])},\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface\"])},\n \"interfaceLanguage\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface language\"])},\n \"invalid_theme_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The selected file is not a supported Pleroma theme. No changes to your theme were made.\"])},\n \"limited_availability\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unavailable in your browser\"])},\n \"links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Links\"])},\n \"lock_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restrict your account to approved followers only\"])},\n \"loop_video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loop videos\"])},\n \"loop_video_silent_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loop only videos without sound (i.e. Mastodon's \\\"gifs\\\")\"])},\n \"mutes_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes\"])},\n \"play_videos_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Play videos in a popup frame\"])},\n \"url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"file_export_import\": {\n \"backup_restore\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings backup\"])},\n \"backup_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup settings to file\"])},\n \"backup_settings_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup settings and theme to file\"])},\n \"restore_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restore settings from file\"])},\n \"errors\": {\n \"invalid_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The selected file is not a supported Pleroma settings backup. No changes were made.\"])},\n \"file_too_new\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Incompatile major version: \", _interpolate(_named(\"fileMajor\")), \", this PleromaFE (settings ver \", _interpolate(_named(\"feMajor\")), \") is too old to handle it\"])},\n \"file_too_old\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Incompatile major version: \", _interpolate(_named(\"fileMajor\")), \", file version is too old and not supported (min. set. ver. \", _interpolate(_named(\"feMajor\")), \")\"])},\n \"file_slightly_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File minor version is different, some settings might not load\"])}\n }\n },\n \"profile_fields\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile metadata\"])},\n \"add_field\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add field\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])},\n \"value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])}\n },\n \"birthday\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday\"])},\n \"show_birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show my birthday\"])}\n },\n \"account_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Privacy\"])},\n \"use_contain_fit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't crop the attachment in thumbnails\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Name\"])},\n \"name_bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Name & bio\"])},\n \"new_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts\"])},\n \"user_profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Profiles\"])},\n \"notification_visibility\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Types of notifications to show\"])},\n \"notification_visibility_follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows\"])},\n \"notification_visibility_likes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"notification_visibility_mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"notification_visibility_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats\"])},\n \"notification_visibility_moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Migrates\"])},\n \"notification_visibility_emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reactions\"])},\n \"notification_visibility_polls\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ends of polls you voted in\"])},\n \"no_rich_text_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Strip rich text formatting from all posts\"])},\n \"no_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No blocks\"])},\n \"no_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No mutes\"])},\n \"hide_favorites_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show list of my favorites (people still get notified)\"])},\n \"hide_follows_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show who I'm following\"])},\n \"hide_followers_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show who's following me\"])},\n \"hide_follows_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show follow count\"])},\n \"hide_followers_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show follower count\"])},\n \"show_admin_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show \\\"Admin\\\" badge in my profile\"])},\n \"show_moderator_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show \\\"Moderator\\\" badge in my profile\"])},\n \"nsfw_clickthrough\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide sensitive/NSFW media\"])},\n \"oauth_tokens\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth tokens\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Token\"])},\n \"refresh_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Refresh token\"])},\n \"valid_until\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valid until\"])},\n \"revoke_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke\"])},\n \"panelRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panels\"])},\n \"pause_on_unfocused\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pause when tab is not focused\"])},\n \"presets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Presets\"])},\n \"profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile background\"])},\n \"profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile banner\"])},\n \"profile_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile\"])},\n \"radii_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set up interface edge rounding (in pixels)\"])},\n \"replies_in_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replies in timeline\"])},\n \"reply_visibility_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show all replies\"])},\n \"reply_visibility_following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies directed at me or users I'm following\"])},\n \"reply_visibility_self\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies directed at me\"])},\n \"reply_visibility_following_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show replies to my follows\"])},\n \"reply_visibility_self_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show replies to self only\"])},\n \"autohide_floating_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically hide New Post button (mobile)\"])},\n \"saving_err\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error saving settings\"])},\n \"saving_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings saved\"])},\n \"search_user_to_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search whom you want to block\"])},\n \"search_user_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search whom you want to mute\"])},\n \"security_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Security\"])},\n \"scope_copy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy scope when replying (DMs are always copied)\"])},\n \"minimal_scopes_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Minimize post scope selection options\"])},\n \"set_new_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new avatar\"])},\n \"set_new_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new profile background\"])},\n \"set_new_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new profile banner\"])},\n \"reset_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset avatar\"])},\n \"reset_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset profile background\"])},\n \"reset_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset profile banner\"])},\n \"reset_avatar_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the avatar?\"])},\n \"reset_banner_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the banner?\"])},\n \"reset_background_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the background?\"])},\n \"settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings\"])},\n \"subject_input_always_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Always show subject field\"])},\n \"subject_line_behavior\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy subject when replying\"])},\n \"subject_line_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Like email: \\\"re: subject\\\"\"])},\n \"subject_line_mastodon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Like mastodon: copy as is\"])},\n \"subject_line_noop\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not copy\"])},\n \"conversation_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Conversation display style\"])},\n \"conversation_display_tree\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tree-style\"])},\n \"conversation_display_tree_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tree view\"])},\n \"disable_sticky_headers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't stick column headers to top of the screen\"])},\n \"show_scrollbars\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show side column's scrollbars\"])},\n \"third_column_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"When there's enough space, show third column containing\"])},\n \"third_column_mode_none\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show third column at all\"])},\n \"third_column_mode_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications column\"])},\n \"third_column_mode_postform\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Main post form and navigation\"])},\n \"columns\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Columns\"])},\n \"column_sizes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Column sizes\"])},\n \"column_sizes_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sidebar\"])},\n \"column_sizes_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])},\n \"column_sizes_notifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"tree_advanced\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow more flexible navigation in tree view\"])},\n \"tree_fade_ancestors\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display ancestors of the current status in faint text\"])},\n \"conversation_display_linear\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Linear-style\"])},\n \"conversation_display_linear_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Linear view\"])},\n \"conversation_other_replies_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show the \\\"other replies\\\" button\"])},\n \"conversation_other_replies_button_below\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Below statuses\"])},\n \"conversation_other_replies_button_inside\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inside statuses\"])},\n \"max_depth_in_thread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximum number of levels in thread to display by default\"])},\n \"post_status_content_type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post status content type\"])},\n \"sensitive_by_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark posts as sensitive by default\"])},\n \"stop_gifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pause animated images until you hover on them\"])},\n \"streaming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically show new posts when scrolled to the top\"])},\n \"auto_update\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show new posts automatically\"])},\n \"user_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Users\"])},\n \"useStreamingApi\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Receive posts and notifications real-time\"])},\n \"use_websockets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use websockets (Realtime updates)\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Text\"])},\n \"theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Theme\"])},\n \"theme_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use hex color codes (#rrggbb) to customize your color theme.\"])},\n \"theme_help_v2_1\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can also override certain component's colors and opacity by toggling the checkbox, use \\\"Clear all\\\" button to clear all overrides.\"])},\n \"theme_help_v2_2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"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.\"])},\n \"tooltipRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tooltips/alerts\"])},\n \"type_domains_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search domains to mute\"])},\n \"upload_a_photo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload a photo\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Settings\"])},\n \"values\": {\n \"false\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no\"])},\n \"true\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"yes\"])}\n },\n \"virtual_scrolling\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Optimize timeline rendering\"])},\n \"use_at_icon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display \", \"@\", \" symbol as an icon instead of text\"])},\n \"mention_link_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display mention links\"])},\n \"mention_link_display_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"always as short names (e.g. \", \"@\", \"foo)\"])},\n \"mention_link_display_full_for_remote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"as full names only for remote users (e.g. \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_display_full\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"always as full names (e.g. \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_use_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user card when clicking mention links\"])},\n \"mention_link_show_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user avatar beside the link\"])},\n \"mention_link_show_avatar_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user avatar next to mentions\"])},\n \"mention_link_fade_domain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fade domains (e.g. \", \"@\", \"example.org in \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_bolden_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highlight mention of you when you are mentioned\"])},\n \"user_popover_avatar_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Popover avatar click action\"])},\n \"user_popover_avatar_action_zoom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zoom the avatar\"])},\n \"user_popover_avatar_action_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close the popover\"])},\n \"user_popover_avatar_action_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open profile\"])},\n \"user_popover_avatar_overlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user popover over user avatar\"])},\n \"fun\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fun\"])},\n \"greentext\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Meme arrows\"])},\n \"show_yous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show (You)s\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"notification_setting_filters\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filters\"])},\n \"notification_setting_block_from_strangers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block notifications from users who you do not follow\"])},\n \"notification_setting_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Privacy\"])},\n \"notification_setting_hide_notification_contents\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide the sender and contents of push notifications\"])},\n \"notification_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"To stop receiving notifications from a specific user, use a mute.\"])},\n \"notification_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocking a user stops all notifications as well as unsubscribes them.\"])},\n \"enable_web_push_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable web push notifications\"])},\n \"more_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More settings\"])},\n \"style\": {\n \"switcher\": {\n \"keep_color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep colors\"])},\n \"keep_shadows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep shadows\"])},\n \"keep_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep opacity\"])},\n \"keep_roundness\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep roundness\"])},\n \"keep_fonts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep fonts\"])},\n \"save_load_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"\\\"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.\"])},\n \"reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"clear_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear all\"])},\n \"clear_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear opacity\"])},\n \"load_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load theme\"])},\n \"keep_as_is\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep as is\"])},\n \"use_snapshot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Old version\"])},\n \"use_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New version\"])},\n \"help\": {\n \"upgraded_from_v2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE has been upgraded, theme could look a little bit different than you remember.\"])},\n \"v2_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies.\"])},\n \"future_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made in newer version of FE.\"])},\n \"older_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made in older version of FE.\"])},\n \"snapshot_present\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead.\"])},\n \"snapshot_missing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No theme snapshot was in the file so it could look different than originally envisioned.\"])},\n \"fe_upgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE's theme engine upgraded after version update.\"])},\n \"fe_downgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE's version rolled back.\"])},\n \"migration_snapshot_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just to be safe, theme snapshot loaded. You can try loading theme data.\"])},\n \"migration_napshot_gone\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"For whatever reason snapshot was missing, some stuff could look different than you remember.\"])},\n \"snapshot_source_mismatch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version.\"])}\n }\n },\n \"common\": {\n \"color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Color\"])},\n \"opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Opacity\"])},\n \"contrast\": {\n \"hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Contrast ratio is \", _interpolate(_named(\"ratio\")), \", it \", _interpolate(_named(\"level\")), \" \", _interpolate(_named(\"context\"))])},\n \"level\": {\n \"aa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"meets Level AA guideline (minimal)\"])},\n \"aaa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"meets Level AAA guideline (recommended)\"])},\n \"bad\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"doesn't meet any accessibility guidelines\"])}\n },\n \"context\": {\n \"18pt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"for large (18pt+) text\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"for text\"])}\n }\n }\n },\n \"common_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Common\"])},\n \"main\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Common colors\"])},\n \"foreground_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"See \\\"Advanced\\\" tab for more detailed control\"])},\n \"rgbo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Icons, accents, badges\"])}\n },\n \"advanced_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Advanced\"])},\n \"alert\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alert background\"])},\n \"alert_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error\"])},\n \"alert_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Warning\"])},\n \"alert_neutral\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neutral\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts/User bios\"])},\n \"badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Badge background\"])},\n \"popover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tooltips, menus, popovers\"])},\n \"badge_notification\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notification\"])},\n \"panel_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel header\"])},\n \"top_bar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Top bar\"])},\n \"borders\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Borders\"])},\n \"buttons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Buttons\"])},\n \"inputs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"faint_text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Faded text\"])},\n \"underlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Underlay\"])},\n \"wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wallpaper\"])},\n \"poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll graph\"])},\n \"icons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Icons\"])},\n \"highlight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highlighted elements\"])},\n \"pressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pressed\"])},\n \"selectedPost\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Selected post\"])},\n \"selectedMenu\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Selected menu item\"])},\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disabled\"])},\n \"toggled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Toggled\"])},\n \"tabs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tabs\"])},\n \"chat\": {\n \"incoming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Incoming\"])},\n \"outgoing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Outgoing\"])},\n \"border\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Border\"])}\n }\n },\n \"radii\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Roundness\"])}\n },\n \"shadows\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shadow and lighting\"])},\n \"component\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Component\"])},\n \"override\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Override\"])},\n \"shadow_id\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Shadow #\", _interpolate(_named(\"value\"))])},\n \"blur\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blur\"])},\n \"spread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Spread\"])},\n \"inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inset\"])},\n \"hintV3\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"For shadows you can also use the \", _interpolate(_list(0)), \" notation to use other color slot.\"])},\n \"filter_hint\": {\n \"always_drop_shadow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Warning, this shadow always uses \", _interpolate(_list(0)), \" when browser supports it.\"])},\n \"drop_shadow_syntax\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" does not support \", _interpolate(_list(1)), \" parameter and \", _interpolate(_list(2)), \" keyword.\"])},\n \"avatar_inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.\"])},\n \"spread_zero\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shadows with spread > 0 will appear as if it was set to zero\"])},\n \"inset_classic\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Inset shadows will be using \", _interpolate(_list(0))])}\n },\n \"components\": {\n \"panel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel\"])},\n \"panelHeader\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel header\"])},\n \"topBar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Top bar\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User avatar (in profile view)\"])},\n \"avatarStatus\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User avatar (in post display)\"])},\n \"popup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Popups and tooltips\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button\"])},\n \"buttonHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (hover)\"])},\n \"buttonPressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (pressed)\"])},\n \"buttonPressedHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (pressed+hover)\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input field\"])}\n }\n },\n \"fonts\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fonts\"])},\n \"help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Select font to use for elements of UI. For \\\"custom\\\" you have to enter exact font name as it appears in system.\"])},\n \"components\": {\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post text\"])},\n \"postCode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monospaced text in a post (rich text)\"])}\n },\n \"family\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Font name\"])},\n \"size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Size (in px)\"])},\n \"weight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weight (boldness)\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Custom\"])}\n },\n \"preview\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Example error\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"A bunch of more \", _interpolate(_list(0)), \" and \", _interpolate(_list(1))])},\n \"mono\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"content\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just landed in L.A.\"])},\n \"faint_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"helpful manual\"])},\n \"fine_print\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Read our \", _interpolate(_list(0)), \" to learn nothing useful!\"])},\n \"header_faint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is fine\"])},\n \"checkbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"I have skimmed over terms and conditions\"])},\n \"link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"a nice lil' link\"])}\n }\n },\n \"version\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Version\"])},\n \"backend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backend version\"])},\n \"frontend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Frontend version\"])}\n },\n \"commit_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save\"])},\n \"commit_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Value is not saved, press this button to commit your changes\"])},\n \"reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset draft\"])},\n \"hard_reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hard reset\"])},\n \"hard_reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove setting from storage, forcing use of default value\"])}\n },\n \"admin_dash\": {\n \"window_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"This admin dashboard is experimental and WIP, \", _interpolate(_named(\"adminFeLink\")), \".\"])},\n \"old_ui_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"old admin UI available here\"])},\n \"reset_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset all\"])},\n \"commit_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save all\"])},\n \"tabs\": {\n \"nodb\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No DB Config\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance\"])},\n \"limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limits\"])},\n \"frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Front-ends\"])}\n },\n \"nodb\": {\n \"heading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Database config is disabled\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"You need to change backend config files so that \", _interpolate(_named(\"property\")), \" is set to \", _interpolate(_named(\"value\")), \", see more in \", _interpolate(_named(\"documentation\")), \".\"])},\n \"documentation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"text2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Most configuration options will be unavailable.\"])}\n },\n \"captcha\": {\n \"native\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Native\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha\"])}\n },\n \"instance\": {\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance information\"])},\n \"registrations\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User sign-ups\"])},\n \"captcha_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha settings\"])},\n \"access\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance access\"])},\n \"restrict\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restrict access for anonymous visitors\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Detailed setting for allowing/disallowing access to certain aspects of API. By default (indeterminate state) it will disallow if instance is not public, ticked checkbox means disallow access even if instance is public, unticked means allow access even if instance is private. Please note that unexpected behavior might happen if some settings are set, i.e. if profile access is disabled posts will show without profile information.\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timelines access\"])},\n \"profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User profiles access\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statues/activities access\"])}\n }\n },\n \"limits\": {\n \"arbitrary_limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Arbitrary limits\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post limits\"])},\n \"uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments limits\"])},\n \"users\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User profile limits\"])},\n \"profile_fields\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile fields limits\"])},\n \"user_uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile media limits\"])}\n },\n \"frontend\": {\n \"repository\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repository link\"])},\n \"versions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Available versions\"])},\n \"build_url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Build URL\"])},\n \"reinstall\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reinstall\"])},\n \"is_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(Default)\"])},\n \"is_default_custom\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(Default, version: \", _interpolate(_named(\"version\")), \")\"])},\n \"install\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Install\"])},\n \"install_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Install version \", _interpolate(_named(\"version\"))])},\n \"more_install_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More install options\"])},\n \"more_default_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More default setting options\"])},\n \"set_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set default\"])},\n \"set_default_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Set version \", _interpolate(_named(\"version\")), \" as default\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please note that this section is a WIP and lacks certain features as backend implementation of front-end management is incomplete.\"])},\n \"default_frontend\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default front-end\"])},\n \"default_frontend_tip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default front-end will be shown to all users. Currently there's no way to for a user to select personal front-end. If you switch away from PleromaFE you'll most likely have to use old and buggy AdminFE to do instance configuration until we replace it.\"])},\n \"default_frontend_tip2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WIP: Since Pleroma backend doesn't properly list all installed frontends you'll have to enter name and reference manually. List below provides shortcuts to fill the values.\"])},\n \"available_frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Available for install\"])}\n },\n \"temp_overrides\": {\n \":pleroma\": {\n \":instance\": {\n \":public\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance is public\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disabling this will make all API accessible only for logged-in users, this will make Public and Federated timelines inaccessible to anonymous visitors.\"])}\n },\n \":limit_to_local_content\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit search to local content\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disables global network search for unauthenticated (default), all users or none\"])}\n },\n \":description_limit\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Character limit for attachment descriptions\"])}\n },\n \":background_image\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background image\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background image (primarily used by PleromaFE)\"])}\n }\n }\n }\n }\n },\n \"time\": {\n \"unit\": {\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" day\"]), _normalize([_interpolate(_list(0)), \" days\"])])},\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" hour\"]), _normalize([_interpolate(_list(0)), \" hours\"])])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" minute\"]), _normalize([_interpolate(_list(0)), \" minutes\"])])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" month\"]), _normalize([_interpolate(_list(0)), \" months\"])])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" second\"]), _normalize([_interpolate(_list(0)), \" seconds\"])])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" week\"]), _normalize([_interpolate(_list(0)), \" weeks\"])])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" year\"]), _normalize([_interpolate(_list(0)), \" years\"])])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])}\n },\n \"in_future\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"in \", _interpolate(_list(0))])},\n \"in_past\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" ago\"])},\n \"now\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"just now\"])},\n \"now_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"now\"])}\n },\n \"timeline\": {\n \"collapse\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse\"])},\n \"conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Conversation\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error fetching timeline: \", _interpolate(_list(0))])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older statuses\"])},\n \"no_retweet_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post is marked as followers-only or direct and cannot be repeated\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeated\"])},\n \"show_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show new\"])},\n \"reload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reload\"])},\n \"up_to_date\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Up-to-date\"])},\n \"no_more_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more statuses\"])},\n \"no_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No statuses\"])},\n \"socket_reconnected\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Realtime connection established\"])},\n \"socket_broke\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Realtime connection lost: CloseEvent code \", _interpolate(_list(0))])},\n \"quick_view_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quick view settings\"])},\n \"quick_filter_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quick filter settings\"])}\n },\n \"status\": {\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats\"])},\n \"repeat_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to repeat this status?\"])},\n \"repeat_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat confirmation\"])},\n \"repeat_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat\"])},\n \"repeat_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not repeat\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete status\"])},\n \"delete_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error deleting status: \", _interpolate(_list(0))])},\n \"edit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit status\"])},\n \"edited_at\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(last edited \", _interpolate(_named(\"time\")), \")\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pin on profile\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpin from profile\"])},\n \"pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pinned\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmark\"])},\n \"unbookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unbookmark\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to delete this status?\"])},\n \"delete_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete confirmation\"])},\n \"delete_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"delete_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep\"])},\n \"reply_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply to\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"replies_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replies:\"])},\n \"replies_list_with_others\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Replies (+\", _interpolate(_named(\"numReplies\")), \" other):\"]), _normalize([\"Replies (+\", _interpolate(_named(\"numReplies\")), \" others):\"])])},\n \"mute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute conversation\"])},\n \"unmute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute conversation\"])},\n \"status_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Status unavailable\"])},\n \"copy_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy link to status\"])},\n \"external_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"External source\"])},\n \"thread_muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Thread muted\"])},\n \"thread_muted_and_words\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\", has words:\"])},\n \"show_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show full subject\"])},\n \"hide_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide full subject\"])},\n \"show_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show content\"])},\n \"hide_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide content\"])},\n \"status_deleted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post was deleted\"])},\n \"nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NSFW\"])},\n \"expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand\"])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(You)\"])},\n \"plus_more\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"+\", _interpolate(_named(\"number\")), \" more\"])},\n \"many_attachments\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Post has \", _interpolate(_named(\"number\")), \" attachment(s)\"])},\n \"collapse_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse attachments\"])},\n \"show_all_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show all attachments\"])},\n \"show_attachment_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show in media modal\"])},\n \"show_attachment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview description (open attachment for full description)\"])},\n \"hide_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachment\"])},\n \"remove_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove attachment\"])},\n \"attachment_stop_flash\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stop Flash player\"])},\n \"move_up\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shift attachment left\"])},\n \"move_down\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shift attachment right\"])},\n \"open_gallery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open gallery\"])},\n \"thread_hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide this thread\"])},\n \"thread_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show this thread\"])},\n \"thread_show_full\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Show everything under this thread (\", _interpolate(_named(\"numStatus\")), \" status in total, max depth \", _interpolate(_named(\"depth\")), \")\"]), _normalize([\"Show everything under this thread (\", _interpolate(_named(\"numStatus\")), \" statuses in total, max depth \", _interpolate(_named(\"depth\")), \")\"])])},\n \"thread_show_full_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"thread_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"See the remaining part of this thread (\", _interpolate(_named(\"numStatus\")), \" status in total)\"]), _normalize([\"See the remaining part of this thread (\", _interpolate(_named(\"numStatus\")), \" statuses in total)\"])])},\n \"thread_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"ancestor_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"See \", _interpolate(_named(\"numReplies\")), \" other reply under this status\"]), _normalize([\"See \", _interpolate(_named(\"numReplies\")), \" other replies under this status\"])])},\n \"ancestor_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Show full conversation (\", _interpolate(_named(\"numStatus\")), \" other status)\"]), _normalize([\"Show full conversation (\", _interpolate(_named(\"numStatus\")), \" other statuses)\"])])},\n \"show_only_conversation_under_this\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies to this status\"])},\n \"status_history\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Status history\"])},\n \"reaction_count_label\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"num\")), \" person reacted\"]), _normalize([_interpolate(_named(\"num\")), \" people reacted\"])])},\n \"hide_quote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide the quoted status\"])},\n \"display_quote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display the quoted status\"])},\n \"invisible_quote\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Quoted status unavailable: \", _interpolate(_named(\"link\"))])}\n },\n \"user_card\": {\n \"approve\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve\"])},\n \"approve_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve confirmation\"])},\n \"approve_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve\"])},\n \"approve_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not approve\"])},\n \"approve_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you want to approve \", _interpolate(_named(\"user\")), \"'s follow request?\"])},\n \"block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block\"])},\n \"blocked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocked!\"])},\n \"block_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block confirmation\"])},\n \"block_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to block \", _interpolate(_named(\"user\")), \"?\"])},\n \"block_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block\"])},\n \"block_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not block\"])},\n \"deactivated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deactivated\"])},\n \"deny\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny\"])},\n \"deny_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny confirmation\"])},\n \"deny_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny\"])},\n \"deny_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not deny\"])},\n \"deny_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you want to deny \", _interpolate(_named(\"user\")), \"'s follow request?\"])},\n \"edit_profile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow\"])},\n \"follow_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel request\"])},\n \"follow_sent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Request sent!\"])},\n \"follow_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Requesting…\"])},\n \"follow_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow\"])},\n \"unfollow_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow confirmation\"])},\n \"unfollow_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to unfollow \", _interpolate(_named(\"user\")), \"?\"])},\n \"unfollow_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow\"])},\n \"unfollow_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not unfollow\"])},\n \"followees\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Following\"])},\n \"followers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers\"])},\n \"following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Following!\"])},\n \"follows_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows you!\"])},\n \"hidden\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"its_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"It's you!\"])},\n \"media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media\"])},\n \"mention\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mention\"])},\n \"message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Message\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muted\"])},\n \"mute_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute confirmation\"])},\n \"mute_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to mute \", _interpolate(_named(\"user\")), \"?\"])},\n \"mute_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"mute_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not mute\"])},\n \"mute_duration_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute this user for (0 for indefinite time):\"])},\n \"per_day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"per day\"])},\n \"remote_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remote follow\"])},\n \"remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove follower\"])},\n \"remove_follower_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove follower confirmation\"])},\n \"remove_follower_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"remove_follower_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep\"])},\n \"remove_follower_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to remove \", _interpolate(_named(\"user\")), \" from your followers?\"])},\n \"report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Report\"])},\n \"statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statuses\"])},\n \"subscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Subscribe\"])},\n \"unsubscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unsubscribe\"])},\n \"unblock\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unblock\"])},\n \"unblock_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unblocking…\"])},\n \"block_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocking…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmuting…\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muting…\"])},\n \"hide_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide repeats\"])},\n \"show_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show repeats\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bot\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Born \", _interpolate(_named(\"birthday\"))])},\n \"admin_menu\": {\n \"moderation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Moderation\"])},\n \"grant_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Grant Admin\"])},\n \"revoke_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke Admin\"])},\n \"grant_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Grant Moderator\"])},\n \"revoke_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke Moderator\"])},\n \"activate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"deactivate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deactivate account\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete account\"])},\n \"force_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark all posts as NSFW\"])},\n \"strip_media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove media from posts\"])},\n \"force_unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Force posts to be unlisted\"])},\n \"sandbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Force posts to be followers-only\"])},\n \"disable_remote_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow following user from remote instances\"])},\n \"disable_any_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow following user at all\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow user posts from federating\"])},\n \"delete_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"delete_user_data_and_deactivate_confirmation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This will permanently delete the data from this account and deactivate it. Are you absolutely sure?\"])}\n },\n \"highlight\": {\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No highlight\"])},\n \"solid\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Solid bg\"])},\n \"striped\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Striped bg\"])},\n \"side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Side stripe\"])}\n },\n \"note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Note\"])},\n \"note_blank\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(None)\"])},\n \"edit_note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit note\"])},\n \"edit_note_apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Apply\"])},\n \"edit_note_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])}\n },\n \"user_profile\": {\n \"timeline_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User timeline\"])},\n \"profile_does_not_exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, this profile does not exist.\"])},\n \"profile_loading_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, there was an error loading this profile.\"])}\n },\n \"user_reporting\": {\n \"title\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Reporting \", _interpolate(_list(0))])},\n \"add_comment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:\"])},\n \"additional_comments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Additional comments\"])},\n \"forward_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The account is from another server. Send a copy of the report there as well?\"])},\n \"forward_to\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Forward to \", _interpolate(_list(0))])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occurred while processing your request.\"])}\n },\n \"who_to_follow\": {\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])}\n },\n \"tool_tip\": {\n \"media_upload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload media\"])},\n \"repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat\"])},\n \"reply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply\"])},\n \"favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorite\"])},\n \"add_reaction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add Reaction\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Settings\"])},\n \"accept_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accept follow request\"])},\n \"reject_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject follow request\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmark\"])},\n \"toggle_expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand or collapse notification to show post in full\"])},\n \"toggle_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand or collapse notification to reveal muted content\"])},\n \"autocomplete_available\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"number\")), \" result is available. Use up and down keys to navigate through them.\"]), _normalize([_interpolate(_named(\"number\")), \" results are available. Use up and down keys to navigate through them.\"])])}\n },\n \"upload\": {\n \"error\": {\n \"base\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload failed.\"])},\n \"message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Upload failed: \", _interpolate(_list(0))])},\n \"file_too_big\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"File too big [\", _interpolate(_named(\"filesize\")), _interpolate(_named(\"filesizeunit\")), \" / \", _interpolate(_named(\"allowedsize\")), _interpolate(_named(\"allowedsizeunit\")), \"]\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Try again later\"])}\n },\n \"file_size_units\": {\n \"B\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"B\"])},\n \"KiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KiB\"])},\n \"MiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MiB\"])},\n \"GiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"GiB\"])},\n \"TiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"TiB\"])}\n }\n },\n \"search\": {\n \"people\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"People\"])},\n \"hashtags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hashtags\"])},\n \"person_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" person talking\"])},\n \"people_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" people talking\"])},\n \"no_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No results\"])},\n \"no_more_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more results\"])},\n \"load_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more results\"])}\n },\n \"password_reset\": {\n \"forgot_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"password_reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter your email address or username. We will send you a link to reset your password.\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your email or username\"])},\n \"check_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email for a link to reset your password.\"])},\n \"return_home\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Return to the home page\"])},\n \"too_many_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You have reached the limit of attempts, try again later.\"])},\n \"password_reset_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset is disabled. Please contact your instance administrator.\"])},\n \"password_reset_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You must reset your password to log in.\"])},\n \"password_reset_required_but_mailer_is_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You must reset your password, but password reset is disabled. Please contact your instance administrator.\"])}\n },\n \"chats\": {\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You:\"])},\n \"message_user\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Message \", _interpolate(_named(\"nickname\"))])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chats\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New Chat\"])},\n \"empty_message_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cannot post empty message\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to delete this message?\"])},\n \"error_loading_chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong when loading the chat.\"])},\n \"error_sending_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong when sending the message.\"])},\n \"empty_chat_list_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You don't have any chats yet. Start a new chat!\"])}\n },\n \"lists\": {\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lists\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New List\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"List title\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search users\"])},\n \"create\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Create\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save changes\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete list\"])},\n \"following_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit to Following\"])},\n \"manage_lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Manage lists\"])},\n \"manage_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Manage list members\"])},\n \"add_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search for more users\"])},\n \"remove_from_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove from list\"])},\n \"add_to_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add to list\"])},\n \"is_in_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already in list\"])},\n \"editing_list\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Editing list \", _interpolate(_named(\"listTitle\"))])},\n \"creating_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Creating new list\"])},\n \"update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save Title\"])},\n \"really_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Really delete list?\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error manipulating lists: \", _interpolate(_list(0))])}\n },\n \"file_type\": {\n \"audio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Audio\"])},\n \"video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Video\"])},\n \"image\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File\"])}\n },\n \"display_date\": {\n \"today\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Today\"])}\n },\n \"update\": {\n \"big_update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please bear with us\"])},\n \"big_update_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"We haven't had a release in a while, so things might look and feel different than what you're used to.\"])},\n \"update_bugs\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Please report any issues and bugs on \", _interpolate(_named(\"pleromaGitlab\")), \", as we have changed a lot, and although we test thoroughly and use development versions ourselves, we may have missed some things. We welcome your feedback and suggestions on issues you might encounter, or how to improve Pleroma and Pleroma-FE.\"])},\n \"update_bugs_gitlab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma GitLab\"])},\n \"update_changelog\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"For more details on what's changed, see \", _interpolate(_named(\"theFullChangelog\")), \".\"])},\n \"update_changelog_here\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"the full changelog\"])},\n \"art_by\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Art by \", _interpolate(_named(\"linkToArtist\"))])}\n },\n \"unicode_domain_indicator\": {\n \"tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This domain contains non-ascii characters.\"])}\n }\n}","var map = {\n\t\"./af.json\": [\n\t\t44919,\n\t\t6355\n\t],\n\t\"./am.json\": [\n\t\t53139,\n\t\t5119\n\t],\n\t\"./ar.json\": [\n\t\t44557,\n\t\t9873\n\t],\n\t\"./ar_SA.json\": [\n\t\t23450,\n\t\t7360\n\t],\n\t\"./as.json\": [\n\t\t44359,\n\t\t3377\n\t],\n\t\"./ast.json\": [\n\t\t13764,\n\t\t7569\n\t],\n\t\"./az.json\": [\n\t\t86459,\n\t\t2342\n\t],\n\t\"./be.json\": [\n\t\t50866,\n\t\t7304\n\t],\n\t\"./bg.json\": [\n\t\t26219,\n\t\t3974\n\t],\n\t\"./bn.json\": [\n\t\t69178,\n\t\t9064\n\t],\n\t\"./br.json\": [\n\t\t67871,\n\t\t6148\n\t],\n\t\"./bs.json\": [\n\t\t75340,\n\t\t8134\n\t],\n\t\"./ca.json\": [\n\t\t86914,\n\t\t4691\n\t],\n\t\"./ccp.json\": [\n\t\t73872,\n\t\t1162\n\t],\n\t\"./ceb.json\": [\n\t\t64478,\n\t\t9790\n\t],\n\t\"./chr.json\": [\n\t\t61017,\n\t\t6869\n\t],\n\t\"./ckb.json\": [\n\t\t56412,\n\t\t2656\n\t],\n\t\"./cs.json\": [\n\t\t8888,\n\t\t4710\n\t],\n\t\"./cy.json\": [\n\t\t25392,\n\t\t6272\n\t],\n\t\"./da.json\": [\n\t\t35042,\n\t\t1596\n\t],\n\t\"./de.json\": [\n\t\t35169,\n\t\t6226\n\t],\n\t\"./de_CH.json\": [\n\t\t28246,\n\t\t7164\n\t],\n\t\"./doi.json\": [\n\t\t59784,\n\t\t4209\n\t],\n\t\"./dsb.json\": [\n\t\t60634,\n\t\t1790\n\t],\n\t\"./el.json\": [\n\t\t98338,\n\t\t7879\n\t],\n\t\"./en.json\": [\n\t\t74990,\n\t\t5728\n\t],\n\t\"./en_001.json\": [\n\t\t62736,\n\t\t577\n\t],\n\t\"./en_AU.json\": [\n\t\t2597,\n\t\t9360\n\t],\n\t\"./en_CA.json\": [\n\t\t1516,\n\t\t4879\n\t],\n\t\"./en_GB.json\": [\n\t\t84830,\n\t\t50\n\t],\n\t\"./en_IN.json\": [\n\t\t71809,\n\t\t8988\n\t],\n\t\"./es.json\": [\n\t\t61148,\n\t\t6831\n\t],\n\t\"./es_419.json\": [\n\t\t25696,\n\t\t8873\n\t],\n\t\"./es_MX.json\": [\n\t\t11915,\n\t\t2699\n\t],\n\t\"./es_US.json\": [\n\t\t87826,\n\t\t3313\n\t],\n\t\"./et.json\": [\n\t\t66641,\n\t\t3276\n\t],\n\t\"./eu.json\": [\n\t\t6541,\n\t\t2992\n\t],\n\t\"./fa.json\": [\n\t\t43305,\n\t\t5521\n\t],\n\t\"./fi.json\": [\n\t\t40752,\n\t\t420\n\t],\n\t\"./fil.json\": [\n\t\t26843,\n\t\t1236\n\t],\n\t\"./fo.json\": [\n\t\t43032,\n\t\t8995\n\t],\n\t\"./fr.json\": [\n\t\t80898,\n\t\t2223\n\t],\n\t\"./fr_CA.json\": [\n\t\t54515,\n\t\t1821\n\t],\n\t\"./ga.json\": [\n\t\t66572,\n\t\t4571\n\t],\n\t\"./gd.json\": [\n\t\t9185,\n\t\t6116\n\t],\n\t\"./gl.json\": [\n\t\t23840,\n\t\t6126\n\t],\n\t\"./gu.json\": [\n\t\t85811,\n\t\t7261\n\t],\n\t\"./ha.json\": [\n\t\t91566,\n\t\t227\n\t],\n\t\"./ha_NE.json\": [\n\t\t3400,\n\t\t5304\n\t],\n\t\"./he.json\": [\n\t\t26260,\n\t\t5548\n\t],\n\t\"./hi.json\": [\n\t\t18136,\n\t\t5968\n\t],\n\t\"./hi_Latn.json\": [\n\t\t95638,\n\t\t3056\n\t],\n\t\"./hr.json\": [\n\t\t77435,\n\t\t2861\n\t],\n\t\"./hsb.json\": [\n\t\t15758,\n\t\t8015\n\t],\n\t\"./hu.json\": [\n\t\t2727,\n\t\t4902\n\t],\n\t\"./hy.json\": [\n\t\t8397,\n\t\t6344\n\t],\n\t\"./ia.json\": [\n\t\t49796,\n\t\t6936\n\t],\n\t\"./id.json\": [\n\t\t56635,\n\t\t9465\n\t],\n\t\"./ig.json\": [\n\t\t26406,\n\t\t9895\n\t],\n\t\"./is.json\": [\n\t\t51391,\n\t\t7300\n\t],\n\t\"./it.json\": [\n\t\t54879,\n\t\t8970\n\t],\n\t\"./ja.json\": [\n\t\t2971,\n\t\t1290\n\t],\n\t\"./jv.json\": [\n\t\t18644,\n\t\t2479\n\t],\n\t\"./ka.json\": [\n\t\t71255,\n\t\t6068\n\t],\n\t\"./kab.json\": [\n\t\t92892,\n\t\t9780\n\t],\n\t\"./kk.json\": [\n\t\t46419,\n\t\t2873\n\t],\n\t\"./kl.json\": [\n\t\t2227,\n\t\t2397\n\t],\n\t\"./km.json\": [\n\t\t65729,\n\t\t1404\n\t],\n\t\"./kn.json\": [\n\t\t65611,\n\t\t278\n\t],\n\t\"./ko.json\": [\n\t\t67080,\n\t\t2966\n\t],\n\t\"./kok.json\": [\n\t\t47209,\n\t\t2599\n\t],\n\t\"./ku.json\": [\n\t\t18738,\n\t\t2883\n\t],\n\t\"./ky.json\": [\n\t\t89690,\n\t\t4785\n\t],\n\t\"./lb.json\": [\n\t\t3929,\n\t\t4770\n\t],\n\t\"./lo.json\": [\n\t\t19778,\n\t\t7464\n\t],\n\t\"./lt.json\": [\n\t\t41683,\n\t\t7169\n\t],\n\t\"./lv.json\": [\n\t\t54873,\n\t\t8898\n\t],\n\t\"./mai.json\": [\n\t\t11781,\n\t\t1613\n\t],\n\t\"./mi.json\": [\n\t\t11569,\n\t\t6701\n\t],\n\t\"./mk.json\": [\n\t\t67589,\n\t\t9921\n\t],\n\t\"./ml.json\": [\n\t\t24415,\n\t\t2685\n\t],\n\t\"./mn.json\": [\n\t\t50512,\n\t\t4718\n\t],\n\t\"./mni.json\": [\n\t\t81597,\n\t\t5401\n\t],\n\t\"./mr.json\": [\n\t\t97747,\n\t\t1911\n\t],\n\t\"./ms.json\": [\n\t\t81588,\n\t\t9924\n\t],\n\t\"./mt.json\": [\n\t\t25081,\n\t\t9399\n\t],\n\t\"./my.json\": [\n\t\t8608,\n\t\t6790\n\t],\n\t\"./ne.json\": [\n\t\t8572,\n\t\t9377\n\t],\n\t\"./nl.json\": [\n\t\t52355,\n\t\t6773\n\t],\n\t\"./nn.json\": [\n\t\t52874,\n\t\t9414\n\t],\n\t\"./no.json\": [\n\t\t48005,\n\t\t9979\n\t],\n\t\"./or.json\": [\n\t\t26728,\n\t\t1012\n\t],\n\t\"./pa.json\": [\n\t\t15042,\n\t\t6946\n\t],\n\t\"./pa_Arab.json\": [\n\t\t43578,\n\t\t9994\n\t],\n\t\"./pcm.json\": [\n\t\t91163,\n\t\t5104\n\t],\n\t\"./pl.json\": [\n\t\t61335,\n\t\t1095\n\t],\n\t\"./ps.json\": [\n\t\t51828,\n\t\t678\n\t],\n\t\"./pt.json\": [\n\t\t38543,\n\t\t5041\n\t],\n\t\"./pt_PT.json\": [\n\t\t8063,\n\t\t1546\n\t],\n\t\"./qu.json\": [\n\t\t15821,\n\t\t8031\n\t],\n\t\"./rm.json\": [\n\t\t5014,\n\t\t5887\n\t],\n\t\"./ro.json\": [\n\t\t34064,\n\t\t9864\n\t],\n\t\"./ru.json\": [\n\t\t95222,\n\t\t8395\n\t],\n\t\"./rw.json\": [\n\t\t12710,\n\t\t346\n\t],\n\t\"./sa.json\": [\n\t\t69343,\n\t\t2243\n\t],\n\t\"./sat.json\": [\n\t\t51243,\n\t\t7855\n\t],\n\t\"./sc.json\": [\n\t\t1319,\n\t\t2874\n\t],\n\t\"./sd.json\": [\n\t\t67728,\n\t\t6826\n\t],\n\t\"./si.json\": [\n\t\t5044,\n\t\t4354\n\t],\n\t\"./sk.json\": [\n\t\t45626,\n\t\t2350\n\t],\n\t\"./sl.json\": [\n\t\t76091,\n\t\t1553\n\t],\n\t\"./so.json\": [\n\t\t93761,\n\t\t625\n\t],\n\t\"./sq.json\": [\n\t\t1230,\n\t\t4368\n\t],\n\t\"./sr.json\": [\n\t\t60445,\n\t\t3887\n\t],\n\t\"./sr_Cyrl_BA.json\": [\n\t\t38940,\n\t\t6060\n\t],\n\t\"./sr_Latn.json\": [\n\t\t21650,\n\t\t8681\n\t],\n\t\"./sr_Latn_BA.json\": [\n\t\t78328,\n\t\t5115\n\t],\n\t\"./su.json\": [\n\t\t54395,\n\t\t1959\n\t],\n\t\"./sv.json\": [\n\t\t3418,\n\t\t3241\n\t],\n\t\"./sw.json\": [\n\t\t11958,\n\t\t7585\n\t],\n\t\"./sw_KE.json\": [\n\t\t35001,\n\t\t3994\n\t],\n\t\"./ta.json\": [\n\t\t92930,\n\t\t7897\n\t],\n\t\"./te.json\": [\n\t\t8748,\n\t\t4786\n\t],\n\t\"./tg.json\": [\n\t\t20999,\n\t\t313\n\t],\n\t\"./th.json\": [\n\t\t23900,\n\t\t3951\n\t],\n\t\"./ti.json\": [\n\t\t368,\n\t\t3568\n\t],\n\t\"./tk.json\": [\n\t\t88770,\n\t\t1780\n\t],\n\t\"./to.json\": [\n\t\t95781,\n\t\t1584\n\t],\n\t\"./tr.json\": [\n\t\t92619,\n\t\t9978\n\t],\n\t\"./tt.json\": [\n\t\t87782,\n\t\t2569\n\t],\n\t\"./ug.json\": [\n\t\t19005,\n\t\t9757\n\t],\n\t\"./uk.json\": [\n\t\t82057,\n\t\t9871\n\t],\n\t\"./ur.json\": [\n\t\t13889,\n\t\t6797\n\t],\n\t\"./uz.json\": [\n\t\t45108,\n\t\t1056\n\t],\n\t\"./vi.json\": [\n\t\t97099,\n\t\t5224\n\t],\n\t\"./wo.json\": [\n\t\t9923,\n\t\t7303\n\t],\n\t\"./xh.json\": [\n\t\t29064,\n\t\t786\n\t],\n\t\"./yo.json\": [\n\t\t11971,\n\t\t8732\n\t],\n\t\"./yo_BJ.json\": [\n\t\t64533,\n\t\t9926\n\t],\n\t\"./yue.json\": [\n\t\t40648,\n\t\t1452\n\t],\n\t\"./yue_Hans.json\": [\n\t\t24800,\n\t\t4424\n\t],\n\t\"./zh.json\": [\n\t\t34626,\n\t\t457\n\t],\n\t\"./zh_Hant.json\": [\n\t\t82560,\n\t\t2767\n\t],\n\t\"./zh_Hant_HK.json\": [\n\t\t47677,\n\t\t1044\n\t],\n\t\"./zu.json\": [\n\t\t73784,\n\t\t9319\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 1395;\nmodule.exports = webpackAsyncContext;","/**\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 * (getters.standardEmojiList + state.instance.customEmoji)\n * data.users - optional, an array of all known users\n * updateUsersList - optional, a function to search and append to users\n *\n * Depending on data present one or both (or none) can be present, so if field\n * doesn't support user linking you can just provide only emoji.\n */\n\nexport default data => {\n const emojiCurry = suggestEmoji(data.emoji)\n const usersCurry = data.store && suggestUsers(data.store)\n return (input, nameKeywordLocalizer) => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return emojiCurry(input, nameKeywordLocalizer)\n }\n if (firstChar === '@' && usersCurry) {\n return usersCurry(input)\n }\n return []\n }\n}\n\nexport const suggestEmoji = emojis => (input, nameKeywordLocalizer) => {\n const noPrefix = input.toLowerCase().substr(1)\n return emojis\n .map(emoji => ({ ...emoji, ...nameKeywordLocalizer(emoji) }))\n .filter((emoji) => (emoji.names.concat(emoji.keywords)).filter(kw => kw.toLowerCase().match(noPrefix)).length)\n .map(k => {\n let score = 0\n\n // An exact match always wins\n score += Math.max(...k.names.map(name => name.toLowerCase() === noPrefix ? 200 : 0), 0)\n\n // Prioritize custom emoji a lot\n score += k.imageUrl ? 100 : 0\n\n // Prioritize prefix matches somewhat\n score += Math.max(...k.names.map(kw => kw.toLowerCase().startsWith(noPrefix) ? 10 : 0), 0)\n\n // Sort by length\n score -= k.displayText.length\n\n k.score = score\n return k\n })\n .sort((a, b) => {\n // Break ties alphabetically\n const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5\n\n return b.score - a.score + alphabetically\n })\n}\n\nexport const suggestUsers = ({ dispatch, state }) => {\n // Keep some persistent values in closure, most importantly for the\n // custom debounce to work. Lodash debounce does not return a promise.\n let suggestions = []\n let previousQuery = ''\n let timeout = null\n let cancelUserSearch = null\n\n const userSearch = (query) => dispatch('searchUsers', { query })\n const debounceUserSearch = (query) => {\n cancelUserSearch && cancelUserSearch()\n return new Promise((resolve, reject) => {\n timeout = setTimeout(() => {\n userSearch(query).then(resolve).catch(reject)\n }, 300)\n cancelUserSearch = () => {\n clearTimeout(timeout)\n resolve([])\n }\n })\n }\n\n return async input => {\n const noPrefix = input.toLowerCase().substr(1)\n if (previousQuery === noPrefix) return suggestions\n\n suggestions = []\n previousQuery = noPrefix\n // Fetch more and wait, don't fetch if there's the 2nd @ because\n // the backend user search can't deal with it.\n // Reference semantics make it so that we get the updated data after\n // the await.\n if (!noPrefix.includes('@')) {\n await debounceUserSearch(noPrefix)\n }\n\n const newSuggestions = state.users.users.filter(\n user =>\n user.screen_name && user.name && (\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix))\n ).slice(0, 20).sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // Matches on screen name (i.e. user@instance) makes a priority\n aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n\n // Matches on name takes second priority\n aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n\n const diff = (bScore - aScore) * 10\n\n // Then sort alphabetically\n const nameAlphabetically = a.name > b.name ? 1 : -1\n const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1\n\n return diff + nameAlphabetically + screenNameAlphabetically\n /* eslint-disable camelcase */\n }).map((user) => ({\n user,\n displayText: user.screen_name_ui,\n detailText: user.name,\n imageUrl: user.profile_image_url_original,\n replacement: '@' + user.screen_name + ' '\n }))\n /* eslint-enable camelcase */\n\n suggestions = newSuggestions || []\n return suggestions\n }\n}\n","/**\n * Extract tag name from tag opener/closer.\n *\n * @param {String} tag - tag string, i.e. '<a href=\"...\">'\n * @return {String} - tagname, i.e. \"div\"\n */\nexport const getTagName = (tag) => {\n const result = /(?:<\\/(\\w+)>|<(\\w+)\\s?.*?\\/?>)/gis.exec(tag)\n return result && (result[1] || result[2])\n}\n\n/**\n * Extract attributes from tag opener.\n *\n * @param {String} tag - tag string, i.e. '<a href=\"...\">'\n * @return {Object} - map of attributes key = attribute name, value = attribute value\n * attributes without values represented as boolean true\n */\nexport const getAttrs = (tag, filter) => {\n const innertag = tag\n .substring(1, tag.length - 1)\n .replace(new RegExp('^' + getTagName(tag)), '')\n .replace(/\\/?$/, '')\n .trim()\n const attrs = Array.from(innertag.matchAll(/([a-z]+[a-z0-9-]*)(?:=(\"[^\"]+?\"|'[^']+?'))?/gi))\n .map(([trash, key, value]) => [key, value])\n .map(([k, v]) => {\n if (!v) return [k, true]\n return [k, v.substring(1, v.length - 1)]\n })\n const defaultFilter = ([k, v]) => {\n const attrKey = k.toLowerCase()\n if (attrKey === 'style') return false\n if (attrKey === 'class') {\n return v === 'greentext' || v === 'cyantext'\n }\n return true\n }\n return Object.fromEntries(attrs.filter(filter || defaultFilter))\n}\n\n/**\n * Finds shortcodes in text\n *\n * @param {String} text - original text to find emojis in\n * @param {{ url: String, shortcode: Sring }[]} emoji - list of shortcodes to find\n * @param {Function} processor - function to call on each encountered emoji,\n * function is passed single object containing matching emoji ({ url, shortcode })\n * return value will be inserted into resulting array instead of :shortcode:\n * @return {Array} resulting array with non-emoji parts of text and whatever {processor}\n * returned for emoji\n */\nexport const processTextForEmoji = (text, emojis, processor) => {\n const buffer = []\n let textBuffer = ''\n for (let i = 0; i < text.length; i++) {\n const char = text[i]\n if (char === ':') {\n const next = text.slice(i + 1)\n let found = false\n for (const emoji of emojis) {\n if (next.slice(0, emoji.shortcode.length + 1) === (emoji.shortcode + ':')) {\n found = emoji\n break\n }\n }\n if (found) {\n buffer.push(textBuffer)\n textBuffer = ''\n buffer.push(processor(found))\n i += found.shortcode.length + 1\n } else {\n textBuffer += char\n }\n } else {\n textBuffer += char\n }\n }\n if (textBuffer) buffer.push(textBuffer)\n return buffer\n}\n","import { getTagName } from './utility.service.js'\n\n/**\n * This is a tiny purpose-built HTML parser/processor. This basically detects\n * any type of visual newline and converts entire HTML into a array structure.\n *\n * Text nodes are represented as object with single property - text - containing\n * the visual line. Intended usage is to process the array with .map() in which\n * map function returns a string and resulting array can be converted back to html\n * with a .join('').\n *\n * Generally this isn't very useful except for when you really need to either\n * modify visual lines (greentext i.e. simple quoting) or do something with\n * first/last line.\n *\n * known issue: doesn't handle CDATA so nested CDATA might not work well\n *\n * @param {Object} input - input data\n * @return {(string|{ text: string })[]} processed html in form of a list.\n */\nexport const convertHtmlToLines = (html = '') => {\n // Elements that are implicitly self-closing\n // https://developer.mozilla.org/en-US/docs/Glossary/empty_element\n const emptyElements = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ])\n // Block-level element (they make a visual line)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\n const blockElements = new Set([\n 'address', 'article', 'aside', 'blockquote', 'details', 'dialog', 'dd',\n 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main',\n 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'\n ])\n // br is very weird in a way that it's technically not block-level, it's\n // essentially converted to a \\n (or \\r\\n). There's also wbr but it doesn't\n // guarantee linebreak, only suggest it.\n const linebreakElements = new Set(['br'])\n\n const visualLineElements = new Set([\n ...blockElements.values(),\n ...linebreakElements.values()\n ])\n\n // All block-level elements that aren't empty elements, i.e. not <hr>\n const nonEmptyElements = new Set(visualLineElements)\n // Difference\n for (const elem of emptyElements) {\n nonEmptyElements.delete(elem)\n }\n\n // All elements that we are recognizing\n const allElements = new Set([\n ...nonEmptyElements.values(),\n ...emptyElements.values()\n ])\n\n const buffer = [] // Current output buffer\n const level = [] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer.trim().length > 0) {\n buffer.push({ level: [...level], text: textBuffer })\n } else {\n buffer.push(textBuffer)\n }\n textBuffer = ''\n }\n\n const handleBr = (tag) => { // handles single newlines/linebreaks/selfclosing\n flush()\n buffer.push(tag)\n }\n\n const handleOpen = (tag) => { // handles opening tags\n flush()\n buffer.push(tag)\n level.unshift(getTagName(tag))\n }\n\n const handleClose = (tag) => { // handles closing tags\n if (level[0] === getTagName(tag)) {\n flush()\n buffer.push(tag)\n level.shift()\n } else { // Broken case\n textBuffer += tag\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (allElements.has(tagName)) {\n if (linebreakElements.has(tagName)) {\n handleBr(tagFull)\n } else if (nonEmptyElements.has(tagName)) {\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleBr(tagFull)\n } else {\n handleOpen(tagFull)\n }\n } else {\n textBuffer += tagFull\n }\n } else {\n textBuffer += tagFull\n }\n } else if (char === '\\n') {\n handleBr(char)\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flush()\n\n return buffer\n}\n","<template>\n <span\n class=\"HashtagLink\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <a\n :href=\"url\"\n class=\"original\"\n target=\"_blank\"\n @click.prevent=\"onClick\"\n v-html=\"content\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </span>\n</template>\n\n<script src=\"./hashtag_link.js\" />\n\n<style lang=\"scss\" src=\"./hashtag_link.scss\" />\n","import { extractTagFromUrl } from 'src/services/matcher/matcher.service.js'\n\nconst HashtagLink = {\n name: 'HashtagLink',\n props: {\n url: {\n required: true,\n type: String\n },\n content: {\n required: true,\n type: String\n },\n tag: {\n required: false,\n type: String,\n default: ''\n }\n },\n methods: {\n onClick () {\n const tag = this.tag || extractTagFromUrl(this.url)\n if (tag) {\n const link = this.generateTagLink(tag)\n this.$router.push(link)\n } else {\n window.open(this.url, '_blank')\n }\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n }\n }\n}\n\nexport default HashtagLink\n","export const mentionMatchesUrl = (attention, url) => {\n if (url === attention.statusnet_profile_url) {\n return true\n }\n const [namepart, instancepart] = attention.screen_name.split('@')\n const matchstring = new RegExp('://' + instancepart + '/.*' + namepart + '$', 'g')\n\n return !!url.match(matchstring)\n}\n\n/**\n * Extract tag name from pleroma or mastodon url.\n * i.e https://bikeshed.party/tag/photo or https://quey.org/tags/sky\n * @param {string} url\n */\nexport const extractTagFromUrl = (url) => {\n const decoded = decodeURI(url)\n // https://git.pleroma.social/pleroma/elixir-libraries/linkify/-/blob/master/lib/linkify/parser.ex\n // https://www.pcre.org/original/doc/html/pcrepattern.html\n const regex = /tag[s]*\\/([\\p{L}\\p{N}_]*[\\p{Alphabetic}_·\\u{200c}][\\p{L}\\p{N}_·\\p{M}\\u{200c}]*)$/ug\n const result = regex.exec(decoded)\n if (!result) {\n return false\n }\n return result[1]\n}\n","import { render } from \"./hashtag_link.vue?vue&type=template&id=76a14451\"\nimport script from \"./hashtag_link.js?vue&type=script&lang=js\"\nexport * from \"./hashtag_link.js?vue&type=script&lang=js\"\n\nimport \"./hashtag_link.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { unescape, flattenDeep } from 'lodash'\nimport { getTagName, processTextForEmoji, getAttrs } from 'src/services/html_converter/utility.service.js'\nimport { convertHtmlToTree } from 'src/services/html_converter/html_tree_converter.service.js'\nimport { convertHtmlToLines } from 'src/services/html_converter/html_line_converter.service.js'\nimport StillImage from 'src/components/still-image/still-image.vue'\nimport MentionsLine, { MENTIONS_LIMIT } from 'src/components/mentions_line/mentions_line.vue'\nimport HashtagLink from 'src/components/hashtag_link/hashtag_link.vue'\n\nimport './rich_content.scss'\n\nconst MAYBE_LINE_BREAKING_ELEMENTS = [\n 'blockquote',\n 'br',\n 'hr',\n 'ul',\n 'ol',\n 'li',\n 'p',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5'\n]\n\n/**\n * RichContent, The Über-powered component for rendering Post HTML.\n *\n * This takes post HTML and does multiple things to it:\n * - Groups all mentions into <MentionsLine>, this affects all mentions regardles\n * of where they are (beginning/middle/end), even single mentions are converted\n * to a <MentionsLine> containing single <MentionLink>.\n * - Replaces emoji shortcodes with <StillImage>'d images.\n *\n * There are two problems with this component's architecture:\n * 1. Parsing HTML and rendering are inseparable. Attempts to separate the two\n * proven to be a massive overcomplication due to amount of things done here.\n * 2. We need to output both render and some extra data, which seems to be imp-\n * possible in vue. Current solution is to emit 'parseReady' event when parsing\n * is done within render() function.\n *\n * Apart from that one small hiccup with emit in render this _should_ be vue3-ready\n */\nexport default {\n name: 'RichContent',\n components: {\n MentionsLine,\n HashtagLink\n },\n props: {\n // Original html content\n html: {\n required: true,\n type: String\n },\n attentions: {\n required: false,\n default: () => []\n },\n // Emoji object, as in status.emojis, note the \"s\" at the end...\n emoji: {\n required: true,\n type: Array\n },\n // Whether to handle links or not (posts: yes, everything else: no)\n handleLinks: {\n required: false,\n type: Boolean,\n default: false\n },\n // Meme arrows\n greentext: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n // NEVER EVER TOUCH DATA INSIDE RENDER\n render () {\n // Pre-process HTML\n const { newHtml: html } = preProcessPerLine(this.html, this.greentext)\n let currentMentions = null // Current chain of mentions, we group all mentions together\n // This is used to recover spacing removed when parsing mentions\n let lastSpacing = ''\n\n const lastTags = [] // Tags that appear at the end of post body\n const writtenMentions = [] // All mentions that appear in post body\n const invisibleMentions = [] // All mentions that go beyond the limiter (see MentionsLine)\n // to collapse too many mentions in a row\n const writtenTags = [] // All tags that appear in post body\n // unique index for vue \"tag\" property\n let mentionIndex = 0\n let tagsIndex = 0\n\n const renderImage = (tag) => {\n return <StillImage\n {...getAttrs(tag)}\n class=\"img\"\n />\n }\n\n const renderHashtag = (attrs, children, encounteredTextReverse) => {\n const { index, ...linkData } = getLinkData(attrs, children, tagsIndex++)\n writtenTags.push(linkData)\n if (!encounteredTextReverse) {\n lastTags.push(linkData)\n }\n const { url, tag, content } = linkData\n return <HashtagLink url={url} tag={tag} content={content}/>\n }\n\n const renderMention = (attrs, children) => {\n const linkData = getLinkData(attrs, children, mentionIndex++)\n linkData.notifying = this.attentions.some(a => a.statusnet_profile_url === linkData.url)\n writtenMentions.push(linkData)\n if (currentMentions === null) {\n currentMentions = []\n }\n currentMentions.push(linkData)\n if (currentMentions.length > MENTIONS_LIMIT) {\n invisibleMentions.push(linkData)\n }\n if (currentMentions.length === 1) {\n return <MentionsLine mentions={ currentMentions } />\n } else {\n return ''\n }\n }\n\n // Processor to use with html_tree_converter\n const processItem = (item, index, array, what) => {\n // Handle text nodes - just add emoji\n if (typeof item === 'string') {\n const emptyText = item.trim() === ''\n if (item.includes('\\n')) {\n currentMentions = null\n }\n if (emptyText) {\n // don't include spaces when processing mentions - we'll include them\n // in MentionsLine\n lastSpacing = item\n // Don't remove last space in a container (fixes poast mentions)\n return (index !== array.length - 1) && (currentMentions !== null) ? item.trim() : item\n }\n\n currentMentions = null\n if (item.includes(':')) {\n item = ['', processTextForEmoji(\n item,\n this.emoji,\n ({ shortcode, url }) => {\n return <StillImage\n class=\"emoji img\"\n src={url}\n title={`:${shortcode}:`}\n alt={`:${shortcode}:`}\n />\n }\n )]\n }\n return item\n }\n\n // Handle tag nodes\n if (Array.isArray(item)) {\n const [opener, children, closer] = item\n let Tag = getTagName(opener)\n if (Tag.toLowerCase() === 'script') Tag = 'js-exploit'\n if (Tag.toLowerCase() === 'style') Tag = 'css-exploit'\n const fullAttrs = getAttrs(opener, () => true)\n const attrs = getAttrs(opener)\n const previouslyMentions = currentMentions !== null\n /* During grouping of mentions we trim all the empty text elements\n * This padding is added to recover last space removed in case\n * we have a tag right next to mentions\n */\n const mentionsLinePadding =\n // Padding is only needed if we just finished parsing mentions\n previouslyMentions &&\n // Don't add padding if content is string and has padding already\n !(children && typeof children[0] === 'string' && children[0].match(/^\\s/))\n ? lastSpacing\n : ''\n if (MAYBE_LINE_BREAKING_ELEMENTS.includes(Tag)) {\n // all the elements that can cause a line change\n currentMentions = null\n } else if (Tag === 'img') { // replace images with StillImage\n return ['', [mentionsLinePadding, renderImage(opener)], '']\n } else if (Tag === 'a' && this.handleLinks) { // replace mentions with MentionLink\n if (fullAttrs.class && fullAttrs.class.includes('mention')) {\n // Handling mentions here\n return renderMention(attrs, children)\n } else {\n currentMentions = null\n }\n } else if (Tag === 'span') {\n if (this.handleLinks && fullAttrs.class && fullAttrs.class.includes('h-card')) {\n return ['', children.map(processItem), '']\n }\n }\n\n if (children !== undefined) {\n return [\n '',\n [\n mentionsLinePadding,\n [opener, children.map(processItem), closer]\n ],\n ''\n ]\n } else {\n return ['', [mentionsLinePadding, item], '']\n }\n }\n }\n\n // Processor for back direction (for finding \"last\" stuff, just easier this way)\n let encounteredTextReverse = false\n const processItemReverse = (item, index, array, what) => {\n // Handle text nodes - just add emoji\n if (typeof item === 'string') {\n const emptyText = item.trim() === ''\n if (emptyText) return item\n if (!encounteredTextReverse) encounteredTextReverse = true\n return unescape(item)\n } else if (Array.isArray(item)) {\n // Handle tag nodes\n const [opener, children] = item\n const Tag = opener === '' ? '' : getTagName(opener)\n switch (Tag) {\n case 'a': { // replace mentions with MentionLink\n if (!this.handleLinks) break\n const fullAttrs = getAttrs(opener, () => true)\n const attrs = getAttrs(opener, () => true)\n // should only be this\n if (\n (fullAttrs.class && fullAttrs.class.includes('hashtag')) || // Pleroma style\n (fullAttrs.rel === 'tag') // Mastodon style\n ) {\n return renderHashtag(attrs, children, encounteredTextReverse)\n } else {\n attrs.target = '_blank'\n const newChildren = [...children].reverse().map(processItemReverse).reverse()\n\n return <a {...attrs}>\n { newChildren }\n </a>\n }\n }\n case '':\n return [...children].reverse().map(processItemReverse).reverse()\n }\n\n // Render tag as is\n if (children !== undefined) {\n const newChildren = Array.isArray(children)\n ? [...children].reverse().map(processItemReverse).reverse()\n : children\n return <Tag {...getAttrs(opener)}>\n { newChildren }\n </Tag>\n } else {\n return <Tag/>\n }\n }\n return item\n }\n\n const pass1 = convertHtmlToTree(html).map(processItem)\n const pass2 = [...pass1].reverse().map(processItemReverse).reverse()\n // DO NOT USE SLOTS they cause a re-render feedback loop here.\n // slots updated -> rerender -> emit -> update up the tree -> rerender -> ...\n // at least until vue3?\n const result = <span class=\"RichContent\">\n { pass2 }\n </span>\n\n const event = {\n lastTags,\n writtenMentions,\n writtenTags,\n invisibleMentions\n }\n\n // DO NOT MOVE TO UPDATE. BAD IDEA.\n this.$emit('parseReady', event)\n\n return result\n }\n}\n\nconst getLinkData = (attrs, children, index) => {\n const stripTags = (item) => {\n if (typeof item === 'string') {\n return item\n } else {\n return item[1].map(stripTags).join('')\n }\n }\n const textContent = children.map(stripTags).join('')\n return {\n index,\n url: attrs.href,\n tag: attrs['data-tag'],\n content: flattenDeep(children).join(''),\n textContent\n }\n}\n\n/** Pre-processing HTML\n *\n * Currently this does one thing:\n * - add green/cyantexting\n *\n * @param {String} html - raw HTML to process\n * @param {Boolean} greentext - whether to enable greentexting or not\n */\nexport const preProcessPerLine = (html, greentext) => {\n const greentextHandle = new Set(['p', 'div'])\n\n const lines = convertHtmlToLines(html)\n const newHtml = lines.reverse().map((item, index, array) => {\n if (!item.text) return item\n const string = item.text\n\n // Greentext stuff\n if (\n // Only if greentext is engaged\n greentext &&\n // Only handle p's and divs. Don't want to affect blockquotes, code etc\n item.level.every(l => greentextHandle.has(l)) &&\n // Only if line begins with '>' or '<'\n (string.includes('&gt;') || string.includes('&lt;'))\n ) {\n const cleanedString = string.replace(/<[^>]+?>/gi, '') // remove all tags\n .replace(/@\\w+/gi, '') // remove mentions (even failed ones)\n .trim()\n if (cleanedString.startsWith('&gt;')) {\n return `<span class='greentext'>${string}</span>`\n } else if (cleanedString.startsWith('&lt;')) {\n return `<span class='cyantext'>${string}</span>`\n }\n }\n\n return string\n }).reverse().join('')\n\n return { newHtml }\n}\n","import { getTagName } from './utility.service.js'\nimport { unescape } from 'lodash'\n\n/**\n * This is a not-so-tiny purpose-built HTML parser/processor. This parses html\n * and converts it into a tree structure representing tag openers/closers and\n * children.\n *\n * Structure follows this pattern: [opener, [...children], closer] except root\n * node which is just [...children]. Text nodes can only be within children and\n * are represented as strings.\n *\n * Intended use is to convert HTML structure and then recursively iterate over it\n * most likely using a map. Very useful for dynamically rendering html replacing\n * tags with JSX elements in a render function.\n *\n * known issue: doesn't handle CDATA so CDATA might not work well\n * known issue: doesn't handle HTML comments\n *\n * @param {Object} input - input data\n * @return {string} processed html\n */\nexport const convertHtmlToTree = (html = '') => {\n // Elements that are implicitly self-closing\n // https://developer.mozilla.org/en-US/docs/Glossary/empty_element\n const emptyElements = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ])\n // TODO For future - also parse HTML5 multi-source components?\n\n const buffer = [] // Current output buffer\n const levels = [['', buffer]] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n const getCurrentBuffer = () => {\n return levels[levels.length - 1][1]\n }\n\n const flushText = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer === '') return\n getCurrentBuffer().push(textBuffer)\n textBuffer = ''\n }\n\n const handleSelfClosing = (tag) => {\n getCurrentBuffer().push([tag])\n }\n\n const handleOpen = (tag) => {\n const curBuf = getCurrentBuffer()\n const newLevel = [unescape(tag), []]\n levels.push(newLevel)\n curBuf.push(newLevel)\n }\n\n const handleClose = (tag) => {\n const currentTag = levels[levels.length - 1]\n if (getTagName(levels[levels.length - 1][0]) === getTagName(tag)) {\n currentTag.push(tag)\n levels.pop()\n } else {\n getCurrentBuffer().push(tag)\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n flushText()\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (emptyElements.has(tagName) || tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleSelfClosing(tagFull)\n } else {\n handleOpen(tagFull)\n }\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flushText()\n return buffer\n}\n","// eslint-disable-next-line no-unused\nimport { h, Fragment } from 'vue'\nimport { mapState } from 'vuex'\nimport { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'\n\nimport './tab_switcher.scss'\n\nconst findFirstUsable = (slots) => slots.findIndex(_ => _.props)\n\nexport default {\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 bodyScrollLock: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n active: findFirstUsable(this.slots())\n }\n },\n computed: {\n activeIndex () {\n // In case of controlled component\n if (this.activeTab) {\n return this.slots().findIndex(slot => slot && slot.props && this.activeTab === slot.props.key)\n } else {\n return this.active\n }\n },\n isActive () {\n return tabName => {\n const isWanted = slot => slot.props && slot.props['data-tab-name'] === tabName\n return this.$slots.default().findIndex(isWanted) === this.activeIndex\n }\n }\n },\n beforeUpdate () {\n const currentSlot = this.slots()[this.active]\n if (!currentSlot.props) {\n this.active = findFirstUsable(this.slots())\n }\n },\n methods: {\n clickTab (index) {\n return (e) => {\n e.preventDefault()\n this.setTab(index)\n }\n },\n // DO NOT put it to computed, it doesn't work (caching?)\n slots () {\n if (this.$slots.default()[0].type === Fragment) {\n return this.$slots.default()[0].children\n }\n return this.$slots.default()\n },\n setTab (index) {\n if (typeof this.onSwitch === 'function') {\n this.onSwitch.call(null, this.slots()[index].key)\n }\n this.active = index\n if (this.scrollableTabs) {\n this.$refs.contents.scrollTop = 0\n }\n }\n },\n render () {\n const tabs = this.slots()\n .map((slot, index) => {\n const props = slot.props\n if (!props) return\n const classesTab = ['tab', 'button-default']\n const classesWrapper = ['tab-wrapper']\n if (this.activeIndex === index) {\n classesTab.push('active')\n classesWrapper.push('active')\n }\n if (props.image) {\n return (\n <div class={classesWrapper.join(' ')}>\n <button\n disabled={props.disabled}\n onClick={this.clickTab(index)}\n class={classesTab.join(' ')}\n type=\"button\"\n role=\"tab\"\n >\n <img src={props.image} title={props['image-tooltip']}/>\n {props.label ? '' : props.label}\n </button>\n </div>\n )\n }\n return (\n <div class={classesWrapper.join(' ')}>\n <button\n disabled={props.disabled}\n onClick={this.clickTab(index)}\n class={classesTab.join(' ')}\n type=\"button\"\n role=\"tab\"\n >\n {!props.icon ? '' : (<FAIcon class=\"tab-icon\" size=\"2x\" fixed-width icon={props.icon}/>)}\n <span class=\"text\">\n {props.label}\n </span>\n </button>\n </div>\n )\n })\n\n const contents = this.slots().map((slot, index) => {\n const props = slot.props\n if (!props) return\n const active = this.activeIndex === index\n const classes = [ active ? 'active' : 'hidden' ]\n if (props.fullHeight) {\n classes.push('full-height')\n }\n const renderSlot = (!this.renderOnlyFocused || active)\n ? slot\n : ''\n\n return (\n <div class={classes}>\n {\n this.sideTabBar\n ? <h1 class=\"mobile-label\">{props.label}</h1>\n : ''\n }\n {renderSlot}\n </div>\n )\n })\n\n return (\n <div class={'tab-switcher ' + (this.sideTabBar ? 'side-tabs' : 'top-tabs')}>\n <div\n class=\"tabs\"\n role=\"tablist\"\n >\n {tabs}\n </div>\n <div\n ref=\"contents\"\n role=\"tabpanel\"\n class={'contents' + (this.scrollableTabs ? ' scrollable-tabs' : '')}\n v-body-scroll-lock={this.bodyScrollLock}\n >\n {contents}\n </div>\n </div>\n )\n }\n}\n","// eslint-disable-next-line no-unused\nimport { h } from 'vue'\nimport isEmpty from 'lodash/isEmpty'\nimport { getComponentProps } from '../../services/component_utils/component_utils'\nimport './with_load_more.scss'\n\nimport { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst withLoadMore = ({\n fetch, // function to fetch entries and return a promise\n select, // function to select data from store\n unmounted, // function called at \"destroyed\" lifecycle\n childPropName = 'entries', // name of the prop to be passed into the wrapped component\n additionalPropNames = [] // additional prop name list of the wrapper component\n}) => (WrappedComponent) => {\n const originalProps = Object.keys(getComponentProps(WrappedComponent))\n const props = originalProps.filter(v => v !== childPropName).concat(additionalPropNames)\n\n return {\n props,\n data () {\n return {\n loading: false,\n bottomedOut: false,\n error: false,\n entries: []\n }\n },\n created () {\n window.addEventListener('scroll', this.scrollLoad)\n if (this.entries.length === 0) {\n this.fetchEntries()\n }\n },\n unmounted () {\n window.removeEventListener('scroll', this.scrollLoad)\n unmounted && unmounted(this.$props, this.$store)\n },\n methods: {\n // Entries is not a computed because computed can't track the dynamic\n // selector for changes and won't trigger after fetch.\n updateEntries () {\n this.entries = select(this.$props, this.$store) || []\n },\n fetchEntries () {\n if (!this.loading) {\n this.loading = true\n this.error = false\n fetch(this.$props, this.$store)\n .then((newEntries) => {\n this.loading = false\n this.bottomedOut = isEmpty(newEntries)\n })\n .catch(() => {\n this.loading = false\n this.error = true\n })\n .finally(() => {\n this.updateEntries()\n })\n }\n },\n scrollLoad (e) {\n const bodyBRect = document.body.getBoundingClientRect()\n const height = Math.max(bodyBRect.height, -(bodyBRect.y))\n if (this.loading === false &&\n this.bottomedOut === false &&\n this.$el.offsetHeight > 0 &&\n (window.innerHeight + window.pageYOffset) >= (height - 750)\n ) {\n this.fetchEntries()\n }\n }\n },\n render () {\n const props = {\n ...this.$props,\n [childPropName]: this.entries\n }\n const children = this.$slots\n return (\n <div class=\"with-load-more\">\n <WrappedComponent {...props}>\n {children}\n </WrappedComponent>\n <div class=\"with-load-more-footer\">\n {this.error &&\n <button onClick={this.fetchEntries} class=\"button-unstyled -link -fullwidth alert error\">\n {this.$t('general.generic_error')}\n </button>\n }\n {!this.error && this.loading && <FAIcon spin icon=\"circle-notch\"/>}\n {!this.error && !this.loading && !this.bottomedOut && <a onClick={this.fetchEntries} role=\"button\" tabindex=\"0\">{this.$t('general.more')}</a>}\n </div>\n </div>\n )\n }\n }\n}\n\nexport default withLoadMore\n","const languages = [\n 'ar',\n 'ca',\n 'cs',\n 'de',\n 'eo',\n 'en',\n 'es',\n 'et',\n 'eu',\n 'fi',\n 'fr',\n 'ga',\n 'he',\n 'hu',\n 'it',\n 'ja',\n 'ja_easy',\n 'ko',\n 'nan-TW',\n 'nb',\n 'nl',\n 'oc',\n 'pl',\n 'pt',\n 'ro',\n 'ru',\n 'sk',\n 'te',\n 'uk',\n 'zh',\n 'zh_Hant'\n]\n\nconst specialJsonName = {\n ja: 'ja_pedantic'\n}\n\nconst langCodeToJsonName = (code) => specialJsonName[code] || code\n\nconst langCodeToCldrName = (code) => code\n\nconst ensureFinalFallback = codes => {\n const codeList = Array.isArray(codes) ? codes : [codes]\n return codeList.includes('en') ? codeList : codeList.concat(['en'])\n}\n\nmodule.exports = {\n languages,\n langCodeToJsonName,\n langCodeToCldrName,\n ensureFinalFallback\n}\n","// When contributing, please sort JSON before committing so it would be easier to see what's missing and what's being added compared to English and other languages. It's not obligatory, but just an advice.\n// To sort json use jq https://stedolan.github.io/jq and invoke it like `jq -S . xx.json > xx.sorted.json`, AFAIK, there's no inplace edit option like in sed\n// Also, when adding a new language to \"messages\" variable, please do it alphabetically by language code so that users can search or check their custom language easily.\n\n// For anyone contributing to old huge messages.js and in need to quickly convert it to JSON\n// sed command for converting currently formatted JS to JSON:\n// sed -i -e \"s/'//gm\" -e 's/\"/\\\\\"/gm' -re 's/^( +)(.+?): ((.+?))?(,?)(\\{?)$/\\1\"\\2\": \"\\4\"/gm' -e 's/\\\"\\{\\\"/{/g' -e 's/,\"$/\",/g' file.json\n// There's only problem that apostrophe character ' gets replaced by \\\\ so you have to fix it manually, sorry.\n\nimport { isEqual } from 'lodash'\nimport { languages, langCodeToJsonName } from './languages.js'\n\nconst ULTIMATE_FALLBACK_LOCALE = 'en'\n\nconst hasLanguageFile = (code) => languages.includes(code)\n\nconst loadLanguageFile = (code) => {\n return import(\n /* webpackInclude: /\\.json$/ */\n /* webpackChunkName: \"i18n/[request]\" */\n `./${langCodeToJsonName(code)}.json`\n )\n}\n\nconst messages = {\n languages,\n default: {\n en: require('./en.json').default\n },\n setLanguage: async (i18n, language) => {\n const languages = (Array.isArray(language) ? language : [language]).filter(k => k)\n\n if (!languages.includes(ULTIMATE_FALLBACK_LOCALE)) {\n languages.push(ULTIMATE_FALLBACK_LOCALE)\n }\n const [first, ...rest] = languages\n\n if (first === i18n.locale && isEqual(rest, i18n.fallbackLocale)) {\n return\n }\n\n for (const lang of languages) {\n if (hasLanguageFile(lang)) {\n const messages = await loadLanguageFile(lang)\n i18n.setLocaleMessage(lang, messages.default)\n }\n }\n\n i18n.fallbackLocale = rest\n i18n.locale = first\n }\n}\n\nexport default messages\n","import EventTargetPolyfill from '@ungap/event-target'\n\ntry {\n /* eslint-disable no-new */\n new EventTarget()\n /* eslint-enable no-new */\n} catch (e) {\n window.EventTarget = EventTargetPolyfill\n}\n","const defaultState = {\n settingsModalState: 'hidden',\n settingsModalLoadedUser: false,\n settingsModalLoadedAdmin: false,\n settingsModalTargetTab: null,\n settingsModalMode: 'user',\n settings: {\n currentSaveStateNotice: null,\n noticeClearTimeout: null,\n notificationPermission: null\n },\n browserSupport: {\n cssFilter: window.CSS && window.CSS.supports && (\n window.CSS.supports('filter', 'drop-shadow(0 0)') ||\n window.CSS.supports('-webkit-filter', 'drop-shadow(0 0)')\n )\n },\n layoutType: 'normal',\n globalNotices: [],\n layoutHeight: 0,\n lastTimeline: null\n}\n\nconst interfaceMod = {\n state: defaultState,\n mutations: {\n settingsSaved (state, { success, error }) {\n if (success) {\n if (state.noticeClearTimeout) {\n clearTimeout(state.noticeClearTimeout)\n }\n state.settings.currentSaveStateNotice = { error: false, data: success }\n state.settings.noticeClearTimeout = setTimeout(() => delete state.settings.currentSaveStateNotice, 2000)\n } else {\n state.settings.currentSaveStateNotice = { error: true, errorData: error }\n }\n },\n setNotificationPermission (state, permission) {\n state.notificationPermission = permission\n },\n setLayoutType (state, value) {\n state.layoutType = value\n },\n closeSettingsModal (state) {\n state.settingsModalState = 'hidden'\n },\n togglePeekSettingsModal (state) {\n switch (state.settingsModalState) {\n case 'minimized':\n state.settingsModalState = 'visible'\n return\n case 'visible':\n state.settingsModalState = 'minimized'\n return\n default:\n throw new Error('Illegal minimization state of settings modal')\n }\n },\n openSettingsModal (state, value) {\n state.settingsModalMode = value\n state.settingsModalState = 'visible'\n if (value === 'user') {\n if (!state.settingsModalLoadedUser) {\n state.settingsModalLoadedUser = true\n }\n } else if (value === 'admin') {\n if (!state.settingsModalLoadedAdmin) {\n state.settingsModalLoadedAdmin = true\n }\n }\n },\n setSettingsModalTargetTab (state, value) {\n state.settingsModalTargetTab = value\n },\n pushGlobalNotice (state, notice) {\n state.globalNotices.push(notice)\n },\n removeGlobalNotice (state, notice) {\n state.globalNotices = state.globalNotices.filter(n => n !== notice)\n },\n setLayoutHeight (state, value) {\n state.layoutHeight = value\n },\n setLayoutWidth (state, value) {\n state.layoutWidth = value\n },\n setLastTimeline (state, value) {\n state.lastTimeline = value\n }\n },\n actions: {\n setPageTitle ({ rootState }, option = '') {\n document.title = `${option} ${rootState.instance.name}`\n },\n settingsSaved ({ commit, dispatch }, { success, error }) {\n commit('settingsSaved', { success, error })\n },\n setNotificationPermission ({ commit }, permission) {\n commit('setNotificationPermission', permission)\n },\n closeSettingsModal ({ commit }) {\n commit('closeSettingsModal')\n },\n openSettingsModal ({ commit }, value = 'user') {\n commit('openSettingsModal', value)\n },\n togglePeekSettingsModal ({ commit }) {\n commit('togglePeekSettingsModal')\n },\n clearSettingsModalTargetTab ({ commit }) {\n commit('setSettingsModalTargetTab', null)\n },\n openSettingsModalTab ({ commit }, value) {\n commit('setSettingsModalTargetTab', value)\n commit('openSettingsModal', 'user')\n },\n pushGlobalNotice (\n { commit, dispatch, state },\n {\n messageKey,\n messageArgs = {},\n level = 'error',\n timeout = 0\n }) {\n const notice = {\n messageKey,\n messageArgs,\n level\n }\n commit('pushGlobalNotice', notice)\n // Adding a new element to array wraps it in a Proxy, which breaks the comparison\n // TODO: Generate UUID or something instead or relying on !== operator?\n const newNotice = state.globalNotices[state.globalNotices.length - 1]\n if (timeout) {\n setTimeout(() => dispatch('removeGlobalNotice', newNotice), timeout)\n }\n return newNotice\n },\n removeGlobalNotice ({ commit }, notice) {\n commit('removeGlobalNotice', notice)\n },\n setLayoutHeight ({ commit }, value) {\n commit('setLayoutHeight', value)\n },\n // value is optional, assuming it was cached prior\n setLayoutWidth ({ commit, state, rootGetters, rootState }, value) {\n let width = value\n if (value !== undefined) {\n commit('setLayoutWidth', value)\n } else {\n width = state.layoutWidth\n }\n const mobileLayout = width <= 800\n const normalOrMobile = mobileLayout ? 'mobile' : 'normal'\n const { thirdColumnMode } = rootGetters.mergedConfig\n if (thirdColumnMode === 'none' || !rootState.users.currentUser) {\n commit('setLayoutType', normalOrMobile)\n } else {\n const wideLayout = width >= 1300\n commit('setLayoutType', wideLayout ? 'wide' : normalOrMobile)\n }\n },\n setLastTimeline ({ commit }, value) {\n commit('setLastTimeline', value)\n }\n }\n}\n\nexport default interfaceMod\n","import { getPreset, applyTheme } from '../services/style_setter/style_setter.js'\nimport { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'\nimport apiService from '../services/api/api.service.js'\nimport { instanceDefaultProperties } from './config.js'\nimport { langCodeToCldrName, ensureFinalFallback } from '../i18n/languages.js'\n\nconst SORTED_EMOJI_GROUP_IDS = [\n 'smileys-and-emotion',\n 'people-and-body',\n 'animals-and-nature',\n 'food-and-drink',\n 'travel-and-places',\n 'activities',\n 'objects',\n 'symbols',\n 'flags'\n]\n\nconst REGIONAL_INDICATORS = (() => {\n const start = 0x1F1E6\n const end = 0x1F1FF\n const A = 'A'.codePointAt(0)\n const res = new Array(end - start + 1)\n for (let i = start; i <= end; ++i) {\n const letter = String.fromCodePoint(A + i - start)\n res[i - start] = {\n replacement: String.fromCodePoint(i),\n imageUrl: false,\n displayText: 'regional_indicator_' + letter,\n displayTextI18n: {\n key: 'emoji.regional_indicator',\n args: { letter }\n }\n }\n }\n return res\n})()\n\nconst REMOTE_INTERACTION_URL = '/main/ostatus'\n\nconst defaultState = {\n // Stuff from apiConfig\n name: 'Pleroma FE',\n registrationOpen: true,\n server: 'http://localhost:4040/',\n textlimit: 5000,\n themeData: undefined,\n vapidPublicKey: undefined,\n\n // Stuff from static/config.json\n alwaysShowSubjectInput: true,\n defaultAvatar: '/images/avi.png',\n defaultBanner: '/images/banner.png',\n background: '/static/aurora_borealis.jpg',\n collapseMessageWithSubject: false,\n greentext: false,\n useAtIcon: false,\n mentionLinkDisplay: 'short',\n mentionLinkShowTooltip: true,\n mentionLinkShowAvatar: false,\n mentionLinkFadeDomain: true,\n mentionLinkShowYous: false,\n mentionLinkBoldenYou: true,\n hideFilteredStatuses: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: false,\n hideMutedThreads: true,\n hideWordFilteredPosts: false,\n hidePostStats: false,\n hideBotIndication: false,\n hideSitename: false,\n hideUserStats: false,\n muteBotStatuses: false,\n modalOnRepeat: false,\n modalOnUnfollow: false,\n modalOnBlock: true,\n modalOnMute: false,\n modalOnDelete: true,\n modalOnLogout: true,\n modalOnApproveFollow: false,\n modalOnDenyFollow: false,\n modalOnRemoveUserFromFollowers: false,\n loginMethod: 'password',\n logo: '/static/logo.svg',\n logoMargin: '.2em',\n logoMask: true,\n logoLeft: false,\n disableUpdateNotification: false,\n minimalScopesMode: false,\n nsfwCensorImage: undefined,\n postContentType: 'text/plain',\n redirectRootLogin: '/main/friends',\n redirectRootNoLogin: '/main/all',\n scopeCopy: true,\n showFeaturesPanel: true,\n showInstanceSpecificPanel: false,\n sidebarRight: false,\n subjectLineBehavior: 'email',\n theme: 'pleroma-dark',\n virtualScrolling: true,\n sensitiveByDefault: false,\n conversationDisplay: 'linear',\n conversationTreeAdvanced: false,\n conversationOtherRepliesButton: 'below',\n conversationTreeFadeAncestors: false,\n maxDepthInThread: 6,\n autocompleteSelect: false,\n\n // Nasty stuff\n customEmoji: [],\n customEmojiFetched: false,\n emoji: {},\n emojiFetched: false,\n unicodeEmojiAnnotations: {},\n pleromaBackend: true,\n postFormats: [],\n restrictedNicknames: [],\n safeDM: true,\n knownDomains: [],\n birthdayRequired: false,\n birthdayMinAge: 0,\n\n // Feature-set, apparently, not everything here is reported...\n shoutAvailable: false,\n pleromaChatMessagesAvailable: false,\n pleromaCustomEmojiReactionsAvailable: false,\n gopherAvailable: false,\n mediaProxyAvailable: false,\n suggestionsEnabled: false,\n suggestionsWeb: '',\n quotingAvailable: false,\n\n // Html stuff\n instanceSpecificPanelContent: '',\n tos: '',\n\n // Version Information\n backendVersion: '',\n frontendVersion: '',\n\n pollsAvailable: false,\n pollLimits: {\n max_options: 4,\n max_option_chars: 255,\n min_expiration: 60,\n max_expiration: 60 * 60 * 24\n }\n}\n\nconst loadAnnotations = (lang) => {\n return import(\n /* webpackChunkName: \"emoji-annotations/[request]\" */\n `@kazvmoe-infra/unicode-emoji-json/annotations/${langCodeToCldrName(lang)}.json`\n )\n .then(k => k.default)\n}\n\nconst injectAnnotations = (emoji, annotations) => {\n const availableLangs = Object.keys(annotations)\n\n return {\n ...emoji,\n annotations: availableLangs.reduce((acc, cur) => {\n acc[cur] = annotations[cur][emoji.replacement]\n return acc\n }, {})\n }\n}\n\nconst injectRegionalIndicators = groups => {\n groups.symbols.push(...REGIONAL_INDICATORS)\n return groups\n}\n\nconst instance = {\n state: defaultState,\n mutations: {\n setInstanceOption (state, { name, value }) {\n if (typeof value !== 'undefined') {\n state[name] = value\n }\n },\n setKnownDomains (state, domains) {\n state.knownDomains = domains\n },\n setUnicodeEmojiAnnotations (state, { lang, annotations }) {\n state.unicodeEmojiAnnotations[lang] = annotations\n }\n },\n getters: {\n instanceDefaultConfig (state) {\n return instanceDefaultProperties\n .map(key => [key, state[key]])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n },\n groupedCustomEmojis (state) {\n const packsOf = emoji => {\n const packs = emoji.tags\n .filter(k => k.startsWith('pack:'))\n .map(k => {\n const packName = k.slice(5) // remove 'pack:' prefix\n return {\n id: `custom-${packName}`,\n text: packName\n }\n })\n\n if (!packs.length) {\n return [{\n id: 'unpacked'\n }]\n } else {\n return packs\n }\n }\n\n return state.customEmoji\n .reduce((res, emoji) => {\n packsOf(emoji).forEach(({ id: packId, text: packName }) => {\n if (!res[packId]) {\n res[packId] = ({\n id: packId,\n text: packName,\n image: emoji.imageUrl,\n emojis: []\n })\n }\n res[packId].emojis.push(emoji)\n })\n return res\n }, {})\n },\n standardEmojiList (state) {\n return SORTED_EMOJI_GROUP_IDS\n .map(groupId => (state.emoji[groupId] || []).map(k => injectAnnotations(k, state.unicodeEmojiAnnotations)))\n .reduce((a, b) => a.concat(b), [])\n },\n standardEmojiGroupList (state) {\n return SORTED_EMOJI_GROUP_IDS.map(groupId => ({\n id: groupId,\n emojis: (state.emoji[groupId] || []).map(k => injectAnnotations(k, state.unicodeEmojiAnnotations))\n }))\n },\n instanceDomain (state) {\n return new URL(state.server).hostname\n },\n remoteInteractionLink (state) {\n const server = state.server.endsWith('/') ? state.server.slice(0, -1) : state.server\n const link = server + REMOTE_INTERACTION_URL\n\n return ({ statusId, nickname }) => {\n if (statusId) {\n return `${link}?status_id=${statusId}`\n } else {\n return `${link}?nickname=${nickname}`\n }\n }\n }\n },\n actions: {\n setInstanceOption ({ commit, dispatch }, { name, value }) {\n commit('setInstanceOption', { name, value })\n switch (name) {\n case 'name':\n dispatch('setPageTitle')\n break\n case 'shoutAvailable':\n if (value) {\n dispatch('initializeSocket')\n }\n break\n case 'theme':\n dispatch('setTheme', value)\n break\n }\n },\n async getStaticEmoji ({ commit }) {\n try {\n const values = (await import(/* webpackChunkName: 'emoji' */ '../../static/emoji.json')).default\n\n const emoji = Object.keys(values).reduce((res, groupId) => {\n res[groupId] = values[groupId].map(e => ({\n displayText: e.slug,\n imageUrl: false,\n replacement: e.emoji\n }))\n return res\n }, {})\n commit('setInstanceOption', { name: 'emoji', value: injectRegionalIndicators(emoji) })\n } catch (e) {\n console.warn(\"Can't load static emoji\")\n console.warn(e)\n }\n },\n\n loadUnicodeEmojiData ({ commit, state }, language) {\n const langList = ensureFinalFallback(language)\n\n return Promise.all(\n langList\n .map(async lang => {\n if (!state.unicodeEmojiAnnotations[lang]) {\n try {\n const annotations = await loadAnnotations(lang)\n commit('setUnicodeEmojiAnnotations', { lang, annotations })\n } catch (e) {\n console.warn(`Error loading unicode emoji annotations for ${lang}: `, e)\n // ignore\n }\n }\n }))\n },\n\n async getCustomEmoji ({ commit, state }) {\n try {\n const res = await window.fetch('/api/pleroma/emoji.json')\n if (res.ok) {\n const result = await res.json()\n const values = Array.isArray(result) ? Object.assign({}, ...result) : result\n const caseInsensitiveStrCmp = (a, b) => {\n const la = a.toLowerCase()\n const lb = b.toLowerCase()\n return la > lb ? 1 : (la < lb ? -1 : 0)\n }\n const noPackLast = (a, b) => {\n const aNull = a === ''\n const bNull = b === ''\n if (aNull === bNull) {\n return 0\n } else if (aNull && !bNull) {\n return 1\n } else {\n return -1\n }\n }\n const byPackThenByName = (a, b) => {\n const packOf = emoji => (emoji.tags.filter(k => k.startsWith('pack:'))[0] || '').slice(5)\n const packOfA = packOf(a)\n const packOfB = packOf(b)\n return noPackLast(packOfA, packOfB) || caseInsensitiveStrCmp(packOfA, packOfB) || caseInsensitiveStrCmp(a.displayText, b.displayText)\n }\n\n const emoji = Object.entries(values).map(([key, value]) => {\n const imageUrl = value.image_url\n return {\n displayText: key,\n imageUrl: imageUrl ? state.server + imageUrl : value,\n tags: imageUrl ? value.tags.sort((a, b) => a > b ? 1 : 0) : ['utf'],\n replacement: `:${key}: `\n }\n // Technically could use tags but those are kinda useless right now,\n // should have been \"pack\" field, that would be more useful\n }).sort(byPackThenByName)\n commit('setInstanceOption', { name: 'customEmoji', value: emoji })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load custom emojis\")\n console.warn(e)\n }\n },\n\n setTheme ({ commit, rootState }, themeName) {\n commit('setInstanceOption', { name: 'theme', value: themeName })\n getPreset(themeName)\n .then(themeData => {\n commit('setInstanceOption', { name: 'themeData', value: themeData })\n // No need to apply theme if there's user theme already\n const { customTheme } = rootState.config\n if (customTheme) return\n\n // New theme presets don't have 'theme' property, they use 'source'\n const themeSource = themeData.source\n if (!themeData.theme || (themeSource && themeSource.themeEngineVersion === CURRENT_VERSION)) {\n applyTheme(themeSource)\n } else {\n applyTheme(themeData.theme)\n }\n })\n },\n fetchEmoji ({ dispatch, state }) {\n if (!state.customEmojiFetched) {\n state.customEmojiFetched = true\n dispatch('getCustomEmoji')\n }\n if (!state.emojiFetched) {\n state.emojiFetched = true\n dispatch('getStaticEmoji')\n }\n },\n\n async getKnownDomains ({ commit, rootState }) {\n try {\n const result = await apiService.fetchKnownDomains({\n credentials: rootState.users.currentUser.credentials\n })\n commit('setKnownDomains', result)\n } catch (e) {\n console.warn(\"Can't load known domains\")\n console.warn(e)\n }\n }\n }\n}\n\nexport default instance\n","import {\n remove,\n slice,\n each,\n findIndex,\n find,\n maxBy,\n minBy,\n merge,\n first,\n last,\n isArray,\n omitBy\n} from 'lodash'\nimport {\n isStatusNotification,\n isValidNotification,\n maybeShowNotification\n} from '../services/notification_utils/notification_utils.js'\nimport apiService from '../services/api/api.service.js'\n\nconst emptyTl = (userId = 0) => ({\n statuses: [],\n statusesObject: {},\n faves: [],\n visibleStatuses: [],\n visibleStatusesObject: {},\n newStatusCount: 0,\n maxId: 0,\n minId: 0,\n minVisibleId: 0,\n loading: false,\n followers: [],\n friends: [],\n userId,\n flushMarker: 0\n})\n\nconst emptyNotifications = () => ({\n desktopNotificationSilence: true,\n maxId: 0,\n minId: Number.POSITIVE_INFINITY,\n data: [],\n idStore: {},\n loading: false\n})\n\nexport const defaultState = () => ({\n allStatuses: [],\n allStatusesObject: {},\n conversationsObject: {},\n maxId: 0,\n notifications: emptyNotifications(),\n favorites: new Set(),\n timelines: {\n mentions: emptyTl(),\n public: emptyTl(),\n user: emptyTl(),\n favorites: emptyTl(),\n media: emptyTl(),\n publicAndExternal: emptyTl(),\n friends: emptyTl(),\n tag: emptyTl(),\n dms: emptyTl(),\n bookmarks: emptyTl(),\n list: emptyTl()\n }\n})\n\nexport const prepareStatus = (status) => {\n // Set deleted flag\n status.deleted = false\n\n // To make the array reactive\n status.attachments = status.attachments || []\n\n return status\n}\n\nconst mergeOrAdd = (arr, obj, item) => {\n const oldItem = obj[item.id]\n\n if (oldItem) {\n // We already have this, so only merge the new info.\n // We ignore null values to avoid overwriting existing properties with missing data\n // we also skip 'user' because that is handled by users module\n merge(oldItem, omitBy(item, (v, k) => v === null || k === 'user'))\n // Reactivity fix.\n oldItem.attachments.splice(oldItem.attachments.length)\n return { item: oldItem, new: false }\n } else {\n // This is a new item, prepare it\n prepareStatus(item)\n arr.push(item)\n obj[item.id] = item\n return { item, new: true }\n }\n}\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nconst sortTimeline = (timeline) => {\n timeline.visibleStatuses = timeline.visibleStatuses.sort(sortById)\n timeline.statuses = timeline.statuses.sort(sortById)\n timeline.minVisibleId = (last(timeline.visibleStatuses) || {}).id\n return timeline\n}\n\n// Add status to the global storages (arrays and objects maintaining statuses) except timelines\nconst addStatusToGlobalStorage = (state, data) => {\n const result = mergeOrAdd(state.allStatuses, state.allStatusesObject, data)\n if (result.new) {\n // Add to conversation\n const status = result.item\n const conversationsObject = state.conversationsObject\n const conversationId = status.statusnet_conversation_id\n if (conversationsObject[conversationId]) {\n conversationsObject[conversationId].push(status)\n } else {\n conversationsObject[conversationId] = [status]\n }\n }\n return result\n}\n\n// Remove status from the global storages (arrays and objects maintaining statuses) except timelines\nconst removeStatusFromGlobalStorage = (state, status) => {\n remove(state.allStatuses, { id: status.id })\n\n // TODO: Need to remove from allStatusesObject?\n\n // Remove possible notification\n remove(state.notifications.data, ({ action: { id } }) => id === status.id)\n\n // Remove from conversation\n const conversationId = status.statusnet_conversation_id\n if (state.conversationsObject[conversationId]) {\n remove(state.conversationsObject[conversationId], { id: status.id })\n }\n}\n\nconst addNewStatuses = (state, { statuses, showImmediately = false, timeline, user = {}, noIdUpdate = false, userId, pagination = {} }) => {\n // Sanity check\n if (!isArray(statuses)) {\n return false\n }\n\n const allStatuses = state.allStatuses\n const timelineObject = state.timelines[timeline]\n\n // Mismatch between API pagination and our internal minId/maxId tracking systems:\n // pagination.maxId is the oldest of the returned statuses when fetching older,\n // and pagination.minId is the newest when fetching newer. The names come directly\n // from the arguments they're supposed to be passed as for the next fetch.\n const minNew = pagination.maxId || (statuses.length > 0 ? minBy(statuses, 'id').id : 0)\n const maxNew = pagination.minId || (statuses.length > 0 ? maxBy(statuses, 'id').id : 0)\n\n const newer = timeline && (maxNew > timelineObject.maxId || timelineObject.maxId === 0) && statuses.length > 0\n const older = timeline && (minNew < timelineObject.minId || timelineObject.minId === 0) && statuses.length > 0\n\n if (!noIdUpdate && newer) {\n timelineObject.maxId = maxNew\n }\n if (!noIdUpdate && older) {\n timelineObject.minId = minNew\n }\n\n // This makes sure that user timeline won't get data meant for other\n // user. I.e. opening different user profiles makes request which could\n // return data late after user already viewing different user profile\n if ((timeline === 'user' || timeline === 'media') && timelineObject.userId !== userId) {\n return\n }\n\n const addStatus = (data, showImmediately, addToTimeline = true) => {\n const result = addStatusToGlobalStorage(state, data)\n const status = result.item\n\n if (result.new) {\n // We are mentioned in a post\n if (status.type === 'status' && find(status.attentions, { id: user.id })) {\n const mentions = state.timelines.mentions\n\n // Add the mention to the mentions timeline\n if (timelineObject !== mentions) {\n mergeOrAdd(mentions.statuses, mentions.statusesObject, status)\n mentions.newStatusCount += 1\n\n sortTimeline(mentions)\n }\n }\n if (status.visibility === 'direct') {\n const dms = state.timelines.dms\n\n mergeOrAdd(dms.statuses, dms.statusesObject, status)\n dms.newStatusCount += 1\n\n sortTimeline(dms)\n }\n }\n\n // Decide if we should treat the status as new for this timeline.\n let resultForCurrentTimeline\n // Some statuses should only be added to the global status repository.\n if (timeline && addToTimeline) {\n resultForCurrentTimeline = mergeOrAdd(timelineObject.statuses, timelineObject.statusesObject, status)\n }\n\n if (timeline && showImmediately) {\n // Add it directly to the visibleStatuses, don't change\n // newStatusCount\n mergeOrAdd(timelineObject.visibleStatuses, timelineObject.visibleStatusesObject, status)\n } else if (timeline && addToTimeline && resultForCurrentTimeline.new) {\n // Just change newStatuscount\n timelineObject.newStatusCount += 1\n }\n\n if (status.quote) {\n addStatus(status.quote, /* showImmediately = */ false, /* addToTimeline = */ false)\n }\n\n return status\n }\n\n const favoriteStatus = (favorite, counter) => {\n const status = find(allStatuses, { id: favorite.in_reply_to_status_id })\n if (status) {\n // This is our favorite, so the relevant bit.\n if (favorite.user.id === user.id) {\n status.favorited = true\n } else {\n status.fave_num += 1\n }\n }\n return status\n }\n\n const processors = {\n status: (status) => {\n addStatus(status, showImmediately)\n },\n edit: (status) => {\n addStatus(status, showImmediately)\n },\n retweet: (status) => {\n // RetweetedStatuses are never shown immediately\n const retweetedStatus = addStatus(status.retweeted_status, false, false)\n\n let retweet\n // If the retweeted status is already there, don't add the retweet\n // to the timeline.\n if (timeline && find(timelineObject.statuses, (s) => {\n if (s.retweeted_status) {\n return s.id === retweetedStatus.id || s.retweeted_status.id === retweetedStatus.id\n } else {\n return s.id === retweetedStatus.id\n }\n })) {\n // Already have it visible (either as the original or another RT), don't add to timeline, don't show.\n retweet = addStatus(status, false, false)\n } else {\n retweet = addStatus(status, showImmediately)\n }\n\n retweet.retweeted_status = retweetedStatus\n },\n favorite: (favorite) => {\n // Only update if this is a new favorite.\n // Ignore our own favorites because we get info about likes as response to like request\n if (!state.favorites.has(favorite.id)) {\n state.favorites.add(favorite.id)\n favoriteStatus(favorite)\n }\n },\n deletion: (deletion) => {\n const uri = deletion.uri\n const status = find(allStatuses, { uri })\n if (!status) {\n return\n }\n\n removeStatusFromGlobalStorage(state, status)\n\n if (timeline) {\n remove(timelineObject.statuses, { uri })\n remove(timelineObject.visibleStatuses, { uri })\n }\n },\n follow: (follow) => {\n // NOOP, it is known status but we don't do anything about it for now\n },\n default: (unknown) => {\n console.log('unknown status type')\n console.log(unknown)\n }\n }\n\n each(statuses, (status) => {\n const type = status.type\n const processor = processors[type] || processors.default\n processor(status)\n })\n\n // Keep the visible statuses sorted\n if (timeline && !(timeline === 'bookmarks')) {\n sortTimeline(timelineObject)\n }\n}\n\nconst updateNotificationsMinMaxId = (state, notification) => {\n state.notifications.maxId = notification.id > state.notifications.maxId\n ? notification.id\n : state.notifications.maxId\n state.notifications.minId = notification.id < state.notifications.minId\n ? notification.id\n : state.notifications.minId\n}\n\nconst addNewNotifications = (state, { dispatch, notifications, older, visibleNotificationTypes, rootGetters, newNotificationSideEffects }) => {\n each(notifications, (notification) => {\n // If invalid notification, update ids but don't add it to store\n if (!isValidNotification(notification)) {\n console.error('Invalid notification:', notification)\n updateNotificationsMinMaxId(state, notification)\n return\n }\n\n if (isStatusNotification(notification.type)) {\n notification.action = addStatusToGlobalStorage(state, notification.action).item\n notification.status = notification.status && addStatusToGlobalStorage(state, notification.status).item\n }\n\n if (notification.type === 'pleroma:report') {\n dispatch('addReport', notification.report)\n }\n\n if (notification.type === 'pleroma:emoji_reaction') {\n dispatch('fetchEmojiReactionsBy', notification.status.id)\n }\n\n // Only add a new notification if we don't have one for the same action\n // eslint-disable-next-line no-prototype-builtins\n if (!state.notifications.idStore.hasOwnProperty(notification.id)) {\n updateNotificationsMinMaxId(state, notification)\n\n state.notifications.data.push(notification)\n state.notifications.idStore[notification.id] = notification\n\n newNotificationSideEffects(notification)\n } else if (notification.seen) {\n state.notifications.idStore[notification.id].seen = true\n }\n })\n}\n\nconst removeStatus = (state, { timeline, userId }) => {\n const timelineObject = state.timelines[timeline]\n if (userId) {\n remove(timelineObject.statuses, { user: { id: userId } })\n remove(timelineObject.visibleStatuses, { user: { id: userId } })\n timelineObject.minVisibleId = timelineObject.visibleStatuses.length > 0 ? last(timelineObject.visibleStatuses).id : 0\n timelineObject.maxId = timelineObject.statuses.length > 0 ? first(timelineObject.statuses).id : 0\n }\n}\n\nexport const mutations = {\n addNewStatuses,\n addNewNotifications,\n removeStatus,\n showNewStatuses (state, { timeline }) {\n const oldTimeline = (state.timelines[timeline])\n\n oldTimeline.newStatusCount = 0\n oldTimeline.visibleStatuses = slice(oldTimeline.statuses, 0, 50)\n oldTimeline.minVisibleId = last(oldTimeline.visibleStatuses).id\n oldTimeline.minId = oldTimeline.minVisibleId\n oldTimeline.visibleStatusesObject = {}\n each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })\n },\n resetStatuses (state) {\n const emptyState = defaultState()\n Object.entries(emptyState).forEach(([key, value]) => {\n state[key] = value\n })\n },\n clearTimeline (state, { timeline, excludeUserId = false }) {\n const userId = excludeUserId ? state.timelines[timeline].userId : undefined\n state.timelines[timeline] = emptyTl(userId)\n },\n clearNotifications (state) {\n state.notifications = emptyNotifications()\n },\n setFavorited (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n\n if (newStatus.favorited !== value) {\n if (value) {\n newStatus.fave_num++\n } else {\n newStatus.fave_num--\n }\n }\n\n newStatus.favorited = value\n },\n setFavoritedConfirm (state, { status, user }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.favorited = status.favorited\n newStatus.fave_num = status.fave_num\n const index = findIndex(newStatus.favoritedBy, { id: user.id })\n if (index !== -1 && !newStatus.favorited) {\n newStatus.favoritedBy.splice(index, 1)\n } else if (index === -1 && newStatus.favorited) {\n newStatus.favoritedBy.push(user)\n }\n },\n setMutedStatus (state, status) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.thread_muted = status.thread_muted\n\n if (newStatus.thread_muted !== undefined) {\n state.conversationsObject[newStatus.statusnet_conversation_id].forEach(status => { status.thread_muted = newStatus.thread_muted })\n }\n },\n setRetweeted (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n\n if (newStatus.repeated !== value) {\n if (value) {\n newStatus.repeat_num++\n } else {\n newStatus.repeat_num--\n }\n }\n\n newStatus.repeated = value\n },\n setRetweetedConfirm (state, { status, user }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.repeated = status.repeated\n newStatus.repeat_num = status.repeat_num\n const index = findIndex(newStatus.rebloggedBy, { id: user.id })\n if (index !== -1 && !newStatus.repeated) {\n newStatus.rebloggedBy.splice(index, 1)\n } else if (index === -1 && newStatus.repeated) {\n newStatus.rebloggedBy.push(user)\n }\n },\n setBookmarked (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.bookmarked = value\n },\n setBookmarkedConfirm (state, { status }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.bookmarked = status.bookmarked\n },\n setDeleted (state, { status }) {\n const newStatus = state.allStatusesObject[status.id]\n if (newStatus) newStatus.deleted = true\n },\n setManyDeleted (state, condition) {\n Object.values(state.allStatusesObject).forEach(status => {\n if (condition(status)) {\n status.deleted = true\n }\n })\n },\n setLoading (state, { timeline, value }) {\n state.timelines[timeline].loading = value\n },\n setNsfw (state, { id, nsfw }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.nsfw = nsfw\n },\n setNotificationsLoading (state, { value }) {\n state.notifications.loading = value\n },\n setNotificationsSilence (state, { value }) {\n state.notifications.desktopNotificationSilence = value\n },\n markNotificationsAsSeen (state) {\n each(state.notifications.data, (notification) => {\n notification.seen = true\n })\n },\n markSingleNotificationAsSeen (state, { id }) {\n const notification = find(state.notifications.data, n => n.id === id)\n if (notification) notification.seen = true\n },\n dismissNotification (state, { id }) {\n state.notifications.data = state.notifications.data.filter(n => n.id !== id)\n },\n dismissNotifications (state, { finder }) {\n state.notifications.data = state.notifications.data.filter(n => finder)\n },\n updateNotification (state, { id, updater }) {\n const notification = find(state.notifications.data, n => n.id === id)\n notification && updater(notification)\n },\n queueFlush (state, { timeline, id }) {\n state.timelines[timeline].flushMarker = id\n },\n queueFlushAll (state) {\n Object.keys(state.timelines).forEach((timeline) => {\n state.timelines[timeline].flushMarker = state.timelines[timeline].maxId\n })\n },\n addRepeats (state, { id, rebloggedByUsers, currentUser }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.rebloggedBy = rebloggedByUsers.filter(_ => _)\n // repeats stats can be incorrect based on polling condition, let's update them using the most recent data\n newStatus.repeat_num = newStatus.rebloggedBy.length\n newStatus.repeated = !!newStatus.rebloggedBy.find(({ id }) => currentUser.id === id)\n },\n addFavs (state, { id, favoritedByUsers, currentUser }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.favoritedBy = favoritedByUsers.filter(_ => _)\n // favorites stats can be incorrect based on polling condition, let's update them using the most recent data\n newStatus.fave_num = newStatus.favoritedBy.length\n newStatus.favorited = !!newStatus.favoritedBy.find(({ id }) => currentUser.id === id)\n },\n addEmojiReactionsBy (state, { id, emojiReactions, currentUser }) {\n const status = state.allStatusesObject[id]\n status.emoji_reactions = emojiReactions\n },\n addOwnReaction (state, { id, emoji, currentUser }) {\n const status = state.allStatusesObject[id]\n const reactionIndex = findIndex(status.emoji_reactions, { name: emoji })\n const reaction = status.emoji_reactions[reactionIndex] || { name: emoji, count: 0, accounts: [] }\n\n const newReaction = {\n ...reaction,\n count: reaction.count + 1,\n me: true,\n accounts: [\n ...reaction.accounts,\n currentUser\n ]\n }\n\n // Update count of existing reaction if it exists, otherwise append at the end\n if (reactionIndex >= 0) {\n status.emoji_reactions[reactionIndex] = newReaction\n } else {\n status.emoji_reactions = [...status.emoji_reactions, newReaction]\n }\n },\n removeOwnReaction (state, { id, emoji, currentUser }) {\n const status = state.allStatusesObject[id]\n const reactionIndex = findIndex(status.emoji_reactions, { name: emoji })\n if (reactionIndex < 0) return\n\n const reaction = status.emoji_reactions[reactionIndex]\n const accounts = reaction.accounts || []\n\n const newReaction = {\n ...reaction,\n count: reaction.count - 1,\n me: false,\n accounts: accounts.filter(acc => acc.id !== currentUser.id)\n }\n\n if (newReaction.count > 0) {\n status.emoji_reactions[reactionIndex] = newReaction\n } else {\n status.emoji_reactions = status.emoji_reactions.filter(r => r.name !== emoji)\n }\n },\n updateStatusWithPoll (state, { id, poll }) {\n const status = state.allStatusesObject[id]\n status.poll = poll\n },\n setVirtualHeight (state, { statusId, height }) {\n state.allStatusesObject[statusId].virtualHeight = height\n }\n}\n\nconst statuses = {\n state: defaultState(),\n actions: {\n addNewStatuses ({ rootState, commit }, { statuses, showImmediately = false, timeline = false, noIdUpdate = false, userId, pagination }) {\n commit('addNewStatuses', { statuses, showImmediately, timeline, noIdUpdate, user: rootState.users.currentUser, userId, pagination })\n },\n addNewNotifications (store, { notifications, older }) {\n const { commit, dispatch, rootGetters } = store\n\n const newNotificationSideEffects = (notification) => {\n maybeShowNotification(store, notification)\n }\n commit('addNewNotifications', { dispatch, notifications, older, rootGetters, newNotificationSideEffects })\n },\n setNotificationsLoading ({ rootState, commit }, { value }) {\n commit('setNotificationsLoading', { value })\n },\n setNotificationsSilence ({ rootState, commit }, { value }) {\n commit('setNotificationsSilence', { value })\n },\n fetchStatus ({ rootState, dispatch }, id) {\n return rootState.api.backendInteractor.fetchStatus({ id })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n fetchStatusSource ({ rootState, dispatch }, status) {\n return apiService.fetchStatusSource({ id: status.id, credentials: rootState.users.currentUser.credentials })\n },\n fetchStatusHistory ({ rootState, dispatch }, status) {\n return apiService.fetchStatusHistory({ status })\n },\n deleteStatus ({ rootState, commit, dispatch }, status) {\n apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })\n .then((_) => {\n commit('setDeleted', { status })\n })\n .catch((e) => {\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'status.delete_error',\n messageArgs: [e.message],\n timeout: 5000\n })\n })\n },\n deleteStatusById ({ rootState, commit }, id) {\n const status = rootState.statuses.allStatusesObject[id]\n commit('setDeleted', { status })\n },\n markStatusesAsDeleted ({ commit }, condition) {\n commit('setManyDeleted', condition)\n },\n favorite ({ rootState, commit }, status) {\n // Optimistic favoriting...\n commit('setFavorited', { status, value: true })\n rootState.api.backendInteractor.favorite({ id: status.id })\n .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser }))\n },\n unfavorite ({ rootState, commit }, status) {\n // Optimistic unfavoriting...\n commit('setFavorited', { status, value: false })\n rootState.api.backendInteractor.unfavorite({ id: status.id })\n .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser }))\n },\n fetchPinnedStatuses ({ rootState, dispatch }, userId) {\n rootState.api.backendInteractor.fetchPinnedStatuses({ id: userId })\n .then(statuses => dispatch('addNewStatuses', { statuses, timeline: 'user', userId, showImmediately: true, noIdUpdate: true }))\n },\n pinStatus ({ rootState, dispatch }, statusId) {\n return rootState.api.backendInteractor.pinOwnStatus({ id: statusId })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n unpinStatus ({ rootState, dispatch }, statusId) {\n rootState.api.backendInteractor.unpinOwnStatus({ id: statusId })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n muteConversation ({ rootState, commit }, statusId) {\n return rootState.api.backendInteractor.muteConversation({ id: statusId })\n .then((status) => commit('setMutedStatus', status))\n },\n unmuteConversation ({ rootState, commit }, statusId) {\n return rootState.api.backendInteractor.unmuteConversation({ id: statusId })\n .then((status) => commit('setMutedStatus', status))\n },\n retweet ({ rootState, commit }, status) {\n // Optimistic retweeting...\n commit('setRetweeted', { status, value: true })\n rootState.api.backendInteractor.retweet({ id: status.id })\n .then(status => commit('setRetweetedConfirm', { status: status.retweeted_status, user: rootState.users.currentUser }))\n },\n unretweet ({ rootState, commit }, status) {\n // Optimistic unretweeting...\n commit('setRetweeted', { status, value: false })\n rootState.api.backendInteractor.unretweet({ id: status.id })\n .then(status => commit('setRetweetedConfirm', { status, user: rootState.users.currentUser }))\n },\n bookmark ({ rootState, commit }, status) {\n commit('setBookmarked', { status, value: true })\n rootState.api.backendInteractor.bookmarkStatus({ id: status.id })\n .then(status => {\n commit('setBookmarkedConfirm', { status })\n })\n },\n unbookmark ({ rootState, commit }, status) {\n commit('setBookmarked', { status, value: false })\n rootState.api.backendInteractor.unbookmarkStatus({ id: status.id })\n .then(status => {\n commit('setBookmarkedConfirm', { status })\n })\n },\n queueFlush ({ rootState, commit }, { timeline, id }) {\n commit('queueFlush', { timeline, id })\n },\n queueFlushAll ({ rootState, commit }) {\n commit('queueFlushAll')\n },\n markNotificationsAsSeen ({ rootState, commit }) {\n commit('markNotificationsAsSeen')\n apiService.markNotificationsAsSeen({\n id: rootState.statuses.notifications.maxId,\n credentials: rootState.users.currentUser.credentials\n })\n },\n markSingleNotificationAsSeen ({ rootState, commit }, { id }) {\n commit('markSingleNotificationAsSeen', { id })\n apiService.markNotificationsAsSeen({\n single: true,\n id,\n credentials: rootState.users.currentUser.credentials\n })\n },\n dismissNotificationLocal ({ rootState, commit }, { id }) {\n commit('dismissNotification', { id })\n },\n dismissNotification ({ rootState, commit }, { id }) {\n commit('dismissNotification', { id })\n rootState.api.backendInteractor.dismissNotification({ id })\n },\n updateNotification ({ rootState, commit }, { id, updater }) {\n commit('updateNotification', { id, updater })\n },\n fetchFavsAndRepeats ({ rootState, commit }, id) {\n Promise.all([\n rootState.api.backendInteractor.fetchFavoritedByUsers({ id }),\n rootState.api.backendInteractor.fetchRebloggedByUsers({ id })\n ]).then(([favoritedByUsers, rebloggedByUsers]) => {\n commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser })\n commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser })\n })\n },\n reactWithEmoji ({ rootState, dispatch, commit }, { id, emoji }) {\n const currentUser = rootState.users.currentUser\n if (!currentUser) return\n\n commit('addOwnReaction', { id, emoji, currentUser })\n rootState.api.backendInteractor.reactWithEmoji({ id, emoji }).then(\n ok => {\n dispatch('fetchEmojiReactionsBy', id)\n }\n )\n },\n unreactWithEmoji ({ rootState, dispatch, commit }, { id, emoji }) {\n const currentUser = rootState.users.currentUser\n if (!currentUser) return\n\n commit('removeOwnReaction', { id, emoji, currentUser })\n rootState.api.backendInteractor.unreactWithEmoji({ id, emoji }).then(\n ok => {\n dispatch('fetchEmojiReactionsBy', id)\n }\n )\n },\n fetchEmojiReactionsBy ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.fetchEmojiReactions({ id }).then(\n emojiReactions => {\n commit('addEmojiReactionsBy', { id, emojiReactions, currentUser: rootState.users.currentUser })\n }\n )\n },\n fetchFavs ({ rootState, commit }, id) {\n rootState.api.backendInteractor.fetchFavoritedByUsers({ id })\n .then(favoritedByUsers => commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser }))\n },\n fetchRepeats ({ rootState, commit }, id) {\n rootState.api.backendInteractor.fetchRebloggedByUsers({ id })\n .then(rebloggedByUsers => commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser }))\n },\n search (store, { q, resolve, limit, offset, following, type }) {\n return store.rootState.api.backendInteractor.search2({ q, resolve, limit, offset, following, type })\n .then((data) => {\n store.commit('addNewUsers', data.accounts)\n store.commit('addNewUsers', data.statuses.map(s => s.user).filter(u => u))\n store.commit('addNewStatuses', { statuses: data.statuses })\n return data\n })\n },\n setVirtualHeight ({ commit }, { statusId, height }) {\n commit('setVirtualHeight', { statusId, height })\n }\n },\n mutations\n}\n\nexport default statuses\n","import { remove, find } from 'lodash'\n\nexport const defaultState = {\n allLists: [],\n allListsObject: {}\n}\n\nexport const mutations = {\n setLists (state, value) {\n state.allLists = value\n },\n setList (state, { listId, title }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].title = title\n\n const entry = find(state.allLists, { id: listId })\n if (!entry) {\n state.allLists.push({ id: listId, title })\n } else {\n entry.title = title\n }\n },\n setListAccounts (state, { listId, accountIds }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].accountIds = accountIds\n },\n addListAccount (state, { listId, accountId }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].accountIds.push(accountId)\n },\n removeListAccount (state, { listId, accountId }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n const { accountIds } = state.allListsObject[listId]\n const set = new Set(accountIds)\n set.delete(accountId)\n state.allListsObject[listId].accountIds = [...set]\n },\n deleteList (state, { listId }) {\n delete state.allListsObject[listId]\n remove(state.allLists, list => list.id === listId)\n }\n}\n\nconst actions = {\n setLists ({ commit }, value) {\n commit('setLists', value)\n },\n createList ({ rootState, commit }, { title }) {\n return rootState.api.backendInteractor.createList({ title })\n .then((list) => {\n commit('setList', { listId: list.id, title })\n return list\n })\n },\n fetchList ({ rootState, commit }, { listId }) {\n return rootState.api.backendInteractor.getList({ listId })\n .then((list) => commit('setList', { listId: list.id, title: list.title }))\n },\n fetchListAccounts ({ rootState, commit }, { listId }) {\n return rootState.api.backendInteractor.getListAccounts({ listId })\n .then((accountIds) => commit('setListAccounts', { listId, accountIds }))\n },\n setList ({ rootState, commit }, { listId, title }) {\n rootState.api.backendInteractor.updateList({ listId, title })\n commit('setList', { listId, title })\n },\n setListAccounts ({ rootState, commit }, { listId, accountIds }) {\n const saved = rootState.lists.allListsObject[listId].accountIds || []\n const added = accountIds.filter(id => !saved.includes(id))\n const removed = saved.filter(id => !accountIds.includes(id))\n commit('setListAccounts', { listId, accountIds })\n if (added.length > 0) {\n rootState.api.backendInteractor.addAccountsToList({ listId, accountIds: added })\n }\n if (removed.length > 0) {\n rootState.api.backendInteractor.removeAccountsFromList({ listId, accountIds: removed })\n }\n },\n addListAccount ({ rootState, commit }, { listId, accountId }) {\n return rootState\n .api\n .backendInteractor\n .addAccountsToList({ listId, accountIds: [accountId] })\n .then((result) => {\n commit('addListAccount', { listId, accountId })\n return result\n })\n },\n removeListAccount ({ rootState, commit }, { listId, accountId }) {\n return rootState\n .api\n .backendInteractor\n .removeAccountsFromList({ listId, accountIds: [accountId] })\n .then((result) => {\n commit('removeListAccount', { listId, accountId })\n return result\n })\n },\n deleteList ({ rootState, commit }, { listId }) {\n rootState.api.backendInteractor.deleteList({ listId })\n commit('deleteList', { listId })\n }\n}\n\nexport const getters = {\n findListTitle: state => id => {\n if (!state.allListsObject[id]) return\n return state.allListsObject[id].title\n },\n findListAccounts: state => id => {\n return [...state.allListsObject[id].accountIds]\n }\n}\n\nconst lists = {\n state: defaultState,\n mutations,\n actions,\n getters\n}\n\nexport default lists\n","import { camelCase } from 'lodash'\n\nimport apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst update = ({ store, statuses, timeline, showImmediately, userId, listId, pagination }) => {\n const ccTimeline = camelCase(timeline)\n\n store.dispatch('addNewStatuses', {\n timeline: ccTimeline,\n userId,\n listId,\n statuses,\n showImmediately,\n pagination\n })\n}\n\nconst fetchAndUpdate = ({\n store,\n credentials,\n timeline = 'friends',\n older = false,\n showImmediately = false,\n userId = false,\n listId = false,\n tag = false,\n until,\n since\n}) => {\n const args = { timeline, credentials }\n const rootState = store.rootState || store.state\n const { getters } = store\n const timelineData = rootState.statuses.timelines[camelCase(timeline)]\n const { hideMutedPosts, replyVisibility } = getters.mergedConfig\n const loggedIn = !!rootState.users.currentUser\n\n if (older) {\n args.until = until || timelineData.minId\n } else {\n if (since === undefined) {\n args.since = timelineData.maxId\n } else if (since !== null) {\n args.since = since\n }\n }\n\n args.userId = userId\n args.listId = listId\n args.tag = tag\n args.withMuted = !hideMutedPosts\n if (loggedIn && ['friends', 'public', 'publicAndExternal'].includes(timeline)) {\n args.replyVisibility = replyVisibility\n }\n\n const numStatusesBeforeFetch = timelineData.statuses.length\n\n return apiService.fetchTimeline(args)\n .then(response => {\n if (response.errors) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n\n const { data: statuses, pagination } = response\n if (!older && statuses.length >= 20 && !timelineData.loading && numStatusesBeforeFetch > 0) {\n store.dispatch('queueFlush', { timeline, id: timelineData.maxId })\n }\n update({ store, statuses, timeline, showImmediately, userId, listId, pagination })\n return { statuses, pagination }\n })\n .catch((error) => {\n store.dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'timeline.error',\n messageArgs: [error.message],\n timeout: 5000\n })\n })\n}\n\nconst startFetching = ({ timeline = 'friends', credentials, store, userId = false, listId = false, tag = false }) => {\n const rootState = store.rootState || store.state\n const timelineData = rootState.statuses.timelines[camelCase(timeline)]\n const showImmediately = timelineData.visibleStatuses.length === 0\n timelineData.userId = userId\n timelineData.listId = listId\n fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, listId, tag })\n const boundFetchAndUpdate = () =>\n fetchAndUpdate({ timeline, credentials, store, userId, listId, tag })\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\nconst timelineFetcher = {\n fetchAndUpdate,\n startFetching\n}\n\nexport default timelineFetcher\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst fetchAndUpdate = ({ store, credentials }) => {\n return apiService.fetchFollowRequests({ credentials })\n .then((requests) => {\n store.commit('setFollowRequests', requests)\n store.commit('addNewUsers', requests)\n }, () => {})\n .catch(() => {})\n}\n\nconst startFetching = ({ credentials, store }) => {\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\n\nconst followRequestFetcher = {\n startFetching\n}\n\nexport default followRequestFetcher\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst fetchAndUpdate = ({ store, credentials }) => {\n return apiService.fetchLists({ credentials })\n .then(lists => {\n store.commit('setLists', lists)\n }, () => {})\n .catch(() => {})\n}\n\nconst startFetching = ({ credentials, store }) => {\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 240000)\n}\n\nconst listsFetcher = {\n startFetching\n}\n\nexport default listsFetcher\n","import apiService, { getMastodonSocketURI, ProcessedWS } from '../api/api.service.js'\nimport timelineFetcher from '../timeline_fetcher/timeline_fetcher.service.js'\nimport notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js'\nimport followRequestFetcher from '../../services/follow_request_fetcher/follow_request_fetcher.service'\nimport listsFetcher from '../../services/lists_fetcher/lists_fetcher.service.js'\n\nconst backendInteractorService = credentials => ({\n startFetchingTimeline ({ timeline, store, userId = false, listId = false, tag }) {\n return timelineFetcher.startFetching({ timeline, store, credentials, userId, listId, tag })\n },\n\n fetchTimeline (args) {\n return timelineFetcher.fetchAndUpdate({ ...args, credentials })\n },\n\n startFetchingNotifications ({ store }) {\n return notificationsFetcher.startFetching({ store, credentials })\n },\n\n fetchNotifications (args) {\n return notificationsFetcher.fetchAndUpdate({ ...args, credentials })\n },\n\n startFetchingFollowRequests ({ store }) {\n return followRequestFetcher.startFetching({ store, credentials })\n },\n\n startFetchingLists ({ store }) {\n return listsFetcher.startFetching({ store, credentials })\n },\n\n startUserSocket ({ store }) {\n const serv = store.rootState.instance.server.replace('http', 'ws')\n const url = serv + getMastodonSocketURI({ credentials, stream: 'user' })\n return ProcessedWS({ url, id: 'User' })\n },\n\n ...Object.entries(apiService).reduce((acc, [key, func]) => {\n return {\n ...acc,\n [key]: (args) => func({ credentials, ...args })\n }\n }, {}),\n\n verifyCredentials: apiService.verifyCredentials\n})\n\nexport default backendInteractorService\n","\nexport const windowWidth = () =>\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth\n\nexport const windowHeight = () =>\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight\n","import { reduce } from 'lodash'\n\nconst REDIRECT_URI = `${window.location.origin}/oauth-callback`\n\nexport const getOrCreateApp = ({ clientId, clientSecret, instance, commit }) => {\n if (clientId && clientSecret) {\n return Promise.resolve({ clientId, clientSecret })\n }\n\n const url = `${instance}/api/v1/apps`\n const form = new window.FormData()\n\n form.append('client_name', `PleromaFE_${window.___pleromafe_commit_hash}_${(new Date()).toISOString()}`)\n form.append('redirect_uris', REDIRECT_URI)\n form.append('scopes', 'read write follow push admin')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n })\n .then((data) => data.json())\n .then((app) => ({ clientId: app.client_id, clientSecret: app.client_secret }))\n .then((app) => commit('setClientData', app) || app)\n}\n\nconst login = ({ instance, clientId }) => {\n const data = {\n response_type: 'code',\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n scope: 'read write follow push admin'\n }\n\n const dataString = reduce(data, (acc, v, k) => {\n const encoded = `${k}=${encodeURIComponent(v)}`\n if (!acc) {\n return encoded\n } else {\n return `${acc}&${encoded}`\n }\n }, false)\n\n // Do the redirect...\n const url = `${instance}/oauth/authorize?${dataString}`\n\n window.location.href = url\n}\n\nconst getTokenWithCredentials = ({ clientId, clientSecret, instance, username, password }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'password')\n form.append('username', username)\n form.append('password', password)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst getToken = ({ clientId, clientSecret, instance, code }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'authorization_code')\n form.append('code', code)\n form.append('redirect_uri', `${window.location.origin}/oauth-callback`)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n })\n .then((data) => data.json())\n}\n\nexport const getClientToken = ({ clientId, clientSecret, instance }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'client_credentials')\n form.append('redirect_uri', `${window.location.origin}/oauth-callback`)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\nconst verifyOTPCode = ({ app, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', app.client_id)\n form.append('client_secret', app.client_secret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'totp')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst verifyRecoveryCode = ({ app, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', app.client_id)\n form.append('client_secret', app.client_secret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'recovery')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst revokeToken = ({ app, instance, token }) => {\n const url = `${instance}/oauth/revoke`\n const form = new window.FormData()\n\n form.append('client_id', app.clientId)\n form.append('client_secret', app.clientSecret)\n form.append('token', token)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst oauth = {\n login,\n getToken,\n getTokenWithCredentials,\n getOrCreateApp,\n verifyOTPCode,\n verifyRecoveryCode,\n revokeToken\n}\n\nexport default oauth\n","import runtime from 'serviceworker-webpack5-plugin/lib/runtime'\n\nfunction urlBase64ToUint8Array (base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4)\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n\n const rawData = window.atob(base64)\n return Uint8Array.from([...rawData].map((char) => char.charCodeAt(0)))\n}\n\nfunction isPushSupported () {\n return 'serviceWorker' in navigator && 'PushManager' in window\n}\n\nfunction getOrCreateServiceWorker () {\n return runtime.register()\n .catch((err) => console.error('Unable to get or create a service worker.', err))\n}\n\nfunction subscribePush (registration, isEnabled, vapidPublicKey) {\n if (!isEnabled) return Promise.reject(new Error('Web Push is disabled in config'))\n if (!vapidPublicKey) return Promise.reject(new Error('VAPID public key is not found'))\n\n const subscribeOptions = {\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)\n }\n return registration.pushManager.subscribe(subscribeOptions)\n}\n\nfunction unsubscribePush (registration) {\n return registration.pushManager.getSubscription()\n .then((subscribtion) => {\n if (subscribtion === null) { return }\n return subscribtion.unsubscribe()\n })\n}\n\nfunction deleteSubscriptionFromBackEnd (token) {\n return window.fetch('/api/v1/push/subscription/', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`\n }\n }).then((response) => {\n if (!response.ok) throw new Error('Bad status code from server.')\n return response\n })\n}\n\nfunction sendSubscriptionToBackEnd (subscription, token, notificationVisibility) {\n return window.fetch('/api/v1/push/subscription/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify({\n subscription,\n data: {\n alerts: {\n follow: notificationVisibility.follows,\n favourite: notificationVisibility.likes,\n mention: notificationVisibility.mentions,\n reblog: notificationVisibility.repeats,\n move: notificationVisibility.moves\n }\n }\n })\n }).then((response) => {\n if (!response.ok) throw new Error('Bad status code from server.')\n return response.json()\n }).then((responseData) => {\n if (!responseData.id) throw new Error('Bad response from server.')\n return responseData\n })\n}\n\nexport function registerPushNotifications (isEnabled, vapidPublicKey, token, notificationVisibility) {\n if (isPushSupported()) {\n getOrCreateServiceWorker()\n .then((registration) => subscribePush(registration, isEnabled, vapidPublicKey))\n .then((subscription) => sendSubscriptionToBackEnd(subscription, token, notificationVisibility))\n .catch((e) => console.warn(`Failed to setup Web Push Notifications: ${e.message}`))\n }\n}\n\nexport function unregisterPushNotifications (token) {\n if (isPushSupported()) {\n Promise.all([\n deleteSubscriptionFromBackEnd(token),\n getOrCreateServiceWorker()\n .then((registration) => {\n return unsubscribePush(registration).then((result) => [registration, result])\n })\n .then(([registration, unsubResult]) => {\n if (!unsubResult) {\n console.warn('Push subscription cancellation wasn\\'t successful, killing SW anyway...')\n }\n return registration.unregister().then((result) => {\n if (!result) {\n console.warn('Failed to kill SW')\n }\n })\n })\n ]).catch((e) => console.warn(`Failed to disable Web Push Notifications: ${e.message}`))\n }\n}\n","import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { windowWidth, windowHeight } from '../services/window_utils/window_utils'\nimport oauthApi from '../services/new_api/oauth.js'\nimport { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'\nimport { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js'\n\n// TODO: Unify with mergeOrAdd in statuses.js\nexport const mergeOrAdd = (arr, obj, item) => {\n if (!item) { return false }\n const oldItem = obj[item.id]\n if (oldItem) {\n // We already have this, so only merge the new info.\n mergeWith(oldItem, item, mergeArrayLength)\n return { item: oldItem, new: false }\n } else {\n // This is a new item, prepare it\n arr.push(item)\n obj[item.id] = item\n return { item, new: true }\n }\n}\n\nconst mergeArrayLength = (oldValue, newValue) => {\n if (isArray(oldValue) && isArray(newValue)) {\n oldValue.length = newValue.length\n return mergeWith(oldValue, newValue, mergeArrayLength)\n }\n}\n\nconst getNotificationPermission = () => {\n const Notification = window.Notification\n\n if (!Notification) return Promise.resolve(null)\n if (Notification.permission === 'default') return Notification.requestPermission()\n return Promise.resolve(Notification.permission)\n}\n\nconst blockUser = (store, id) => {\n return store.rootState.api.backendInteractor.blockUser({ id })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n store.commit('addBlockId', id)\n store.commit('removeStatus', { timeline: 'friends', userId: id })\n store.commit('removeStatus', { timeline: 'public', userId: id })\n store.commit('removeStatus', { timeline: 'publicAndExternal', userId: id })\n })\n}\n\nconst unblockUser = (store, id) => {\n return store.rootState.api.backendInteractor.unblockUser({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst removeUserFromFollowers = (store, id) => {\n return store.rootState.api.backendInteractor.removeUserFromFollowers({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst editUserNote = (store, { id, comment }) => {\n return store.rootState.api.backendInteractor.editUserNote({ id, comment })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst muteUser = (store, args) => {\n const id = typeof args === 'object' ? args.id : args\n const expiresIn = typeof args === 'object' ? args.expiresIn : 0\n\n const predictedRelationship = store.state.relationships[id] || { id }\n predictedRelationship.muting = true\n store.commit('updateUserRelationship', [predictedRelationship])\n store.commit('addMuteId', id)\n\n return store.rootState.api.backendInteractor.muteUser({ id, expiresIn })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n store.commit('addMuteId', id)\n })\n}\n\nconst unmuteUser = (store, id) => {\n const predictedRelationship = store.state.relationships[id] || { id }\n predictedRelationship.muting = false\n store.commit('updateUserRelationship', [predictedRelationship])\n\n return store.rootState.api.backendInteractor.unmuteUser({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst hideReblogs = (store, userId) => {\n return store.rootState.api.backendInteractor.followUser({ id: userId, reblogs: false })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n })\n}\n\nconst showReblogs = (store, userId) => {\n return store.rootState.api.backendInteractor.followUser({ id: userId, reblogs: true })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst muteDomain = (store, domain) => {\n return store.rootState.api.backendInteractor.muteDomain({ domain })\n .then(() => store.commit('addDomainMute', domain))\n}\n\nconst unmuteDomain = (store, domain) => {\n return store.rootState.api.backendInteractor.unmuteDomain({ domain })\n .then(() => store.commit('removeDomainMute', domain))\n}\n\nexport const mutations = {\n tagUser (state, { user: { id }, tag }) {\n const user = state.usersObject[id]\n const tags = user.tags || []\n const newTags = tags.concat([tag])\n user.tags = newTags\n },\n untagUser (state, { user: { id }, tag }) {\n const user = state.usersObject[id]\n const tags = user.tags || []\n const newTags = tags.filter(t => t !== tag)\n user.tags = newTags\n },\n updateRight (state, { user: { id }, right, value }) {\n const user = state.usersObject[id]\n const newRights = user.rights\n newRights[right] = value\n user.rights = newRights\n },\n updateActivationStatus (state, { user: { id }, deactivated }) {\n const user = state.usersObject[id]\n user.deactivated = deactivated\n },\n setCurrentUser (state, user) {\n state.lastLoginName = user.screen_name\n state.currentUser = mergeWith(state.currentUser || {}, user, mergeArrayLength)\n },\n clearCurrentUser (state) {\n state.currentUser = false\n state.lastLoginName = false\n },\n beginLogin (state) {\n state.loggingIn = true\n },\n endLogin (state) {\n state.loggingIn = false\n },\n saveFriendIds (state, { id, friendIds }) {\n const user = state.usersObject[id]\n user.friendIds = uniq(concat(user.friendIds || [], friendIds))\n },\n saveFollowerIds (state, { id, followerIds }) {\n const user = state.usersObject[id]\n user.followerIds = uniq(concat(user.followerIds || [], followerIds))\n },\n // Because frontend doesn't have a reason to keep these stuff in memory\n // outside of viewing someones user profile.\n clearFriends (state, userId) {\n const user = state.usersObject[userId]\n if (user) {\n user.friendIds = []\n }\n },\n clearFollowers (state, userId) {\n const user = state.usersObject[userId]\n if (user) {\n user.followerIds = []\n }\n },\n addNewUsers (state, users) {\n each(users, (user) => {\n if (user.relationship) {\n state.relationships[user.relationship.id] = user.relationship\n }\n const res = mergeOrAdd(state.users, state.usersObject, user)\n const item = res.item\n if (res.new && item.screen_name && !item.screen_name.includes('@')) {\n state.usersByNameObject[item.screen_name.toLowerCase()] = item\n }\n })\n },\n updateUserRelationship (state, relationships) {\n relationships.forEach((relationship) => {\n state.relationships[relationship.id] = relationship\n })\n },\n updateUserInLists (state, { id, inLists }) {\n state.usersObject[id].inLists = inLists\n },\n saveBlockIds (state, blockIds) {\n state.currentUser.blockIds = blockIds\n },\n addBlockId (state, blockId) {\n if (state.currentUser.blockIds.indexOf(blockId) === -1) {\n state.currentUser.blockIds.push(blockId)\n }\n },\n setBlockIdsMaxId (state, blockIdsMaxId) {\n state.currentUser.blockIdsMaxId = blockIdsMaxId\n },\n saveMuteIds (state, muteIds) {\n state.currentUser.muteIds = muteIds\n },\n setMuteIdsMaxId (state, muteIdsMaxId) {\n state.currentUser.muteIdsMaxId = muteIdsMaxId\n },\n addMuteId (state, muteId) {\n if (state.currentUser.muteIds.indexOf(muteId) === -1) {\n state.currentUser.muteIds.push(muteId)\n }\n },\n saveDomainMutes (state, domainMutes) {\n state.currentUser.domainMutes = domainMutes\n },\n addDomainMute (state, domain) {\n if (state.currentUser.domainMutes.indexOf(domain) === -1) {\n state.currentUser.domainMutes.push(domain)\n }\n },\n removeDomainMute (state, domain) {\n const index = state.currentUser.domainMutes.indexOf(domain)\n if (index !== -1) {\n state.currentUser.domainMutes.splice(index, 1)\n }\n },\n setPinnedToUser (state, status) {\n const user = state.usersObject[status.user.id]\n user.pinnedStatusIds = user.pinnedStatusIds || []\n const index = user.pinnedStatusIds.indexOf(status.id)\n\n if (status.pinned && index === -1) {\n user.pinnedStatusIds.push(status.id)\n } else if (!status.pinned && index !== -1) {\n user.pinnedStatusIds.splice(index, 1)\n }\n },\n setUserForStatus (state, status) {\n status.user = state.usersObject[status.user.id]\n },\n setUserForNotification (state, notification) {\n if (notification.type !== 'follow') {\n notification.action.user = state.usersObject[notification.action.user.id]\n }\n notification.from_profile = state.usersObject[notification.from_profile.id]\n },\n setColor (state, { user: { id }, highlighted }) {\n const user = state.usersObject[id]\n user.highlight = highlighted\n },\n signUpPending (state) {\n state.signUpPending = true\n state.signUpErrors = []\n },\n signUpSuccess (state) {\n state.signUpPending = false\n },\n signUpFailure (state, errors) {\n state.signUpPending = false\n state.signUpErrors = errors\n }\n}\n\nexport const getters = {\n findUser: state => query => {\n return state.usersObject[query]\n },\n findUserByName: state => query => {\n return state.usersByNameObject[query.toLowerCase()]\n },\n findUserByUrl: state => query => {\n return state.users\n .find(u => u.statusnet_profile_url &&\n u.statusnet_profile_url.toLowerCase() === query.toLowerCase())\n },\n relationship: state => id => {\n const rel = id && state.relationships[id]\n return rel || { id, loading: true }\n }\n}\n\nexport const defaultState = {\n loggingIn: false,\n lastLoginName: false,\n currentUser: false,\n users: [],\n usersObject: {},\n usersByNameObject: {},\n signUpPending: false,\n signUpErrors: [],\n relationships: {}\n}\n\nconst users = {\n state: defaultState,\n mutations,\n getters,\n actions: {\n fetchUserIfMissing (store, id) {\n if (!store.getters.findUser(id)) {\n store.dispatch('fetchUser', id)\n }\n },\n fetchUser (store, id) {\n return store.rootState.api.backendInteractor.fetchUser({ id })\n .then((user) => {\n store.commit('addNewUsers', [user])\n return user\n })\n },\n fetchUserByName (store, name) {\n return store.rootState.api.backendInteractor.fetchUserByName({ name })\n .then((user) => {\n store.commit('addNewUsers', [user])\n return user\n })\n },\n fetchUserRelationship (store, id) {\n if (store.state.currentUser) {\n store.rootState.api.backendInteractor.fetchUserRelationship({ id })\n .then((relationships) => store.commit('updateUserRelationship', relationships))\n }\n },\n fetchUserInLists (store, id) {\n if (store.state.currentUser) {\n store.rootState.api.backendInteractor.fetchUserInLists({ id })\n .then((inLists) => store.commit('updateUserInLists', { id, inLists }))\n }\n },\n fetchBlocks (store, args) {\n const { reset } = args || {}\n\n const maxId = store.state.currentUser.blockIdsMaxId\n return store.rootState.api.backendInteractor.fetchBlocks({ maxId })\n .then((blocks) => {\n if (reset) {\n store.commit('saveBlockIds', map(blocks, 'id'))\n } else {\n map(blocks, 'id').map(id => store.commit('addBlockId', id))\n }\n if (blocks.length) {\n store.commit('setBlockIdsMaxId', last(blocks).id)\n }\n store.commit('addNewUsers', blocks)\n return blocks\n })\n },\n blockUser (store, id) {\n return blockUser(store, id)\n },\n unblockUser (store, id) {\n return unblockUser(store, id)\n },\n removeUserFromFollowers (store, id) {\n return removeUserFromFollowers(store, id)\n },\n blockUsers (store, ids = []) {\n return Promise.all(ids.map(id => blockUser(store, id)))\n },\n unblockUsers (store, ids = []) {\n return Promise.all(ids.map(id => unblockUser(store, id)))\n },\n editUserNote (store, args) {\n return editUserNote(store, args)\n },\n fetchMutes (store, args) {\n const { reset } = args || {}\n\n const maxId = store.state.currentUser.muteIdsMaxId\n return store.rootState.api.backendInteractor.fetchMutes({ maxId })\n .then((mutes) => {\n if (reset) {\n store.commit('saveMuteIds', map(mutes, 'id'))\n } else {\n map(mutes, 'id').map(id => store.commit('addMuteId', id))\n }\n if (mutes.length) {\n store.commit('setMuteIdsMaxId', last(mutes).id)\n }\n store.commit('addNewUsers', mutes)\n return mutes\n })\n },\n muteUser (store, id) {\n return muteUser(store, id)\n },\n unmuteUser (store, id) {\n return unmuteUser(store, id)\n },\n hideReblogs (store, id) {\n return hideReblogs(store, id)\n },\n showReblogs (store, id) {\n return showReblogs(store, id)\n },\n muteUsers (store, ids = []) {\n return Promise.all(ids.map(id => muteUser(store, id)))\n },\n unmuteUsers (store, ids = []) {\n return Promise.all(ids.map(id => unmuteUser(store, id)))\n },\n fetchDomainMutes (store) {\n return store.rootState.api.backendInteractor.fetchDomainMutes()\n .then((domainMutes) => {\n store.commit('saveDomainMutes', domainMutes)\n return domainMutes\n })\n },\n muteDomain (store, domain) {\n return muteDomain(store, domain)\n },\n unmuteDomain (store, domain) {\n return unmuteDomain(store, domain)\n },\n muteDomains (store, domains = []) {\n return Promise.all(domains.map(domain => muteDomain(store, domain)))\n },\n unmuteDomains (store, domain = []) {\n return Promise.all(domain.map(domain => unmuteDomain(store, domain)))\n },\n fetchFriends ({ rootState, commit }, id) {\n const user = rootState.users.usersObject[id]\n const maxId = last(user.friendIds)\n return rootState.api.backendInteractor.fetchFriends({ id, maxId })\n .then((friends) => {\n commit('addNewUsers', friends)\n commit('saveFriendIds', { id, friendIds: map(friends, 'id') })\n return friends\n })\n },\n fetchFollowers ({ rootState, commit }, id) {\n const user = rootState.users.usersObject[id]\n const maxId = last(user.followerIds)\n return rootState.api.backendInteractor.fetchFollowers({ id, maxId })\n .then((followers) => {\n commit('addNewUsers', followers)\n commit('saveFollowerIds', { id, followerIds: map(followers, 'id') })\n return followers\n })\n },\n clearFriends ({ commit }, userId) {\n commit('clearFriends', userId)\n },\n clearFollowers ({ commit }, userId) {\n commit('clearFollowers', userId)\n },\n subscribeUser ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.subscribeUser({ id })\n .then((relationship) => commit('updateUserRelationship', [relationship]))\n },\n unsubscribeUser ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.unsubscribeUser({ id })\n .then((relationship) => commit('updateUserRelationship', [relationship]))\n },\n toggleActivationStatus ({ rootState, commit }, { user }) {\n const api = user.deactivated ? rootState.api.backendInteractor.activateUser : rootState.api.backendInteractor.deactivateUser\n api({ user })\n .then((user) => { const deactivated = !user.is_active; commit('updateActivationStatus', { user, deactivated }) })\n },\n registerPushNotifications (store) {\n const token = store.state.currentUser.credentials\n const vapidPublicKey = store.rootState.instance.vapidPublicKey\n const isEnabled = store.rootState.config.webPushNotifications\n const notificationVisibility = store.rootState.config.notificationVisibility\n\n registerPushNotifications(isEnabled, vapidPublicKey, token, notificationVisibility)\n },\n unregisterPushNotifications (store) {\n const token = store.state.currentUser.credentials\n\n unregisterPushNotifications(token)\n },\n addNewUsers ({ commit }, users) {\n commit('addNewUsers', users)\n },\n addNewStatuses (store, { statuses }) {\n const users = map(statuses, 'user')\n const retweetedUsers = compact(map(statuses, 'retweeted_status.user'))\n store.commit('addNewUsers', users)\n store.commit('addNewUsers', retweetedUsers)\n\n each(statuses, (status) => {\n // Reconnect users to statuses\n store.commit('setUserForStatus', status)\n // Set pinned statuses to user\n store.commit('setPinnedToUser', status)\n })\n each(compact(map(statuses, 'retweeted_status')), (status) => {\n // Reconnect users to retweets\n store.commit('setUserForStatus', status)\n // Set pinned retweets to user\n store.commit('setPinnedToUser', status)\n })\n },\n addNewNotifications (store, { notifications }) {\n const users = map(notifications, 'from_profile')\n const targetUsers = map(notifications, 'target').filter(_ => _)\n const notificationIds = notifications.map(_ => _.id)\n store.commit('addNewUsers', users)\n store.commit('addNewUsers', targetUsers)\n\n const notificationsObject = store.rootState.statuses.notifications.idStore\n const relevantNotifications = Object.entries(notificationsObject)\n .filter(([k, val]) => notificationIds.includes(k))\n .map(([k, val]) => val)\n\n // Reconnect users to notifications\n each(relevantNotifications, (notification) => {\n store.commit('setUserForNotification', notification)\n })\n },\n searchUsers ({ rootState, commit }, { query }) {\n return rootState.api.backendInteractor.searchUsers({ query })\n .then((users) => {\n commit('addNewUsers', users)\n return users\n })\n },\n async signUp (store, userInfo) {\n store.commit('signUpPending')\n\n const rootState = store.rootState\n\n try {\n const data = await rootState.api.backendInteractor.register(\n { params: { ...userInfo } }\n )\n store.commit('signUpSuccess')\n store.commit('setToken', data.access_token)\n store.dispatch('loginUser', data.access_token)\n } catch (e) {\n const errors = e.message\n store.commit('signUpFailure', errors)\n throw e\n }\n },\n async getCaptcha (store) {\n return store.rootState.api.backendInteractor.getCaptcha()\n },\n\n logout (store) {\n const { oauth, instance } = store.rootState\n\n const data = {\n ...oauth,\n commit: store.commit,\n instance: instance.server\n }\n\n return oauthApi.getOrCreateApp(data)\n .then((app) => {\n const params = {\n app,\n instance: data.instance,\n token: oauth.userToken\n }\n\n return oauthApi.revokeToken(params)\n })\n .then(() => {\n store.commit('clearCurrentUser')\n store.dispatch('disconnectFromSocket')\n store.commit('clearToken')\n store.dispatch('stopFetchingTimeline', 'friends')\n store.commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))\n store.dispatch('stopFetchingNotifications')\n store.dispatch('stopFetchingLists')\n store.dispatch('stopFetchingFollowRequests')\n store.commit('clearNotifications')\n store.commit('resetStatuses')\n store.dispatch('resetChats')\n store.dispatch('setLastTimeline', 'public-timeline')\n store.dispatch('setLayoutWidth', windowWidth())\n store.dispatch('setLayoutHeight', windowHeight())\n store.commit('clearServerSideStorage')\n })\n },\n loginUser (store, accessToken) {\n return new Promise((resolve, reject) => {\n const commit = store.commit\n const dispatch = store.dispatch\n commit('beginLogin')\n store.rootState.api.backendInteractor.verifyCredentials(accessToken)\n .then((data) => {\n if (!data.error) {\n const user = data\n // user.credentials = userCredentials\n user.credentials = accessToken\n user.blockIds = []\n user.muteIds = []\n user.domainMutes = []\n commit('setCurrentUser', user)\n commit('setServerSideStorage', user)\n commit('addNewUsers', [user])\n\n dispatch('fetchEmoji')\n\n getNotificationPermission()\n .then(permission => commit('setNotificationPermission', permission))\n\n // Set our new backend interactor\n commit('setBackendInteractor', backendInteractorService(accessToken))\n dispatch('pushServerSideStorage')\n\n if (user.token) {\n dispatch('setWsToken', user.token)\n\n // Initialize the shout socket.\n dispatch('initializeSocket')\n }\n\n const startPolling = () => {\n // Start getting fresh posts.\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n\n // Start fetching notifications\n dispatch('startFetchingNotifications')\n\n // Start fetching chats\n dispatch('startFetchingChats')\n }\n\n dispatch('startFetchingLists')\n\n if (user.locked) {\n dispatch('startFetchingFollowRequests')\n }\n\n if (store.getters.mergedConfig.useStreamingApi) {\n dispatch('fetchTimeline', { timeline: 'friends', since: null })\n dispatch('fetchNotifications', { since: null })\n dispatch('enableMastoSockets', true).catch((error) => {\n console.error('Failed initializing MastoAPI Streaming socket', error)\n }).then(() => {\n dispatch('fetchChats', { latest: true })\n setTimeout(() => dispatch('setNotificationsSilence', false), 10000)\n })\n } else {\n startPolling()\n }\n\n // Get user mutes\n dispatch('fetchMutes')\n\n dispatch('setLayoutWidth', windowWidth())\n dispatch('setLayoutHeight', windowHeight())\n\n // Fetch our friends\n store.rootState.api.backendInteractor.fetchFriends({ id: user.id })\n .then((friends) => commit('addNewUsers', friends))\n } else {\n const response = data.error\n // Authentication failed\n commit('endLogin')\n\n // remove authentication token on client/authentication errors\n if ([400, 401, 403, 422].includes(response.status)) {\n commit('clearToken')\n }\n\n if (response.status === 401) {\n reject(new Error('Wrong username or password'))\n } else {\n reject(new Error('An error occurred, please try again'))\n }\n }\n commit('endLogin')\n resolve()\n })\n .catch((error) => {\n console.log(error)\n commit('endLogin')\n reject(new Error('Failed to connect to server, try again'))\n })\n })\n }\n }\n}\n\nexport default users\n","import { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'\n\nexport const maybeShowChatNotification = (store, chat) => {\n if (!chat.lastMessage) return\n if (store.rootState.chats.currentChatId === chat.id && !document.hidden) return\n if (store.rootState.users.currentUser.id === chat.lastMessage.account_id) return\n\n const opts = {\n tag: chat.lastMessage.id,\n title: chat.account.name,\n icon: chat.account.profile_image_url,\n body: chat.lastMessage.content\n }\n\n if (chat.lastMessage.attachment && chat.lastMessage.attachment.type === 'image') {\n opts.image = chat.lastMessage.attachment.preview_url\n }\n\n showDesktopNotification(store.rootState, opts)\n}\n\nexport const buildFakeMessage = ({ content, chatId, attachments, userId, idempotencyKey }) => {\n const fakeMessage = {\n content,\n chat_id: chatId,\n created_at: new Date(),\n id: `${new Date().getTime()}`,\n attachments,\n account_id: userId,\n idempotency_key: idempotencyKey,\n emojis: [],\n pending: true,\n isNormalized: true\n }\n\n if (attachments[0]) {\n fakeMessage.attachment = attachments[0]\n }\n\n return fakeMessage\n}\n","import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { WSConnectionStatus } from '../services/api/api.service.js'\nimport { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'\nimport { Socket } from 'phoenix'\n\nconst retryTimeout = (multiplier) => 1000 * multiplier\n\nconst api = {\n state: {\n retryMultiplier: 1,\n backendInteractor: backendInteractorService(),\n fetchers: {},\n socket: null,\n mastoUserSocket: null,\n mastoUserSocketStatus: null,\n followRequests: []\n },\n getters: {\n followRequestCount: state => state.followRequests.length\n },\n mutations: {\n setBackendInteractor (state, backendInteractor) {\n state.backendInteractor = backendInteractor\n },\n addFetcher (state, { fetcherName, fetcher }) {\n state.fetchers[fetcherName] = fetcher\n },\n removeFetcher (state, { fetcherName, fetcher }) {\n state.fetchers[fetcherName].stop()\n delete state.fetchers[fetcherName]\n },\n setWsToken (state, token) {\n state.wsToken = token\n },\n setSocket (state, socket) {\n state.socket = socket\n },\n setFollowRequests (state, value) {\n state.followRequests = value\n },\n setMastoUserSocketStatus (state, value) {\n state.mastoUserSocketStatus = value\n },\n incrementRetryMultiplier (state) {\n state.retryMultiplier = Math.max(++state.retryMultiplier, 3)\n },\n resetRetryMultiplier (state) {\n state.retryMultiplier = 1\n }\n },\n actions: {\n /**\n * Global MastoAPI socket control, in future should disable ALL sockets/(re)start relevant sockets\n *\n * @param {Boolean} [initial] - whether this enabling happened at boot time or not\n */\n enableMastoSockets (store, initial) {\n const { state, dispatch, commit } = store\n // Do not initialize unless nonexistent or closed\n if (\n state.mastoUserSocket &&\n ![\n WebSocket.CLOSED,\n WebSocket.CLOSING\n ].includes(state.mastoUserSocket.getState())\n ) {\n return\n }\n if (initial) {\n commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING_INITIAL)\n } else {\n commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING)\n }\n return dispatch('startMastoUserSocket')\n },\n disableMastoSockets (store) {\n const { state, dispatch, commit } = store\n if (!state.mastoUserSocket) return\n commit('setMastoUserSocketStatus', WSConnectionStatus.DISABLED)\n return dispatch('stopMastoUserSocket')\n },\n\n // MastoAPI 'User' sockets\n startMastoUserSocket (store) {\n return new Promise((resolve, reject) => {\n try {\n const { state, commit, dispatch, rootState } = store\n const timelineData = rootState.statuses.timelines.friends\n state.mastoUserSocket = state.backendInteractor.startUserSocket({ store })\n state.mastoUserSocket.addEventListener(\n 'message',\n ({ detail: message }) => {\n if (!message) return // pings\n if (message.event === 'notification') {\n dispatch('addNewNotifications', {\n notifications: [message.notification],\n older: false\n })\n } else if (message.event === 'update') {\n dispatch('addNewStatuses', {\n statuses: [message.status],\n userId: false,\n showImmediately: timelineData.visibleStatuses.length === 0,\n timeline: 'friends'\n })\n } else if (message.event === 'status.update') {\n dispatch('addNewStatuses', {\n statuses: [message.status],\n userId: false,\n showImmediately: message.status.id in timelineData.visibleStatusesObject,\n timeline: 'friends'\n })\n } else if (message.event === 'delete') {\n dispatch('deleteStatusById', message.id)\n } else if (message.event === 'pleroma:chat_update') {\n // The setTimeout wrapper is a temporary band-aid to avoid duplicates for the user's own messages when doing optimistic sending.\n // The cause of the duplicates is the WS event arriving earlier than the HTTP response.\n // This setTimeout wrapper can be removed once the commit `8e41baff` is in the stable Pleroma release.\n // (`8e41baff` adds the idempotency key to the chat message entity, which PleromaFE uses when it's available, and it makes this artificial delay unnecessary).\n setTimeout(() => {\n dispatch('addChatMessages', {\n chatId: message.chatUpdate.id,\n messages: [message.chatUpdate.lastMessage]\n })\n dispatch('updateChat', { chat: message.chatUpdate })\n maybeShowChatNotification(store, message.chatUpdate)\n }, 100)\n }\n }\n )\n state.mastoUserSocket.addEventListener('open', () => {\n // Do not show notification when we just opened up the page\n if (state.mastoUserSocketStatus !== WSConnectionStatus.STARTING_INITIAL) {\n dispatch('pushGlobalNotice', {\n level: 'success',\n messageKey: 'timeline.socket_reconnected',\n timeout: 5000\n })\n }\n // Stop polling if we were errored or disabled\n if (new Set([\n WSConnectionStatus.ERROR,\n WSConnectionStatus.DISABLED\n ]).has(state.mastoUserSocketStatus)) {\n dispatch('stopFetchingTimeline', { timeline: 'friends' })\n dispatch('stopFetchingNotifications')\n dispatch('stopFetchingChats')\n }\n commit('resetRetryMultiplier')\n commit('setMastoUserSocketStatus', WSConnectionStatus.JOINED)\n })\n state.mastoUserSocket.addEventListener('error', ({ detail: error }) => {\n console.error('Error in MastoAPI websocket:', error)\n // TODO is this needed?\n dispatch('clearOpenedChats')\n })\n state.mastoUserSocket.addEventListener('close', ({ detail: closeEvent }) => {\n const ignoreCodes = new Set([\n 1000, // Normal (intended) closure\n 1001 // Going away\n ])\n const { code } = closeEvent\n if (ignoreCodes.has(code)) {\n console.debug(`Not restarting socket becasue of closure code ${code} is in ignore list`)\n commit('setMastoUserSocketStatus', WSConnectionStatus.CLOSED)\n } else {\n console.warn(`MastoAPI websocket disconnected, restarting. CloseEvent code: ${code}`)\n setTimeout(() => {\n dispatch('startMastoUserSocket')\n }, retryTimeout(state.retryMultiplier))\n commit('incrementRetryMultiplier')\n if (state.mastoUserSocketStatus !== WSConnectionStatus.ERROR) {\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n dispatch('startFetchingNotifications')\n dispatch('startFetchingChats')\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'timeline.socket_broke',\n messageArgs: [code],\n timeout: 5000\n })\n }\n commit('setMastoUserSocketStatus', WSConnectionStatus.ERROR)\n }\n dispatch('clearOpenedChats')\n })\n resolve()\n } catch (e) {\n reject(e)\n }\n })\n },\n stopMastoUserSocket ({ state, dispatch }) {\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n dispatch('startFetchingNotifications')\n dispatch('startFetchingChats')\n state.mastoUserSocket.close()\n },\n\n // Timelines\n startFetchingTimeline (store, {\n timeline = 'friends',\n tag = false,\n userId = false,\n listId = false\n }) {\n if (store.state.fetchers[timeline]) return\n\n const fetcher = store.state.backendInteractor.startFetchingTimeline({\n timeline, store, userId, listId, tag\n })\n store.commit('addFetcher', { fetcherName: timeline, fetcher })\n },\n stopFetchingTimeline (store, timeline) {\n const fetcher = store.state.fetchers[timeline]\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: timeline, fetcher })\n },\n fetchTimeline (store, { timeline, ...rest }) {\n store.state.backendInteractor.fetchTimeline({\n store,\n timeline,\n ...rest\n })\n },\n\n // Notifications\n startFetchingNotifications (store) {\n if (store.state.fetchers.notifications) return\n const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })\n store.commit('addFetcher', { fetcherName: 'notifications', fetcher })\n },\n stopFetchingNotifications (store) {\n const fetcher = store.state.fetchers.notifications\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'notifications', fetcher })\n },\n fetchNotifications (store, { ...rest }) {\n store.state.backendInteractor.fetchNotifications({\n store,\n ...rest\n })\n },\n\n // Follow requests\n startFetchingFollowRequests (store) {\n if (store.state.fetchers.followRequests) return\n const fetcher = store.state.backendInteractor.startFetchingFollowRequests({ store })\n\n store.commit('addFetcher', { fetcherName: 'followRequests', fetcher })\n },\n stopFetchingFollowRequests (store) {\n const fetcher = store.state.fetchers.followRequests\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'followRequests', fetcher })\n },\n removeFollowRequest (store, request) {\n const requests = store.state.followRequests.filter((it) => it !== request)\n store.commit('setFollowRequests', requests)\n },\n\n // Lists\n startFetchingLists (store) {\n if (store.state.fetchers.lists) return\n const fetcher = store.state.backendInteractor.startFetchingLists({ store })\n store.commit('addFetcher', { fetcherName: 'lists', fetcher })\n },\n stopFetchingLists (store) {\n const fetcher = store.state.fetchers.lists\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'lists', fetcher })\n },\n\n // Pleroma websocket\n setWsToken (store, token) {\n store.commit('setWsToken', token)\n },\n initializeSocket ({ dispatch, commit, state, rootState }) {\n // Set up websocket connection\n const token = state.wsToken\n if (rootState.instance.shoutAvailable && typeof token !== 'undefined' && state.socket === null) {\n const socket = new Socket('/socket', { params: { token } })\n socket.connect()\n\n commit('setSocket', socket)\n dispatch('initializeShout', socket)\n }\n },\n disconnectFromSocket ({ commit, state }) {\n state.socket && state.socket.disconnect()\n commit('setSocket', null)\n }\n }\n}\n\nexport default api\n","import { get, set } from 'lodash'\n\nconst defaultApi = ({ rootState, commit }, { path, value }) => {\n const params = {}\n set(params, path, value)\n return rootState\n .api\n .backendInteractor\n .updateProfile({ params })\n .then(result => {\n commit('addNewUsers', [result])\n commit('setCurrentUser', result)\n })\n}\n\nconst notificationsApi = ({ rootState, commit }, { path, value, oldValue }) => {\n const settings = {}\n set(settings, path, value)\n return rootState\n .api\n .backendInteractor\n .updateNotificationSettings({ settings })\n .then(result => {\n if (result.status === 'success') {\n commit('confirmProfileOption', { name, value })\n } else {\n commit('confirmProfileOption', { name, value: oldValue })\n }\n })\n}\n\n/**\n * Map that stores relation between path for reading (from user profile),\n * for writing (into API) an what API to use.\n *\n * Shorthand - instead of { get, set, api? } object it's possible to use string\n * in case default api is used and get = set\n *\n * If no api is specified, defaultApi is used (see above)\n */\nexport const settingsMap = {\n defaultScope: 'source.privacy',\n defaultNSFW: 'source.sensitive', // BROKEN: pleroma/pleroma#2837\n stripRichContent: {\n get: 'source.pleroma.no_rich_text',\n set: 'no_rich_text'\n },\n // Privacy\n locked: 'locked',\n acceptChatMessages: {\n get: 'pleroma.accepts_chat_messages',\n set: 'accepts_chat_messages'\n },\n allowFollowingMove: {\n get: 'pleroma.allow_following_move',\n set: 'allow_following_move'\n },\n discoverable: {\n get: 'source.pleroma.discoverable',\n set: 'discoverable'\n },\n hideFavorites: {\n get: 'pleroma.hide_favorites',\n set: 'hide_favorites'\n },\n hideFollowers: {\n get: 'pleroma.hide_followers',\n set: 'hide_followers'\n },\n hideFollows: {\n get: 'pleroma.hide_follows',\n set: 'hide_follows'\n },\n hideFollowersCount: {\n get: 'pleroma.hide_followers_count',\n set: 'hide_followers_count'\n },\n hideFollowsCount: {\n get: 'pleroma.hide_follows_count',\n set: 'hide_follows_count'\n },\n // NotificationSettingsAPIs\n webPushHideContents: {\n get: 'pleroma.notification_settings.hide_notification_contents',\n set: 'hide_notification_contents',\n api: notificationsApi\n },\n blockNotificationsFromStrangers: {\n get: 'pleroma.notification_settings.block_from_strangers',\n set: 'block_from_strangers',\n api: notificationsApi\n }\n}\n\nexport const defaultState = Object.fromEntries(Object.keys(settingsMap).map(key => [key, null]))\n\nconst profileConfig = {\n state: { ...defaultState },\n mutations: {\n confirmProfileOption (state, { name, value }) {\n set(state, name, value)\n },\n wipeProfileOption (state, { name }) {\n set(state, name, null)\n },\n wipeAllProfileOptions (state) {\n Object.keys(settingsMap).forEach(key => {\n set(state, key, null)\n })\n },\n // Set the settings based on their path location\n setCurrentUser (state, user) {\n Object.entries(settingsMap).forEach((map) => {\n const [name, value] = map\n const { get: path = value } = value\n set(state, name, get(user._original, path))\n })\n }\n },\n actions: {\n setProfileOption ({ rootState, state, commit, dispatch }, { name, value }) {\n const oldValue = get(state, name)\n const map = settingsMap[name]\n if (!map) throw new Error('Invalid server-side setting')\n const { set: path = map, api = defaultApi } = map\n commit('wipeProfileOption', { name })\n\n api({ rootState, commit }, { path, value, oldValue })\n .catch((e) => {\n console.warn('Error setting server-side option:', e)\n commit('confirmProfileOption', { name, value: oldValue })\n })\n },\n logout ({ commit }) {\n commit('wipeAllProfileOptions')\n }\n }\n}\n\nexport default profileConfig\n","import Modal from 'src/components/modal/modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport pleromaTan from 'src/assets/pleromatan_apology.png'\nimport pleromaTanFox from 'src/assets/pleromatan_apology_fox.png'\nimport pleromaTanMask from 'src/assets/pleromatan_apology_mask.png'\nimport pleromaTanFoxMask from 'src/assets/pleromatan_apology_fox_mask.png'\n\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\nlibrary.add(\n faTimes\n)\n\nexport const CURRENT_UPDATE_COUNTER = 1\n\nconst UpdateNotification = {\n data () {\n return {\n showingImage: false,\n pleromaTanVariant: Math.random() > 0.5 ? pleromaTan : pleromaTanFox,\n showingMore: false\n }\n },\n components: {\n Modal\n },\n computed: {\n pleromaTanStyles () {\n const mask = this.pleromaTanVariant === pleromaTan ? pleromaTanMask : pleromaTanFoxMask\n return {\n 'shape-outside': 'url(' + mask + ')'\n }\n },\n shouldShow () {\n return !this.$store.state.instance.disableUpdateNotification &&\n this.$store.state.users.currentUser &&\n this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&\n !this.$store.state.serverSideStorage.prefsStorage.simple.dontShowUpdateNotifs\n }\n },\n methods: {\n toggleShow () {\n this.showingMore = !this.showingMore\n },\n neverShowAgain () {\n this.toggleShow()\n this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })\n this.$store.commit('setPreference', { path: 'simple.dontShowUpdateNotifs', value: true })\n this.$store.dispatch('pushServerSideStorage')\n },\n dismiss () {\n this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n mounted () {\n this.contentHeightNoImage = this.$refs.animatedText.scrollHeight\n\n // Workaround to get the text height only after mask loaded. A bit hacky.\n const newImg = new Image()\n newImg.onload = () => {\n setTimeout(() => { this.showingImage = true }, 100)\n }\n newImg.src = this.pleromaTanVariant === pleromaTan ? pleromaTanMask : pleromaTanFoxMask\n }\n}\n\nexport default UpdateNotification\n","import { toRaw } from 'vue'\nimport { isEqual, cloneDeep, set, get, clamp, flatten, groupBy, findLastIndex, takeRight, uniqWith } from 'lodash'\nimport { CURRENT_UPDATE_COUNTER } from 'src/components/update_notification/update_notification.js'\n\nexport const VERSION = 1\nexport const NEW_USER_DATE = new Date('2022-08-04') // date of writing this, basically\n\nexport const COMMAND_TRIM_FLAGS = 1000\nexport const COMMAND_TRIM_FLAGS_AND_RESET = 1001\n\nexport const defaultState = {\n // do we need to update data on server?\n dirty: false,\n // storage of flags - stuff that can only be set and incremented\n flagStorage: {\n updateCounter: 0, // Counter for most recent update notification seen\n reset: 0 // special flag that can be used to force-reset all flags, debug purposes only\n // special reset codes:\n // 1000: trim keys to those known by currently running FE\n // 1001: same as above + reset everything to 0\n },\n prefsStorage: {\n _journal: [],\n simple: {\n dontShowUpdateNotifs: false,\n collapseNav: false\n },\n collections: {\n pinnedNavItems: ['home', 'dms', 'chats']\n }\n },\n // raw data\n raw: null,\n // local cache\n cache: null\n}\n\nexport const newUserFlags = {\n ...defaultState.flagStorage,\n updateCounter: CURRENT_UPDATE_COUNTER // new users don't need to see update notification\n}\n\nexport const _moveItemInArray = (array, value, movement) => {\n const oldIndex = array.indexOf(value)\n const newIndex = oldIndex + movement\n const newArray = [...array]\n // remove old\n newArray.splice(oldIndex, 1)\n // add new\n newArray.splice(clamp(newIndex, 0, newArray.length + 1), 0, value)\n return newArray\n}\n\nconst _wrapData = (data, userName) => ({\n ...data,\n _user: userName,\n _timestamp: Date.now(),\n _version: VERSION\n})\n\nconst _checkValidity = (data) => data._timestamp > 0 && data._version > 0\n\nconst _verifyPrefs = (state) => {\n state.prefsStorage = state.prefsStorage || {\n simple: {},\n collections: {}\n }\n Object.entries(defaultState.prefsStorage.simple).forEach(([k, v]) => {\n if (typeof v === 'number' || typeof v === 'boolean') return\n console.warn(`Preference simple.${k} as invalid type, reinitializing`)\n set(state.prefsStorage.simple, k, defaultState.prefsStorage.simple[k])\n })\n Object.entries(defaultState.prefsStorage.collections).forEach(([k, v]) => {\n if (Array.isArray(v)) return\n console.warn(`Preference collections.${k} as invalid type, reinitializing`)\n set(state.prefsStorage.collections, k, defaultState.prefsStorage.collections[k])\n })\n}\n\nexport const _getRecentData = (cache, live) => {\n const result = { recent: null, stale: null, needUpload: false }\n const cacheValid = _checkValidity(cache || {})\n const liveValid = _checkValidity(live || {})\n if (!liveValid && cacheValid) {\n result.needUpload = true\n console.debug('Nothing valid stored on server, assuming cache to be source of truth')\n result.recent = cache\n result.stale = live\n } else if (!cacheValid && liveValid) {\n console.debug('Valid storage on server found, no local cache found, using live as source of truth')\n result.recent = live\n result.stale = cache\n } else if (cacheValid && liveValid) {\n console.debug('Both sources have valid data, figuring things out...')\n if (live._timestamp === cache._timestamp && live._version === cache._version) {\n console.debug('Same version/timestamp on both source, source of truth irrelevant')\n result.recent = cache\n result.stale = live\n } else {\n console.debug('Different timestamp, figuring out which one is more recent')\n if (live._timestamp < cache._timestamp) {\n result.recent = cache\n result.stale = live\n } else {\n result.recent = live\n result.stale = cache\n }\n }\n } else {\n console.debug('Both sources are invalid, start from scratch')\n result.needUpload = true\n }\n return result\n}\n\nexport const _getAllFlags = (recent, stale) => {\n return Array.from(new Set([\n ...Object.keys(toRaw((recent || {}).flagStorage || {})),\n ...Object.keys(toRaw((stale || {}).flagStorage || {}))\n ]))\n}\n\nexport const _mergeFlags = (recent, stale, allFlagKeys) => {\n if (!stale.flagStorage) return recent.flagStorage\n if (!recent.flagStorage) return stale.flagStorage\n return Object.fromEntries(allFlagKeys.map(flag => {\n const recentFlag = recent.flagStorage[flag]\n const staleFlag = stale.flagStorage[flag]\n // use flag that is of higher value\n return [flag, Number((recentFlag > staleFlag ? recentFlag : staleFlag) || 0)]\n }))\n}\n\nconst _mergeJournal = (...journals) => {\n // Ignore invalid journal entries\n const allJournals = flatten(\n journals.map(j => Array.isArray(j) ? j : [])\n ).filter(entry =>\n Object.prototype.hasOwnProperty.call(entry, 'path') &&\n Object.prototype.hasOwnProperty.call(entry, 'operation') &&\n Object.prototype.hasOwnProperty.call(entry, 'args') &&\n Object.prototype.hasOwnProperty.call(entry, 'timestamp')\n )\n const grouped = groupBy(allJournals, 'path')\n const trimmedGrouped = Object.entries(grouped).map(([path, journal]) => {\n // side effect\n journal.sort((a, b) => a.timestamp > b.timestamp ? 1 : -1)\n\n if (path.startsWith('collections')) {\n const lastRemoveIndex = findLastIndex(journal, ({ operation }) => operation === 'removeFromCollection')\n // everything before last remove is unimportant\n let remainder\n if (lastRemoveIndex > 0) {\n remainder = journal.slice(lastRemoveIndex)\n } else {\n // everything else doesn't need trimming\n remainder = journal\n }\n return uniqWith(remainder, (a, b) => {\n if (a.path !== b.path) { return false }\n if (a.operation !== b.operation) { return false }\n if (a.operation === 'addToCollection') {\n return a.args[0] === b.args[0]\n }\n return false\n })\n } else if (path.startsWith('simple')) {\n // Only the last record is important\n return takeRight(journal)\n } else {\n return journal\n }\n })\n return flatten(trimmedGrouped)\n .sort((a, b) => a.timestamp > b.timestamp ? 1 : -1)\n}\n\nexport const _mergePrefs = (recent, stale, allFlagKeys) => {\n if (!stale) return recent\n if (!recent) return stale\n const { _journal: recentJournal, ...recentData } = recent\n const { _journal: staleJournal } = stale\n /** Journal entry format:\n * path: path to entry in prefsStorage\n * timestamp: timestamp of the change\n * operation: operation type\n * arguments: array of arguments, depends on operation type\n *\n * currently only supported operation type is \"set\" which just sets the value\n * to requested one. Intended only to be used with simple preferences (boolean, number)\n * shouldn't be used with collections!\n */\n const resultOutput = { ...recentData }\n const totalJournal = _mergeJournal(staleJournal, recentJournal)\n totalJournal.forEach(({ path, timestamp, operation, command, args }) => {\n if (path.startsWith('_')) {\n console.error(`journal contains entry to edit internal (starts with _) field '${path}', something is incorrect here, ignoring.`)\n return\n }\n switch (operation) {\n case 'set':\n set(resultOutput, path, args[0])\n break\n case 'addToCollection':\n set(resultOutput, path, Array.from(new Set(get(resultOutput, path)).add(args[0])))\n break\n case 'removeFromCollection': {\n const newSet = new Set(get(resultOutput, path))\n newSet.delete(args[0])\n set(resultOutput, path, Array.from(newSet))\n break\n }\n case 'reorderCollection': {\n const [value, movement] = args\n set(resultOutput, path, _moveItemInArray(get(resultOutput, path), value, movement))\n break\n }\n default:\n console.error(`Unknown journal operation: '${operation}', did we forget to run reverse migrations beforehand?`)\n }\n })\n return { ...resultOutput, _journal: totalJournal }\n}\n\nexport const _resetFlags = (totalFlags, knownKeys = defaultState.flagStorage) => {\n let result = { ...totalFlags }\n const allFlagKeys = Object.keys(totalFlags)\n // flag reset functionality\n if (totalFlags.reset >= COMMAND_TRIM_FLAGS && totalFlags.reset <= COMMAND_TRIM_FLAGS_AND_RESET) {\n console.debug('Received command to trim the flags')\n const knownKeysSet = new Set(Object.keys(knownKeys))\n\n // Trim\n result = {}\n allFlagKeys.forEach(flag => {\n if (knownKeysSet.has(flag)) {\n result[flag] = totalFlags[flag]\n }\n })\n\n // Reset\n if (totalFlags.reset === COMMAND_TRIM_FLAGS_AND_RESET) {\n // 1001 - and reset everything to 0\n console.debug('Received command to reset the flags')\n Object.keys(knownKeys).forEach(flag => { result[flag] = 0 })\n }\n } else if (totalFlags.reset > 0 && totalFlags.reset < 9000) {\n console.debug('Received command to reset the flags')\n allFlagKeys.forEach(flag => { result[flag] = 0 })\n }\n result.reset = 0\n return result\n}\n\nexport const _doMigrations = (cache) => {\n if (!cache) return cache\n\n if (cache._version < VERSION) {\n console.debug('Local cached data has older version, seeing if there any migrations that can be applied')\n\n // no migrations right now since we only have one version\n console.debug('No migrations found')\n }\n\n if (cache._version > VERSION) {\n console.debug('Local cached data has newer version, seeing if there any reverse migrations that can be applied')\n\n // no reverse migrations right now but we leave a possibility of loading a hotpatch if need be\n if (window._PLEROMA_HOTPATCH) {\n if (window._PLEROMA_HOTPATCH.reverseMigrations) {\n console.debug('Found hotpatch migration, applying')\n return window._PLEROMA_HOTPATCH.reverseMigrations.call({}, 'serverSideStorage', { from: cache._version, to: VERSION }, cache)\n }\n }\n }\n\n return cache\n}\n\nexport const mutations = {\n clearServerSideStorage (state, userData) {\n state = { ...cloneDeep(defaultState) }\n },\n setServerSideStorage (state, userData) {\n const live = userData.storage\n state.raw = live\n let cache = state.cache\n if (cache && cache._user !== userData.fqn) {\n console.warn('cache belongs to another user! reinitializing local cache!')\n cache = null\n }\n\n cache = _doMigrations(cache)\n\n let { recent, stale, needsUpload } = _getRecentData(cache, live)\n\n const userNew = userData.created_at > NEW_USER_DATE\n const flagsTemplate = userNew ? newUserFlags : defaultState.flagStorage\n let dirty = false\n\n if (recent === null) {\n console.debug(`Data is empty, initializing for ${userNew ? 'new' : 'existing'} user`)\n recent = _wrapData({\n flagStorage: { ...flagsTemplate },\n prefsStorage: { ...defaultState.prefsStorage }\n })\n }\n\n if (!needsUpload && recent && stale) {\n console.debug('Checking if data needs merging...')\n // discarding timestamps and versions\n const { _timestamp: _0, _version: _1, ...recentData } = recent\n const { _timestamp: _2, _version: _3, ...staleData } = stale\n dirty = !isEqual(recentData, staleData)\n console.debug(`Data ${dirty ? 'needs' : 'doesn\\'t need'} merging`)\n }\n\n const allFlagKeys = _getAllFlags(recent, stale)\n let totalFlags\n let totalPrefs\n if (dirty) {\n // Merge the flags\n console.debug('Merging the data...')\n totalFlags = _mergeFlags(recent, stale, allFlagKeys)\n _verifyPrefs(recent)\n _verifyPrefs(stale)\n totalPrefs = _mergePrefs(recent.prefsStorage, stale.prefsStorage)\n } else {\n totalFlags = recent.flagStorage\n totalPrefs = recent.prefsStorage\n }\n\n totalFlags = _resetFlags(totalFlags)\n\n recent.flagStorage = { ...flagsTemplate, ...totalFlags }\n recent.prefsStorage = { ...defaultState.prefsStorage, ...totalPrefs }\n\n state.dirty = dirty || needsUpload\n state.cache = recent\n // set local timestamp to smaller one if we don't have any changes\n if (stale && recent && !state.dirty) {\n state.cache._timestamp = Math.min(stale._timestamp, recent._timestamp)\n }\n state.flagStorage = state.cache.flagStorage\n state.prefsStorage = state.cache.prefsStorage\n },\n setFlag (state, { flag, value }) {\n state.flagStorage[flag] = value\n state.dirty = true\n },\n setPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n set(state.prefsStorage, path, value)\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'set', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n addCollectionPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = new Set(get(state.prefsStorage, path))\n collection.add(value)\n set(state.prefsStorage, path, [...collection])\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'addToCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n removeCollectionPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = new Set(get(state.prefsStorage, path))\n collection.delete(value)\n set(state.prefsStorage, path, [...collection])\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'removeFromCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n reorderCollectionPreference (state, { path, value, movement }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = get(state.prefsStorage, path)\n const newCollection = _moveItemInArray(collection, value, movement)\n set(state.prefsStorage, path, newCollection)\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'arrangeCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n updateCache (state, { username }) {\n state.prefsStorage._journal = _mergeJournal(state.prefsStorage._journal)\n state.cache = _wrapData({\n flagStorage: toRaw(state.flagStorage),\n prefsStorage: toRaw(state.prefsStorage)\n }, username)\n }\n}\n\nconst serverSideStorage = {\n state: {\n ...cloneDeep(defaultState)\n },\n mutations,\n actions: {\n pushServerSideStorage ({ state, rootState, commit }, { force = false } = {}) {\n const needPush = state.dirty || force\n console.log(needPush)\n if (!needPush) return\n commit('updateCache', { username: rootState.users.currentUser.fqn })\n const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }\n rootState.api.backendInteractor\n .updateProfile({ params })\n .then((user) => {\n commit('setServerSideStorage', user)\n state.dirty = false\n })\n }\n }\n}\n\nexport default serverSideStorage\n","import { set, get, cloneDeep, differenceWith, isEqual, flatten } from 'lodash'\n\nexport const defaultState = {\n frontends: [],\n loaded: false,\n needsReboot: null,\n config: null,\n modifiedPaths: null,\n descriptions: null,\n draft: null,\n dbConfigEnabled: null\n}\n\nexport const newUserFlags = {\n ...defaultState.flagStorage\n}\n\nconst adminSettingsStorage = {\n state: {\n ...cloneDeep(defaultState)\n },\n mutations: {\n setInstanceAdminNoDbConfig (state) {\n state.loaded = false\n state.dbConfigEnabled = false\n },\n setAvailableFrontends (state, { frontends }) {\n state.frontends = frontends.map(f => {\n if (f.name === 'pleroma-fe') {\n f.refs = ['master', 'develop']\n } else {\n f.refs = [f.ref]\n }\n return f\n })\n },\n updateAdminSettings (state, { config, modifiedPaths }) {\n state.loaded = true\n state.dbConfigEnabled = true\n state.config = config\n state.modifiedPaths = modifiedPaths\n },\n updateAdminDescriptions (state, { descriptions }) {\n state.descriptions = descriptions\n },\n updateAdminDraft (state, { path, value }) {\n const [group, key, subkey] = path\n const parent = [group, key, subkey]\n\n set(state.draft, path, value)\n\n // force-updating grouped draft to trigger refresh of group settings\n if (path.length > parent.length) {\n set(state.draft, parent, cloneDeep(get(state.draft, parent)))\n }\n },\n resetAdminDraft (state) {\n state.draft = cloneDeep(state.config)\n }\n },\n actions: {\n loadFrontendsStuff ({ state, rootState, dispatch, commit }) {\n rootState.api.backendInteractor.fetchAvailableFrontends()\n .then(frontends => commit('setAvailableFrontends', { frontends }))\n },\n loadAdminStuff ({ state, rootState, dispatch, commit }) {\n rootState.api.backendInteractor.fetchInstanceDBConfig()\n .then(backendDbConfig => {\n if (backendDbConfig.error) {\n if (backendDbConfig.error.status === 400) {\n backendDbConfig.error.json().then(errorJson => {\n if (/configurable_from_database/.test(errorJson.error)) {\n commit('setInstanceAdminNoDbConfig')\n }\n })\n }\n } else {\n dispatch('setInstanceAdminSettings', { backendDbConfig })\n }\n })\n if (state.descriptions === null) {\n rootState.api.backendInteractor.fetchInstanceConfigDescriptions()\n .then(backendDescriptions => dispatch('setInstanceAdminDescriptions', { backendDescriptions }))\n }\n },\n setInstanceAdminSettings ({ state, commit, dispatch }, { backendDbConfig }) {\n const config = state.config || {}\n const modifiedPaths = new Set()\n backendDbConfig.configs.forEach(c => {\n const path = [c.group, c.key]\n if (c.db) {\n // Path elements can contain dot, therefore we use ' -> ' as a separator instead\n // Using strings for modified paths for easier searching\n c.db.forEach(x => modifiedPaths.add([...path, x].join(' -> ')))\n }\n const convert = (value) => {\n if (Array.isArray(value) && value.length > 0 && value[0].tuple) {\n return value.reduce((acc, c) => {\n return { ...acc, [c.tuple[0]]: convert(c.tuple[1]) }\n }, {})\n } else {\n return value\n }\n }\n set(config, path, convert(c.value))\n })\n console.log(config[':pleroma'])\n commit('updateAdminSettings', { config, modifiedPaths })\n commit('resetAdminDraft')\n },\n setInstanceAdminDescriptions ({ state, commit, dispatch }, { backendDescriptions }) {\n const convert = ({ children, description, label, key = '<ROOT>', group, suggestions }, path, acc) => {\n const newPath = group ? [group, key] : [key]\n const obj = { description, label, suggestions }\n if (Array.isArray(children)) {\n children.forEach(c => {\n convert(c, newPath, obj)\n })\n }\n set(acc, newPath, obj)\n }\n\n const descriptions = {}\n backendDescriptions.forEach(d => convert(d, '', descriptions))\n console.log(descriptions[':pleroma']['Pleroma.Captcha'])\n commit('updateAdminDescriptions', { descriptions })\n },\n\n // This action takes draft state, diffs it with live config state and then pushes\n // only differences between the two. Difference detection only work up to subkey (third) level.\n pushAdminDraft ({ rootState, state, commit, dispatch }) {\n // TODO cleanup paths in modifiedPaths\n const convert = (value) => {\n if (typeof value !== 'object') {\n return value\n } else if (Array.isArray(value)) {\n return value.map(convert)\n } else {\n return Object.entries(value).map(([k, v]) => ({ tuple: [k, v] }))\n }\n }\n\n // Getting all group-keys used in config\n const allGroupKeys = flatten(\n Object\n .entries(state.config)\n .map(\n ([group, lv1data]) => Object\n .keys(lv1data)\n .map((key) => ({ group, key }))\n )\n )\n\n // Only using group-keys where there are changes detected\n const changedGroupKeys = allGroupKeys.filter(({ group, key }) => {\n return !isEqual(state.config[group][key], state.draft[group][key])\n })\n\n // Here we take all changed group-keys and get all changed subkeys\n const changed = changedGroupKeys.map(({ group, key }) => {\n const config = state.config[group][key]\n const draft = state.draft[group][key]\n\n // We convert group-key value into entries arrays\n const eConfig = Object.entries(config)\n const eDraft = Object.entries(draft)\n\n // Then those entries array we diff so only changed subkey entries remain\n // We use the diffed array to reconstruct the object and then shove it into convert()\n return ({ group, key, value: convert(Object.fromEntries(differenceWith(eDraft, eConfig, isEqual))) })\n })\n\n rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: changed\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n },\n pushAdminSetting ({ rootState, state, commit, dispatch }, { path, value }) {\n const [group, key, ...rest] = Array.isArray(path) ? path : path.split(/\\./g)\n const clone = {} // not actually cloning the entire thing to avoid excessive writes\n set(clone, rest, value)\n\n // TODO cleanup paths in modifiedPaths\n const convert = (value) => {\n if (typeof value !== 'object') {\n return value\n } else if (Array.isArray(value)) {\n return value.map(convert)\n } else {\n return Object.entries(value).map(([k, v]) => ({ tuple: [k, v] }))\n }\n }\n\n rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: [{\n group,\n key,\n value: convert(clone)\n }]\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n },\n resetAdminSetting ({ rootState, state, commit, dispatch }, { path }) {\n const [group, key, subkey] = path.split(/\\./g)\n\n state.modifiedPaths.delete(path)\n\n return rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: [{\n group,\n key,\n delete: true,\n subkeys: [subkey]\n }]\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n }\n }\n}\n\nexport default adminSettingsStorage\n","const shout = {\n state: {\n messages: [],\n channel: { state: '' },\n joined: false\n },\n mutations: {\n setChannel (state, channel) {\n state.channel = channel\n },\n addMessage (state, message) {\n state.messages.push(message)\n state.messages = state.messages.slice(-19, 20)\n },\n setMessages (state, messages) {\n state.messages = messages.slice(-19, 20)\n },\n setJoined (state, joined) {\n state.joined = joined\n }\n },\n actions: {\n initializeShout (store, socket) {\n const channel = socket.channel('chat:public')\n channel.joinPush.receive('ok', () => {\n store.commit('setJoined', true)\n })\n channel.onClose(() => {\n store.commit('setJoined', false)\n })\n channel.onError(() => {\n store.commit('setJoined', false)\n })\n channel.on('new_msg', (msg) => {\n store.commit('addMessage', msg)\n })\n channel.on('messages', ({ messages }) => {\n store.commit('setMessages', messages)\n })\n channel.join()\n store.commit('setChannel', channel)\n }\n }\n}\n\nexport default shout\n","const oauth = {\n state: {\n clientId: false,\n clientSecret: false,\n /* App token is authentication for app without any user, used mostly for\n * MastoAPI's registration of new users, stored so that we can fall back to\n * it on logout\n */\n appToken: false,\n /* User token is authentication for app with user, this is for every calls\n * that need authorized user to be successful (i.e. posting, liking etc)\n */\n userToken: false\n },\n mutations: {\n setClientData (state, { clientId, clientSecret }) {\n state.clientId = clientId\n state.clientSecret = clientSecret\n },\n setAppToken (state, token) {\n state.appToken = token\n },\n setToken (state, token) {\n state.userToken = token\n },\n clearToken (state) {\n state.userToken = false\n // state.token is userToken with older name, coming from persistent state\n // let's clear it as well, since it is being used as a fallback of state.userToken\n delete state.token\n }\n },\n getters: {\n getToken: state => () => {\n // state.token is userToken with older name, coming from persistent state\n // added here for smoother transition, otherwise user will be logged out\n return state.userToken || state.token || state.appToken\n },\n getUserToken: state => () => {\n // state.token is userToken with older name, coming from persistent state\n // added here for smoother transition, otherwise user will be logged out\n return state.userToken || state.token\n }\n }\n}\n\nexport default oauth\n","const PASSWORD_STRATEGY = 'password'\nconst TOKEN_STRATEGY = 'token'\n\n// MFA strategies\nconst TOTP_STRATEGY = 'totp'\nconst RECOVERY_STRATEGY = 'recovery'\n\n// initial state\nconst state = {\n settings: {},\n strategy: PASSWORD_STRATEGY,\n initStrategy: PASSWORD_STRATEGY // default strategy from config\n}\n\nconst resetState = (state) => {\n state.strategy = state.initStrategy\n state.settings = {}\n}\n\n// getters\nconst getters = {\n settings: (state, getters) => {\n return state.settings\n },\n requiredPassword: (state, getters, rootState) => {\n return state.strategy === PASSWORD_STRATEGY\n },\n requiredToken: (state, getters, rootState) => {\n return state.strategy === TOKEN_STRATEGY\n },\n requiredTOTP: (state, getters, rootState) => {\n return state.strategy === TOTP_STRATEGY\n },\n requiredRecovery: (state, getters, rootState) => {\n return state.strategy === RECOVERY_STRATEGY\n }\n}\n\n// mutations\nconst mutations = {\n setInitialStrategy (state, strategy) {\n if (strategy) {\n state.initStrategy = strategy\n state.strategy = strategy\n }\n },\n requirePassword (state) {\n state.strategy = PASSWORD_STRATEGY\n },\n requireToken (state) {\n state.strategy = TOKEN_STRATEGY\n },\n requireMFA (state, { settings }) {\n state.settings = settings\n state.strategy = TOTP_STRATEGY // default strategy of MFA\n },\n requireRecovery (state) {\n state.strategy = RECOVERY_STRATEGY\n },\n requireTOTP (state) {\n state.strategy = TOTP_STRATEGY\n },\n abortMFA (state) {\n resetState(state)\n }\n}\n\n// actions\nconst actions = {\n // eslint-disable-next-line camelcase\n async login ({ state, dispatch, commit }, { access_token }) {\n commit('setToken', access_token, { root: true })\n await dispatch('loginUser', access_token, { root: true })\n resetState(state)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import fileTypeService from '../services/file_type/file_type.service.js'\nconst supportedTypes = new Set(['image', 'video', 'audio', 'flash'])\n\nconst mediaViewer = {\n state: {\n media: [],\n currentIndex: 0,\n activated: false\n },\n mutations: {\n setMedia (state, media) {\n state.media = media\n },\n setCurrentMedia (state, index) {\n state.activated = true\n state.currentIndex = index\n },\n close (state) {\n state.activated = false\n }\n },\n actions: {\n setMedia ({ commit }, attachments) {\n const media = attachments.filter(attachment => {\n const type = fileTypeService.fileType(attachment.mimetype)\n return supportedTypes.has(type)\n })\n commit('setMedia', media)\n },\n setCurrentMedia ({ commit, state }, current) {\n const index = state.media.indexOf(current)\n commit('setCurrentMedia', index || 0)\n },\n closeMediaViewer ({ commit }) {\n commit('close')\n }\n }\n}\n\nexport default mediaViewer\n","const oauthTokens = {\n state: {\n tokens: []\n },\n actions: {\n fetchTokens ({ rootState, commit }) {\n rootState.api.backendInteractor.fetchOAuthTokens().then((tokens) => {\n commit('swapTokens', tokens)\n })\n },\n revokeToken ({ rootState, commit, state }, id) {\n rootState.api.backendInteractor.revokeOAuthToken({ id }).then((response) => {\n if (response.status === 201) {\n commit('swapTokens', state.tokens.filter(token => token.id !== id))\n }\n })\n }\n },\n mutations: {\n swapTokens (state, tokens) {\n state.tokens = tokens\n }\n }\n}\n\nexport default oauthTokens\n","import filter from 'lodash/filter'\n\nconst reports = {\n state: {\n reportModal: {\n userId: null,\n statuses: [],\n preTickedIds: [],\n activated: false\n },\n reports: {}\n },\n mutations: {\n openUserReportingModal (state, { userId, statuses, preTickedIds }) {\n state.reportModal.userId = userId\n state.reportModal.statuses = statuses\n state.reportModal.preTickedIds = preTickedIds\n state.reportModal.activated = true\n },\n closeUserReportingModal (state) {\n state.reportModal.activated = false\n },\n setReportState (reportsState, { id, state }) {\n reportsState.reports[id].state = state\n },\n addReport (state, report) {\n state.reports[report.id] = report\n }\n },\n actions: {\n openUserReportingModal ({ rootState, commit }, { userId, statusIds = [] }) {\n const preTickedStatuses = statusIds.map(id => rootState.statuses.allStatusesObject[id])\n const preTickedIds = statusIds\n const statuses = preTickedStatuses.concat(\n filter(rootState.statuses.allStatuses,\n status => status.user.id === userId && !preTickedIds.includes(status.id)\n )\n )\n commit('openUserReportingModal', { userId, statuses, preTickedIds })\n },\n closeUserReportingModal ({ commit }) {\n commit('closeUserReportingModal')\n },\n setReportState ({ commit, dispatch, rootState }, { id, state }) {\n const oldState = rootState.reports.reports[id].state\n commit('setReportState', { id, state })\n rootState.api.backendInteractor.setReportState({ id, state }).catch(e => {\n console.error('Failed to set report state', e)\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'general.generic_error_message',\n messageArgs: [e.message],\n timeout: 5000\n })\n commit('setReportState', { id, state: oldState })\n })\n },\n addReport ({ commit }, report) {\n commit('addReport', report)\n }\n }\n}\n\nexport default reports\n","import { merge } from 'lodash'\n\nconst polls = {\n state: {\n // Contains key = id, value = number of trackers for this poll\n trackedPolls: {},\n pollsObject: {}\n },\n mutations: {\n mergeOrAddPoll (state, poll) {\n const existingPoll = state.pollsObject[poll.id]\n // Make expired-state change trigger re-renders properly\n poll.expired = Date.now() > Date.parse(poll.expires_at)\n if (existingPoll) {\n state.pollsObject[poll.id] = merge(existingPoll, poll)\n } else {\n state.pollsObject[poll.id] = poll\n }\n },\n trackPoll (state, pollId) {\n const currentValue = state.trackedPolls[pollId]\n if (currentValue) {\n state.trackedPolls[pollId] = currentValue + 1\n } else {\n state.trackedPolls[pollId] = 1\n }\n },\n untrackPoll (state, pollId) {\n const currentValue = state.trackedPolls[pollId]\n if (currentValue) {\n state.trackedPolls[pollId] = currentValue - 1\n } else {\n state.trackedPolls[pollId] = 0\n }\n }\n },\n actions: {\n mergeOrAddPoll ({ commit }, poll) {\n commit('mergeOrAddPoll', poll)\n },\n updateTrackedPoll ({ rootState, dispatch, commit }, pollId) {\n rootState.api.backendInteractor.fetchPoll({ pollId }).then(poll => {\n setTimeout(() => {\n if (rootState.polls.trackedPolls[pollId]) {\n dispatch('updateTrackedPoll', pollId)\n }\n }, 30 * 1000)\n commit('mergeOrAddPoll', poll)\n })\n },\n trackPoll ({ rootState, commit, dispatch }, pollId) {\n if (!rootState.polls.trackedPolls[pollId]) {\n setTimeout(() => dispatch('updateTrackedPoll', pollId), 30 * 1000)\n }\n commit('trackPoll', pollId)\n },\n untrackPoll ({ commit }, pollId) {\n commit('untrackPoll', pollId)\n },\n votePoll ({ rootState, commit }, { id, pollId, choices }) {\n return rootState.api.backendInteractor.vote({ pollId, choices }).then(poll => {\n commit('mergeOrAddPoll', poll)\n return poll\n })\n }\n }\n}\n\nexport default polls\n","const postStatus = {\n state: {\n params: null,\n modalActivated: false\n },\n mutations: {\n openPostStatusModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closePostStatusModal (state) {\n state.modalActivated = false\n },\n resetPostStatusModal (state) {\n state.params = null\n }\n },\n actions: {\n openPostStatusModal ({ commit }, params) {\n commit('openPostStatusModal', params)\n },\n closePostStatusModal ({ commit }) {\n commit('closePostStatusModal')\n },\n resetPostStatusModal ({ commit }) {\n commit('resetPostStatusModal')\n }\n }\n}\n\nexport default postStatus\n","const editStatus = {\n state: {\n params: null,\n modalActivated: false\n },\n mutations: {\n openEditStatusModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closeEditStatusModal (state) {\n state.modalActivated = false\n }\n },\n actions: {\n openEditStatusModal ({ commit }, params) {\n commit('openEditStatusModal', params)\n },\n closeEditStatusModal ({ commit }) {\n commit('closeEditStatusModal')\n }\n }\n}\n\nexport default editStatus\n","const statusHistory = {\n state: {\n params: {},\n modalActivated: false\n },\n mutations: {\n openStatusHistoryModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closeStatusHistoryModal (state) {\n state.modalActivated = false\n }\n },\n actions: {\n openStatusHistoryModal ({ commit }, params) {\n commit('openStatusHistoryModal', params)\n },\n closeStatusHistoryModal ({ commit }) {\n commit('closeStatusHistoryModal')\n }\n }\n}\n\nexport default statusHistory\n","import _ from 'lodash'\n\nconst empty = (chatId) => {\n return {\n idIndex: {},\n idempotencyKeyIndex: {},\n messages: [],\n newMessageCount: 0,\n lastSeenMessageId: '0',\n chatId,\n minId: undefined,\n maxId: undefined\n }\n}\n\nconst clear = (storage) => {\n const failedMessageIds = []\n\n for (const message of storage.messages) {\n if (message.error) {\n failedMessageIds.push(message.id)\n } else {\n delete storage.idIndex[message.id]\n delete storage.idempotencyKeyIndex[message.idempotency_key]\n }\n }\n\n storage.messages = storage.messages.filter(m => failedMessageIds.includes(m.id))\n storage.newMessageCount = 0\n storage.lastSeenMessageId = '0'\n storage.minId = undefined\n storage.maxId = undefined\n}\n\nconst deleteMessage = (storage, messageId) => {\n if (!storage) { return }\n storage.messages = storage.messages.filter(m => m.id !== messageId)\n delete storage.idIndex[messageId]\n\n if (storage.maxId === messageId) {\n const lastMessage = _.maxBy(storage.messages, 'id')\n storage.maxId = lastMessage.id\n }\n\n if (storage.minId === messageId) {\n const firstMessage = _.minBy(storage.messages, 'id')\n storage.minId = firstMessage.id\n }\n}\n\nconst cullOlderMessages = (storage) => {\n const maxIndex = storage.messages.length\n const minIndex = maxIndex - 50\n if (maxIndex <= 50) return\n\n storage.messages = _.sortBy(storage.messages, ['id'])\n storage.minId = storage.messages[minIndex].id\n for (const message of storage.messages) {\n if (message.id < storage.minId) {\n delete storage.idIndex[message.id]\n delete storage.idempotencyKeyIndex[message.idempotency_key]\n }\n }\n storage.messages = storage.messages.slice(minIndex, maxIndex)\n}\n\nconst handleMessageError = (storage, fakeId, isRetry) => {\n if (!storage) { return }\n const fakeMessage = storage.idIndex[fakeId]\n if (fakeMessage) {\n fakeMessage.error = true\n fakeMessage.pending = false\n if (!isRetry) {\n // Ensure the failed message doesn't stay at the bottom of the list.\n const lastPersistedMessage = _.orderBy(storage.messages, ['pending', 'id'], ['asc', 'desc'])[0]\n if (lastPersistedMessage) {\n const oldId = fakeMessage.id\n fakeMessage.id = `${lastPersistedMessage.id}-${new Date().getTime()}`\n storage.idIndex[fakeMessage.id] = fakeMessage\n delete storage.idIndex[oldId]\n }\n }\n }\n}\n\nconst add = (storage, { messages: newMessages, updateMaxId = true }) => {\n if (!storage) { return }\n for (let i = 0; i < newMessages.length; i++) {\n const message = newMessages[i]\n\n // sanity check\n if (message.chat_id !== storage.chatId) { return }\n\n if (message.fakeId) {\n const fakeMessage = storage.idIndex[message.fakeId]\n if (fakeMessage) {\n // In case the same id exists (chat update before POST response)\n // make sure to remove the older duplicate message.\n if (storage.idIndex[message.id]) {\n delete storage.idIndex[message.id]\n storage.messages = storage.messages.filter(msg => msg.id !== message.id)\n }\n Object.assign(fakeMessage, message, { error: false })\n delete fakeMessage.fakeId\n storage.idIndex[fakeMessage.id] = fakeMessage\n delete storage.idIndex[message.fakeId]\n\n return\n }\n }\n\n if (!storage.minId || (!message.pending && message.id < storage.minId)) {\n storage.minId = message.id\n }\n\n if (!storage.maxId || message.id > storage.maxId) {\n if (updateMaxId) {\n storage.maxId = message.id\n }\n }\n\n if (!storage.idIndex[message.id] && !isConfirmation(storage, message)) {\n if (storage.lastSeenMessageId < message.id) {\n storage.newMessageCount++\n }\n storage.idIndex[message.id] = message\n storage.messages.push(storage.idIndex[message.id])\n storage.idempotencyKeyIndex[message.idempotency_key] = true\n }\n }\n}\n\nconst isConfirmation = (storage, message) => {\n if (!message.idempotency_key) return\n return storage.idempotencyKeyIndex[message.idempotency_key]\n}\n\nconst resetNewMessageCount = (storage) => {\n if (!storage) { return }\n storage.newMessageCount = 0\n storage.lastSeenMessageId = storage.maxId\n}\n\n// Inserts date separators and marks the head and tail if it's the chain of messages made by the same user\nconst getView = (storage) => {\n if (!storage) { return [] }\n\n const result = []\n const messages = _.orderBy(storage.messages, ['pending', 'id'], ['asc', 'asc'])\n const firstMessage = messages[0]\n let previousMessage = messages[messages.length - 1]\n let currentMessageChainId\n\n if (firstMessage) {\n const date = new Date(firstMessage.created_at)\n date.setHours(0, 0, 0, 0)\n result.push({\n type: 'date',\n date,\n id: date.getTime().toString()\n })\n }\n\n let afterDate = false\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]\n const nextMessage = messages[i + 1]\n\n const date = new Date(message.created_at)\n date.setHours(0, 0, 0, 0)\n\n // insert date separator and start a new message chain\n if (previousMessage && previousMessage.date < date) {\n result.push({\n type: 'date',\n date,\n id: date.getTime().toString()\n })\n\n previousMessage.isTail = true\n currentMessageChainId = undefined\n afterDate = true\n }\n\n const object = {\n type: 'message',\n data: message,\n date,\n id: message.id,\n messageChainId: currentMessageChainId\n }\n\n // end a message chian\n if ((nextMessage && nextMessage.account_id) !== message.account_id) {\n object.isTail = true\n currentMessageChainId = undefined\n }\n\n // start a new message chain\n if ((previousMessage && previousMessage.data && previousMessage.data.account_id) !== message.account_id || afterDate) {\n currentMessageChainId = _.uniqueId()\n object.isHead = true\n object.messageChainId = currentMessageChainId\n }\n\n result.push(object)\n previousMessage = object\n afterDate = false\n }\n\n return result\n}\n\nconst ChatService = {\n add,\n empty,\n getView,\n deleteMessage,\n cullOlderMessages,\n resetNewMessageCount,\n clear,\n handleMessageError\n}\n\nexport default ChatService\n","import { reactive } from 'vue'\nimport { find, omitBy, orderBy, sumBy } from 'lodash'\nimport chatService from '../services/chat_service/chat_service.js'\nimport { parseChat, parseChatMessage } from '../services/entity_normalizer/entity_normalizer.service.js'\nimport { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'\nimport { promiseInterval } from '../services/promise_interval/promise_interval.js'\n\nconst emptyChatList = () => ({\n data: [],\n idStore: {}\n})\n\nconst defaultState = {\n chatList: emptyChatList(),\n chatListFetcher: null,\n openedChats: reactive({}),\n openedChatMessageServices: reactive({}),\n fetcher: undefined,\n currentChatId: null,\n lastReadMessageId: null\n}\n\nconst getChatById = (state, id) => {\n return find(state.chatList.data, { id })\n}\n\nconst sortedChatList = (state) => {\n return orderBy(state.chatList.data, ['updated_at'], ['desc'])\n}\n\nconst unreadChatCount = (state) => {\n return sumBy(state.chatList.data, 'unread')\n}\n\nconst chats = {\n state: { ...defaultState },\n getters: {\n currentChat: state => state.openedChats[state.currentChatId],\n currentChatMessageService: state => state.openedChatMessageServices[state.currentChatId],\n findOpenedChatByRecipientId: state => recipientId => find(state.openedChats, c => c.account.id === recipientId),\n sortedChatList,\n unreadChatCount\n },\n actions: {\n // Chat list\n startFetchingChats ({ dispatch, commit }) {\n const fetcher = () => dispatch('fetchChats', { latest: true })\n fetcher()\n commit('setChatListFetcher', {\n fetcher: () => promiseInterval(fetcher, 5000)\n })\n },\n stopFetchingChats ({ commit }) {\n commit('setChatListFetcher', { fetcher: undefined })\n },\n fetchChats ({ dispatch, rootState, commit }, params = {}) {\n return rootState.api.backendInteractor.chats()\n .then(({ chats }) => {\n dispatch('addNewChats', { chats })\n return chats\n })\n },\n addNewChats (store, { chats }) {\n const { commit, dispatch, rootGetters } = store\n const newChatMessageSideEffects = (chat) => {\n maybeShowChatNotification(store, chat)\n }\n commit('addNewUsers', chats.map(k => k.account).filter(k => k))\n commit('addNewChats', { dispatch, chats, rootGetters, newChatMessageSideEffects })\n },\n updateChat ({ commit }, { chat }) {\n commit('updateChat', { chat })\n },\n\n // Opened Chats\n startFetchingCurrentChat ({ commit, dispatch }, { fetcher }) {\n dispatch('setCurrentChatFetcher', { fetcher })\n },\n setCurrentChatFetcher ({ rootState, commit }, { fetcher }) {\n commit('setCurrentChatFetcher', { fetcher })\n },\n addOpenedChat ({ rootState, commit, dispatch }, { chat }) {\n commit('addOpenedChat', { dispatch, chat: parseChat(chat) })\n dispatch('addNewUsers', [chat.account])\n },\n addChatMessages ({ commit }, value) {\n commit('addChatMessages', { commit, ...value })\n },\n resetChatNewMessageCount ({ commit }, value) {\n commit('resetChatNewMessageCount', value)\n },\n clearCurrentChat ({ rootState, commit, dispatch }, value) {\n commit('setCurrentChatId', { chatId: undefined })\n commit('setCurrentChatFetcher', { fetcher: undefined })\n },\n readChat ({ rootState, commit, dispatch }, { id, lastReadId }) {\n const isNewMessage = rootState.chats.lastReadMessageId !== lastReadId\n\n dispatch('resetChatNewMessageCount')\n commit('readChat', { id, lastReadId })\n\n if (isNewMessage) {\n rootState.api.backendInteractor.readChat({ id, lastReadId })\n }\n },\n deleteChatMessage ({ rootState, commit }, value) {\n rootState.api.backendInteractor.deleteChatMessage(value)\n commit('deleteChatMessage', { commit, ...value })\n },\n resetChats ({ commit, dispatch }) {\n dispatch('clearCurrentChat')\n commit('resetChats', { commit })\n },\n clearOpenedChats ({ rootState, commit, dispatch, rootGetters }) {\n commit('clearOpenedChats', { commit })\n },\n handleMessageError ({ commit }, value) {\n commit('handleMessageError', { commit, ...value })\n },\n cullOlderMessages ({ commit }, chatId) {\n commit('cullOlderMessages', chatId)\n }\n },\n mutations: {\n setChatListFetcher (state, { commit, fetcher }) {\n const prevFetcher = state.chatListFetcher\n if (prevFetcher) {\n prevFetcher.stop()\n }\n state.chatListFetcher = fetcher && fetcher()\n },\n setCurrentChatFetcher (state, { fetcher }) {\n const prevFetcher = state.fetcher\n if (prevFetcher) {\n prevFetcher.stop()\n }\n state.fetcher = fetcher && fetcher()\n },\n addOpenedChat (state, { _dispatch, chat }) {\n state.currentChatId = chat.id\n state.openedChats[chat.id] = chat\n\n if (!state.openedChatMessageServices[chat.id]) {\n state.openedChatMessageServices[chat.id] = chatService.empty(chat.id)\n }\n },\n setCurrentChatId (state, { chatId }) {\n state.currentChatId = chatId\n },\n addNewChats (state, { chats, newChatMessageSideEffects }) {\n chats.forEach((updatedChat) => {\n const chat = getChatById(state, updatedChat.id)\n\n if (chat) {\n const isNewMessage = (chat.lastMessage && chat.lastMessage.id) !== (updatedChat.lastMessage && updatedChat.lastMessage.id)\n chat.lastMessage = updatedChat.lastMessage\n chat.unread = updatedChat.unread\n chat.updated_at = updatedChat.updated_at\n if (isNewMessage && chat.unread) {\n newChatMessageSideEffects(updatedChat)\n }\n } else {\n state.chatList.data.push(updatedChat)\n state.chatList.idStore[updatedChat.id] = updatedChat\n }\n })\n },\n updateChat (state, { _dispatch, chat: updatedChat, _rootGetters }) {\n const chat = getChatById(state, updatedChat.id)\n if (chat) {\n chat.lastMessage = updatedChat.lastMessage\n chat.unread = updatedChat.unread\n chat.updated_at = updatedChat.updated_at\n }\n if (!chat) { state.chatList.data.unshift(updatedChat) }\n state.chatList.idStore[updatedChat.id] = updatedChat\n },\n deleteChat (state, { _dispatch, id, _rootGetters }) {\n state.chats.data = state.chats.data.filter(conversation =>\n conversation.last_status.id !== id\n )\n state.chats.idStore = omitBy(state.chats.idStore, conversation => conversation.last_status.id === id)\n },\n resetChats (state, { commit }) {\n state.chatList = emptyChatList()\n state.currentChatId = null\n commit('setChatListFetcher', { fetcher: undefined })\n for (const chatId in state.openedChats) {\n chatService.clear(state.openedChatMessageServices[chatId])\n delete state.openedChats[chatId]\n delete state.openedChatMessageServices[chatId]\n }\n },\n setChatsLoading (state, { value }) {\n state.chats.loading = value\n },\n addChatMessages (state, { chatId, messages, updateMaxId }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n if (chatMessageService) {\n chatService.add(chatMessageService, { messages: messages.map(parseChatMessage), updateMaxId })\n }\n },\n deleteChatMessage (state, { chatId, messageId }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n if (chatMessageService) {\n chatService.deleteMessage(chatMessageService, messageId)\n }\n },\n resetChatNewMessageCount (state, _value) {\n const chatMessageService = state.openedChatMessageServices[state.currentChatId]\n chatService.resetNewMessageCount(chatMessageService)\n },\n // Used when a connection loss occurs\n clearOpenedChats (state) {\n const currentChatId = state.currentChatId\n for (const chatId in state.openedChats) {\n if (currentChatId !== chatId) {\n chatService.clear(state.openedChatMessageServices[chatId])\n delete state.openedChats[chatId]\n delete state.openedChatMessageServices[chatId]\n }\n }\n },\n readChat (state, { id, lastReadId }) {\n state.lastReadMessageId = lastReadId\n const chat = getChatById(state, id)\n if (chat) {\n chat.unread = 0\n }\n },\n handleMessageError (state, { chatId, fakeId, isRetry }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n chatService.handleMessageError(chatMessageService, fakeId, isRetry)\n },\n cullOlderMessages (state, chatId) {\n chatService.cullOlderMessages(state.openedChatMessageServices[chatId])\n }\n }\n}\n\nexport default chats\n","const FETCH_ANNOUNCEMENT_INTERVAL_MS = 1000 * 60 * 5\n\nexport const defaultState = {\n announcements: [],\n supportsAnnouncements: true,\n fetchAnnouncementsTimer: undefined\n}\n\nexport const mutations = {\n setAnnouncements (state, announcements) {\n state.announcements = announcements\n },\n setAnnouncementRead (state, { id, read }) {\n const index = state.announcements.findIndex(a => a.id === id)\n\n if (index < 0) {\n return\n }\n\n state.announcements[index].read = read\n },\n setFetchAnnouncementsTimer (state, timer) {\n state.fetchAnnouncementsTimer = timer\n },\n setSupportsAnnouncements (state, supportsAnnouncements) {\n state.supportsAnnouncements = supportsAnnouncements\n }\n}\n\nexport const getters = {\n unreadAnnouncementCount (state, _getters, rootState) {\n if (!rootState.users.currentUser) {\n return 0\n }\n\n const unread = state.announcements.filter(announcement => !(announcement.inactive || announcement.read))\n return unread.length\n }\n}\n\nconst announcements = {\n state: defaultState,\n mutations,\n getters,\n actions: {\n fetchAnnouncements (store) {\n if (!store.state.supportsAnnouncements) {\n return Promise.resolve()\n }\n\n const currentUser = store.rootState.users.currentUser\n const isAdmin = currentUser && currentUser.privileges.includes('announcements_manage_announcements')\n\n const getAnnouncements = async () => {\n if (!isAdmin) {\n return store.rootState.api.backendInteractor.fetchAnnouncements()\n }\n\n const all = await store.rootState.api.backendInteractor.adminFetchAnnouncements()\n const visible = await store.rootState.api.backendInteractor.fetchAnnouncements()\n const visibleObject = visible.reduce((a, c) => {\n a[c.id] = c\n return a\n }, {})\n const getWithinVisible = announcement => visibleObject[announcement.id]\n\n all.forEach(announcement => {\n const visibleAnnouncement = getWithinVisible(announcement)\n if (!visibleAnnouncement) {\n announcement.inactive = true\n } else {\n announcement.read = visibleAnnouncement.read\n }\n })\n\n return all\n }\n\n return getAnnouncements()\n .then(announcements => {\n store.commit('setAnnouncements', announcements)\n })\n .catch(error => {\n // If and only if backend does not support announcements, it would return 404.\n // In this case, silently ignores it.\n if (error && error.statusCode === 404) {\n store.commit('setSupportsAnnouncements', false)\n } else {\n throw error\n }\n })\n },\n markAnnouncementAsRead (store, id) {\n return store.rootState.api.backendInteractor.dismissAnnouncement({ id })\n .then(() => {\n store.commit('setAnnouncementRead', { id, read: true })\n })\n },\n startFetchingAnnouncements (store) {\n if (store.state.fetchAnnouncementsTimer) {\n return\n }\n\n const interval = setInterval(() => store.dispatch('fetchAnnouncements'), FETCH_ANNOUNCEMENT_INTERVAL_MS)\n store.commit('setFetchAnnouncementsTimer', interval)\n\n return store.dispatch('fetchAnnouncements')\n },\n stopFetchingAnnouncements (store) {\n const interval = store.state.fetchAnnouncementsTimer\n store.commit('setFetchAnnouncementsTimer', undefined)\n clearInterval(interval)\n },\n postAnnouncement (store, { content, startsAt, endsAt, allDay }) {\n return store.rootState.api.backendInteractor.postAnnouncement({ content, startsAt, endsAt, allDay })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n },\n editAnnouncement (store, { id, content, startsAt, endsAt, allDay }) {\n return store.rootState.api.backendInteractor.editAnnouncement({ id, content, startsAt, endsAt, allDay })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n },\n deleteAnnouncement (store, id) {\n return store.rootState.api.backendInteractor.deleteAnnouncement({ id })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n }\n }\n}\n\nexport default announcements\n","import merge from 'lodash.merge'\nimport localforage from 'localforage'\nimport { each, get, set, cloneDeep } from 'lodash'\n\nlet loaded = false\n\nconst defaultReducer = (state, paths) => (\n paths.length === 0\n ? state\n : paths.reduce((substate, path) => {\n set(substate, path, get(state, path))\n return substate\n }, {})\n)\n\nconst saveImmedeatelyActions = [\n 'markNotificationsAsSeen',\n 'clearCurrentUser',\n 'setCurrentUser',\n 'setServerSideStorage',\n 'setHighlight',\n 'setOption',\n 'setClientData',\n 'setToken',\n 'clearToken'\n]\n\nconst defaultStorage = (() => {\n return localforage\n})()\n\nexport default function createPersistedState ({\n key = 'vuex-lz',\n paths = [],\n getState = (key, storage) => {\n const value = storage.getItem(key)\n return value\n },\n setState = (key, state, storage) => {\n if (!loaded) {\n console.log('waiting for old state to be loaded...')\n return Promise.resolve()\n } else {\n return storage.setItem(key, state)\n }\n },\n reducer = defaultReducer,\n storage = defaultStorage,\n subscriber = store => handler => store.subscribe(handler)\n} = {}) {\n return getState(key, storage).then((savedState) => {\n return store => {\n try {\n if (savedState !== null && typeof savedState === 'object') {\n // build user cache\n const usersState = savedState.users || {}\n usersState.usersObject = {}\n const users = usersState.users || []\n each(users, (user) => { usersState.usersObject[user.id] = user })\n savedState.users = usersState\n\n store.replaceState(\n merge({}, store.state, savedState)\n )\n }\n loaded = true\n } catch (e) {\n console.log(\"Couldn't load state\")\n console.error(e)\n loaded = true\n }\n subscriber(store)((mutation, state) => {\n try {\n if (saveImmedeatelyActions.includes(mutation.type)) {\n setState(key, reducer(cloneDeep(state), paths), storage)\n .then(success => {\n if (typeof success !== 'undefined') {\n if (mutation.type === 'setOption' || mutation.type === 'setCurrentUser') {\n store.dispatch('settingsSaved', { success })\n }\n }\n }, error => {\n if (mutation.type === 'setOption' || mutation.type === 'setCurrentUser') {\n store.dispatch('settingsSaved', { error })\n }\n })\n }\n } catch (e) {\n console.log(\"Couldn't persist state:\")\n console.log(e)\n }\n })\n }\n })\n}\n","export default (store) => {\n store.subscribe((mutation, state) => {\n const vapidPublicKey = state.instance.vapidPublicKey\n const webPushNotification = state.config.webPushNotifications\n const permission = state.interface.notificationPermission === 'granted'\n const user = state.users.currentUser\n\n const isUserMutation = mutation.type === 'setCurrentUser'\n const isVapidMutation = mutation.type === 'setInstanceOption' && mutation.payload.name === 'vapidPublicKey'\n const isPermMutation = mutation.type === 'setNotificationPermission' && mutation.payload === 'granted'\n const isUserConfigMutation = mutation.type === 'setOption' && mutation.payload.name === 'webPushNotifications'\n const isVisibilityMutation = mutation.type === 'setOption' && mutation.payload.name === 'notificationVisibility'\n\n if (isUserMutation || isVapidMutation || isPermMutation || isUserConfigMutation || isVisibilityMutation) {\n if (user && vapidPublicKey && permission && webPushNotification) {\n return store.dispatch('registerPushNotifications')\n } else if (isUserConfigMutation && !webPushNotification) {\n return store.dispatch('unregisterPushNotifications')\n }\n }\n })\n}\n","<template>\n <div\n id=\"app-loaded\"\n :style=\"bgStyle\"\n >\n <div\n id=\"app_bg_wrapper\"\n class=\"app-bg-wrapper\"\n />\n <MobileNav v-if=\"layoutType === 'mobile'\" />\n <DesktopNav\n v-else\n :class=\"navClasses\"\n />\n <Notifications v-if=\"currentUser\" />\n <div\n id=\"content\"\n class=\"app-layout container\"\n :class=\"classes\"\n >\n <div class=\"underlay\" />\n <div\n id=\"sidebar\"\n class=\"column -scrollable\"\n :class=\"{ '-show-scrollbar': showScrollbars }\"\n >\n <user-panel />\n <template v-if=\"layoutType !== 'mobile'\">\n <nav-panel />\n <instance-specific-panel v-if=\"showInstanceSpecificPanel\" />\n <features-panel v-if=\"!currentUser && showFeaturesPanel\" />\n <who-to-follow-panel v-if=\"currentUser && suggestionsEnabled\" />\n <div id=\"notifs-sidebar\" />\n </template>\n </div>\n <main\n id=\"main-scroller\"\n class=\"column main\"\n :class=\"{ '-full-height': isChats || isListEdit }\"\n >\n <div\n v-if=\"!currentUser\"\n class=\"login-hint panel panel-default\"\n >\n <router-link\n :to=\"{ name: 'login' }\"\n class=\"panel-body\"\n >\n {{ $t(\"login.hint\") }}\n </router-link>\n </div>\n <router-view />\n </main>\n <div\n id=\"notifs-column\"\n class=\"column -scrollable\"\n :class=\"{ '-show-scrollbar': showScrollbars }\"\n />\n </div>\n <MediaModal />\n <shout-panel\n v-if=\"currentUser && shout && !hideShoutbox\"\n :floating=\"true\"\n class=\"floating-shout mobile-hidden\"\n :class=\"{ '-left': shoutboxPosition }\"\n />\n <MobilePostStatusButton />\n <UserReportingModal />\n <PostStatusModal />\n <EditStatusModal v-if=\"editingAvailable\" />\n <StatusHistoryModal v-if=\"editingAvailable\" />\n <SettingsModal />\n <UpdateNotification />\n <GlobalNoticeList />\n </div>\n</template>\n\n<script src=\"./App.js\"></script>\n<style lang=\"scss\" src=\"./App.scss\"></style>\n","<template>\n <aside class=\"user-panel\">\n <div\n v-if=\"signedIn\"\n key=\"user-panel-signed\"\n class=\"panel panel-default signed-in\"\n >\n <UserCard\n :user-id=\"user.id\"\n :hide-bio=\"true\"\n rounded=\"top\"\n />\n <PostStatusForm />\n </div>\n <auth-form\n v-else\n key=\"user-panel\"\n />\n </aside>\n</template>\n\n<script src=\"./user_panel.js\"></script>\n\n<style lang=\"scss\">\n.user-panel .signed-in {\n overflow: visible;\n z-index: 10;\n}\n</style>\n","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.login') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <template v-if=\"isPasswordAuth\">\n <div class=\"form-group\">\n <label for=\"username\">{{ $t('login.username') }}</label>\n <input\n id=\"username\"\n v-model=\"user.username\"\n :disabled=\"loggingIn\"\n class=\"form-control\"\n :placeholder=\"$t('login.placeholder')\"\n >\n </div>\n <div class=\"form-group\">\n <label for=\"password\">{{ $t('login.password') }}</label>\n <input\n id=\"password\"\n ref=\"passwordInput\"\n v-model=\"user.password\"\n :disabled=\"loggingIn\"\n class=\"form-control\"\n type=\"password\"\n >\n </div>\n <div class=\"form-group\">\n <router-link :to=\"{name: 'password-reset'}\">\n {{ $t('password_reset.forgot_password') }}\n </router-link>\n </div>\n </template>\n\n <div\n v-if=\"isTokenAuth\"\n class=\"form-group\"\n >\n <p>{{ $t('login.description') }}</p>\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <router-link\n v-if=\"registrationOpen\"\n :to=\"{name: 'registration'}\"\n class=\"register\"\n >\n {{ $t('login.register') }}\n </router-link>\n </div>\n <button\n :disabled=\"loggingIn\"\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('login.login') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./login_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.login-form {\n display: flex;\n flex-direction: column;\n padding: 0.6em;\n\n .btn {\n min-height: 2em;\n width: 10em;\n }\n\n .register {\n flex: 1 1;\n }\n\n .login-bottom {\n margin-top: 1em;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0.5em 0.6em;\n line-height: 24px;\n }\n\n .form-bottom {\n display: flex;\n padding: 0.5em;\n height: 32px;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n}\n</style>\n","import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport oauthApi from '../../services/new_api/oauth.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst LoginForm = {\n data: () => ({\n user: {},\n error: false\n }),\n computed: {\n isPasswordAuth () { return this.requiredPassword },\n isTokenAuth () { return this.requiredToken },\n ...mapState({\n registrationOpen: state => state.instance.registrationOpen,\n instance: state => state.instance,\n loggingIn: state => state.users.loggingIn,\n oauth: state => state.oauth\n }),\n ...mapGetters(\n 'authFlow', ['requiredPassword', 'requiredToken', 'requiredMFA']\n )\n },\n methods: {\n ...mapMutations('authFlow', ['requireMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n submit () {\n this.isTokenAuth ? this.submitToken() : this.submitPassword()\n },\n submitToken () {\n const { clientId, clientSecret } = this.oauth\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n commit: this.$store.commit\n }\n\n oauthApi.getOrCreateApp(data)\n .then((app) => { oauthApi.login({ ...app, ...data }) })\n },\n submitPassword () {\n const { clientId } = this.oauth\n const data = {\n clientId,\n oauth: this.oauth,\n instance: this.instance.server,\n commit: this.$store.commit\n }\n this.error = false\n\n oauthApi.getOrCreateApp(data).then((app) => {\n oauthApi.getTokenWithCredentials(\n {\n ...app,\n instance: data.instance,\n username: this.user.username,\n password: this.user.password\n }\n ).then((result) => {\n if (result.error) {\n if (result.error === 'mfa_required') {\n this.requireMFA({ settings: result })\n } else if (result.identifier === 'password_reset_required') {\n this.$router.push({ name: 'password-reset', params: { passwordResetRequested: true } })\n } else {\n this.error = result.error\n this.focusOnPasswordInput()\n }\n return\n }\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n })\n },\n clearError () { this.error = false },\n focusOnPasswordInput () {\n const passwordInput = this.$refs.passwordInput\n passwordInput.focus()\n passwordInput.setSelectionRange(0, passwordInput.value.length)\n }\n }\n}\n\nexport default LoginForm\n","import { render } from \"./login_form.vue?vue&type=template&id=508f3ec3\"\nimport script from \"./login_form.js?vue&type=script&lang=js\"\nexport * from \"./login_form.js?vue&type=script&lang=js\"\n\nimport \"./login_form.vue?vue&type=style&index=0&id=508f3ec3&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.heading.recovery') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"form-group\">\n <label for=\"code\">{{ $t('login.recovery_code') }}</label>\n <input\n id=\"code\"\n v-model=\"code\"\n class=\"form-control\"\n >\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"requireTOTP\"\n >\n {{ $t('login.enter_two_factor_code') }}\n </button>\n <br>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"abortMFA\"\n >\n {{ $t('general.cancel') }}\n </button>\n </div>\n <button\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('general.verify') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n<script src=\"./recovery_form.js\"></script>\n","const verifyOTPCode = ({ clientId, clientSecret, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'totp')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst verifyRecoveryCode = ({ clientId, clientSecret, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'recovery')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst mfa = {\n verifyOTPCode,\n verifyRecoveryCode\n}\n\nexport default mfa\n","import mfaApi from '../../services/new_api/mfa.js'\nimport { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nexport default {\n data: () => ({\n code: null,\n error: false\n }),\n computed: {\n ...mapGetters({\n authSettings: 'authFlow/settings'\n }),\n ...mapState({\n instance: 'instance',\n oauth: 'oauth'\n })\n },\n methods: {\n ...mapMutations('authFlow', ['requireTOTP', 'abortMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n clearError () { this.error = false },\n submit () {\n const { clientId, clientSecret } = this.oauth\n\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n mfaToken: this.authSettings.mfa_token,\n code: this.code\n }\n\n mfaApi.verifyRecoveryCode(data).then((result) => {\n if (result.error) {\n this.error = result.error\n this.code = null\n return\n }\n\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n }\n }\n}\n","import { render } from \"./recovery_form.vue?vue&type=template&id=e18da610\"\nimport script from \"./recovery_form.js?vue&type=script&lang=js\"\nexport * from \"./recovery_form.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.heading.totp') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"form-group\">\n <label for=\"code\">\n {{ $t('login.authentication_code') }}\n </label>\n <input\n id=\"code\"\n v-model=\"code\"\n class=\"form-control\"\n >\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"requireRecovery\"\n >\n {{ $t('login.enter_recovery_code') }}\n </button>\n <br>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"abortMFA\"\n >\n {{ $t('general.cancel') }}\n </button>\n </div>\n <button\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('general.verify') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n size=\"lg\"\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n<script src=\"./totp_form.js\"></script>\n","import mfaApi from '../../services/new_api/mfa.js'\nimport { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nexport default {\n data: () => ({\n code: null,\n error: false\n }),\n computed: {\n ...mapGetters({\n authSettings: 'authFlow/settings'\n }),\n ...mapState({\n instance: 'instance',\n oauth: 'oauth'\n })\n },\n methods: {\n ...mapMutations('authFlow', ['requireRecovery', 'abortMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n clearError () { this.error = false },\n submit () {\n const { clientId, clientSecret } = this.oauth\n\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n mfaToken: this.authSettings.mfa_token,\n code: this.code\n }\n\n mfaApi.verifyOTPCode(data).then((result) => {\n if (result.error) {\n this.error = result.error\n this.code = null\n return\n }\n\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n }\n }\n}\n","import { render } from \"./totp_form.vue?vue&type=template&id=6fb04413\"\nimport script from \"./totp_form.js?vue&type=script&lang=js\"\nexport * from \"./totp_form.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { h, resolveComponent } from 'vue'\nimport LoginForm from '../login_form/login_form.vue'\nimport MFARecoveryForm from '../mfa_form/recovery_form.vue'\nimport MFATOTPForm from '../mfa_form/totp_form.vue'\nimport { mapGetters } from 'vuex'\n\nconst AuthForm = {\n name: 'AuthForm',\n render () {\n return h(resolveComponent(this.authForm))\n },\n computed: {\n authForm () {\n if (this.requiredTOTP) { return 'MFATOTPForm' }\n if (this.requiredRecovery) { return 'MFARecoveryForm' }\n return 'LoginForm'\n },\n ...mapGetters('authFlow', ['requiredTOTP', 'requiredRecovery'])\n },\n components: {\n MFARecoveryForm,\n MFATOTPForm,\n LoginForm\n }\n}\n\nexport default AuthForm\n","import AuthForm from '../auth_form/auth_form.js'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport { mapState } from 'vuex'\n\nconst UserPanel = {\n computed: {\n signedIn () { return this.user },\n ...mapState({ user: state => state.users.currentUser })\n },\n components: {\n AuthForm,\n PostStatusForm,\n UserCard\n }\n}\n\nexport default UserPanel\n","import { render } from \"./user_panel.vue?vue&type=template&id=1a2cb8e9\"\nimport script from \"./user_panel.js?vue&type=script&lang=js\"\nexport * from \"./user_panel.js?vue&type=script&lang=js\"\n\nimport \"./user_panel.vue?vue&type=style&index=0&id=1a2cb8e9&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"NavPanel\">\n <div class=\"panel panel-default\">\n <div\n v-if=\"!forceExpand\"\n class=\"panel-heading nav-panel-heading\"\n >\n <NavigationPins :limit=\"6\" />\n <div class=\"spacer\" />\n <button\n class=\"button-unstyled\"\n @click=\"toggleCollapse\"\n >\n <FAIcon\n class=\"navigation-chevron\"\n fixed-width\n :icon=\"collapsed ? 'chevron-down' : 'chevron-up'\"\n />\n </button>\n </div>\n <ul\n v-if=\"!collapsed || forceExpand\"\n class=\"panel-body\"\n >\n <NavigationEntry\n v-if=\"currentUser || !privateMode\"\n :show-pin=\"false\"\n :item=\"{ icon: 'stream', label: 'nav.timelines' }\"\n :aria-expanded=\"showTimelines ? 'true' : 'false'\"\n @click=\"toggleTimelines\"\n >\n <FAIcon\n class=\"timelines-chevron\"\n fixed-width\n :icon=\"showTimelines ? 'chevron-up' : 'chevron-down'\"\n />\n </NavigationEntry>\n <div\n v-show=\"showTimelines\"\n class=\"timelines-background\"\n >\n <div class=\"timelines\">\n <NavigationEntry\n v-for=\"item in timelinesItems\"\n :key=\"item.name\"\n :show-pin=\"editMode || forceEditMode\"\n :item=\"item\"\n />\n </div>\n </div>\n <NavigationEntry\n v-if=\"currentUser\"\n :show-pin=\"false\"\n :item=\"{ icon: 'list', label: 'nav.lists' }\"\n :aria-expanded=\"showLists ? 'true' : 'false'\"\n @click=\"toggleLists\"\n >\n <router-link\n :title=\"$t('lists.manage_lists')\"\n class=\"extra-button\"\n :to=\"{ name: 'lists' }\"\n @click.stop\n >\n <FAIcon\n class=\"extra-button\"\n fixed-width\n icon=\"wrench\"\n />\n </router-link>\n <FAIcon\n class=\"timelines-chevron\"\n fixed-width\n :icon=\"showLists ? 'chevron-up' : 'chevron-down'\"\n />\n </NavigationEntry>\n <div\n v-show=\"showLists\"\n class=\"timelines-background\"\n >\n <ListsMenuContent\n :show-pin=\"editMode || forceEditMode\"\n class=\"timelines\"\n />\n </div>\n <NavigationEntry\n v-for=\"item in rootItems\"\n :key=\"item.name\"\n :show-pin=\"editMode || forceEditMode\"\n :item=\"item\"\n />\n <NavigationEntry\n v-if=\"!forceEditMode && currentUser\"\n :show-pin=\"false\"\n :item=\"{ label: editMode ? $t('nav.edit_finish') : $t('nav.edit_pinned'), icon: editMode ? 'check' : 'wrench' }\"\n @click=\"toggleEditMode\"\n />\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./nav_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavPanel {\n .panel {\n overflow: hidden;\n box-shadow: var(--panelShadow);\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n position: relative;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n > li {\n &:first-child .menu-item {\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child .menu-item {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n li:last-child {\n border: none;\n }\n\n .navigation-chevron {\n margin-left: 0.8em;\n margin-right: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-chevron {\n margin-left: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-background {\n padding: 0 0 0 0.6em;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n .timelines {\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n }\n\n .nav-panel-heading {\n // breaks without a unit\n // stylelint-disable-next-line length-zero-no-unit\n --panel-heading-height-padding: 0px;\n }\n}\n</style>\n","<template>\n <OptionalRouterLink\n v-slot=\"{ isActive, href, navigate } = {}\"\n ass=\"ass\"\n :to=\"routeTo\"\n >\n <li\n class=\"NavigationEntry menu-item\"\n :class=\"{ '-active': isActive }\"\n v-bind=\"$attrs\"\n >\n <component\n :is=\"routeTo ? 'a' : 'button'\"\n class=\"main-link button-unstyled\"\n :href=\"href\"\n @click=\"navigate\"\n >\n <span>\n <FAIcon\n v-if=\"item.icon\"\n fixed-width\n class=\"fa-scale-110 menu-icon\"\n :icon=\"item.icon\"\n />\n </span>\n <span\n v-if=\"item.iconLetter\"\n class=\"icon iconLetter fa-scale-110 menu-icon\"\n >{{ item.iconLetter }}\n </span>\n <span class=\"label\">\n {{ item.labelRaw || $t(item.label) }}\n </span>\n </component>\n <slot />\n <div\n v-if=\"item.badgeGetter && getters[item.badgeGetter]\"\n class=\"badge badge-notification\"\n >\n {{ getters[item.badgeGetter] }}\n </div>\n <button\n v-if=\"showPin && currentUser\"\n type=\"button\"\n class=\"button-unstyled extra-button\"\n :title=\"$t(isPinned ? 'general.unpin' : 'general.pin' )\"\n :aria-pressed=\"!!isPinned\"\n @click.stop.prevent=\"togglePin(item.name)\"\n >\n <FAIcon\n v-if=\"showPin && currentUser\"\n fixed-width\n class=\"fa-scale-110\"\n :class=\"{ 'veryfaint': !isPinned(item.name) }\"\n :transform=\"!isPinned(item.name) ? 'rotate-45' : ''\"\n icon=\"thumbtack\"\n />\n </button>\n </li>\n </OptionalRouterLink>\n</template>\n\n<script src=\"./navigation_entry.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavigationEntry {\n display: flex;\n box-sizing: border-box;\n align-items: baseline;\n height: 3.5em;\n line-height: 3.5em;\n padding: 0 1em;\n width: 100%;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n .timelines-chevron {\n margin-right: 0;\n }\n\n .main-link {\n flex: 1;\n }\n\n .menu-icon {\n margin-right: 0.8em;\n }\n\n .extra-button {\n width: 3em;\n text-align: center;\n\n &:last-child {\n margin-right: -0.8em;\n }\n }\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n }\n\n &.-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n</style>\n","export const USERNAME_ROUTES = new Set([\n 'bookmarks',\n 'dms',\n 'interactions',\n 'notifications',\n 'chat',\n 'chats',\n 'user-profile'\n])\n\nexport const TIMELINES = {\n home: {\n route: 'friends',\n icon: 'home',\n label: 'nav.home_timeline',\n criteria: ['!private']\n },\n public: {\n route: 'public-timeline',\n anon: true,\n icon: 'users',\n label: 'nav.public_tl',\n criteria: ['!private']\n },\n twkn: {\n route: 'public-external-timeline',\n anon: true,\n icon: 'globe',\n label: 'nav.twkn',\n criteria: ['!private', 'federating']\n },\n bookmarks: {\n route: 'bookmarks',\n icon: 'bookmark',\n label: 'nav.bookmarks'\n },\n favorites: {\n routeObject: { name: 'user-profile', query: { tab: 'favorites' } },\n icon: 'star',\n label: 'user_card.favorites'\n },\n dms: {\n route: 'dms',\n icon: 'envelope',\n label: 'nav.dms'\n }\n}\n\nexport const ROOT_ITEMS = {\n interactions: {\n route: 'interactions',\n icon: 'bell',\n label: 'nav.interactions'\n },\n chats: {\n route: 'chats',\n icon: 'comments',\n label: 'nav.chats',\n badgeGetter: 'unreadChatCount',\n criteria: ['chats']\n },\n friendRequests: {\n route: 'friend-requests',\n icon: 'user-plus',\n label: 'nav.friend_requests',\n criteria: ['lockedUser'],\n badgeGetter: 'followRequestCount'\n },\n about: {\n route: 'about',\n anon: true,\n icon: 'info-circle',\n label: 'nav.about'\n },\n announcements: {\n route: 'announcements',\n icon: 'bullhorn',\n label: 'nav.announcements',\n badgeGetter: 'unreadAnnouncementCount',\n criteria: ['announcements']\n }\n}\n\nexport function routeTo (item, currentUser) {\n if (!item.route && !item.routeObject) return null\n\n let route\n\n if (item.routeObject) {\n route = item.routeObject\n } else {\n route = { name: (item.anon || currentUser) ? item.route : item.anonRoute }\n }\n\n if (USERNAME_ROUTES.has(route.name)) {\n route.params = { username: currentUser.screen_name, name: currentUser.screen_name }\n }\n\n return route\n}\n","<template>\n <!-- eslint-disable vue/no-multiple-template-root -->\n <router-link\n v-if=\"to\"\n v-slot=\"props\"\n :to=\"to\"\n custom\n >\n <slot\n v-bind=\"props\"\n />\n </router-link>\n <slot\n v-else\n v-bind=\"{}\"\n />\n</template>\n\n<script>\nexport default {\n props: ['to']\n}\n</script>\n","import { render } from \"./optional_router_link.vue?vue&type=template&id=0ec30c00\"\nimport script from \"./optional_router_link.vue?vue&type=script&lang=js\"\nexport * from \"./optional_router_link.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport { routeTo } from 'src/components/navigation/navigation.js'\nimport OptionalRouterLink from 'src/components/optional_router_link/optional_router_link.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faThumbtack } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faThumbtack)\n\nconst NavigationEntry = {\n props: ['item', 'showPin'],\n components: {\n OptionalRouterLink\n },\n methods: {\n isPinned (value) {\n return this.pinnedItems.has(value)\n },\n togglePin (value) {\n if (this.isPinned(value)) {\n this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value })\n } else {\n this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value })\n }\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n computed: {\n routeTo () {\n return routeTo(this.item, this.currentUser)\n },\n getters () {\n return this.$store.getters\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)\n })\n }\n}\n\nexport default NavigationEntry\n","import { render } from \"./navigation_entry.vue?vue&type=template&id=de2c2c50\"\nimport script from \"./navigation_entry.js?vue&type=script&lang=js\"\nexport * from \"./navigation_entry.js?vue&type=script&lang=js\"\n\nimport \"./navigation_entry.vue?vue&type=style&index=0&id=de2c2c50&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export const filterNavigation = (list = [], { hasChats, hasAnnouncements, isFederating, isPrivate, currentUser }) => {\n return list.filter(({ criteria, anon, anonRoute }) => {\n const set = new Set(criteria || [])\n if (!isFederating && set.has('federating')) return false\n if (!currentUser && isPrivate && set.has('!private')) return false\n if (!currentUser && !(anon || anonRoute)) return false\n if ((!currentUser || !currentUser.locked) && set.has('lockedUser')) return false\n if (!hasChats && set.has('chats')) return false\n if (!hasAnnouncements && set.has('announcements')) return false\n return true\n })\n}\n\nexport const getListEntries = state => state.lists.allLists.map(list => ({\n name: 'list-' + list.id,\n routeObject: { name: 'lists-timeline', params: { id: list.id } },\n labelRaw: list.title,\n iconLetter: list.title[0]\n}))\n","import { mapState } from 'vuex'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport { getListEntries } from 'src/components/navigation/filter.js'\n\nexport const ListsMenuContent = {\n props: [\n 'showPin'\n ],\n components: {\n NavigationEntry\n },\n computed: {\n ...mapState({\n lists: getListEntries,\n currentUser: state => state.users.currentUser,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating\n })\n }\n}\n\nexport default ListsMenuContent\n","import { render } from \"./lists_menu_content.vue?vue&type=template&id=24f15238\"\nimport script from \"./lists_menu_content.js?vue&type=script&lang=js\"\nexport * from \"./lists_menu_content.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <ul>\n <NavigationEntry\n v-for=\"item in lists\"\n :key=\"item.name\"\n :show-pin=\"showPin\"\n :item=\"item\"\n />\n </ul>\n</template>\n\n<script src=\"./lists_menu_content.js\"></script>\n","<template>\n <span class=\"NavigationPins\">\n <router-link\n v-for=\"item in pinnedList\"\n :key=\"item.name\"\n class=\"pinned-item\"\n :to=\"getRouteTo(item)\"\n :title=\"item.labelRaw || $t(item.label)\"\n >\n <FAIcon\n v-if=\"item.icon\"\n fixed-width\n :icon=\"item.icon\"\n />\n <span\n v-if=\"item.iconLetter\"\n class=\"iconLetter fa-scale-110 fa-old-padding\"\n >{{ item.iconLetter }}</span>\n <div\n v-if=\"item.badgeGetter && getters[item.badgeGetter]\"\n class=\"alert-dot\"\n />\n </router-link>\n </span>\n</template>\n\n<script src=\"./navigation_pins.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavigationPins {\n display: flex;\n flex-wrap: wrap;\n overflow: hidden;\n height: 100%;\n\n .alert-dot {\n border-radius: 100%;\n height: 0.5em;\n width: 0.5em;\n position: absolute;\n right: calc(50% - 0.75em);\n top: calc(50% - 0.5em);\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .pinned-item {\n position: relative;\n flex: 1 0 3em;\n min-width: 2em;\n text-align: center;\n overflow: visible;\n box-sizing: border-box;\n height: 100%;\n\n & .svg-inline--fa,\n & .iconLetter {\n margin: 0;\n }\n\n &.router-link-active {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n border-bottom: 4px solid;\n\n & .svg-inline--fa,\n & .iconLetter {\n color: inherit;\n }\n }\n }\n}\n</style>\n","import { mapState } from 'vuex'\nimport { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'\nimport { getListEntries, filterNavigation } from 'src/components/navigation/filter.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList\n)\n\nconst NavPanel = {\n props: ['limit'],\n methods: {\n getRouteTo (item) {\n return routeTo(item, this.currentUser)\n }\n },\n computed: {\n getters () {\n return this.$store.getters\n },\n ...mapState({\n lists: getListEntries,\n currentUser: state => state.users.currentUser,\n followRequestCount: state => state.api.followRequests.length,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating,\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)\n }),\n pinnedList () {\n if (!this.currentUser) {\n return filterNavigation([\n { ...TIMELINES.public, name: 'public' },\n { ...TIMELINES.twkn, name: 'twkn' },\n { ...ROOT_ITEMS.about, name: 'about' }\n ],\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n })\n }\n return filterNavigation(\n [\n ...Object\n .entries({ ...TIMELINES })\n .filter(([k]) => this.pinnedItems.has(k))\n .map(([k, v]) => ({ ...v, name: k })),\n ...this.lists.filter((k) => this.pinnedItems.has(k.name)),\n ...Object\n .entries({ ...ROOT_ITEMS })\n .filter(([k]) => this.pinnedItems.has(k))\n .map(([k, v]) => ({ ...v, name: k }))\n ],\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n ).slice(0, this.limit)\n }\n }\n}\n\nexport default NavPanel\n","import { render } from \"./navigation_pins.vue?vue&type=template&id=61dbea24\"\nimport script from \"./navigation_pins.js?vue&type=script&lang=js\"\nexport * from \"./navigation_pins.js?vue&type=script&lang=js\"\n\nimport \"./navigation_pins.vue?vue&type=style&index=0&id=61dbea24&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import ListsMenuContent from 'src/components/lists_menu/lists_menu_content.vue'\nimport { mapState, mapGetters } from 'vuex'\nimport { TIMELINES, ROOT_ITEMS } from 'src/components/navigation/navigation.js'\nimport { filterNavigation } from 'src/components/navigation/filter.js'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport NavigationPins from 'src/components/navigation/navigation_pins.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faChevronDown,\n faChevronUp,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList,\n faBullhorn\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faChevronDown,\n faChevronUp,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList,\n faBullhorn\n)\nconst NavPanel = {\n props: ['forceExpand', 'forceEditMode'],\n created () {\n },\n components: {\n ListsMenuContent,\n NavigationEntry,\n NavigationPins,\n Checkbox\n },\n data () {\n return {\n editMode: false,\n showTimelines: false,\n showLists: false,\n timelinesList: Object.entries(TIMELINES).map(([k, v]) => ({ ...v, name: k })),\n rootList: Object.entries(ROOT_ITEMS).map(([k, v]) => ({ ...v, name: k }))\n }\n },\n methods: {\n toggleTimelines () {\n this.showTimelines = !this.showTimelines\n },\n toggleLists () {\n this.showLists = !this.showLists\n },\n toggleEditMode () {\n this.editMode = !this.editMode\n },\n toggleCollapse () {\n this.$store.commit('setPreference', { path: 'simple.collapseNav', value: !this.collapsed })\n this.$store.dispatch('pushServerSideStorage')\n },\n isPinned (item) {\n return this.pinnedItems.has(item)\n },\n togglePin (item) {\n if (this.isPinned(item)) {\n this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value: item })\n } else {\n this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value: item })\n }\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser,\n followRequestCount: state => state.api.followRequests.length,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating,\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems),\n collapsed: state => state.serverSideStorage.prefsStorage.simple.collapseNav\n }),\n timelinesItems () {\n return filterNavigation(\n Object\n .entries({ ...TIMELINES })\n .map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n },\n rootItems () {\n return filterNavigation(\n Object\n .entries({ ...ROOT_ITEMS })\n .map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n }\n}\n\nexport default NavPanel\n","import { render } from \"./nav_panel.vue?vue&type=template&id=7c761001\"\nimport script from \"./nav_panel.js?vue&type=script&lang=js\"\nexport * from \"./nav_panel.js?vue&type=script&lang=js\"\n\nimport \"./nav_panel.vue?vue&type=style&index=0&id=7c761001&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"instance-specific-panel\">\n <div class=\"panel panel-default\">\n <div class=\"panel-body\">\n <!-- eslint-disable vue/no-v-html -->\n <div v-html=\"instanceSpecificPanelContent\" />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./instance_specific_panel.js\"></script>\n","const InstanceSpecificPanel = {\n computed: {\n instanceSpecificPanelContent () {\n return this.$store.state.instance.instanceSpecificPanelContent\n }\n }\n}\n\nexport default InstanceSpecificPanel\n","import { render } from \"./instance_specific_panel.vue?vue&type=template&id=707b4e95\"\nimport script from \"./instance_specific_panel.js?vue&type=script&lang=js\"\nexport * from \"./instance_specific_panel.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"features-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background base04\">\n <div class=\"title\">\n {{ $t('features_panel.title') }}\n </div>\n </div>\n <div class=\"panel-body features-panel\">\n <ul>\n <li v-if=\"shout\">\n {{ $t('features_panel.shout') }}\n </li>\n <li v-if=\"pleromaChatMessages\">\n {{ $t('features_panel.pleroma_chat_messages') }}\n </li>\n <li v-if=\"gopher\">\n {{ $t('features_panel.gopher') }}\n </li>\n <li v-if=\"whoToFollow\">\n {{ $t('features_panel.who_to_follow') }}\n </li>\n <li v-if=\"mediaProxy\">\n {{ $t('features_panel.media_proxy') }}\n </li>\n <li>{{ $t('features_panel.scope_options') }}</li>\n <li>{{ $t('features_panel.text_limit') }} = {{ textlimit }}</li>\n <li>{{ $t('features_panel.upload_limit') }} = {{ uploadlimit.num }} {{ $t('upload.file_size_units.' + uploadlimit.unit) }}</li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./features_panel.js\"></script>\n\n<style lang=\"scss\">\n .features-panel li {\n line-height: 24px;\n }\n</style>\n","import fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nconst FeaturesPanel = {\n computed: {\n shout: function () { return this.$store.state.instance.shoutAvailable },\n pleromaChatMessages: function () { return this.$store.state.instance.pleromaChatMessagesAvailable },\n gopher: function () { return this.$store.state.instance.gopherAvailable },\n whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled },\n mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable },\n minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode },\n textlimit: function () { return this.$store.state.instance.textlimit },\n uploadlimit: function () { return fileSizeFormatService.fileSizeFormat(this.$store.state.instance.uploadlimit) }\n }\n}\n\nexport default FeaturesPanel\n","import { render } from \"./features_panel.vue?vue&type=template&id=76defdfa\"\nimport script from \"./features_panel.js?vue&type=script&lang=js\"\nexport * from \"./features_panel.js?vue&type=script&lang=js\"\n\nimport \"./features_panel.vue?vue&type=style&index=0&id=76defdfa&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"who-to-follow-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background base04\">\n <div class=\"title\">\n {{ $t('who_to_follow.who_to_follow') }}\n </div>\n </div>\n <div class=\"who-to-follow\">\n <p\n v-for=\"user in usersToFollow\"\n :key=\"user.id\"\n class=\"who-to-follow-items\"\n >\n <img :src=\"user.img\">\n <router-link :to=\"userProfileLink(user.id, user.name)\">\n {{ user.name }}\n </router-link><br>\n </p>\n <p class=\"who-to-follow-more\">\n <router-link :to=\"{ name: 'who-to-follow' }\">\n {{ $t('who_to_follow.more') }}\n </router-link>\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./who_to_follow_panel.js\"></script>\n\n<style lang=\"scss\">\n .who-to-follow * {\n vertical-align: middle;\n }\n\n .who-to-follow img {\n width: 32px;\n height: 32px;\n }\n\n .who-to-follow {\n padding: 0 1em;\n margin: 0;\n }\n\n .who-to-follow-items {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0;\n margin: 1em 0;\n }\n\n .who-to-follow-more {\n padding: 0;\n margin: 1em 0;\n text-align: center;\n }\n</style>\n","import apiService from '../../services/api/api.service.js'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { shuffle } from 'lodash'\n\nfunction showWhoToFollow (panel, reply) {\n const shuffled = shuffle(reply)\n\n panel.usersToFollow.forEach((toFollow, index) => {\n const user = shuffled[index]\n const img = user.avatar || this.$store.state.instance.defaultAvatar\n const name = user.acct\n\n toFollow.img = img\n toFollow.name = name\n\n panel.$store.state.api.backendInteractor.fetchUser({ id: name })\n .then((externalUser) => {\n if (!externalUser.error) {\n panel.$store.commit('addNewUsers', [externalUser])\n toFollow.id = externalUser.id\n }\n })\n })\n}\n\nfunction getWhoToFollow (panel) {\n const credentials = panel.$store.state.users.currentUser.credentials\n if (credentials) {\n panel.usersToFollow.forEach(toFollow => {\n toFollow.name = 'Loading...'\n })\n apiService.suggestions({ credentials })\n .then((reply) => {\n showWhoToFollow(panel, reply)\n })\n }\n}\n\nconst WhoToFollowPanel = {\n data: () => ({\n usersToFollow: []\n }),\n computed: {\n user: function () {\n return this.$store.state.users.currentUser.screen_name\n },\n suggestionsEnabled () {\n return this.$store.state.instance.suggestionsEnabled\n }\n },\n methods: {\n userProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n user: function (user, oldUser) {\n if (this.suggestionsEnabled) {\n getWhoToFollow(this)\n }\n }\n },\n mounted:\n function () {\n this.usersToFollow = new Array(3).fill().map(x => (\n {\n img: this.$store.state.instance.defaultAvatar,\n name: '',\n id: 0\n }\n ))\n if (this.suggestionsEnabled) {\n getWhoToFollow(this)\n }\n }\n}\n\nexport default WhoToFollowPanel\n","import { render } from \"./who_to_follow_panel.vue?vue&type=template&id=f150b2ba\"\nimport script from \"./who_to_follow_panel.js?vue&type=script&lang=js\"\nexport * from \"./who_to_follow_panel.js?vue&type=script&lang=js\"\n\nimport \"./who_to_follow_panel.vue?vue&type=style&index=0&id=f150b2ba&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!collapsed || !floating\"\n class=\"shout-panel\"\n >\n <div class=\"panel panel-default\">\n <div\n class=\"panel-heading timeline-heading\"\n :class=\"{ 'shout-heading': floating }\"\n @click.stop.prevent=\"togglePanel\"\n >\n <div class=\"title\">\n {{ $t('shoutbox.title') }}\n <FAIcon\n v-if=\"floating\"\n icon=\"times\"\n class=\"close-icon\"\n />\n </div>\n </div>\n <div class=\"shout-window\">\n <div\n v-for=\"message in messages\"\n :key=\"message.id\"\n class=\"shout-message\"\n >\n <span class=\"shout-avatar\">\n <img :src=\"message.author.avatar\">\n </span>\n <div class=\"shout-content\">\n <router-link\n class=\"shout-name\"\n :to=\"userProfileLink(message.author)\"\n >\n {{ message.author.username }}\n </router-link>\n <br>\n <span class=\"shout-text\">\n {{ message.text }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"shout-input\">\n <textarea\n v-model=\"currentMessage\"\n class=\"shout-input-textarea\"\n rows=\"1\"\n @keyup.enter=\"submit(currentMessage)\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"shout-panel\"\n >\n <div class=\"panel panel-default\">\n <div\n class=\"panel-heading -stub timeline-heading shout-heading\"\n @click.stop.prevent=\"togglePanel\"\n >\n <div class=\"title\">\n <FAIcon\n class=\"icon\"\n icon=\"bullhorn\"\n />\n {{ $t('shoutbox.title') }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./shout_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.floating-shout {\n position: fixed;\n bottom: 0.5em;\n z-index: var(--ZI_popovers);\n max-width: 25em;\n\n &.-left {\n left: 0.5em;\n }\n\n &:not(.-left) {\n right: 0.5em;\n }\n}\n\n.shout-panel {\n .shout-heading {\n cursor: pointer;\n\n .icon {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n margin-right: 0.5em;\n }\n\n .title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n .shout-window {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 20em;\n }\n\n .shout-window-container {\n height: 100%;\n }\n\n .shout-message {\n display: flex;\n padding: 0.2em 0.5em;\n }\n\n .shout-avatar {\n img {\n height: 24px;\n width: 24px;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n margin-right: 0.5em;\n margin-top: 0.25em;\n }\n }\n\n .shout-input {\n display: flex;\n\n textarea {\n flex: 1;\n margin: 0.6em;\n min-height: 3.5em;\n resize: none;\n }\n }\n\n .shout-panel {\n .title {\n display: flex;\n justify-content: space-between;\n }\n }\n}\n</style>\n","import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBullhorn,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faBullhorn,\n faTimes\n)\n\nconst shoutPanel = {\n props: ['floating'],\n data () {\n return {\n currentMessage: '',\n channel: null,\n collapsed: true\n }\n },\n computed: {\n messages () {\n return this.$store.state.shout.messages\n }\n },\n methods: {\n submit (message) {\n this.$store.state.shout.channel.push('new_msg', { text: message }, 10000)\n this.currentMessage = ''\n },\n togglePanel () {\n this.collapsed = !this.collapsed\n },\n userProfileLink (user) {\n return generateProfileLink(user.id, user.username, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n messages (newVal) {\n const scrollEl = this.$el.querySelector('.chat-window')\n if (!scrollEl) return\n if (scrollEl.scrollTop + scrollEl.offsetHeight + 20 > scrollEl.scrollHeight) {\n this.$nextTick(() => {\n if (!scrollEl) return\n scrollEl.scrollTop = scrollEl.scrollHeight - scrollEl.offsetHeight\n })\n }\n }\n }\n}\n\nexport default shoutPanel\n","import { render } from \"./shout_panel.vue?vue&type=template&id=48f55c04\"\nimport script from \"./shout_panel.js?vue&type=script&lang=js\"\nexport * from \"./shout_panel.js?vue&type=script&lang=js\"\n\nimport \"./shout_panel.vue?vue&type=style&index=0&id=48f55c04&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"showing\"\n class=\"media-modal-view\"\n @backdropClicked=\"hideIfNotSwiped\"\n >\n <SwipeClick\n v-if=\"type === 'image'\"\n ref=\"swipeClick\"\n class=\"modal-image-container\"\n :direction=\"swipeDirection\"\n :threshold=\"swipeThreshold\"\n :disable-click-threshold=\"swipeDisableClickThreshold\"\n @preview-requested=\"handleSwipePreview\"\n @swipe-finished=\"handleSwipeEnd\"\n @swipeless-clicked=\"hide\"\n >\n <PinchZoom\n ref=\"pinchZoom\"\n class=\"modal-image-container-inner\"\n selector=\".modal-image\"\n reach-min-scale-strategy=\"reset\"\n stop-propagate-handled=\"stop-propgate-handled\"\n :allow-pan-min-scale=\"pinchZoomMinScale\"\n :min-scale=\"pinchZoomMinScale\"\n :reset-to-min-scale-limit=\"pinchZoomScaleResetLimit\"\n >\n <img\n :class=\"{ loading }\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n @load=\"onImageLoaded\"\n >\n </PinchZoom>\n </SwipeClick>\n <VideoAttachment\n v-if=\"type === 'video'\"\n class=\"modal-image\"\n :attachment=\"currentMedia\"\n :controls=\"true\"\n />\n <audio\n v-if=\"type === 'audio'\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n controls\n />\n <Flash\n v-if=\"type === 'flash'\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n />\n <button\n v-if=\"canNavigate\"\n :title=\"$t('media_modal.previous')\"\n class=\"modal-view-button modal-view-button-arrow modal-view-button-arrow--prev\"\n @click.stop.prevent=\"goPrev\"\n >\n <FAIcon\n class=\"button-icon arrow-icon\"\n icon=\"chevron-left\"\n />\n </button>\n <button\n v-if=\"canNavigate\"\n :title=\"$t('media_modal.next')\"\n class=\"modal-view-button modal-view-button-arrow modal-view-button-arrow--next\"\n @click.stop.prevent=\"goNext\"\n >\n <FAIcon\n class=\"button-icon arrow-icon\"\n icon=\"chevron-right\"\n />\n </button>\n <button\n class=\"modal-view-button modal-view-button-hide\"\n :title=\"$t('media_modal.hide')\"\n @click.stop.prevent=\"hide\"\n >\n <FAIcon\n class=\"button-icon\"\n icon=\"times\"\n />\n </button>\n\n <span\n v-if=\"description\"\n class=\"description\"\n >\n {{ description }}\n </span>\n <span\n class=\"counter\"\n >\n {{ $tc('media_modal.counter', currentIndex + 1, { current: currentIndex + 1, total: media.length }) }}\n </span>\n <span\n v-if=\"loading\"\n class=\"loading-spinner\"\n >\n <FAIcon\n spin\n icon=\"circle-notch\"\n size=\"5x\"\n />\n </span>\n </Modal>\n</template>\n\n<script src=\"./media_modal.js\"></script>\n\n<style lang=\"scss\">\n$modal-view-button-icon-height: 3em;\n$modal-view-button-icon-half-height: calc(#{$modal-view-button-icon-height} / 2);\n$modal-view-button-icon-width: 3em;\n$modal-view-button-icon-margin: 0.5em;\n\n.media-modal-view {\n @keyframes media-fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .modal-image-container {\n display: flex;\n overflow: hidden;\n align-items: center;\n flex-direction: column;\n max-width: 100%;\n max-height: 100%;\n width: 100%;\n height: 100%;\n flex-grow: 1;\n justify-content: center;\n\n &-inner {\n width: 100%;\n height: 100%;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n }\n\n .description,\n .counter {\n /* Hardcoded since background is also hardcoded */\n color: white;\n margin-top: 1em;\n text-shadow: 0 0 10px black, 0 0 10px black;\n padding: 0.2em 2em;\n }\n\n .description {\n flex: 0 0 auto;\n overflow-y: auto;\n min-height: 1em;\n max-width: 500px;\n max-height: 9.5em;\n word-break: break-all;\n }\n\n .modal-image {\n max-width: 100%;\n max-height: 100%;\n image-orientation: from-image; // NOTE: only FF supports this\n animation: 0.1s cubic-bezier(0.7, 0, 1, 0.6) media-fadein;\n\n &.loading {\n opacity: 0.5;\n }\n }\n\n .loading-spinner {\n width: 100%;\n height: 100%;\n position: absolute;\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n color: white;\n }\n }\n\n .modal-view-button {\n border: 0;\n padding: 0;\n opacity: 0;\n box-shadow: none;\n background: none;\n appearance: none;\n overflow: visible;\n cursor: pointer;\n transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n\n .button-icon {\n position: absolute;\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n font-size: 1rem;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n }\n\n .modal-view-button-arrow {\n position: absolute;\n display: block;\n top: 50%;\n margin-top: $modal-view-button-icon-half-height;\n width: $modal-view-button-icon-width;\n height: $modal-view-button-icon-height;\n\n .arrow-icon {\n position: absolute;\n top: 0;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n\n &--prev {\n left: 0;\n\n .arrow-icon {\n left: $modal-view-button-icon-margin;\n }\n }\n\n &--next {\n right: 0;\n\n .arrow-icon {\n right: $modal-view-button-icon-margin;\n }\n }\n }\n\n .modal-view-button-hide {\n position: absolute;\n top: 0;\n right: 0;\n\n .button-icon {\n top: $modal-view-button-icon-margin;\n right: $modal-view-button-icon-margin;\n }\n }\n}\n\n.modal-view.media-modal-view {\n z-index: var(--ZI_media_modal);\n flex-direction: column;\n\n .modal-view-button-arrow,\n .modal-view-button-hide {\n opacity: 0.75;\n\n &:focus,\n &:hover {\n outline: none;\n box-shadow: none;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n overflow: hidden;\n}\n</style>\n","import PinchZoom from '@kazvmoe-infra/pinch-zoom-element'\n\nexport default {\n methods: {\n setTransform ({ scale, x, y }) {\n this.$el.setTransform({ scale, x, y })\n }\n },\n created () {\n // Make lint happy\n (() => PinchZoom)()\n }\n}\n","import { render } from \"./pinch_zoom.vue?vue&type=template&id=4608b5bf\"\nimport script from \"./pinch_zoom.js?vue&type=script&lang=js\"\nexport * from \"./pinch_zoom.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <pinch-zoom\n class=\"pinch-zoom-parent\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n >\n <slot />\n </pinch-zoom>\n</template>\n\n<script src=\"./pinch_zoom.js\"></script>\n","\nconst DIRECTION_LEFT = [-1, 0]\nconst DIRECTION_RIGHT = [1, 0]\nconst DIRECTION_UP = [0, -1]\nconst DIRECTION_DOWN = [0, 1]\n\nconst BUTTON_LEFT = 0\n\nconst deltaCoord = (oldCoord, newCoord) => [newCoord[0] - oldCoord[0], newCoord[1] - oldCoord[1]]\n\nconst touchCoord = touch => [touch.screenX, touch.screenY]\n\nconst touchEventCoord = e => touchCoord(e.touches[0])\n\nconst pointerEventCoord = e => [e.clientX, e.clientY]\n\nconst vectorLength = v => Math.sqrt(v[0] * v[0] + v[1] * v[1])\n\nconst perpendicular = v => [v[1], -v[0]]\n\nconst dotProduct = (v1, v2) => v1[0] * v2[0] + v1[1] * v2[1]\n\nconst project = (v1, v2) => {\n const scalar = (dotProduct(v1, v2) / dotProduct(v2, v2))\n return [scalar * v2[0], scalar * v2[1]]\n}\n\n// direction: either use the constants above or an arbitrary 2d vector.\n// threshold: how many Px to move from touch origin before checking if the\n// callback should be called.\n// divergentTolerance: a scalar for much of divergent direction we tolerate when\n// above threshold. for example, with 1.0 we only call the callback if\n// divergent component of delta is < 1.0 * direction component of delta.\nconst swipeGesture = (direction, onSwipe, threshold = 30, perpendicularTolerance = 1.0) => {\n return {\n direction,\n onSwipe,\n threshold,\n perpendicularTolerance,\n _startPos: [0, 0],\n _swiping: false\n }\n}\n\nconst beginSwipe = (event, gesture) => {\n gesture._startPos = touchEventCoord(event)\n gesture._swiping = true\n}\n\nconst updateSwipe = (event, gesture) => {\n if (!gesture._swiping) return\n // movement too small\n const delta = deltaCoord(gesture._startPos, touchEventCoord(event))\n if (vectorLength(delta) < gesture.threshold) return\n // movement is opposite from direction\n if (dotProduct(delta, gesture.direction) < 0) return\n // movement perpendicular to direction is too much\n const towardsDir = project(delta, gesture.direction)\n const perpendicularDir = perpendicular(gesture.direction)\n const towardsPerpendicular = project(delta, perpendicularDir)\n if (\n vectorLength(towardsDir) * gesture.perpendicularTolerance <\n vectorLength(towardsPerpendicular)\n ) return\n\n gesture.onSwipe()\n gesture._swiping = false\n}\n\nclass SwipeAndClickGesture {\n // swipePreviewCallback(offsets: Array[Number])\n // offsets: the offset vector which the underlying component should move, from the starting position\n // swipeEndCallback(sign: 0|-1|1)\n // sign: if the swipe does not meet the threshold, 0\n // if the swipe meets the threshold in the positive direction, 1\n // if the swipe meets the threshold in the negative direction, -1\n constructor ({\n direction,\n // swipeStartCallback\n swipePreviewCallback,\n swipeEndCallback,\n swipeCancelCallback,\n swipelessClickCallback,\n threshold = 30,\n perpendicularTolerance = 1.0,\n disableClickThreshold = 1\n }) {\n const nop = () => {}\n this.direction = direction\n this.swipePreviewCallback = swipePreviewCallback || nop\n this.swipeEndCallback = swipeEndCallback || nop\n this.swipeCancelCallback = swipeCancelCallback || nop\n this.swipelessClickCallback = swipelessClickCallback || nop\n this.threshold = typeof threshold === 'function' ? threshold : () => threshold\n this.disableClickThreshold = typeof disableClickThreshold === 'function' ? disableClickThreshold : () => disableClickThreshold\n this.perpendicularTolerance = perpendicularTolerance\n this._reset()\n }\n\n _reset () {\n this._startPos = [0, 0]\n this._pointerId = -1\n this._swiping = false\n this._swiped = false\n this._preventNextClick = false\n }\n\n start (event) {\n // Only handle left click\n if (event.button !== BUTTON_LEFT) {\n return\n }\n\n this._startPos = pointerEventCoord(event)\n this._pointerId = event.pointerId\n this._swiping = true\n this._swiped = false\n }\n\n move (event) {\n if (this._swiping && this._pointerId === event.pointerId) {\n this._swiped = true\n\n const coord = pointerEventCoord(event)\n const delta = deltaCoord(this._startPos, coord)\n\n this.swipePreviewCallback(delta)\n }\n }\n\n cancel (event) {\n if (!this._swiping || this._pointerId !== event.pointerId) {\n return\n }\n\n this.swipeCancelCallback()\n }\n\n end (event) {\n if (!this._swiping) {\n return\n }\n\n if (this._pointerId !== event.pointerId) {\n return\n }\n\n this._swiping = false\n\n // movement too small\n const coord = pointerEventCoord(event)\n const delta = deltaCoord(this._startPos, coord)\n\n const sign = (() => {\n if (vectorLength(delta) < this.threshold()) {\n return 0\n }\n // movement is opposite from direction\n const isPositive = dotProduct(delta, this.direction) > 0\n\n // movement perpendicular to direction is too much\n const towardsDir = project(delta, this.direction)\n const perpendicularDir = perpendicular(this.direction)\n const towardsPerpendicular = project(delta, perpendicularDir)\n if (\n vectorLength(towardsDir) * this.perpendicularTolerance <\n vectorLength(towardsPerpendicular)\n ) {\n return 0\n }\n\n return isPositive ? 1 : -1\n })()\n\n if (this._swiped) {\n this.swipeEndCallback(sign)\n }\n this._reset()\n // Only a mouse will fire click event when\n // the end point is far from the starting point\n // so for other kinds of pointers do not check\n // whether we have swiped\n if (vectorLength(delta) >= this.disableClickThreshold() && event.pointerType === 'mouse') {\n this._preventNextClick = true\n }\n }\n\n click (event) {\n if (!this._preventNextClick) {\n this.swipelessClickCallback()\n }\n this._reset()\n }\n}\n\nconst GestureService = {\n DIRECTION_LEFT,\n DIRECTION_RIGHT,\n DIRECTION_UP,\n DIRECTION_DOWN,\n swipeGesture,\n beginSwipe,\n updateSwipe,\n SwipeAndClickGesture\n}\n\nexport default GestureService\n","import GestureService from '../../services/gesture_service/gesture_service'\n\n/**\n * props:\n * direction: a vector that indicates the direction of the intended swipe\n * threshold: the minimum distance in pixels the swipe has moved on `direction'\n * for swipe-finished() to have a non-zero sign\n * disableClickThreshold: the minimum distance in pixels for the swipe to\n * not trigger a click\n * perpendicularTolerance: see gesture_service\n *\n * Events:\n * preview-requested(offsets)\n * Emitted when the pointer has moved.\n * offsets: the offsets from the start of the swipe to the current cursor position\n *\n * swipe-canceled()\n * Emitted when the swipe has been canceled due to a pointercancel event.\n *\n * swipe-finished(sign: 0|-1|1)\n * Emitted when the swipe has finished.\n * sign: if the swipe does not meet the threshold, 0\n * if the swipe meets the threshold in the positive direction, 1\n * if the swipe meets the threshold in the negative direction, -1\n *\n * swipeless-clicked()\n * Emitted when there is a click without swipe.\n * This and swipe-finished() cannot be emitted for the same pointerup event.\n */\nconst SwipeClick = {\n props: {\n direction: {\n type: Array\n },\n threshold: {\n type: Function,\n default: () => 30\n },\n disableClickThreshold: {\n type: Function,\n default: () => 1\n },\n perpendicularTolerance: {\n type: Number,\n default: 1.0\n }\n },\n methods: {\n handlePointerDown (event) {\n this.$gesture.start(event)\n },\n handlePointerMove (event) {\n this.$gesture.move(event)\n },\n handlePointerUp (event) {\n this.$gesture.end(event)\n },\n handlePointerCancel (event) {\n this.$gesture.cancel(event)\n },\n handleNativeClick (event) {\n this.$gesture.click(event)\n },\n preview (offsets) {\n this.$emit('preview-requested', offsets)\n },\n end (sign) {\n this.$emit('swipe-finished', sign)\n },\n click () {\n this.$emit('swipeless-clicked')\n },\n cancel () {\n this.$emit('swipe-canceled')\n }\n },\n created () {\n this.$gesture = new GestureService.SwipeAndClickGesture({\n direction: this.direction,\n threshold: this.threshold,\n disableClickThreshold: this.disableClickThreshold,\n perpendicularTolerance: this.perpendicularTolerance,\n swipePreviewCallback: this.preview,\n swipeEndCallback: this.end,\n swipeCancelCallback: this.cancel,\n swipelessClickCallback: this.click\n })\n }\n}\n\nexport default SwipeClick\n","import { render } from \"./swipe_click.vue?vue&type=template&id=4c0f684c\"\nimport script from \"./swipe_click.js?vue&type=script&lang=js\"\nexport * from \"./swipe_click.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-bind=\"$attrs\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerup=\"handlePointerUp\"\n @pointercancel=\"handlePointerCancel\"\n @click=\"handleNativeClick\"\n >\n <slot />\n </div>\n</template>\n\n<script src=\"./swipe_click.js\"></script>\n","import StillImage from '../still-image/still-image.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport Modal from '../modal/modal.vue'\nimport PinchZoom from '../pinch_zoom/pinch_zoom.vue'\nimport SwipeClick from '../swipe_click/swipe_click.vue'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport Flash from 'src/components/flash/flash.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronLeft,\n faChevronRight,\n faCircleNotch,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronLeft,\n faChevronRight,\n faCircleNotch,\n faTimes\n)\n\nconst MediaModal = {\n components: {\n StillImage,\n VideoAttachment,\n PinchZoom,\n SwipeClick,\n Modal,\n Flash\n },\n data () {\n return {\n loading: false,\n swipeDirection: GestureService.DIRECTION_LEFT,\n swipeThreshold: () => {\n const considerableMoveRatio = 1 / 4\n return window.innerWidth * considerableMoveRatio\n },\n pinchZoomMinScale: 1,\n pinchZoomScaleResetLimit: 1.2\n }\n },\n computed: {\n showing () {\n return this.$store.state.mediaViewer.activated\n },\n media () {\n return this.$store.state.mediaViewer.media\n },\n description () {\n return this.currentMedia.description\n },\n currentIndex () {\n return this.$store.state.mediaViewer.currentIndex\n },\n currentMedia () {\n return this.media[this.currentIndex]\n },\n canNavigate () {\n return this.media.length > 1\n },\n type () {\n return this.currentMedia ? this.getType(this.currentMedia) : null\n },\n swipeDisableClickThreshold () {\n // If there is only one media, allow more mouse movements to close the modal\n // because there is less chance that the user wants to switch to another image\n return () => this.canNavigate ? 1 : 30\n }\n },\n methods: {\n getType (media) {\n return fileTypeService.fileType(media.mimetype)\n },\n hide () {\n // HACK: Closing immediately via a touch will cause the click\n // to be processed on the content below the overlay\n const transitionTime = 100 // ms\n setTimeout(() => {\n this.$store.dispatch('closeMediaViewer')\n }, transitionTime)\n },\n hideIfNotSwiped (event) {\n // If we have swiped over SwipeClick, do not trigger hide\n const comp = this.$refs.swipeClick\n if (!comp) {\n this.hide()\n } else {\n comp.$gesture.click(event)\n }\n },\n goPrev () {\n if (this.canNavigate) {\n const prevIndex = this.currentIndex === 0 ? this.media.length - 1 : (this.currentIndex - 1)\n const newMedia = this.media[prevIndex]\n if (this.getType(newMedia) === 'image') {\n this.loading = true\n }\n this.$store.dispatch('setCurrentMedia', newMedia)\n }\n },\n goNext () {\n if (this.canNavigate) {\n const nextIndex = this.currentIndex === this.media.length - 1 ? 0 : (this.currentIndex + 1)\n const newMedia = this.media[nextIndex]\n if (this.getType(newMedia) === 'image') {\n this.loading = true\n }\n this.$store.dispatch('setCurrentMedia', newMedia)\n }\n },\n onImageLoaded () {\n this.loading = false\n },\n handleSwipePreview (offsets) {\n this.$refs.pinchZoom.setTransform({ scale: 1, x: offsets[0], y: 0 })\n },\n handleSwipeEnd (sign) {\n this.$refs.pinchZoom.setTransform({ scale: 1, x: 0, y: 0 })\n if (sign > 0) {\n this.goNext()\n } else if (sign < 0) {\n this.goPrev()\n }\n },\n handleKeyupEvent (e) {\n if (this.showing && e.keyCode === 27) { // escape\n this.hide()\n }\n },\n handleKeydownEvent (e) {\n if (!this.showing) {\n return\n }\n\n if (e.keyCode === 39) { // arrow right\n this.goNext()\n } else if (e.keyCode === 37) { // arrow left\n this.goPrev()\n }\n }\n },\n mounted () {\n window.addEventListener('popstate', this.hide)\n document.addEventListener('keyup', this.handleKeyupEvent)\n document.addEventListener('keydown', this.handleKeydownEvent)\n },\n unmounted () {\n window.removeEventListener('popstate', this.hide)\n document.removeEventListener('keyup', this.handleKeyupEvent)\n document.removeEventListener('keydown', this.handleKeydownEvent)\n }\n}\n\nexport default MediaModal\n","import { render } from \"./media_modal.vue?vue&type=template&id=a080a8e6\"\nimport script from \"./media_modal.js?vue&type=script&lang=js\"\nexport * from \"./media_modal.js?vue&type=script&lang=js\"\n\nimport \"./media_modal.vue?vue&type=style&index=0&id=a080a8e6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"side-drawer-container\"\n :class=\"{ 'side-drawer-container-closed': closed, 'side-drawer-container-open': !closed }\"\n >\n <div\n class=\"side-drawer-darken\"\n :class=\"{ 'side-drawer-darken-closed': closed}\"\n />\n <div\n class=\"side-drawer\"\n :class=\"{'side-drawer-closed': closed}\"\n @touchstart=\"touchStart\"\n @touchmove=\"touchMove\"\n >\n <div\n class=\"side-drawer-heading\"\n @click=\"toggleDrawer\"\n >\n <UserCard\n v-if=\"currentUser\"\n :user-id=\"currentUser.id\"\n :hide-bio=\"true\"\n />\n <div\n v-else\n class=\"side-drawer-logo-wrapper\"\n >\n <img :src=\"logo\">\n <span v-if=\"!hideSitename\">{{ sitename }}</span>\n </div>\n </div>\n <ul>\n <li\n v-if=\"!currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'login' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-in-alt\"\n /> {{ $t(\"login.login\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser || !privateMode\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"timelinesRoute\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"home\"\n /> {{ $t(\"nav.timelines\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'lists' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"list\"\n /> {{ $t(\"nav.lists\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && pleromaChatMessagesAvailable\"\n @click=\"toggleDrawer\"\n >\n <router-link\n :to=\"{ name: 'chats', params: { username: currentUser.screen_name } }\"\n style=\"position: relative;\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"comments\"\n /> {{ $t(\"nav.chats\") }}\n <span\n v-if=\"unreadChatCount\"\n class=\"badge badge-notification\"\n >\n {{ unreadChatCount }}\n </span>\n </router-link>\n </li>\n </ul>\n <ul v-if=\"currentUser\">\n <li @click=\"toggleDrawer\">\n <router-link :to=\"{ name: 'interactions', params: { username: currentUser.screen_name } }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bell\"\n /> {{ $t(\"nav.interactions\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser.locked\"\n @click=\"toggleDrawer\"\n >\n <router-link to=\"/friend-requests\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"user-plus\"\n /> {{ $t(\"nav.friend_requests\") }}\n <span\n v-if=\"followRequestCount > 0\"\n class=\"badge badge-notification\"\n >\n {{ followRequestCount }}\n </span>\n </router-link>\n </li>\n <li\n v-if=\"shout\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'shout-panel' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bullhorn\"\n /> {{ $t(\"shoutbox.title\") }}\n </router-link>\n </li>\n </ul>\n <ul>\n <li\n v-if=\"currentUser || !privateMode\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'search' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search\"\n /> {{ $t(\"nav.search\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && suggestionsEnabled\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'who-to-follow' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"user-plus\"\n /> {{ $t(\"nav.who_to_follow\") }}\n </router-link>\n </li>\n <li @click=\"toggleDrawer\">\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click=\"openSettingsModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"cog\"\n /> {{ $t(\"settings.settings\") }}\n </button>\n </li>\n <li @click=\"toggleDrawer\">\n <router-link :to=\"{ name: 'about'}\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"info-circle\"\n /> {{ $t(\"nav.about\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && currentUser.role === 'admin'\"\n @click=\"toggleDrawer\"\n >\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click.stop=\"openAdminModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"tachometer-alt\"\n /> {{ $t(\"nav.administration\") }}\n </button>\n </li>\n <li\n v-if=\"currentUser && supportsAnnouncements\"\n @click=\"toggleDrawer\"\n >\n <router-link\n :to=\"{ name: 'announcements' }\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bullhorn\"\n /> {{ $t(\"nav.announcements\") }}\n <span\n v-if=\"unreadAnnouncementCount\"\n class=\"badge badge-notification\"\n >\n {{ unreadAnnouncementCount }}\n </span>\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'edit-navigation' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"compass\"\n /> {{ $t(\"nav.edit_nav_mobile\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click=\"doLogout\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-out-alt\"\n /> {{ $t(\"login.logout\") }}\n </button>\n </li>\n </ul>\n </div>\n <div\n class=\"side-drawer-click-outside\"\n :class=\"{'side-drawer-click-outside-closed': closed}\"\n @click.stop.prevent=\"toggleDrawer\"\n />\n </div>\n</template>\n\n<script src=\"./side_drawer.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.side-drawer-container {\n position: fixed;\n z-index: var(--ZI_navbar);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: stretch;\n transition-duration: 0s;\n transition-property: transform;\n}\n\n.side-drawer-container-open {\n transform: translate(0%);\n}\n\n.side-drawer-container-closed {\n transition-delay: 0.35s;\n transform: translate(-100%);\n}\n\n.side-drawer-darken {\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n position: fixed;\n z-index: -1;\n transition: 0.35s;\n transition-property: background-color;\n background-color: rgb(0 0 0 / 50%);\n}\n\n.side-drawer-darken-closed {\n background-color: rgb(0 0 0 / 0%);\n}\n\n.side-drawer-click-outside {\n flex: 1 1 100%;\n}\n\n.side-drawer {\n overflow-x: hidden;\n transition: 0.35s;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-property: transform;\n margin: 0 0 0 -100px;\n padding: 0 0 1em 100px;\n width: 80%;\n max-width: 20em;\n flex: 0 0 80%;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n .badge {\n margin-left: 10px;\n }\n}\n\n.side-drawer-logo-wrapper {\n display: flex;\n align-items: center;\n padding: 0.85em;\n\n img {\n flex: none;\n height: 50px;\n margin-right: 0.85em;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.side-drawer-click-outside-closed {\n flex: 0 0 0;\n}\n\n.side-drawer-closed {\n transform: translate(-100%);\n}\n\n.side-drawer-heading {\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n display: flex;\n padding: 0;\n margin: 0;\n}\n\n.side-drawer ul {\n list-style: none;\n margin: 0;\n padding: 0;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.side-drawer ul:last-child {\n border: 0;\n}\n\n.side-drawer li {\n padding: 0;\n\n a,\n button {\n box-sizing: border-box;\n display: block;\n height: 3em;\n line-height: 3em;\n padding: 0 0.7em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n</style>\n","import { mapState, mapGetters } from 'vuex'\nimport UserCard from '../user_card/user_card.vue'\nimport { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport { USERNAME_ROUTES } from 'src/components/navigation/navigation.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle,\n faCompass,\n faList\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle,\n faCompass,\n faList\n)\n\nconst SideDrawer = {\n props: ['logout'],\n data: () => ({\n closed: true,\n closeGesture: undefined\n }),\n created () {\n this.closeGesture = GestureService.swipeGesture(GestureService.DIRECTION_LEFT, this.toggleDrawer)\n\n if (this.currentUser && this.currentUser.locked) {\n this.$store.dispatch('startFetchingFollowRequests')\n }\n },\n components: { UserCard },\n computed: {\n currentUser () {\n return this.$store.state.users.currentUser\n },\n shout () { return this.$store.state.shout.joined },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n unseenNotificationsCount () {\n return this.unseenNotifications.length\n },\n suggestionsEnabled () {\n return this.$store.state.instance.suggestionsEnabled\n },\n logo () {\n return this.$store.state.instance.logo\n },\n hideSitename () {\n return this.$store.state.instance.hideSitename\n },\n sitename () {\n return this.$store.state.instance.name\n },\n followRequestCount () {\n return this.$store.state.api.followRequests.length\n },\n privateMode () {\n return this.$store.state.instance.private\n },\n federating () {\n return this.$store.state.instance.federating\n },\n timelinesRoute () {\n let name\n if (this.$store.state.interface.lastTimeline) {\n name = this.$store.state.interface.lastTimeline\n }\n name = this.currentUser ? 'friends' : 'public-timeline'\n if (USERNAME_ROUTES.has(name)) {\n return { name, params: { username: this.currentUser.screen_name } }\n } else {\n return { name }\n }\n },\n ...mapState({\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements\n }),\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n },\n methods: {\n toggleDrawer () {\n this.closed = !this.closed\n },\n doLogout () {\n this.logout()\n this.toggleDrawer()\n },\n touchStart (e) {\n GestureService.beginSwipe(e, this.closeGesture)\n },\n touchMove (e) {\n GestureService.updateSwipe(e, this.closeGesture)\n },\n openSettingsModal () {\n this.$store.dispatch('openSettingsModal', 'user')\n },\n openAdminModal () {\n this.$store.dispatch('openSettingsModal', 'admin')\n }\n }\n}\n\nexport default SideDrawer\n","import { render } from \"./side_drawer.vue?vue&type=template&id=0c55529b\"\nimport script from \"./side_drawer.js?vue&type=script&lang=js\"\nexport * from \"./side_drawer.js?vue&type=script&lang=js\"\n\nimport \"./side_drawer.vue?vue&type=style&index=0&id=0c55529b&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { debounce } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faPen\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faPen\n)\n\nconst HIDDEN_FOR_PAGES = new Set([\n 'chats',\n 'chat',\n 'lists-edit'\n])\n\nconst MobilePostStatusButton = {\n data () {\n return {\n hidden: false,\n scrollingDown: false,\n inputActive: false,\n oldScrollPos: 0,\n amountScrolled: 0\n }\n },\n created () {\n if (this.autohideFloatingPostButton) {\n this.activateFloatingPostButtonAutohide()\n }\n window.addEventListener('resize', this.handleOSK)\n },\n unmounted () {\n if (this.autohideFloatingPostButton) {\n this.deactivateFloatingPostButtonAutohide()\n }\n window.removeEventListener('resize', this.handleOSK)\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n isHidden () {\n if (HIDDEN_FOR_PAGES.has(this.$route.name)) { return true }\n\n return this.autohideFloatingPostButton && (this.hidden || this.inputActive)\n },\n isPersistent () {\n return !!this.$store.getters.mergedConfig.alwaysShowNewPostButton\n },\n autohideFloatingPostButton () {\n return !!this.$store.getters.mergedConfig.autohideFloatingPostButton\n }\n },\n watch: {\n autohideFloatingPostButton: function (isEnabled) {\n if (isEnabled) {\n this.activateFloatingPostButtonAutohide()\n } else {\n this.deactivateFloatingPostButtonAutohide()\n }\n }\n },\n methods: {\n activateFloatingPostButtonAutohide () {\n window.addEventListener('scroll', this.handleScrollStart)\n window.addEventListener('scroll', this.handleScrollEnd)\n },\n deactivateFloatingPostButtonAutohide () {\n window.removeEventListener('scroll', this.handleScrollStart)\n window.removeEventListener('scroll', this.handleScrollEnd)\n },\n openPostForm () {\n this.$store.dispatch('openPostStatusModal')\n },\n handleOSK () {\n // This is a big hack: we're guessing from changed window sizes if the\n // on-screen keyboard is active or not. This is only really important\n // for phones in portrait mode and it's more important to show the button\n // in normal scenarios on all phones, than it is to hide it when the\n // keyboard is active.\n // Guesswork based on https://www.mydevice.io/#compare-devices\n\n // for example, iphone 4 and android phones from the same time period\n const smallPhone = window.innerWidth < 350\n const smallPhoneKbOpen = smallPhone && window.innerHeight < 345\n\n const biggerPhone = !smallPhone && window.innerWidth < 450\n const biggerPhoneKbOpen = biggerPhone && window.innerHeight < 560\n if (smallPhoneKbOpen || biggerPhoneKbOpen) {\n this.inputActive = true\n } else {\n this.inputActive = false\n }\n },\n handleScrollStart: debounce(function () {\n if (window.scrollY > this.oldScrollPos) {\n this.hidden = true\n } else {\n this.hidden = false\n }\n this.oldScrollPos = window.scrollY\n }, 100, { leading: true, trailing: false }),\n\n handleScrollEnd: debounce(function () {\n this.hidden = false\n this.oldScrollPos = window.scrollY\n }, 100, { leading: false, trailing: true })\n }\n}\n\nexport default MobilePostStatusButton\n","import { render } from \"./mobile_post_status_button.vue?vue&type=template&id=6c0a4c69\"\nimport script from \"./mobile_post_status_button.js?vue&type=script&lang=js\"\nexport * from \"./mobile_post_status_button.js?vue&type=script&lang=js\"\n\nimport \"./mobile_post_status_button.vue?vue&type=style&index=0&id=6c0a4c69&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n v-if=\"isLoggedIn\"\n class=\"MobilePostButton button-default new-status-button\"\n :class=\"{ 'hidden': isHidden, 'always-show': isPersistent }\"\n :title=\"$t('post_status.new_status')\"\n @click=\"openPostForm\"\n >\n <FAIcon icon=\"pen\" />\n </button>\n</template>\n\n<script src=\"./mobile_post_status_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.MobilePostButton {\n &.button-default {\n width: 5em;\n height: 5em;\n border-radius: 100%;\n position: fixed;\n bottom: 1.5em;\n right: 1.5em;\n // TODO: this needs its own color, it has to stand out enough and link color\n // is not very optimal for this particular use.\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 2px 2px rgb(0 0 0 / 30%), 0 4px 6px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s transform;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n }\n\n &.hidden {\n transform: translateY(150%);\n }\n\n svg {\n font-size: 1.5em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n@media all and (min-width: 801px) {\n .new-status-button:not(.always-show) {\n display: none;\n }\n}\n\n</style>\n","<template>\n <div\n class=\"MobileNav\"\n >\n <nav\n id=\"nav\"\n class=\"mobile-nav\"\n @click=\"scrollToTop()\"\n >\n <div class=\"item\">\n <button\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('nav.mobile_sidebar')\"\n :aria-expanaded=\"$refs.sideDrawer && !$refs.sideDrawer.closed\"\n @click.stop.prevent=\"toggleMobileSidebar()\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bars\"\n />\n <div\n v-if=\"(unreadChatCount && !chatsPinned) || unreadAnnouncementCount\"\n class=\"alert-dot\"\n />\n </button>\n <NavigationPins class=\"pins\" />\n </div> <div class=\"item right\">\n <button\n v-if=\"currentUser\"\n class=\"button-unstyled mobile-nav-button\"\n :title=\"unseenNotificationsCount ? $t('nav.mobile_notifications_unread_active') : $t('nav.mobile_notifications')\"\n @click.stop.prevent=\"openMobileNotifications()\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bell\"\n />\n <div\n v-if=\"unseenNotificationsCount\"\n class=\"alert-dot\"\n />\n </button>\n </div>\n </nav>\n <aside\n v-if=\"currentUser\"\n class=\"mobile-notifications-drawer\"\n :class=\"{ '-closed': !notificationsOpen }\"\n @touchstart.stop=\"notificationsTouchStart\"\n @touchmove.stop=\"notificationsTouchMove\"\n >\n <div class=\"mobile-notifications-header\">\n <span class=\"title\">{{ $t('notifications.notifications') }}</span>\n <span class=\"spacer\" />\n <button\n v-if=\"notificationsAtTop\"\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('general.scroll_to_top')\"\n @click.stop.prevent=\"scrollMobileNotificationsToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n <button\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('nav.mobile_notifications_close')\"\n @click.stop.prevent=\"closeMobileNotifications(true)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n <div\n id=\"mobile-notifications\"\n ref=\"mobileNotifications\"\n class=\"mobile-notifications\"\n @scroll=\"onScroll\"\n />\n </aside>\n <SideDrawer\n ref=\"sideDrawer\"\n :logout=\"logout\"\n />\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmLogout\"\n :title=\"$t('login.logout_confirm_title')\"\n :confirm-text=\"$t('login.logout_confirm_accept_button')\"\n :cancel-text=\"$t('login.logout_confirm_cancel_button')\"\n @accepted=\"doLogout\"\n @cancelled=\"hideConfirmLogout\"\n >\n {{ $t('login.logout_confirm') }}\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./mobile_nav.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.MobileNav {\n z-index: var(--ZI_navbar);\n\n .mobile-nav {\n display: grid;\n line-height: var(--navbar-height);\n grid-template-rows: 50px;\n grid-template-columns: 2fr auto;\n width: 100%;\n box-sizing: border-box;\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .mobile-inner-nav {\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .mobile-nav-button {\n display: inline-block;\n text-align: center;\n padding: 0 1em;\n position: relative;\n cursor: pointer;\n }\n\n .site-name {\n padding: 0 0.3em;\n display: inline-block;\n }\n\n .item {\n /* moslty just to get rid of extra whitespaces */\n display: flex;\n }\n\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .mobile-notifications-drawer {\n width: 100%;\n height: 100vh;\n overflow-x: hidden;\n position: fixed;\n top: 0;\n left: 0;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n transition-property: transform;\n transition-duration: 0.25s;\n transform: translateX(0);\n z-index: var(--ZI_navbar);\n -webkit-overflow-scrolling: touch;\n\n &.-closed {\n transform: translateX(100%);\n box-shadow: none;\n }\n }\n\n .mobile-notifications-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: calc(var(--ZI_navbar) + 100);\n width: 100%;\n height: 50px;\n line-height: 50px;\n position: absolute;\n color: var(--topBarText);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n\n .spacer {\n flex: 1;\n }\n\n .title {\n font-size: 1.3em;\n margin-left: 0.6em;\n }\n }\n\n .pins {\n flex: 1;\n\n .pinned-item {\n flex-grow: 1;\n }\n }\n\n .mobile-notifications {\n margin-top: 50px;\n width: 100vw;\n height: calc(100vh - var(--navbar-height));\n overflow-x: hidden;\n overflow-y: scroll;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .notifications {\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n\n .panel {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n }\n\n .panel::after {\n border-radius: 0;\n }\n\n .panel .panel-heading {\n border-radius: 0;\n box-shadow: none;\n }\n }\n }\n\n .confirm-modal.dark-overlay {\n &::before {\n z-index: 3000;\n }\n\n .dialog-modal.panel {\n z-index: 3001;\n }\n }\n}\n\n</style>\n","import SideDrawer from '../side_drawer/side_drawer.vue'\nimport Notifications from '../notifications/notifications.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport NavigationPins from 'src/components/navigation/navigation_pins.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faBell,\n faBars,\n faArrowUp,\n faMinus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faBell,\n faBars,\n faArrowUp,\n faMinus\n)\n\nconst MobileNav = {\n components: {\n SideDrawer,\n Notifications,\n NavigationPins,\n ConfirmModal\n },\n data: () => ({\n notificationsCloseGesture: undefined,\n notificationsOpen: false,\n notificationsAtTop: true,\n showingConfirmLogout: false\n }),\n created () {\n this.notificationsCloseGesture = GestureService.swipeGesture(\n GestureService.DIRECTION_RIGHT,\n () => this.closeMobileNotifications(true),\n 50\n )\n },\n computed: {\n currentUser () {\n return this.$store.state.users.currentUser\n },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n unseenNotificationsCount () {\n return this.unseenNotifications.length\n },\n hideSitename () { return this.$store.state.instance.hideSitename },\n sitename () { return this.$store.state.instance.name },\n isChat () {\n return this.$route.name === 'chat'\n },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']),\n chatsPinned () {\n return new Set(this.$store.state.serverSideStorage.prefsStorage.collections.pinnedNavItems).has('chats')\n },\n shouldConfirmLogout () {\n return this.$store.getters.mergedConfig.modalOnLogout\n },\n ...mapGetters(['unreadChatCount'])\n },\n methods: {\n toggleMobileSidebar () {\n this.$refs.sideDrawer.toggleDrawer()\n },\n openMobileNotifications () {\n this.notificationsOpen = true\n },\n closeMobileNotifications (markRead) {\n if (this.notificationsOpen) {\n // make sure to mark notifs seen only when the notifs were open and not\n // from close-calls.\n this.notificationsOpen = false\n if (markRead) {\n this.markNotificationsAsSeen()\n }\n }\n },\n notificationsTouchStart (e) {\n GestureService.beginSwipe(e, this.notificationsCloseGesture)\n },\n notificationsTouchMove (e) {\n GestureService.updateSwipe(e, this.notificationsCloseGesture)\n },\n scrollToTop () {\n window.scrollTo(0, 0)\n },\n scrollMobileNotificationsToTop () {\n this.$refs.mobileNotifications.scrollTo(0, 0)\n },\n showConfirmLogout () {\n this.showingConfirmLogout = true\n },\n hideConfirmLogout () {\n this.showingConfirmLogout = false\n },\n logout () {\n if (!this.shouldConfirmLogout) {\n this.doLogout()\n } else {\n this.showConfirmLogout()\n }\n },\n doLogout () {\n this.$router.replace('/main/public')\n this.$store.dispatch('logout')\n this.hideConfirmLogout()\n },\n markNotificationsAsSeen () {\n // this.$refs.notifications.markAsSeen()\n this.$store.dispatch('markNotificationsAsSeen')\n },\n onScroll ({ target: { scrollTop, clientHeight, scrollHeight } }) {\n this.notificationsAtTop = scrollTop > 0\n if (scrollTop + clientHeight >= scrollHeight) {\n this.$refs.notifications.fetchOlderNotifications()\n }\n }\n },\n watch: {\n $route () {\n // handles closing notificaitons when you press any router-link on the\n // notifications.\n this.closeMobileNotifications()\n }\n }\n}\n\nexport default MobileNav\n","import { render } from \"./mobile_nav.vue?vue&type=template&id=06094f09\"\nimport script from \"./mobile_nav.js?vue&type=script&lang=js\"\nexport * from \"./mobile_nav.js?vue&type=script&lang=js\"\n\nimport \"./mobile_nav.vue?vue&type=style&index=0&id=06094f09&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <nav\n id=\"nav\"\n class=\"DesktopNav\"\n :class=\"{ '-logoLeft': logoLeft }\"\n @click=\"scrollToTop()\"\n >\n <div class=\"inner-nav\">\n <div class=\"item sitename\">\n <router-link\n v-if=\"!hideSitename\"\n class=\"site-name\"\n :to=\"{ name: 'root' }\"\n active-class=\"home\"\n >\n {{ sitename }}\n </router-link>\n </div>\n <router-link\n class=\"logo\"\n :to=\"{ name: 'root' }\"\n :style=\"logoBgStyle\"\n :title=\"sitename\"\n >\n <div\n class=\"mask\"\n :style=\"logoMaskStyle\"\n />\n <img\n :src=\"logo\"\n :style=\"logoStyle\"\n >\n </router-link>\n <div class=\"item right actions\">\n <search-bar\n v-if=\"currentUser || !privateMode\"\n @toggled=\"onSearchBarToggled\"\n @click.stop\n />\n <button\n class=\"button-unstyled nav-icon\"\n :title=\"$t('nav.preferences')\"\n @click.stop=\"openSettingsModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"cog\"\n />\n </button>\n <button\n v-if=\"currentUser && currentUser.role === 'admin'\"\n class=\"button-unstyled nav-icon\"\n target=\"_blank\"\n :title=\"$t('nav.administration')\"\n @click.stop=\"openAdminModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"tachometer-alt\"\n />\n </button>\n <span class=\"spacer\" />\n <button\n v-if=\"currentUser\"\n class=\"button-unstyled nav-icon\"\n :title=\"$t('login.logout')\"\n @click.stop.prevent=\"logout\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-out-alt\"\n />\n </button>\n </div>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmLogout\"\n :title=\"$t('login.logout_confirm_title')\"\n :confirm-text=\"$t('login.logout_confirm_accept_button')\"\n :cancel-text=\"$t('login.logout_confirm_cancel_button')\"\n @accepted=\"doLogout\"\n @cancelled=\"hideConfirmLogout\"\n >\n {{ $t('login.logout_confirm') }}\n </confirm-modal>\n </teleport>\n </nav>\n</template>\n<script src=\"./desktop_nav.js\"></script>\n\n<style src=\"./desktop_nav.scss\" lang=\"scss\"></style>\n","<template>\n <div\n class=\"SearchBar\"\n :class=\"{ '-expanded': !hidden }\"\n >\n <button\n v-if=\"hidden\"\n class=\"button-unstyled nav-icon\"\n :title=\"$t('nav.search')\"\n type=\"button\"\n :aria-expanded=\"!hidden\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </button>\n <template v-else>\n <input\n id=\"search-bar-input\"\n ref=\"searchInput\"\n v-model=\"searchTerm\"\n class=\"search-bar-input\"\n :placeholder=\"$t('nav.search')\"\n type=\"text\"\n @keyup.enter=\"find(searchTerm)\"\n >\n <button\n class=\"button-default search-button\"\n type=\"submit\"\n :title=\"$t('nav.search')\"\n @click=\"find(searchTerm)\"\n >\n <FAIcon\n fixed-width\n icon=\"search\"\n />\n </button>\n <button\n class=\"button-unstyled cancel-search\"\n type=\"button\"\n :title=\"$t('nav.search_close')\"\n :aria-expanded=\"!hidden\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <FAIcon\n fixed-width\n icon=\"times\"\n class=\"cancel-icon fa-scale-110 fa-old-padding\"\n />\n </button>\n <span class=\"spacer\" />\n <span class=\"spacer\" />\n </template>\n </div>\n</template>\n\n<script src=\"./search_bar.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.SearchBar {\n display: inline-flex;\n align-items: baseline;\n vertical-align: baseline;\n justify-content: flex-end;\n\n &.-expanded {\n width: 100%;\n }\n\n .search-bar-input,\n .search-button {\n height: 29px;\n }\n\n .search-bar-input {\n flex: 1 0 auto;\n }\n\n .cancel-search {\n height: 50px;\n }\n\n .cancel-icon {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n}\n\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faSearch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faSearch\n)\n\nconst SearchBar = {\n data: () => ({\n searchTerm: undefined,\n hidden: true,\n error: false\n }),\n watch: {\n $route: function (route) {\n if (route.name === 'search') {\n this.searchTerm = route.query.query\n }\n }\n },\n methods: {\n find (searchTerm) {\n this.$router.push({ name: 'search', query: { query: searchTerm } })\n this.$refs.searchInput.focus()\n },\n toggleHidden () {\n this.hidden = !this.hidden\n this.$emit('toggled', this.hidden)\n this.$nextTick(() => {\n if (!this.hidden) {\n this.$refs.searchInput.focus()\n }\n })\n }\n }\n}\n\nexport default SearchBar\n","import { render } from \"./search_bar.vue?vue&type=template&id=3ff3b2d5\"\nimport script from \"./search_bar.js?vue&type=script&lang=js\"\nexport * from \"./search_bar.js?vue&type=script&lang=js\"\n\nimport \"./search_bar.vue?vue&type=style&index=0&id=3ff3b2d5&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import SearchBar from 'components/search_bar/search_bar.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle\n)\n\nexport default {\n components: {\n SearchBar,\n ConfirmModal\n },\n data: () => ({\n searchBarHidden: true,\n supportsMask: window.CSS && window.CSS.supports && (\n window.CSS.supports('mask-size', 'contain') ||\n window.CSS.supports('-webkit-mask-size', 'contain') ||\n window.CSS.supports('-moz-mask-size', 'contain') ||\n window.CSS.supports('-ms-mask-size', 'contain') ||\n window.CSS.supports('-o-mask-size', 'contain')\n ),\n showingConfirmLogout: false\n }),\n computed: {\n enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },\n logoStyle () {\n return {\n visibility: this.enableMask ? 'hidden' : 'visible'\n }\n },\n logoMaskStyle () {\n return this.enableMask\n ? {\n 'mask-image': `url(${this.$store.state.instance.logo})`\n }\n : {\n 'background-color': this.enableMask ? '' : 'transparent'\n }\n },\n logoBgStyle () {\n return Object.assign({\n margin: `${this.$store.state.instance.logoMargin} 0`,\n opacity: this.searchBarHidden ? 1 : 0\n }, this.enableMask\n ? {}\n : {\n 'background-color': this.enableMask ? '' : 'transparent'\n })\n },\n logo () { return this.$store.state.instance.logo },\n sitename () { return this.$store.state.instance.name },\n hideSitename () { return this.$store.state.instance.hideSitename },\n logoLeft () { return this.$store.state.instance.logoLeft },\n currentUser () { return this.$store.state.users.currentUser },\n privateMode () { return this.$store.state.instance.private },\n shouldConfirmLogout () {\n return this.$store.getters.mergedConfig.modalOnLogout\n }\n },\n methods: {\n scrollToTop () {\n window.scrollTo(0, 0)\n },\n showConfirmLogout () {\n this.showingConfirmLogout = true\n },\n hideConfirmLogout () {\n this.showingConfirmLogout = false\n },\n logout () {\n if (!this.shouldConfirmLogout) {\n this.doLogout()\n } else {\n this.showConfirmLogout()\n }\n },\n doLogout () {\n this.$router.replace('/main/public')\n this.$store.dispatch('logout')\n this.hideConfirmLogout()\n },\n onSearchBarToggled (hidden) {\n this.searchBarHidden = hidden\n },\n openSettingsModal () {\n this.$store.dispatch('openSettingsModal', 'user')\n },\n openAdminModal () {\n this.$store.dispatch('openSettingsModal', 'admin')\n }\n }\n}\n","import { render } from \"./desktop_nav.vue?vue&type=template&id=5dbfe449\"\nimport script from \"./desktop_nav.js?vue&type=script&lang=js\"\nexport * from \"./desktop_nav.js?vue&type=script&lang=js\"\n\nimport \"./desktop_nav.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isOpen\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"user-reporting-panel panel\">\n <div class=\"panel-heading\">\n <i18n-t\n tag=\"div\"\n keypath=\"user_reporting.title\"\n class=\"title\"\n >\n <UserLink :user=\"user\" />\n </i18n-t>\n </div>\n <div class=\"panel-body\">\n <div class=\"user-reporting-panel-left\">\n <div>\n <p>{{ $t('user_reporting.add_comment_description') }}</p>\n <textarea\n v-model=\"comment\"\n class=\"form-control\"\n :placeholder=\"$t('user_reporting.additional_comments')\"\n rows=\"1\"\n @input=\"resize\"\n />\n </div>\n <div v-if=\"!user.is_local\">\n <p>{{ $t('user_reporting.forward_description') }}</p>\n <Checkbox v-model=\"forward\">\n {{ $t('user_reporting.forward_to', [remoteInstance]) }}\n </Checkbox>\n </div>\n <div>\n <button\n class=\"btn button-default\"\n :disabled=\"processing\"\n @click=\"reportUser\"\n >\n {{ $t('user_reporting.submit') }}\n </button>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ $t('user_reporting.generic_error') }}\n </div>\n </div>\n </div>\n <div class=\"user-reporting-panel-right\">\n <List :items=\"statuses\">\n <template #item=\"{item}\">\n <div class=\"status-fadein user-reporting-panel-sitem\">\n <Status\n :in-conversation=\"false\"\n :focused=\"false\"\n :statusoid=\"item\"\n />\n <Checkbox\n :model-value=\"isChecked(item.id)\"\n @update:model-value=\"checked => toggleStatus(checked, item.id)\"\n />\n </div>\n </template>\n </List>\n </div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./user_reporting_modal.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-reporting-panel {\n width: 90vw;\n max-width: 700px;\n min-height: 20vh;\n max-height: 80vh;\n\n .panel-body {\n display: flex;\n flex-direction: column-reverse;\n border-top: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n overflow: hidden;\n }\n\n &-left {\n padding: 1.1em 0.7em 0.7em;\n line-height: var(--post-line-height);\n box-sizing: border-box;\n\n > div {\n margin-bottom: 1em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p {\n margin-top: 0;\n }\n\n textarea.form-control {\n line-height: 16px;\n resize: none;\n overflow: hidden;\n transition: min-height 200ms 100ms;\n min-height: 44px;\n width: 100%;\n }\n\n .btn {\n min-width: 10em;\n padding: 0 2em;\n }\n\n .alert {\n margin: 1em 0 0;\n line-height: 1.3em;\n }\n }\n\n &-right {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n &-sitem {\n display: flex;\n justify-content: space-between;\n\n /* TODO cleanup this */\n > .Status {\n flex: 1;\n }\n\n > .checkbox {\n margin: 0.75em;\n }\n }\n\n @media all and (min-width: 801px) {\n .panel-body {\n flex-direction: row;\n }\n\n &-left {\n width: 50%;\n max-width: 320px;\n border-right: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 1.1em;\n\n > div {\n margin-bottom: 2em;\n }\n }\n\n &-right {\n width: 50%;\n flex: 1 1 auto;\n margin-bottom: 12px;\n }\n }\n}\n</style>\n","import Status from '../status/status.vue'\nimport List from '../list/list.vue'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Modal from '../modal/modal.vue'\nimport UserLink from '../user_link/user_link.vue'\n\nconst UserReportingModal = {\n components: {\n Status,\n List,\n Checkbox,\n Modal,\n UserLink\n },\n data () {\n return {\n comment: '',\n forward: false,\n statusIdsToReport: [],\n processing: false,\n error: false\n }\n },\n computed: {\n reportModal () {\n return this.$store.state.reports.reportModal\n },\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n isOpen () {\n return this.isLoggedIn && this.reportModal.activated\n },\n userId () {\n return this.reportModal.userId\n },\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n remoteInstance () {\n return !this.user.is_local && this.user.screen_name.substr(this.user.screen_name.indexOf('@') + 1)\n },\n statuses () {\n return this.reportModal.statuses\n },\n preTickedIds () {\n return this.reportModal.preTickedIds\n }\n },\n watch: {\n userId: 'resetState',\n preTickedIds (newValue) {\n this.statusIdsToReport = newValue\n }\n },\n methods: {\n resetState () {\n // Reset state\n this.comment = ''\n this.forward = false\n this.statusIdsToReport = this.preTickedIds\n this.processing = false\n this.error = false\n },\n closeModal () {\n this.$store.dispatch('closeUserReportingModal')\n },\n reportUser () {\n this.processing = true\n this.error = false\n const params = {\n userId: this.userId,\n comment: this.comment,\n forward: this.forward,\n statusIds: this.statusIdsToReport\n }\n this.$store.state.api.backendInteractor.reportUser({ ...params })\n .then(() => {\n this.processing = false\n this.resetState()\n this.closeModal()\n })\n .catch(() => {\n this.processing = false\n this.error = true\n })\n },\n clearError () {\n this.error = false\n },\n isChecked (statusId) {\n return this.statusIdsToReport.indexOf(statusId) !== -1\n },\n toggleStatus (checked, statusId) {\n if (checked === this.isChecked(statusId)) {\n return\n }\n\n if (checked) {\n this.statusIdsToReport.push(statusId)\n } else {\n this.statusIdsToReport.splice(this.statusIdsToReport.indexOf(statusId), 1)\n }\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n // Auto is needed to make textbox shrink when removing lines\n target.style.height = 'auto'\n target.style.height = `${target.scrollHeight}px`\n if (target.value === '') {\n target.style.height = null\n }\n }\n }\n}\n\nexport default UserReportingModal\n","import { render } from \"./user_reporting_modal.vue?vue&type=template&id=b4c54784\"\nimport script from \"./user_reporting_modal.js?vue&type=script&lang=js\"\nexport * from \"./user_reporting_modal.js?vue&type=script&lang=js\"\n\nimport \"./user_reporting_modal.vue?vue&type=style&index=0&id=b4c54784&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isFormVisible\"\n class=\"edit-form-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"edit-form-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('post_status.edit_status') }}\n </div>\n <PostStatusForm\n class=\"panel-body\"\n v-bind=\"params\"\n :post-handler=\"doEditStatus\"\n :disable-polls=\"true\"\n :disable-visibility-selector=\"true\"\n @posted=\"closeModal\"\n />\n </div>\n </Modal>\n</template>\n\n<script src=\"./edit_status_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.edit-form-modal-view {\n align-items: flex-start;\n}\n\n.edit-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n\n .form-bottom-left {\n max-width: 6.5em;\n\n .emoji-icon {\n justify-content: right;\n }\n }\n}\n</style>\n","import PostStatusForm from '../post_status_form/post_status_form.vue'\nimport Modal from '../modal/modal.vue'\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport get from 'lodash/get'\n\nconst EditStatusModal = {\n components: {\n PostStatusForm,\n Modal\n },\n data () {\n return {\n resettingForm: false\n }\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n modalActivated () {\n return this.$store.state.editStatus.modalActivated\n },\n isFormVisible () {\n return this.isLoggedIn && !this.resettingForm && this.modalActivated\n },\n params () {\n return this.$store.state.editStatus.params || {}\n }\n },\n watch: {\n params (newVal, oldVal) {\n if (get(newVal, 'statusId') !== get(oldVal, 'statusId')) {\n this.resettingForm = true\n this.$nextTick(() => {\n this.resettingForm = false\n })\n }\n },\n isFormVisible (val) {\n if (val) {\n this.$nextTick(() => this.$el && this.$el.querySelector('textarea').focus())\n }\n }\n },\n methods: {\n doEditStatus ({ status, spoilerText, sensitive, media, contentType, poll }) {\n const params = {\n store: this.$store,\n statusId: this.$store.state.editStatus.params.statusId,\n status,\n spoilerText,\n sensitive,\n poll,\n media,\n contentType\n }\n\n return statusPosterService.editStatus(params)\n .then((data) => {\n return data\n })\n .catch((err) => {\n console.error('Error editing status', err)\n return {\n error: err.message\n }\n })\n },\n closeModal () {\n this.$store.dispatch('closeEditStatusModal')\n }\n }\n}\n\nexport default EditStatusModal\n","import { render } from \"./edit_status_modal.vue?vue&type=template&id=7e74cdc2\"\nimport script from \"./edit_status_modal.js?vue&type=script&lang=js\"\nexport * from \"./edit_status_modal.js?vue&type=script&lang=js\"\n\nimport \"./edit_status_modal.vue?vue&type=style&index=0&id=7e74cdc2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isLoggedIn && !resettingForm\"\n :is-open=\"modalActivated\"\n class=\"post-form-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"post-form-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('post_status.new_status') }}\n </div>\n <PostStatusForm\n class=\"panel-body\"\n v-bind=\"params\"\n @posted=\"resetAndClose\"\n />\n </div>\n </Modal>\n</template>\n\n<script src=\"./post_status_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.post-form-modal-view {\n align-items: flex-start;\n}\n\n.post-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n</style>\n","import PostStatusForm from '../post_status_form/post_status_form.vue'\nimport Modal from '../modal/modal.vue'\nimport get from 'lodash/get'\n\nconst PostStatusModal = {\n components: {\n PostStatusForm,\n Modal\n },\n data () {\n return {\n resettingForm: false\n }\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n modalActivated () {\n return this.$store.state.postStatus.modalActivated\n },\n isFormVisible () {\n return this.isLoggedIn && !this.resettingForm && this.modalActivated\n },\n params () {\n return this.$store.state.postStatus.params || {}\n }\n },\n watch: {\n params (newVal, oldVal) {\n if (get(newVal, 'repliedUser.id') !== get(oldVal, 'repliedUser.id')) {\n this.resettingForm = true\n this.$nextTick(() => {\n this.resettingForm = false\n })\n }\n },\n isFormVisible (val) {\n if (val) {\n this.$nextTick(() => this.$el && this.$el.querySelector('textarea').focus())\n }\n }\n },\n methods: {\n closeModal () {\n this.$store.dispatch('closePostStatusModal')\n },\n resetAndClose () {\n this.$store.dispatch('resetPostStatusModal')\n this.$store.dispatch('closePostStatusModal')\n }\n }\n}\n\nexport default PostStatusModal\n","import { render } from \"./post_status_modal.vue?vue&type=template&id=365216ee\"\nimport script from \"./post_status_modal.js?vue&type=script&lang=js\"\nexport * from \"./post_status_modal.js?vue&type=script&lang=js\"\n\nimport \"./post_status_modal.vue?vue&type=style&index=0&id=365216ee&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"modalActivated\"\n class=\"status-history-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"status-history-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('status.status_history') }} ({{ historyCount }})\n </div>\n <div class=\"panel-body\">\n <div\n v-if=\"historyCount > 0\"\n class=\"history-body\"\n >\n <status\n v-for=\"status in history\"\n :key=\"status.id\"\n :statusoid=\"status\"\n :is-preview=\"true\"\n class=\"conversation-status status-fadein panel-body\"\n />\n </div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./status_history_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.status-history-modal-view {\n align-items: flex-start;\n}\n\n.status-history-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n</style>\n","import { get } from 'lodash'\nimport Modal from '../modal/modal.vue'\nimport Status from '../status/status.vue'\n\nconst StatusHistoryModal = {\n components: {\n Modal,\n Status\n },\n data () {\n return {\n statuses: []\n }\n },\n computed: {\n modalActivated () {\n return this.$store.state.statusHistory.modalActivated\n },\n params () {\n return this.$store.state.statusHistory.params\n },\n statusId () {\n return this.params.id\n },\n historyCount () {\n return this.statuses.length\n },\n history () {\n return this.statuses\n }\n },\n watch: {\n params (newVal, oldVal) {\n const newStatusId = get(newVal, 'id') !== get(oldVal, 'id')\n if (newStatusId) {\n this.resetHistory()\n }\n\n if (newStatusId || get(newVal, 'edited_at') !== get(oldVal, 'edited_at')) {\n this.fetchStatusHistory()\n }\n }\n },\n methods: {\n resetHistory () {\n this.statuses = []\n },\n fetchStatusHistory () {\n this.$store.dispatch('fetchStatusHistory', this.params)\n .then(data => {\n this.statuses = data\n })\n },\n closeModal () {\n this.$store.dispatch('closeStatusHistoryModal')\n }\n }\n}\n\nexport default StatusHistoryModal\n","import { render } from \"./status_history_modal.vue?vue&type=template&id=16d58712\"\nimport script from \"./status_history_modal.js?vue&type=script&lang=js\"\nexport * from \"./status_history_modal.js?vue&type=script&lang=js\"\n\nimport \"./status_history_modal.vue?vue&type=style&index=0&id=16d58712&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"global-notice-list\">\n <div\n v-for=\"(notice, index) in notices\"\n :key=\"index\"\n class=\"alert global-notice\"\n :class=\"{ ['global-' + notice.level]: true }\"\n >\n <div class=\"notice-message\">\n {{ $t(notice.messageKey, notice.messageArgs) }}\n </div>\n <button\n class=\"button-unstyled close-notice\"\n @click=\"closeNotice(notice)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<script src=\"./global_notice_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.global-notice-list {\n position: fixed;\n top: calc(var(--navbar-height) + 0.5em);\n width: 100%;\n pointer-events: none;\n z-index: var(--ZI_navbar_popovers);\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .global-notice {\n pointer-events: auto;\n text-align: center;\n width: 40em;\n max-width: calc(100% - 3em);\n display: flex;\n padding-left: 1.5em;\n line-height: 2;\n margin-bottom: 0.5em;\n\n .notice-message {\n flex: 1 1 100%;\n }\n }\n\n .global-error {\n background-color: var(--alertPopupError, $fallback--cRed);\n color: var(--alertPopupErrorText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupErrorText, $fallback--text);\n }\n }\n\n .global-warning {\n background-color: var(--alertPopupWarning, $fallback--cOrange);\n color: var(--alertPopupWarningText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupWarningText, $fallback--text);\n }\n }\n\n .global-success {\n background-color: var(--alertPopupSuccess, $fallback--cGreen);\n color: var(--alertPopupSuccessText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupSuccessText, $fallback--text);\n }\n }\n\n .global-info {\n background-color: var(--alertPopupNeutral, $fallback--fg);\n color: var(--alertPopupNeutralText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupNeutralText, $fallback--text);\n }\n }\n\n .close-notice {\n padding-right: 0.2em;\n\n .svg-inline--fa:hover {\n opacity: 0.6;\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst GlobalNoticeList = {\n computed: {\n notices () {\n return this.$store.state.interface.globalNotices\n }\n },\n methods: {\n closeNotice (notice) {\n this.$store.dispatch('removeGlobalNotice', notice)\n }\n }\n}\n\nexport default GlobalNoticeList\n","import { render } from \"./global_notice_list.vue?vue&type=template&id=f3a7303a\"\nimport script from \"./global_notice_list.js?vue&type=script&lang=js\"\nexport * from \"./global_notice_list.js?vue&type=script&lang=js\"\n\nimport \"./global_notice_list.vue?vue&type=style&index=0&id=f3a7303a&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import UserPanel from './components/user_panel/user_panel.vue'\nimport NavPanel from './components/nav_panel/nav_panel.vue'\nimport InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue'\nimport FeaturesPanel from './components/features_panel/features_panel.vue'\nimport WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue'\nimport ShoutPanel from './components/shout_panel/shout_panel.vue'\nimport MediaModal from './components/media_modal/media_modal.vue'\nimport SideDrawer from './components/side_drawer/side_drawer.vue'\nimport MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'\nimport MobileNav from './components/mobile_nav/mobile_nav.vue'\nimport DesktopNav from './components/desktop_nav/desktop_nav.vue'\nimport UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'\nimport EditStatusModal from './components/edit_status_modal/edit_status_modal.vue'\nimport PostStatusModal from './components/post_status_modal/post_status_modal.vue'\nimport StatusHistoryModal from './components/status_history_modal/status_history_modal.vue'\nimport GlobalNoticeList from './components/global_notice_list/global_notice_list.vue'\nimport { windowWidth, windowHeight } from './services/window_utils/window_utils'\nimport { mapGetters } from 'vuex'\nimport { defineAsyncComponent } from 'vue'\n\nexport default {\n name: 'app',\n components: {\n UserPanel,\n NavPanel,\n Notifications: defineAsyncComponent(() => import('./components/notifications/notifications.vue')),\n InstanceSpecificPanel,\n FeaturesPanel,\n WhoToFollowPanel,\n ShoutPanel,\n MediaModal,\n SideDrawer,\n MobilePostStatusButton,\n MobileNav,\n DesktopNav,\n SettingsModal: defineAsyncComponent(() => import('./components/settings_modal/settings_modal.vue')),\n UpdateNotification: defineAsyncComponent(() => import('./components/update_notification/update_notification.vue')),\n UserReportingModal,\n PostStatusModal,\n EditStatusModal,\n StatusHistoryModal,\n GlobalNoticeList\n },\n data: () => ({\n mobileActivePanel: 'timeline'\n }),\n created () {\n // Load the locale from the storage\n const val = this.$store.getters.mergedConfig.interfaceLanguage\n this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })\n window.addEventListener('resize', this.updateMobileState)\n },\n unmounted () {\n window.removeEventListener('resize', this.updateMobileState)\n },\n computed: {\n classes () {\n return [\n {\n '-reverse': this.reverseLayout,\n '-no-sticky-headers': this.noSticky,\n '-has-new-post-button': this.newPostButtonShown\n },\n '-' + this.layoutType\n ]\n },\n navClasses () {\n const { navbarColumnStretch } = this.$store.getters.mergedConfig\n return [\n '-' + this.layoutType,\n ...(navbarColumnStretch ? ['-column-stretch'] : [])\n ]\n },\n currentUser () { return this.$store.state.users.currentUser },\n userBackground () { return this.currentUser.background_image },\n instanceBackground () {\n return this.mergedConfig.hideInstanceWallpaper\n ? null\n : this.$store.state.instance.background\n },\n background () { return this.userBackground || this.instanceBackground },\n bgStyle () {\n if (this.background) {\n return {\n '--body-background-image': `url(${this.background})`\n }\n }\n },\n shout () { return this.$store.state.shout.joined },\n suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },\n showInstanceSpecificPanel () {\n return this.$store.state.instance.showInstanceSpecificPanel &&\n !this.$store.getters.mergedConfig.hideISP &&\n this.$store.state.instance.instanceSpecificPanelContent\n },\n isChats () {\n return this.$route.name === 'chat' || this.$route.name === 'chats'\n },\n isListEdit () {\n return this.$route.name === 'lists-edit'\n },\n newPostButtonShown () {\n if (this.isChats) return false\n if (this.isListEdit) return false\n return this.$store.getters.mergedConfig.alwaysShowNewPostButton || this.layoutType === 'mobile'\n },\n showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },\n editingAvailable () { return this.$store.state.instance.editingAvailable },\n shoutboxPosition () {\n return this.$store.getters.mergedConfig.alwaysShowNewPostButton || false\n },\n hideShoutbox () {\n return this.$store.getters.mergedConfig.hideShoutbox\n },\n layoutType () { return this.$store.state.interface.layoutType },\n privateMode () { return this.$store.state.instance.private },\n reverseLayout () {\n const { thirdColumnMode, sidebarRight: reverseSetting } = this.$store.getters.mergedConfig\n if (this.layoutType !== 'wide') {\n return reverseSetting\n } else {\n return thirdColumnMode === 'notifications' ? reverseSetting : !reverseSetting\n }\n },\n noSticky () { return this.$store.getters.mergedConfig.disableStickyHeaders },\n showScrollbars () { return this.$store.getters.mergedConfig.showScrollbars },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n updateMobileState () {\n this.$store.dispatch('setLayoutWidth', windowWidth())\n this.$store.dispatch('setLayoutHeight', windowHeight())\n }\n }\n}\n","import { render } from \"./App.vue?vue&type=template&id=8323d9fc\"\nimport script from \"./App.js?vue&type=script&lang=js\"\nexport * from \"./App.js?vue&type=script&lang=js\"\n\nimport \"./App.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div :class=\"['Timeline', classes.root]\">\n <div :class=\"classes.header\">\n <TimelineMenu\n v-if=\"!embedded\"\n :timeline-name=\"timelineName\"\n />\n <div\n v-if=\"showScrollTop && !embedded\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled scroll-to-top-button\"\n type=\"button\"\n :title=\"$t('general.scroll_to_top')\"\n @click=\"scrollToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n </div>\n <template v-if=\"mobileLayout && !embedded\">\n <div\n v-if=\"showLoadButton\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled loadmore-button\"\n :title=\"loadButtonString\"\n @click.prevent=\"showNewStatuses\"\n >\n <FAIcon\n fixed-width\n icon=\"circle-plus\"\n />\n <div class=\"alert-badge\">\n {{ mobileLoadButtonString }}\n </div>\n </button>\n </div>\n <div\n v-else-if=\"!embedded\"\n class=\"loadmore-text faint veryfaint rightside-icon\"\n :title=\"$t('timeline.up_to_date')\"\n :aria-disabled=\"true\"\n @click.prevent\n >\n <FAIcon\n fixed-width\n icon=\"check\"\n />\n </div>\n </template>\n <template v-else>\n <button\n v-if=\"showLoadButton\"\n class=\"button-default loadmore-button\"\n @click.prevent=\"showNewStatuses\"\n >\n {{ loadButtonString }}\n </button>\n <div\n v-else-if=\"!embedded\"\n class=\"loadmore-text faint\"\n @click.prevent\n >\n {{ $t('timeline.up_to_date') }}\n </div>\n </template>\n <QuickFilterSettings\n v-if=\"!embedded\"\n class=\"rightside-button\"\n />\n <QuickViewSettings\n v-if=\"!embedded\"\n class=\"rightside-button\"\n />\n </div>\n <div :class=\"classes.body\">\n <div\n ref=\"timeline\"\n class=\"timeline\"\n role=\"feed\"\n >\n <conversation\n v-for=\"statusId in filteredPinnedStatusIds\"\n :key=\"statusId + '-pinned'\"\n role=\"listitem\"\n class=\"status-fadein\"\n :status-id=\"statusId\"\n :collapsable=\"true\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"userId\"\n />\n <conversation\n v-for=\"status in filteredVisibleStatuses\"\n :key=\"status.id\"\n role=\"listitem\"\n class=\"status-fadein\"\n :status-id=\"status.id\"\n :collapsable=\"true\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"userId\"\n :virtual-hidden=\"virtualScrollingEnabled && !statusesToDisplay.includes(status.id)\"\n />\n </div>\n </div>\n <div :class=\"classes.footer\">\n <teleport\n :to=\"footerSlipgate\"\n :disabled=\"!embedded || !footerSlipgate\"\n >\n <div\n v-if=\"count===0\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('timeline.no_statuses') }}\n </div>\n <div\n v-else-if=\"bottomedOut\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('timeline.no_more_statuses') }}\n </div>\n <button\n v-else-if=\"!timeline.loading\"\n class=\"button-unstyled -link\"\n @click.prevent=\"fetchOlderStatuses()\"\n >\n <div class=\"new-status-notification text-center\">\n {{ $t('timeline.load_older') }}\n </div>\n </button>\n <div\n v-else\n class=\"new-status-notification text-center\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n </teleport>\n </div>\n </div>\n</template>\n\n<script src=\"./timeline.js\"></script>\n\n<style src=\"./timeline.scss\" lang=\"scss\"> </style>\n","<template>\n <div\n v-if=\"!hideStatus\"\n :style=\"hiddenStyle\"\n class=\"Conversation\"\n :class=\"{ '-expanded' : isExpanded, 'panel' : isExpanded }\"\n >\n <div\n v-if=\"isExpanded\"\n class=\"panel-heading conversation-heading -sticky\"\n >\n <span class=\"title\"> {{ $t('timeline.conversation') }} </span>\n <button\n v-if=\"collapsable\"\n class=\"button-unstyled -link\"\n @click.prevent=\"toggleExpanded\"\n >\n {{ $t('timeline.collapse') }}\n </button>\n <QuickFilterSettings\n v-if=\"!collapsable\"\n :conversation=\"true\"\n class=\"rightside-button\"\n />\n <QuickViewSettings\n v-if=\"!collapsable\"\n :conversation=\"true\"\n class=\"rightside-button\"\n />\n </div>\n <div class=\"conversation-body panel-body\">\n <div\n v-if=\"isTreeView\"\n class=\"thread-body\"\n >\n <div\n v-if=\"shouldShowAllConversationButton\"\n class=\"conversation-dive-to-top-level-box\"\n >\n <i18n-t\n keypath=\"status.show_all_conversation_with_icon\"\n tag=\"button\"\n class=\"button-unstyled -link\"\n scope=\"global\"\n @click.prevent=\"diveToTopLevel\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-left\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.show_all_conversation', otherTopLevelCount, { numStatus: otherTopLevelCount }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n <div\n v-if=\"shouldShowAncestors\"\n class=\"thread-ancestors\"\n >\n <article\n v-for=\"status in ancestorsOf(diveRoot)\"\n :key=\"status.id\"\n class=\"thread-ancestor\"\n :class=\"{'thread-ancestor-has-other-replies': getReplies(status.id).length > 1, '-faded': shouldFadeAncestors}\"\n >\n <status\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"getHighlight()\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status status-fadein panel-body\"\n\n :simple-tree=\"treeViewIsSimple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :show-other-replies-as-button=\"showOtherRepliesButtonInsideStatus\"\n :dive=\"() => diveIntoStatus(status.id)\"\n\n :controlled-showing-tall=\"statusContentProperties[status.id].showingTall\"\n :controlled-expanding-subject=\"statusContentProperties[status.id].expandingSubject\"\n :controlled-showing-long-subject=\"statusContentProperties[status.id].showingLongSubject\"\n :controlled-replying=\"statusContentProperties[status.id].replying\"\n :controlled-media-playing=\"statusContentProperties[status.id].mediaPlaying\"\n :controlled-toggle-showing-tall=\"() => toggleStatusContentProperty(status.id, 'showingTall')\"\n :controlled-toggle-expanding-subject=\"() => toggleStatusContentProperty(status.id, 'expandingSubject')\"\n :controlled-toggle-showing-long-subject=\"() => toggleStatusContentProperty(status.id, 'showingLongSubject')\"\n :controlled-toggle-replying=\"() => toggleStatusContentProperty(status.id, 'replying')\"\n :controlled-set-media-playing=\"(newVal) => toggleStatusContentProperty(status.id, 'mediaPlaying', newVal)\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n <div\n v-if=\"showOtherRepliesButtonBelowStatus && getReplies(status.id).length > 1\"\n class=\"thread-ancestor-dive-box\"\n >\n <div\n class=\"thread-ancestor-dive-box-inner\"\n >\n <i18n-t\n tag=\"button\"\n scope=\"global\"\n keypath=\"status.ancestor_follow_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"diveIntoStatus(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-right\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.ancestor_follow', getReplies(status.id).length - 1, { numReplies: getReplies(status.id).length - 1 }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n </div>\n </article>\n </div>\n <thread-tree\n v-for=\"status in showingTopLevel\"\n :key=\"status.id\"\n ref=\"statusComponent\"\n :depth=\"0\"\n\n :status=\"status\"\n :in-profile=\"inProfile\"\n :conversation=\"conversation\"\n :collapsable=\"collapsable\"\n :is-expanded=\"isExpanded\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :profile-user-id=\"profileUserId\"\n\n :focused=\"focused\"\n :get-replies=\"getReplies\"\n :highlight=\"maybeHighlight\"\n :set-highlight=\"setHighlight\"\n :toggle-expanded=\"toggleExpanded\"\n\n :simple=\"treeViewIsSimple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n :dive=\"canDive ? diveIntoStatus : undefined\"\n />\n </div>\n <div\n v-if=\"isLinearView\"\n class=\"thread-body\"\n >\n <article>\n <status\n v-for=\"status in conversation\"\n :key=\"status.id\"\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"getHighlight()\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status status-fadein panel-body\"\n\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n </article>\n </div>\n </div>\n </div>\n <div\n v-else\n :style=\"hiddenStyle\"\n />\n</template>\n\n<script src=\"./conversation.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Conversation {\n z-index: 1;\n\n .conversation-dive-to-top-level-box {\n padding: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n\n .thread-ancestors {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n }\n\n .thread-ancestor.-faded .StatusContent {\n --link: var(--faintLink);\n --text: var(--faint);\n\n color: var(--text);\n }\n\n .thread-ancestor-dive-box {\n padding-left: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n &,\n &-inner {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n }\n\n .thread-ancestor-dive-box-inner {\n padding: var(--status-margin, $status-margin);\n }\n\n .conversation-status {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n }\n\n .thread-ancestor-has-other-replies .conversation-status,\n &:last-child .conversation-status,\n .thread-ancestor:last-child .conversation-status,\n .thread-ancestor:last-child .thread-ancestor-dive-box,\n &.-expanded .thread-tree .conversation-status {\n border-bottom: none;\n }\n\n .thread-ancestors + .thread-tree > .conversation-status {\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n /* expanded conversation in timeline */\n &.status-fadein.-expanded .thread-body {\n border-left: 4px solid $fallback--cRed;\n border-left-color: var(--cRed, $fallback--cRed);\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n border-bottom: 1px solid var(--border, $fallback--border);\n }\n\n &.-expanded.status-fadein {\n margin: calc(var(--status-margin, $status-margin) / 2);\n }\n}\n</style>\n","<template>\n <article class=\"thread-tree\">\n <status\n :key=\"status.id\"\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"highlight\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status conversation-status-treeview status-fadein panel-body\"\n\n :simple-tree=\"simple\"\n :controlled-thread-display-status=\"threadDisplayStatus[status.id]\"\n :controlled-toggle-thread-display=\"() => toggleThreadDisplay(status.id)\"\n\n :controlled-showing-tall=\"currentProp.showingTall\"\n :controlled-expanding-subject=\"currentProp.expandingSubject\"\n :controlled-showing-long-subject=\"currentProp.showingLongSubject\"\n :controlled-replying=\"currentProp.replying\"\n :controlled-media-playing=\"currentProp.mediaPlaying\"\n :controlled-toggle-showing-tall=\"() => toggleCurrentProp('showingTall')\"\n :controlled-toggle-expanding-subject=\"() => toggleCurrentProp('expandingSubject')\"\n :controlled-toggle-showing-long-subject=\"() => toggleCurrentProp('showingLongSubject')\"\n :controlled-toggle-replying=\"() => toggleCurrentProp('replying')\"\n :controlled-set-media-playing=\"(newVal) => setCurrentProp('mediaPlaying', newVal)\"\n :dive=\"dive ? () => dive(status.id) : undefined\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n <div\n v-if=\"currentReplies.length && threadShowing\"\n class=\"thread-tree-replies\"\n >\n <thread-tree\n v-for=\"replyStatus in currentReplies\"\n :key=\"replyStatus.id\"\n ref=\"childComponent\"\n :depth=\"depth + 1\"\n :status=\"replyStatus\"\n\n :in-profile=\"inProfile\"\n :conversation=\"conversation\"\n :collapsable=\"collapsable\"\n :is-expanded=\"isExpanded\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :profile-user-id=\"profileUserId\"\n\n :focused=\"focused\"\n :get-replies=\"getReplies\"\n :highlight=\"highlight\"\n :set-highlight=\"setHighlight\"\n :toggle-expanded=\"toggleExpanded\"\n\n :simple=\"simple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n :dive=\"dive\"\n />\n </div>\n <div\n v-if=\"currentReplies.length && !threadShowing\"\n class=\"thread-tree-replies thread-tree-replies-hidden\"\n >\n <i18n-t\n v-if=\"simple\"\n scope=\"global\"\n tag=\"button\"\n keypath=\"status.thread_follow_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"dive(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-right\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.thread_follow', totalReplyCount[status.id], { numStatus: totalReplyCount[status.id] }) }}\n </span>\n </template>\n </i18n-t>\n <i18n-t\n v-else\n scope=\"global\"\n tag=\"button\"\n keypath=\"status.thread_show_full_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"showThreadRecursively(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-down\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.thread_show_full', totalReplyCount[status.id], { numStatus: totalReplyCount[status.id], depth: totalReplyDepth[status.id] }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n </article>\n</template>\n\n<script src=\"./thread_tree.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.thread-tree-replies {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n}\n\n.thread-tree-replies-hidden {\n padding: var(--status-margin, $status-margin);\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n}\n</style>\n","import Status from '../status/status.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAngleDoubleDown,\n faAngleDoubleRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAngleDoubleDown,\n faAngleDoubleRight\n)\n\nconst ThreadTree = {\n components: {\n Status\n },\n name: 'ThreadTree',\n props: {\n depth: Number,\n status: Object,\n inProfile: Boolean,\n conversation: Array,\n collapsable: Boolean,\n isExpanded: Boolean,\n pinnedStatusIdsObject: Object,\n profileUserId: String,\n\n focused: Function,\n highlight: String,\n getReplies: Function,\n setHighlight: Function,\n toggleExpanded: Function,\n\n simple: Boolean,\n // to control display of the whole thread forest\n toggleThreadDisplay: Function,\n threadDisplayStatus: Object,\n showThreadRecursively: Function,\n totalReplyCount: Object,\n totalReplyDepth: Object,\n statusContentProperties: Object,\n setStatusContentProperty: Function,\n toggleStatusContentProperty: Function,\n dive: Function\n },\n computed: {\n suspendable () {\n const selfSuspendable = this.$refs.statusComponent ? this.$refs.statusComponent.suspendable : true\n if (this.$refs.childComponent) {\n return selfSuspendable && this.$refs.childComponent.every(s => s.suspendable)\n }\n return selfSuspendable\n },\n reverseLookupTable () {\n return this.conversation.reduce((table, status, index) => {\n table[status.id] = index\n return table\n }, {})\n },\n currentReplies () {\n return this.getReplies(this.status.id).map(({ id }) => this.statusById(id))\n },\n threadShowing () {\n return this.threadDisplayStatus[this.status.id] === 'showing'\n },\n currentProp () {\n return this.statusContentProperties[this.status.id]\n }\n },\n methods: {\n statusById (id) {\n return this.conversation[this.reverseLookupTable[id]]\n },\n collapseThread () {\n },\n showThread () {\n },\n showAllSubthreads () {\n },\n toggleCurrentProp (name) {\n this.toggleStatusContentProperty(this.status.id, name)\n },\n setCurrentProp (name, newVal) {\n this.setStatusContentProperty(this.status.id, name)\n }\n }\n}\n\nexport default ThreadTree\n","import { render } from \"./thread_tree.vue?vue&type=template&id=061df1d9\"\nimport script from \"./thread_tree.js?vue&type=script&lang=js\"\nexport * from \"./thread_tree.js?vue&type=script&lang=js\"\n\nimport \"./thread_tree.vue?vue&type=style&index=0&id=061df1d9&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"QuickFilterSettings\"\n :bound-to=\"{ x: 'container' }\"\n :trigger-attrs=\"{ title: $t('timeline.quick_filter_settings') }\"\n >\n <template #content>\n <div\n class=\"dropdown-menu\"\n role=\"menu\"\n >\n <div\n v-if=\"loggedIn\"\n role=\"group\"\n >\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilityAll\"\n role=\"menuitemradio\"\n @click=\"replyVisibilityAll = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilityAll }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_all') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilityFollowing\"\n role=\"menuitemradio\"\n @click=\"replyVisibilityFollowing = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilityFollowing }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_following_short') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilitySelf\"\n role=\"menuitemradio\"\n @click=\"replyVisibilitySelf = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilitySelf }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_self_short') }}\n </button>\n <div\n v-if=\"!conversation\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </div>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"muteBotStatuses\"\n @click=\"muteBotStatuses = !muteBotStatuses\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': muteBotStatuses }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.mute_bot_posts') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"hideMedia\"\n @click=\"hideMedia = !hideMedia\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hideMedia }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.hide_media_previews') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"hideMutedPosts\"\n @click=\"hideMutedPosts = !hideMutedPosts\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hideMutedPosts }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.hide_all_muted_posts') }}\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click=\"openTab('filtering')\"\n >\n <FAIcon icon=\"font\" />{{ $t('settings.word_filter_and_more') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <FAIcon icon=\"filter\" />\n </template>\n </Popover>\n</template>\n\n<script src=\"./quick_filter_settings.js\"></script>\n","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faFilter, faFont, faWrench } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFilter,\n faFont,\n faWrench\n)\n\nconst QuickFilterSettings = {\n props: {\n conversation: Boolean\n },\n components: {\n Popover\n },\n methods: {\n setReplyVisibility (visibility) {\n this.$store.dispatch('setOption', { name: 'replyVisibility', value: visibility })\n this.$store.dispatch('queueFlushAll')\n },\n openTab (tab) {\n this.$store.dispatch('openSettingsModalTab', tab)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n replyVisibilitySelf: {\n get () { return this.mergedConfig.replyVisibility === 'self' },\n set () { this.setReplyVisibility('self') }\n },\n replyVisibilityFollowing: {\n get () { return this.mergedConfig.replyVisibility === 'following' },\n set () { this.setReplyVisibility('following') }\n },\n replyVisibilityAll: {\n get () { return this.mergedConfig.replyVisibility === 'all' },\n set () { this.setReplyVisibility('all') }\n },\n hideMedia: {\n get () { return this.mergedConfig.hideAttachments || this.mergedConfig.hideAttachmentsInConv },\n set () {\n const value = !this.hideMedia\n this.$store.dispatch('setOption', { name: 'hideAttachments', value })\n this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })\n }\n },\n hideMutedPosts: {\n get () { return this.mergedConfig.hideFilteredStatuses },\n set () {\n const value = !this.hideMutedPosts\n this.$store.dispatch('setOption', { name: 'hideFilteredStatuses', value })\n }\n },\n muteBotStatuses: {\n get () { return this.mergedConfig.muteBotStatuses },\n set () {\n const value = !this.muteBotStatuses\n this.$store.dispatch('setOption', { name: 'muteBotStatuses', value })\n }\n }\n }\n}\n\nexport default QuickFilterSettings\n","import { render } from \"./quick_filter_settings.vue?vue&type=template&id=43207d13\"\nimport script from \"./quick_filter_settings.js?vue&type=script&lang=js\"\nexport * from \"./quick_filter_settings.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"QuickViewSettings\"\n :bound-to=\"{ x: 'container' }\"\n :trigger-attrs=\"{ title: $t('timeline.quick_view_settings') }\"\n >\n <template #content>\n <div\n class=\"dropdown-menu\"\n role=\"menu\"\n >\n <div role=\"group\">\n <button\n class=\"button-default dropdown-item\"\n :aria-checked=\"conversationDisplay === 'tree'\"\n role=\"menuitemradio\"\n @click=\"conversationDisplay = 'tree'\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :aria-hidden=\"true\"\n :class=\"{ 'menu-checkbox-checked': conversationDisplay === 'tree' }\"\n /><FAIcon\n icon=\"folder-tree\"\n :aria-hidden=\"true\"\n /> {{ $t('settings.conversation_display_tree_quick') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n :aria-checked=\"conversationDisplay === 'linear'\"\n role=\"menuitemradio\"\n @click=\"conversationDisplay = 'linear'\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': conversationDisplay === 'linear' }\"\n :aria-hidden=\"true\"\n /><FAIcon\n icon=\"list\"\n :aria-hidden=\"true\"\n /> {{ $t('settings.conversation_display_linear_quick') }}\n </button>\n </div>\n <div\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"showUserAvatars\"\n @click=\"showUserAvatars = !showUserAvatars\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': showUserAvatars }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.mention_link_show_avatar_quick') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"autoUpdate\"\n @click=\"autoUpdate = !autoUpdate\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': autoUpdate }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.auto_update') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"collapseWithSubjects\"\n @click=\"collapseWithSubjects = !collapseWithSubjects\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': collapseWithSubjects }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.collapse_subject') }}\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click=\"openTab('general')\"\n >\n <FAIcon icon=\"wrench\" />{{ $t('settings.more_settings') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <FAIcon icon=\"bars\" />\n </template>\n </Popover>\n</template>\n\n<script src=\"./quick_view_settings.js\"></script>\n","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faList, faFolderTree, faBars, faWrench } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faList,\n faFolderTree,\n faBars,\n faWrench\n)\n\nconst QuickViewSettings = {\n props: {\n conversation: Boolean\n },\n components: {\n Popover\n },\n methods: {\n setConversationDisplay (visibility) {\n this.$store.dispatch('setOption', { name: 'conversationDisplay', value: visibility })\n },\n openTab (tab) {\n this.$store.dispatch('openSettingsModalTab', tab)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n conversationDisplay: {\n get () { return this.mergedConfig.conversationDisplay },\n set (newVal) { this.setConversationDisplay(newVal) }\n },\n autoUpdate: {\n get () { return this.mergedConfig.streaming },\n set () {\n const value = !this.autoUpdate\n this.$store.dispatch('setOption', { name: 'streaming', value })\n }\n },\n collapseWithSubjects: {\n get () { return this.mergedConfig.collapseMessageWithSubject },\n set () {\n const value = !this.collapseWithSubjects\n this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })\n }\n },\n showUserAvatars: {\n get () { return this.mergedConfig.mentionLinkShowAvatar },\n set () {\n const value = !this.showUserAvatars\n console.log(value)\n this.$store.dispatch('setOption', { name: 'mentionLinkShowAvatar', value })\n }\n },\n muteBotStatuses: {\n get () { return this.mergedConfig.muteBotStatuses },\n set () {\n const value = !this.muteBotStatuses\n this.$store.dispatch('setOption', { name: 'muteBotStatuses', value })\n }\n }\n }\n}\n\nexport default QuickViewSettings\n","import { render } from \"./quick_view_settings.vue?vue&type=template&id=2a929bb0\"\nimport script from \"./quick_view_settings.js?vue&type=script&lang=js\"\nexport * from \"./quick_view_settings.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { reduce, filter, findIndex, clone, get } from 'lodash'\nimport Status from '../status/status.vue'\nimport ThreadTree from '../thread_tree/thread_tree.vue'\nimport { WSConnectionStatus } from '../../services/api/api.service.js'\nimport { mapGetters, mapState } from 'vuex'\nimport QuickFilterSettings from '../quick_filter_settings/quick_filter_settings.vue'\nimport QuickViewSettings from '../quick_view_settings/quick_view_settings.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAngleDoubleDown,\n faAngleDoubleLeft,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAngleDoubleDown,\n faAngleDoubleLeft,\n faChevronLeft\n)\n\nconst sortById = (a, b) => {\n const idA = a.type === 'retweet' ? a.retweeted_status.id : a.id\n const idB = b.type === 'retweet' ? b.retweeted_status.id : b.id\n const seqA = Number(idA)\n const seqB = Number(idB)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA < seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return -1\n } else if (!isSeqA && isSeqB) {\n return 1\n } else {\n return idA < idB ? -1 : 1\n }\n}\n\nconst sortAndFilterConversation = (conversation, statusoid) => {\n if (statusoid.type === 'retweet') {\n conversation = filter(\n conversation,\n (status) => (status.type === 'retweet' || status.id !== statusoid.retweeted_status.id)\n )\n } else {\n conversation = filter(conversation, (status) => status.type !== 'retweet')\n }\n return conversation.filter(_ => _).sort(sortById)\n}\n\nconst conversation = {\n data () {\n return {\n highlight: null,\n expanded: false,\n threadDisplayStatusObject: {}, // id => 'showing' | 'hidden'\n statusContentPropertiesObject: {},\n inlineDivePosition: null\n }\n },\n props: [\n 'statusId',\n 'collapsable',\n 'isPage',\n 'pinnedStatusIdsObject',\n 'inProfile',\n 'profileUserId',\n 'virtualHidden'\n ],\n created () {\n if (this.isPage) {\n this.fetchConversation()\n }\n },\n computed: {\n maxDepthToShowByDefault () {\n // maxDepthInThread = max number of depths that is *visible*\n // since our depth starts with 0 and \"showing\" means \"showing children\"\n // there is a -2 here\n const maxDepth = this.$store.getters.mergedConfig.maxDepthInThread - 2\n return maxDepth >= 1 ? maxDepth : 1\n },\n streamingEnabled () {\n return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED\n },\n displayStyle () {\n return this.$store.getters.mergedConfig.conversationDisplay\n },\n isTreeView () {\n return !this.isLinearView\n },\n treeViewIsSimple () {\n return !this.$store.getters.mergedConfig.conversationTreeAdvanced\n },\n isLinearView () {\n return this.displayStyle === 'linear'\n },\n shouldFadeAncestors () {\n return this.$store.getters.mergedConfig.conversationTreeFadeAncestors\n },\n otherRepliesButtonPosition () {\n return this.$store.getters.mergedConfig.conversationOtherRepliesButton\n },\n showOtherRepliesButtonBelowStatus () {\n return this.otherRepliesButtonPosition === 'below'\n },\n showOtherRepliesButtonInsideStatus () {\n return this.otherRepliesButtonPosition === 'inside'\n },\n suspendable () {\n if (this.isTreeView) {\n return Object.entries(this.statusContentProperties)\n .every(([k, prop]) => !prop.replying && prop.mediaPlaying.length === 0)\n }\n if (this.$refs.statusComponent && this.$refs.statusComponent[0]) {\n return this.$refs.statusComponent.every(s => s.suspendable)\n } else {\n return true\n }\n },\n hideStatus () {\n return this.virtualHidden && this.suspendable\n },\n status () {\n return this.$store.state.statuses.allStatusesObject[this.statusId]\n },\n originalStatusId () {\n if (this.status.retweeted_status) {\n return this.status.retweeted_status.id\n } else {\n return this.statusId\n }\n },\n conversationId () {\n return this.getConversationId(this.statusId)\n },\n conversation () {\n if (!this.status) {\n return []\n }\n\n if (!this.isExpanded) {\n return [this.status]\n }\n\n const conversation = clone(this.$store.state.statuses.conversationsObject[this.conversationId])\n const statusIndex = findIndex(conversation, { id: this.originalStatusId })\n if (statusIndex !== -1) {\n conversation[statusIndex] = this.status\n }\n\n return sortAndFilterConversation(conversation, this.status)\n },\n statusMap () {\n return this.conversation.reduce((res, s) => {\n res[s.id] = s\n return res\n }, {})\n },\n threadTree () {\n const reverseLookupTable = this.conversation.reduce((table, status, index) => {\n table[status.id] = index\n return table\n }, {})\n\n const threads = this.conversation.reduce((a, cur) => {\n const id = cur.id\n a.forest[id] = this.getReplies(id)\n .map(s => s.id)\n\n return a\n }, {\n forest: {}\n })\n\n const walk = (forest, topLevel, depth = 0, processed = {}) => topLevel.map(id => {\n if (processed[id]) {\n return []\n }\n\n processed[id] = true\n return [{\n status: this.conversation[reverseLookupTable[id]],\n id,\n depth\n }, walk(forest, forest[id], depth + 1, processed)].reduce((a, b) => a.concat(b), [])\n }).reduce((a, b) => a.concat(b), [])\n\n const linearized = walk(threads.forest, this.topLevel.map(k => k.id))\n\n return linearized\n },\n replyIds () {\n return this.conversation.map(k => k.id)\n .reduce((res, id) => {\n res[id] = (this.replies[id] || []).map(k => k.id)\n return res\n }, {})\n },\n totalReplyCount () {\n const sizes = {}\n const subTreeSizeFor = (id) => {\n if (sizes[id]) {\n return sizes[id]\n }\n sizes[id] = 1 + this.replyIds[id].map(cid => subTreeSizeFor(cid)).reduce((a, b) => a + b, 0)\n return sizes[id]\n }\n this.conversation.map(k => k.id).map(subTreeSizeFor)\n return Object.keys(sizes).reduce((res, id) => {\n res[id] = sizes[id] - 1 // exclude itself\n return res\n }, {})\n },\n totalReplyDepth () {\n const depths = {}\n const subTreeDepthFor = (id) => {\n if (depths[id]) {\n return depths[id]\n }\n depths[id] = 1 + this.replyIds[id].map(cid => subTreeDepthFor(cid)).reduce((a, b) => a > b ? a : b, 0)\n return depths[id]\n }\n this.conversation.map(k => k.id).map(subTreeDepthFor)\n return Object.keys(depths).reduce((res, id) => {\n res[id] = depths[id] - 1 // exclude itself\n return res\n }, {})\n },\n depths () {\n return this.threadTree.reduce((a, k) => {\n a[k.id] = k.depth\n return a\n }, {})\n },\n topLevel () {\n const topLevel = this.conversation.reduce((tl, cur) =>\n tl.filter(k => this.getReplies(cur.id).map(v => v.id).indexOf(k.id) === -1), this.conversation)\n return topLevel\n },\n otherTopLevelCount () {\n return this.topLevel.length - 1\n },\n showingTopLevel () {\n if (this.canDive && this.diveRoot) {\n return [this.statusMap[this.diveRoot]]\n }\n return this.topLevel\n },\n diveRoot () {\n const statusId = this.inlineDivePosition || this.statusId\n const isTopLevel = !this.parentOf(statusId)\n return isTopLevel ? null : statusId\n },\n diveDepth () {\n return this.canDive && this.diveRoot ? this.depths[this.diveRoot] : 0\n },\n diveMode () {\n return this.canDive && !!this.diveRoot\n },\n shouldShowAllConversationButton () {\n // The \"show all conversation\" button tells the user that there exist\n // other toplevel statuses, so do not show it if there is only a single root\n return this.isTreeView && this.isExpanded && this.diveMode && this.topLevel.length > 1\n },\n shouldShowAncestors () {\n return this.isTreeView && this.isExpanded && this.ancestorsOf(this.diveRoot).length\n },\n replies () {\n let i = 1\n // eslint-disable-next-line camelcase\n return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {\n /* eslint-disable camelcase */\n const irid = in_reply_to_status_id\n /* eslint-enable camelcase */\n if (irid) {\n result[irid] = result[irid] || []\n result[irid].push({\n name: `#${i}`,\n id\n })\n }\n i++\n return result\n }, {})\n },\n isExpanded () {\n return !!(this.expanded || this.isPage)\n },\n hiddenStyle () {\n const height = (this.status && this.status.virtualHeight) || '120px'\n return this.virtualHidden ? { height } : {}\n },\n threadDisplayStatus () {\n return this.conversation.reduce((a, k) => {\n const id = k.id\n const depth = this.depths[id]\n const status = (() => {\n if (this.threadDisplayStatusObject[id]) {\n return this.threadDisplayStatusObject[id]\n }\n if ((depth - this.diveDepth) <= this.maxDepthToShowByDefault) {\n return 'showing'\n } else {\n return 'hidden'\n }\n })()\n\n a[id] = status\n return a\n }, {})\n },\n statusContentProperties () {\n return this.conversation.reduce((a, k) => {\n const id = k.id\n const props = (() => {\n const def = {\n showingTall: false,\n expandingSubject: false,\n showingLongSubject: false,\n isReplying: false,\n mediaPlaying: []\n }\n\n if (this.statusContentPropertiesObject[id]) {\n return {\n ...def,\n ...this.statusContentPropertiesObject[id]\n }\n }\n return def\n })()\n\n a[id] = props\n return a\n }, {})\n },\n canDive () {\n return this.isTreeView && this.isExpanded\n },\n focused () {\n return (id) => {\n return (this.isExpanded) && id === this.highlight\n }\n },\n maybeHighlight () {\n return this.isExpanded ? this.highlight : null\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n mastoUserSocketStatus: state => state.api.mastoUserSocketStatus\n })\n },\n components: {\n Status,\n ThreadTree,\n QuickFilterSettings,\n QuickViewSettings\n },\n watch: {\n statusId (newVal, oldVal) {\n const newConversationId = this.getConversationId(newVal)\n const oldConversationId = this.getConversationId(oldVal)\n if (newConversationId && oldConversationId && newConversationId === oldConversationId) {\n this.setHighlight(this.originalStatusId)\n } else {\n this.fetchConversation()\n }\n },\n expanded (value) {\n if (value) {\n this.fetchConversation()\n } else {\n this.resetDisplayState()\n }\n },\n virtualHidden (value) {\n this.$store.dispatch(\n 'setVirtualHeight',\n { statusId: this.statusId, height: `${this.$el.clientHeight}px` }\n )\n }\n },\n methods: {\n fetchConversation () {\n if (this.status) {\n this.$store.state.api.backendInteractor.fetchConversation({ id: this.statusId })\n .then(({ ancestors, descendants }) => {\n this.$store.dispatch('addNewStatuses', { statuses: ancestors })\n this.$store.dispatch('addNewStatuses', { statuses: descendants })\n this.setHighlight(this.originalStatusId)\n })\n } else {\n this.$store.state.api.backendInteractor.fetchStatus({ id: this.statusId })\n .then((status) => {\n this.$store.dispatch('addNewStatuses', { statuses: [status] })\n this.fetchConversation()\n })\n }\n },\n getReplies (id) {\n return this.replies[id] || []\n },\n getHighlight () {\n return this.isExpanded ? this.highlight : null\n },\n setHighlight (id) {\n if (!id) return\n this.highlight = id\n\n if (!this.streamingEnabled) {\n this.$store.dispatch('fetchStatus', id)\n }\n\n this.$store.dispatch('fetchFavsAndRepeats', id)\n this.$store.dispatch('fetchEmojiReactionsBy', id)\n },\n toggleExpanded () {\n this.expanded = !this.expanded\n },\n getConversationId (statusId) {\n const status = this.$store.state.statuses.allStatusesObject[statusId]\n return get(status, 'retweeted_status.statusnet_conversation_id', get(status, 'statusnet_conversation_id'))\n },\n setThreadDisplay (id, nextStatus) {\n this.threadDisplayStatusObject = {\n ...this.threadDisplayStatusObject,\n [id]: nextStatus\n }\n },\n toggleThreadDisplay (id) {\n const curStatus = this.threadDisplayStatus[id]\n const nextStatus = curStatus === 'showing' ? 'hidden' : 'showing'\n this.setThreadDisplay(id, nextStatus)\n },\n setThreadDisplayRecursively (id, nextStatus) {\n this.setThreadDisplay(id, nextStatus)\n this.getReplies(id).map(k => k.id).map(id => this.setThreadDisplayRecursively(id, nextStatus))\n },\n showThreadRecursively (id) {\n this.setThreadDisplayRecursively(id, 'showing')\n },\n setStatusContentProperty (id, name, value) {\n this.statusContentPropertiesObject = {\n ...this.statusContentPropertiesObject,\n [id]: {\n ...this.statusContentPropertiesObject[id],\n [name]: value\n }\n }\n },\n toggleStatusContentProperty (id, name) {\n this.setStatusContentProperty(id, name, !this.statusContentProperties[id][name])\n },\n leastVisibleAncestor (id) {\n let cur = id\n let parent = this.parentOf(cur)\n while (cur) {\n // if the parent is showing it means cur is visible\n if (this.threadDisplayStatus[parent] === 'showing') {\n return cur\n }\n parent = this.parentOf(parent)\n cur = this.parentOf(cur)\n }\n // nothing found, fall back to toplevel\n return this.topLevel[0] ? this.topLevel[0].id : undefined\n },\n diveIntoStatus (id, preventScroll) {\n this.tryScrollTo(id)\n },\n diveToTopLevel () {\n this.tryScrollTo(this.topLevelAncestorOrSelfId(this.diveRoot) || this.topLevel[0].id)\n },\n // only used when we are not on a page\n undive () {\n this.inlineDivePosition = null\n this.setHighlight(this.statusId)\n },\n tryScrollTo (id) {\n if (!id) {\n return\n }\n if (this.isPage) {\n // set statusId\n this.$router.push({ name: 'conversation', params: { id } })\n } else {\n this.inlineDivePosition = id\n }\n // Because the conversation can be unmounted when out of sight\n // and mounted again when it comes into sight,\n // the `mounted` or `created` function in `status` should not\n // contain scrolling calls, as we do not want the page to jump\n // when we scroll with an expanded conversation.\n //\n // Now the method is to rely solely on the `highlight` watcher\n // in `status` components.\n // In linear views, all statuses are rendered at all times, but\n // in tree views, it is possible that a change in active status\n // removes and adds status components (e.g. an originally child\n // status becomes an ancestor status, and thus they will be\n // different).\n // Here, let the components be rendered first, in order to trigger\n // the `highlight` watcher.\n this.$nextTick(() => {\n this.setHighlight(id)\n })\n },\n goToCurrent () {\n this.tryScrollTo(this.diveRoot || this.topLevel[0].id)\n },\n statusById (id) {\n return this.statusMap[id]\n },\n parentOf (id) {\n const status = this.statusById(id)\n if (!status) {\n return undefined\n }\n const { in_reply_to_status_id: parentId } = status\n if (!this.statusMap[parentId]) {\n return undefined\n }\n return parentId\n },\n parentOrSelf (id) {\n return this.parentOf(id) || id\n },\n // Ancestors of some status, from top to bottom\n ancestorsOf (id) {\n const ancestors = []\n let cur = this.parentOf(id)\n while (cur) {\n ancestors.unshift(this.statusMap[cur])\n cur = this.parentOf(cur)\n }\n return ancestors\n },\n topLevelAncestorOrSelfId (id) {\n let cur = id\n let parent = this.parentOf(id)\n while (parent) {\n cur = this.parentOf(cur)\n parent = this.parentOf(parent)\n }\n return cur\n },\n resetDisplayState () {\n this.undive()\n this.threadDisplayStatusObject = {}\n }\n }\n}\n\nexport default conversation\n","import { render } from \"./conversation.vue?vue&type=template&id=68e3b9cb\"\nimport script from \"./conversation.js?vue&type=script&lang=js\"\nexport * from \"./conversation.js?vue&type=script&lang=js\"\n\nimport \"./conversation.vue?vue&type=style&index=0&id=68e3b9cb&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"TimelineMenu\"\n :class=\"{ 'open': isOpen }\"\n :bound-to=\"{ x: 'container' }\"\n bound-to-selector=\".Timeline\"\n popover-class=\"timeline-menu-popover popover-default\"\n @show=\"openMenu\"\n @close=\"() => isOpen = false\"\n >\n <template #content>\n <ListsMenuContent\n v-if=\"useListsMenu\"\n :show-pin=\"false\"\n class=\"timelines\"\n />\n <ul v-else>\n <NavigationEntry\n v-for=\"item in timelinesList\"\n :key=\"item.name\"\n :show-pin=\"false\"\n :item=\"item\"\n />\n </ul>\n </template>\n <template #trigger>\n <span class=\"button-unstyled title timeline-menu-title\">\n <span class=\"timeline-title\">{{ timelineName() }}</span>\n <span>\n <FAIcon\n size=\"sm\"\n icon=\"chevron-down\"\n />\n </span>\n <span\n class=\"click-blocker\"\n @click=\"blockOpen\"\n />\n </span>\n </template>\n </Popover>\n</template>\n\n<script src=\"./timeline_menu.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.timeline-menu-popover {\n min-width: 24rem;\n max-width: 100vw;\n margin-top: 0.6rem;\n font-size: 1rem;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n a {\n display: block;\n padding: 0 0.65em;\n height: 3.5em;\n line-height: 3.5em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n }\n\n &.router-link-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n svg {\n margin-right: 0.4em;\n margin-left: -0.2em;\n }\n }\n\n li {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 0;\n\n &:last-child a {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child {\n border: none;\n }\n }\n}\n\n.TimelineMenu {\n margin-right: auto;\n min-width: 0;\n\n .popover-trigger-button {\n vertical-align: bottom;\n }\n\n .panel::after {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n }\n\n .timeline-menu-title {\n margin: 0;\n cursor: pointer;\n user-select: none;\n width: 100%;\n display: flex;\n\n .timeline-menu-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n svg {\n margin-left: 0.6em;\n transition: transform 100ms;\n }\n\n .click-blocker {\n cursor: default;\n flex-grow: 1;\n }\n }\n\n &.open .timeline-menu-title svg {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n transform: rotate(180deg);\n }\n\n .panel {\n box-shadow: var(--popoverShadow);\n }\n}\n</style>\n","import Popover from '../popover/popover.vue'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport { mapState } from 'vuex'\nimport { ListsMenuContent } from '../lists_menu/lists_menu_content.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { TIMELINES } from 'src/components/navigation/navigation.js'\nimport { filterNavigation } from 'src/components/navigation/filter.js'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faChevronDown)\n\n// Route -> i18n key mapping, exported and not in the computed\n// because nav panel benefits from the same information.\nexport const timelineNames = () => {\n return {\n friends: 'nav.home_timeline',\n bookmarks: 'nav.bookmarks',\n dms: 'nav.dms',\n 'public-timeline': 'nav.public_tl',\n 'public-external-timeline': 'nav.twkn'\n }\n}\n\nconst TimelineMenu = {\n components: {\n Popover,\n NavigationEntry,\n ListsMenuContent\n },\n data () {\n return {\n isOpen: false\n }\n },\n created () {\n if (timelineNames()[this.$route.name]) {\n this.$store.dispatch('setLastTimeline', this.$route.name)\n }\n },\n computed: {\n useListsMenu () {\n const route = this.$route.name\n return route === 'lists-timeline'\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating\n }),\n timelinesList () {\n return filterNavigation(\n Object.entries(TIMELINES).map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n }\n },\n methods: {\n openMenu () {\n // $nextTick is too fast, animation won't play back but\n // instead starts in fully open position. Low values\n // like 1-5 work on fast machines but not on mobile, 25\n // seems like a good compromise that plays without significant\n // added lag.\n setTimeout(() => {\n this.isOpen = true\n }, 25)\n },\n blockOpen (event) {\n // For the blank area inside the button element.\n // Just setting @click.stop=\"\" makes unintuitive behavior when\n // menu is open and clicking on the blank area doesn't close it.\n if (!this.isOpen) {\n event.stopPropagation()\n }\n },\n timelineName () {\n const route = this.$route.name\n if (route === 'tag-timeline') {\n return '#' + this.$route.params.tag\n }\n if (route === 'lists-timeline') {\n return this.$store.getters.findListTitle(this.$route.params.id)\n }\n const i18nkey = timelineNames()[this.$route.name]\n return i18nkey ? this.$t(i18nkey) : route\n }\n }\n}\n\nexport default TimelineMenu\n","import { render } from \"./timeline_menu.vue?vue&type=template&id=b7d0cae0\"\nimport script from \"./timeline_menu.js?vue&type=script&lang=js\"\nexport * from \"./timeline_menu.js?vue&type=script&lang=js\"\n\nimport \"./timeline_menu.vue?vue&type=style&index=0&id=b7d0cae0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Status from '../status/status.vue'\nimport { mapState } from 'vuex'\nimport timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'\nimport Conversation from '../conversation/conversation.vue'\nimport TimelineMenu from '../timeline_menu/timeline_menu.vue'\nimport QuickFilterSettings from '../quick_filter_settings/quick_filter_settings.vue'\nimport QuickViewSettings from '../quick_view_settings/quick_view_settings.vue'\nimport { debounce, throttle, keyBy } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch, faCirclePlus, faCog, faMinus, faArrowUp, faCheck } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faCog,\n faMinus,\n faArrowUp,\n faCirclePlus,\n faCheck\n)\n\nconst Timeline = {\n props: [\n 'timeline',\n 'timelineName',\n 'title',\n 'userId',\n 'listId',\n 'tag',\n 'embedded',\n 'count',\n 'pinnedStatusIds',\n 'inProfile',\n 'footerSlipgate' // reference to an element where we should put our footer\n ],\n data () {\n return {\n showScrollTop: false,\n paused: false,\n unfocused: false,\n bottomedOut: false,\n virtualScrollIndex: 0,\n blockingClicks: false\n }\n },\n components: {\n Status,\n Conversation,\n TimelineMenu,\n QuickFilterSettings,\n QuickViewSettings\n },\n computed: {\n filteredVisibleStatuses () {\n return this.timeline.visibleStatuses.filter(status => this.timelineName !== 'user' || (status.id >= this.timeline.minId && status.id <= this.timeline.maxId))\n },\n filteredPinnedStatusIds () {\n return (this.pinnedStatusIds || []).filter(statusId => this.timeline.statusesObject[statusId])\n },\n newStatusCount () {\n return this.timeline.newStatusCount\n },\n showLoadButton () {\n return this.timeline.newStatusCount > 0 || this.timeline.flushMarker !== 0\n },\n loadButtonString () {\n if (this.timeline.flushMarker !== 0) {\n return this.$t('timeline.reload')\n } else {\n return `${this.$t('timeline.show_new')} (${this.newStatusCount})`\n }\n },\n mobileLoadButtonString () {\n if (this.timeline.flushMarker !== 0) {\n return '+'\n } else {\n return this.newStatusCount > 99 ? '∞' : this.newStatusCount\n }\n },\n classes () {\n let rootClasses = !this.embedded ? ['panel', 'panel-default'] : ['-nonpanel']\n if (this.blockingClicks) rootClasses = rootClasses.concat(['-blocked', '_misclick-prevention'])\n return {\n root: rootClasses,\n header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading', '-sticky'] : []),\n body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []),\n footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : [])\n }\n },\n // id map of statuses which need to be hidden in the main list due to pinning logic\n pinnedStatusIdsObject () {\n return keyBy(this.pinnedStatusIds)\n },\n statusesToDisplay () {\n const amount = this.timeline.visibleStatuses.length\n const statusesPerSide = Math.ceil(Math.max(3, window.innerHeight / 80))\n const nonPinnedIndex = this.virtualScrollIndex - this.filteredPinnedStatusIds.length\n const min = Math.max(0, nonPinnedIndex - statusesPerSide)\n const max = Math.min(amount, nonPinnedIndex + statusesPerSide)\n return this.timeline.visibleStatuses.slice(min, max).map(_ => _.id)\n },\n virtualScrollingEnabled () {\n return this.$store.getters.mergedConfig.virtualScrolling\n },\n ...mapState({\n mobileLayout: state => state.interface.layoutType === 'mobile'\n })\n },\n created () {\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n const showImmediately = this.timeline.visibleStatuses.length === 0\n\n window.addEventListener('scroll', this.handleScroll)\n\n if (store.state.api.fetchers[this.timelineName]) { return false }\n\n timelineFetcher.fetchAndUpdate({\n store,\n credentials,\n timeline: this.timelineName,\n showImmediately,\n userId: this.userId,\n listId: this.listId,\n tag: this.tag\n })\n },\n mounted () {\n if (typeof document.hidden !== 'undefined') {\n document.addEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.unfocused = document.hidden\n }\n window.addEventListener('keydown', this.handleShortKey)\n setTimeout(this.determineVisibleStatuses, 250)\n },\n unmounted () {\n window.removeEventListener('scroll', this.handleScroll)\n window.removeEventListener('keydown', this.handleShortKey)\n if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.$store.commit('setLoading', { timeline: this.timelineName, value: false })\n },\n methods: {\n scrollToTop () {\n window.scrollTo({ top: this.$el.offsetTop })\n },\n stopBlockingClicks: debounce(function () {\n this.blockingClicks = false\n }, 1000),\n blockClicksTemporarily () {\n if (!this.blockingClicks) {\n this.blockingClicks = true\n }\n this.stopBlockingClicks()\n },\n handleShortKey (e) {\n // Ignore when input fields are focused\n if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return\n if (e.key === '.') this.showNewStatuses()\n },\n showNewStatuses () {\n if (this.timeline.flushMarker !== 0) {\n this.$store.commit('clearTimeline', { timeline: this.timelineName, excludeUserId: true })\n this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })\n if (this.timelineName === 'user') {\n this.$store.dispatch('fetchPinnedStatuses', this.userId)\n }\n this.fetchOlderStatuses()\n } else {\n this.blockClicksTemporarily()\n this.$store.commit('showNewStatuses', { timeline: this.timelineName })\n this.paused = false\n }\n window.scrollTo({ top: 0 })\n },\n fetchOlderStatuses: throttle(function () {\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n store.commit('setLoading', { timeline: this.timelineName, value: true })\n timelineFetcher.fetchAndUpdate({\n store,\n credentials,\n timeline: this.timelineName,\n older: true,\n showImmediately: true,\n userId: this.userId,\n listId: this.listId,\n tag: this.tag\n }).then(({ statuses }) => {\n if (statuses && statuses.length === 0) {\n this.bottomedOut = true\n }\n }).finally(() =>\n store.commit('setLoading', { timeline: this.timelineName, value: false })\n )\n }, 1000, this),\n determineVisibleStatuses () {\n if (!this.$refs.timeline) return\n if (!this.virtualScrollingEnabled) return\n\n const statuses = this.$refs.timeline.children\n const cappedScrollIndex = Math.max(0, Math.min(this.virtualScrollIndex, statuses.length - 1))\n\n if (statuses.length === 0) return\n\n const height = Math.max(document.body.offsetHeight, window.pageYOffset)\n\n const centerOfScreen = window.pageYOffset + (window.innerHeight * 0.5)\n\n // Start from approximating the index of some visible status by using the\n // the center of the screen on the timeline.\n let approxIndex = Math.floor(statuses.length * (centerOfScreen / height))\n let err = statuses[approxIndex].getBoundingClientRect().y\n\n // if we have a previous scroll index that can be used, test if it's\n // closer than the previous approximation, use it if so\n\n const virtualScrollIndexY = statuses[cappedScrollIndex].getBoundingClientRect().y\n if (Math.abs(err) > virtualScrollIndexY) {\n approxIndex = cappedScrollIndex\n err = virtualScrollIndexY\n }\n\n // if the status is too far from viewport, check the next/previous ones if\n // they happen to be better\n while (err < -20 && approxIndex < statuses.length - 1) {\n err += statuses[approxIndex].offsetHeight\n approxIndex++\n }\n while (err > window.innerHeight + 100 && approxIndex > 0) {\n approxIndex--\n err -= statuses[approxIndex].offsetHeight\n }\n\n // this status is now the center point for virtual scrolling and visible\n // statuses will be nearby statuses before and after it\n this.virtualScrollIndex = approxIndex\n },\n scrollLoad (e) {\n const bodyBRect = document.body.getBoundingClientRect()\n const height = Math.max(bodyBRect.height, -(bodyBRect.y))\n if (this.timeline.loading === false &&\n this.$el.offsetHeight > 0 &&\n (window.innerHeight + window.pageYOffset) >= (height - 750)) {\n this.fetchOlderStatuses()\n }\n },\n handleScroll: throttle(function (e) {\n this.showScrollTop = this.$el.offsetTop < window.scrollY\n this.determineVisibleStatuses()\n this.scrollLoad(e)\n }, 200),\n handleVisibilityChange () {\n this.unfocused = document.hidden\n }\n },\n watch: {\n newStatusCount (count) {\n if (!this.$store.getters.mergedConfig.streaming) {\n return\n }\n if (count > 0) {\n // only 'stream' them when you're scrolled to the top\n const doc = document.documentElement\n const top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n if (top < 15 &&\n !this.paused &&\n !(this.unfocused && this.$store.getters.mergedConfig.pauseOnUnfocused)\n ) {\n this.showNewStatuses()\n } else {\n this.paused = true\n }\n }\n }\n }\n}\n\nexport default Timeline\n","import { render } from \"./timeline.vue?vue&type=template&id=79de750e\"\nimport script from \"./timeline.js?vue&type=script&lang=js\"\nexport * from \"./timeline.js?vue&type=script&lang=js\"\n\nimport \"./timeline.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\nconst PublicTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.public }\n },\n created () {\n this.$store.dispatch('startFetchingTimeline', { timeline: 'public' })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'public')\n }\n\n}\n\nexport default PublicTimeline\n","import { render } from \"./public_timeline.vue?vue&type=template&id=5f2a502e\"\nimport script from \"./public_timeline.js?vue&type=script&lang=js\"\nexport * from \"./public_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.public_tl')\"\n :timeline=\"timeline\"\n :timeline-name=\"'public'\"\n />\n</template>\n\n<script src=\"./public_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\nconst PublicAndExternalTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.publicAndExternal }\n },\n created () {\n this.$store.dispatch('startFetchingTimeline', { timeline: 'publicAndExternal' })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'publicAndExternal')\n }\n}\n\nexport default PublicAndExternalTimeline\n","import { render } from \"./public_and_external_timeline.vue?vue&type=template&id=f6923484\"\nimport script from \"./public_and_external_timeline.js?vue&type=script&lang=js\"\nexport * from \"./public_and_external_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.twkn')\"\n :timeline=\"timeline\"\n :timeline-name=\"'publicAndExternal'\"\n />\n</template>\n\n<script src=\"./public_and_external_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\nconst FriendsTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.friends }\n }\n}\n\nexport default FriendsTimeline\n","import { render } from \"./friends_timeline.vue?vue&type=template&id=22490669\"\nimport script from \"./friends_timeline.js?vue&type=script&lang=js\"\nexport * from \"./friends_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.timeline')\"\n :timeline=\"timeline\"\n :timeline-name=\"'friends'\"\n />\n</template>\n\n<script src=\"./friends_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\n\nconst TagTimeline = {\n created () {\n this.$store.commit('clearTimeline', { timeline: 'tag' })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })\n },\n components: {\n Timeline\n },\n computed: {\n tag () { return this.$route.params.tag },\n timeline () { return this.$store.state.statuses.timelines.tag }\n },\n watch: {\n tag () {\n this.$store.commit('clearTimeline', { timeline: 'tag' })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })\n }\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'tag')\n }\n}\n\nexport default TagTimeline\n","import { render } from \"./tag_timeline.vue?vue&type=template&id=047310d3\"\nimport script from \"./tag_timeline.js?vue&type=script&lang=js\"\nexport * from \"./tag_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"tag\"\n :timeline=\"timeline\"\n :timeline-name=\"'tag'\"\n :tag=\"tag\"\n />\n</template>\n\n<script src='./tag_timeline.js'></script>\n","import Timeline from '../timeline/timeline.vue'\n\nconst Bookmarks = {\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.bookmarks\n }\n },\n components: {\n Timeline\n },\n unmounted () {\n this.$store.commit('clearTimeline', { timeline: 'bookmarks' })\n }\n}\n\nexport default Bookmarks\n","import { render } from \"./bookmark_timeline.vue?vue&type=template&id=2b9c8ba0\"\nimport script from \"./bookmark_timeline.js?vue&type=script&lang=js\"\nexport * from \"./bookmark_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.bookmarks')\"\n :timeline=\"timeline\"\n :timeline-name=\"'bookmarks'\"\n />\n</template>\n\n<script src=\"./bookmark_timeline.js\"></script>\n","import Conversation from '../conversation/conversation.vue'\n\nconst conversationPage = {\n components: {\n Conversation\n },\n computed: {\n statusId () {\n return this.$route.params.id\n }\n }\n}\n\nexport default conversationPage\n","import { render } from \"./conversation-page.vue?vue&type=template&id=46654d24\"\nimport script from \"./conversation-page.js?vue&type=script&lang=js\"\nexport * from \"./conversation-page.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <conversation\n :collapsable=\"false\"\n is-page=\"true\"\n :status-id=\"statusId\"\n />\n</template>\n\n<script src=\"./conversation-page.js\"></script>\n","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t(\"nav.interactions\") }}\n </div>\n </div>\n <tab-switcher\n ref=\"tabSwitcher\"\n :on-switch=\"onModeSwitch\"\n >\n <span\n key=\"mentions\"\n :label=\"$t('nav.mentions')\"\n />\n <span\n key=\"likes+repeats\"\n :label=\"$t('interactions.favs_repeats')\"\n />\n <span\n key=\"follows\"\n :label=\"$t('interactions.follows')\"\n />\n <span\n key=\"reactions\"\n :label=\"$t('interactions.emoji_reactions')\"\n />\n <span\n v-if=\"canSeeReports\"\n key=\"reports\"\n :label=\"$t('interactions.reports')\"\n />\n <span\n v-if=\"!allowFollowingMove\"\n key=\"moves\"\n :label=\"$t('interactions.moves')\"\n />\n </tab-switcher>\n <Notifications\n ref=\"notifications\"\n :no-heading=\"true\"\n :minimal-mode=\"true\"\n :filter-mode=\"filterMode\"\n />\n </div>\n</template>\n\n<script src=\"./interactions.js\"></script>\n","import Notifications from '../notifications/notifications.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\n\nconst tabModeDict = {\n mentions: ['mention'],\n 'likes+repeats': ['repeat', 'like'],\n follows: ['follow'],\n reactions: ['pleroma:emoji_reaction'],\n reports: ['pleroma:report'],\n moves: ['move']\n}\n\nconst Interactions = {\n data () {\n return {\n allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,\n filterMode: tabModeDict.mentions,\n canSeeReports: this.$store.state.users.currentUser.privileges.includes('reports_manage_reports')\n }\n },\n methods: {\n onModeSwitch (key) {\n this.filterMode = tabModeDict[key]\n }\n },\n components: {\n Notifications,\n TabSwitcher\n }\n}\n\nexport default Interactions\n","import { render } from \"./interactions.vue?vue&type=template&id=3b173532\"\nimport script from \"./interactions.js?vue&type=script&lang=js\"\nexport * from \"./interactions.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\n\nconst DMs = {\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.dms\n }\n },\n components: {\n Timeline\n }\n}\n\nexport default DMs\n","import { render } from \"./dm_timeline.vue?vue&type=template&id=294f8b6d\"\nimport script from \"./dm_timeline.js?vue&type=script&lang=js\"\nexport * from \"./dm_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.dms')\"\n :timeline=\"timeline\"\n :timeline-name=\"'dms'\"\n />\n</template>\n\n<script src=\"./dm_timeline.js\"></script>\n","<template>\n <div v-if=\"isNew\">\n <ChatNew @cancel=\"cancelNewChat\" />\n </div>\n <div\n v-else\n class=\"chat-list panel panel-default\"\n >\n <div class=\"panel-heading -sticky\">\n <span class=\"title\">\n {{ $t(\"chats.chats\") }}\n </span>\n <button\n class=\"button-default\"\n @click=\"newChat\"\n >\n {{ $t(\"chats.new\") }}\n </button>\n </div>\n <div class=\"panel-body\">\n <div\n v-if=\"sortedChatList.length > 0\"\n class=\"timeline\"\n >\n <List :items=\"sortedChatList\">\n <template #item=\"{item}\">\n <ChatListItem\n :key=\"item.id\"\n :compact=\"false\"\n :chat=\"item\"\n />\n </template>\n </List>\n </div>\n <div\n v-else\n class=\"emtpy-chat-list-alert\"\n >\n <span>{{ $t('chats.empty_chat_list_placeholder') }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.chat-list {\n min-height: 25em;\n margin-bottom: 0;\n}\n\n.emtpy-chat-list-alert {\n padding: 3em;\n font-size: 1.2em;\n display: flex;\n justify-content: center;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n}\n\n</style>\n","<template>\n <div\n class=\"chat-list-item\"\n @click.capture.prevent=\"openChat\"\n >\n <div class=\"chat-list-item-left\">\n <UserAvatar\n :user=\"chat.account\"\n height=\"48px\"\n width=\"48px\"\n />\n </div>\n <div class=\"chat-list-item-center\">\n <div class=\"heading\">\n <span\n v-if=\"chat.account\"\n class=\"name-and-account-name\"\n >\n <ChatTitle\n :user=\"chat.account\"\n />\n </span>\n <span class=\"heading-right\" />\n <div class=\"time-wrapper\">\n <Timeago\n :time=\"chat.updated_at\"\n :auto-update=\"60\"\n />\n </div>\n </div>\n <div class=\"chat-preview\">\n <StatusBody\n class=\"chat-preview-body\"\n :status=\"messageForStatusContent\"\n :single-line=\"true\"\n />\n <div\n v-if=\"chat.unread > 0\"\n class=\"badge badge-notification unread-chat-count\"\n >\n {{ chat.unread }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_list_item.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat_list_item\";\n</style>\n","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport { defineAsyncComponent } from 'vue'\n\nexport default {\n name: 'ChatTitle',\n components: {\n UserAvatar,\n RichContent,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n props: [\n 'user', 'withAvatar'\n ],\n computed: {\n title () {\n return this.user ? this.user.screen_name_ui : ''\n },\n htmlTitle () {\n return this.user ? this.user.name_html : ''\n }\n }\n}\n","import { render } from \"./chat_title.vue?vue&type=template&id=e9d70b10\"\nimport script from \"./chat_title.js?vue&type=script&lang=js\"\nexport * from \"./chat_title.js?vue&type=script&lang=js\"\n\nimport \"./chat_title.vue?vue&type=style&index=0&id=e9d70b10&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"chat-title\"\n :title=\"title\"\n >\n <UserPopover\n v-if=\"withAvatar && user\"\n class=\"avatar-container\"\n :user-id=\"user.id\"\n >\n <UserAvatar\n class=\"titlebar-avatar\"\n :user=\"user\"\n />\n </UserPopover>\n <RichContent\n v-if=\"user\"\n class=\"username\"\n :title=\"'@'+(user && user.screen_name_ui)\"\n :html=\"htmlTitle\"\n :emoji=\"user.emoji || []\"\n />\n </div>\n</template>\n\n<script src=\"./chat_title.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.chat-title {\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n --emoji-size: 14px;\n\n .username {\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: inline;\n word-wrap: break-word;\n overflow: hidden;\n }\n\n .avatar-container {\n align-self: center;\n line-height: 1;\n }\n\n .titlebar-avatar {\n margin-right: 0.5em;\n height: 1.5em;\n width: 1.5em;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n\n &.animated::before {\n display: none;\n }\n }\n}\n</style>\n","import { mapState } from 'vuex'\nimport StatusBody from '../status_content/status_content.vue'\nimport fileType from 'src/services/file_type/file_type.service'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport ChatTitle from '../chat_title/chat_title.vue'\n\nconst ChatListItem = {\n name: 'ChatListItem',\n props: [\n 'chat'\n ],\n components: {\n UserAvatar,\n AvatarList,\n Timeago,\n ChatTitle,\n StatusBody\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n attachmentInfo () {\n if (this.chat.lastMessage.attachments.length === 0) { return }\n\n const types = this.chat.lastMessage.attachments.map(file => fileType.fileType(file.mimetype))\n if (types.includes('video')) {\n return this.$t('file_type.video')\n } else if (types.includes('audio')) {\n return this.$t('file_type.audio')\n } else if (types.includes('image')) {\n return this.$t('file_type.image')\n } else {\n return this.$t('file_type.file')\n }\n },\n messageForStatusContent () {\n const message = this.chat.lastMessage\n const messageEmojis = message ? message.emojis : []\n const isYou = message && message.account_id === this.currentUser.id\n const content = message ? (this.attachmentInfo || message.content) : ''\n const messagePreview = isYou ? `<i>${this.$t('chats.you')}</i> ${content}` : content\n return {\n summary: '',\n emojis: messageEmojis,\n raw_html: messagePreview,\n text: messagePreview,\n attachments: []\n }\n }\n },\n methods: {\n openChat (_e) {\n if (this.chat.id) {\n this.$router.push({\n name: 'chat',\n params: {\n username: this.currentUser.screen_name,\n recipient_id: this.chat.account.id\n }\n })\n }\n }\n }\n}\n\nexport default ChatListItem\n","import { render } from \"./chat_list_item.vue?vue&type=template&id=a202646c\"\nimport script from \"./chat_list_item.js?vue&type=script&lang=js\"\nexport * from \"./chat_list_item.js?vue&type=script&lang=js\"\n\nimport \"./chat_list_item.vue?vue&type=style&index=0&id=a202646c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"panel-default panel chat-new\"\n >\n <div\n ref=\"header\"\n class=\"panel-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"goBack\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n </div>\n <div class=\"input-wrap\">\n <div class=\"input-search\">\n <FAIcon\n class=\"search-icon fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </div>\n <input\n ref=\"search\"\n v-model=\"query\"\n placeholder=\"Search people\"\n @input=\"onInput\"\n >\n </div>\n <div class=\"member-list\">\n <div\n v-for=\"user in availableUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <div @click.capture.prevent=\"goToChat(user)\">\n <BasicUserCard :user=\"user\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_new.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat_new\";\n</style>\n","import { mapState, mapGetters } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst chatNew = {\n components: {\n BasicUserCard,\n UserAvatar\n },\n data () {\n return {\n suggestions: [],\n userIds: [],\n loading: false,\n query: ''\n }\n },\n async created () {\n const { chats } = await this.backendInteractor.chats()\n chats.forEach(chat => this.suggestions.push(chat.account))\n },\n computed: {\n users () {\n return this.userIds.map(userId => this.findUser(userId))\n },\n availableUsers () {\n if (this.query.length !== 0) {\n return this.users\n } else {\n return this.suggestions\n }\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n backendInteractor: state => state.api.backendInteractor\n }),\n ...mapGetters(['findUser'])\n },\n methods: {\n goBack () {\n this.$emit('cancel')\n },\n goToChat (user) {\n this.$router.push({ name: 'chat', params: { recipient_id: user.id } })\n },\n onInput () {\n this.search(this.query)\n },\n addUser (user) {\n this.selectedUserIds.push(user.id)\n this.query = ''\n },\n removeUser (userId) {\n this.selectedUserIds = this.selectedUserIds.filter(id => id !== userId)\n },\n search (query) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.userIds = []\n this.$store.dispatch('search', { q: query, resolve: true, type: 'accounts' })\n .then(data => {\n this.loading = false\n this.userIds = data.accounts.map(a => a.id)\n })\n }\n }\n}\n\nexport default chatNew\n","import { render } from \"./chat_new.vue?vue&type=template&id=527ae593\"\nimport script from \"./chat_new.js?vue&type=script&lang=js\"\nexport * from \"./chat_new.js?vue&type=script&lang=js\"\n\nimport \"./chat_new.vue?vue&type=style&index=0&id=527ae593&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport ChatListItem from '../chat_list_item/chat_list_item.vue'\nimport ChatNew from '../chat_new/chat_new.vue'\nimport List from '../list/list.vue'\n\nconst ChatList = {\n components: {\n ChatListItem,\n List,\n ChatNew\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n ...mapGetters(['sortedChatList'])\n },\n data () {\n return {\n isNew: false\n }\n },\n created () {\n this.$store.dispatch('fetchChats', { latest: true })\n },\n methods: {\n cancelNewChat () {\n this.isNew = false\n this.$store.dispatch('fetchChats', { latest: true })\n },\n newChat () {\n this.isNew = true\n }\n }\n}\n\nexport default ChatList\n","import { render } from \"./chat_list.vue?vue&type=template&id=66fabc09\"\nimport script from \"./chat_list.js?vue&type=script&lang=js\"\nexport * from \"./chat_list.js?vue&type=script&lang=js\"\n\nimport \"./chat_list.vue?vue&type=style&index=0&id=66fabc09&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"chat-view\">\n <div class=\"chat-view-inner\">\n <div\n ref=\"inner\"\n class=\"panel-default panel chat-view-body\"\n >\n <div\n ref=\"header\"\n class=\"panel-heading -sticky chat-view-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"goBack\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n <div class=\"title text-center\">\n <ChatTitle\n :user=\"recipient\"\n :with-avatar=\"true\"\n />\n </div>\n </div>\n <div\n class=\"message-list\"\n :style=\"{ height: scrollableContainerHeight }\"\n >\n <template v-if=\"!errorLoadingChat\">\n <ChatMessage\n v-for=\"chatViewItem in chatViewItems\"\n :key=\"chatViewItem.id\"\n :author=\"recipient\"\n :chat-view-item=\"chatViewItem\"\n :hovered-message-chain=\"chatViewItem.messageChainId === hoveredMessageChainId\"\n @hover=\"onMessageHover\"\n />\n </template>\n <div\n v-else\n class=\"chat-loading-error\"\n >\n <div class=\"alert error\">\n {{ $t('chats.error_loading_chat') }}\n </div>\n </div>\n </div>\n <div\n ref=\"footer\"\n class=\"panel-body footer\"\n >\n <div\n class=\"jump-to-bottom-button\"\n :class=\"{ 'visible': jumpToBottomButtonVisible }\"\n @click=\"scrollDown({ behavior: 'smooth' })\"\n >\n <span>\n <FAIcon icon=\"chevron-down\" />\n <div\n v-if=\"newMessageCount\"\n class=\"badge badge-notification unread-chat-count unread-message-count\"\n >\n {{ newMessageCount }}\n </div>\n </span>\n </div>\n <PostStatusForm\n :disable-subject=\"true\"\n :disable-scope-selector=\"true\"\n :disable-notice=\"true\"\n :disable-lock-warning=\"true\"\n :disable-polls=\"true\"\n :disable-sensitivity-checkbox=\"true\"\n :disable-submit=\"errorLoadingChat || !currentChat\"\n :disable-preview=\"true\"\n :optimistic-posting=\"true\"\n :post-handler=\"sendMessage\"\n :submit-on-enter=\"!mobileLayout\"\n :preserve-focus=\"!mobileLayout\"\n :auto-focus=\"!mobileLayout\"\n :placeholder=\"formPlaceholder\"\n :file-limit=\"1\"\n max-height=\"160\"\n emoji-picker-placement=\"top\"\n @resize=\"handleResize\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat\";\n</style>\n","<template>\n <div\n v-if=\"isMessage\"\n class=\"chat-message-wrapper\"\n :class=\"{ 'hovered-message-chain': hoveredMessageChain }\"\n @mouseover=\"onHover(true)\"\n @mouseleave=\"onHover(false)\"\n >\n <div\n class=\"chat-message\"\n :class=\"[{ 'outgoing': isCurrentUser, 'incoming': !isCurrentUser }]\"\n >\n <div\n v-if=\"!isCurrentUser\"\n class=\"avatar-wrapper\"\n >\n <UserPopover\n v-if=\"chatViewItem.isHead\"\n :user-id=\"author.id\"\n >\n <UserAvatar\n :compact=\"true\"\n :better-shadow=\"betterShadow\"\n :user=\"author\"\n />\n </UserPopover>\n </div>\n <div class=\"chat-message-inner\">\n <div\n class=\"status-body\"\n :style=\"{ 'min-width': message.attachment ? '80%' : '' }\"\n >\n <div\n class=\"media status\"\n :class=\"{ 'without-attachment': !hasAttachment, 'pending': chatViewItem.data.pending, 'error': chatViewItem.data.error }\"\n style=\"position: relative;\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n >\n <div\n class=\"chat-message-menu\"\n :class=\"{ 'visible': hovered || menuOpened }\"\n >\n <Popover\n trigger=\"click\"\n placement=\"top\"\n bound-to-selector=\".chat-view-inner\"\n :bound-to=\"{ x: 'container' }\"\n :margin=\"popoverMarginStyle\"\n @show=\"menuOpened = true\"\n @close=\"menuOpened = false\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click=\"deleteMessage\"\n >\n <FAIcon icon=\"times\" /> {{ $t(\"chats.delete\") }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button-default menu-icon\"\n :title=\"$t('chats.more')\"\n >\n <FAIcon icon=\"ellipsis-h\" />\n </button>\n </template>\n </Popover>\n </div>\n <StatusContent\n class=\"message-content\"\n :status=\"messageForStatusContent\"\n :full-content=\"true\"\n >\n <template #footer>\n <span\n class=\"created-at\"\n >\n {{ createdAt }}\n </span>\n </template>\n </StatusContent>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"chat-message-date-separator\"\n >\n <ChatMessageDate :date=\"chatViewItem.date\" />\n </div>\n</template>\n\n<script src=\"./chat_message.js\"></script>\n<style lang=\"scss\">\n@import \"./chat_message\";\n\n</style>\n","<template>\n <time>\n {{ displayDate }}\n </time>\n</template>\n\n<script>\nimport localeService from 'src/services/locale/locale.service.js'\n\nexport default {\n name: 'Timeago',\n props: ['date'],\n computed: {\n displayDate () {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (this.date.getTime() === today.getTime()) {\n return this.$t('display_date.today')\n } else {\n return this.date.toLocaleDateString(localeService.internalToBrowserLocale(this.$i18n.locale), { day: 'numeric', month: 'long' })\n }\n }\n }\n}\n</script>\n","import { render } from \"./chat_message_date.vue?vue&type=template&id=23377998\"\nimport script from \"./chat_message_date.vue?vue&type=script&lang=js\"\nexport * from \"./chat_message_date.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport Popover from '../popover/popover.vue'\nimport Attachment from '../attachment/attachment.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport ChatMessageDate from '../chat_message_date/chat_message_date.vue'\nimport { defineAsyncComponent } from 'vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faEllipsisH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faEllipsisH\n)\n\nconst ChatMessage = {\n name: 'ChatMessage',\n props: [\n 'author',\n 'edited',\n 'noHeading',\n 'chatViewItem',\n 'hoveredMessageChain'\n ],\n emits: ['hover'],\n components: {\n Popover,\n Attachment,\n StatusContent,\n UserAvatar,\n Gallery,\n LinkPreview,\n ChatMessageDate,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n computed: {\n // Returns HH:MM (hours and minutes) in local time.\n createdAt () {\n const time = this.chatViewItem.data.created_at\n return time.toLocaleTimeString('en', { hour: '2-digit', minute: '2-digit', hour12: false })\n },\n isCurrentUser () {\n return this.message.account_id === this.currentUser.id\n },\n message () {\n return this.chatViewItem.data\n },\n isMessage () {\n return this.chatViewItem.type === 'message'\n },\n messageForStatusContent () {\n return {\n summary: '',\n emojis: this.message.emojis,\n raw_html: this.message.content || '',\n text: this.message.content || '',\n attachments: this.message.attachments\n }\n },\n hasAttachment () {\n return this.message.attachments.length > 0\n },\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser,\n restrictedNicknames: state => state.instance.restrictedNicknames\n }),\n popoverMarginStyle () {\n if (this.isCurrentUser) {\n return {}\n } else {\n return { left: 50 }\n }\n },\n ...mapGetters(['mergedConfig', 'findUser'])\n },\n data () {\n return {\n hovered: false,\n menuOpened: false\n }\n },\n methods: {\n onHover (bool) {\n this.$emit('hover', { isHovered: bool, messageChainId: this.chatViewItem.messageChainId })\n },\n async deleteMessage () {\n const confirmed = window.confirm(this.$t('chats.delete_confirm'))\n if (confirmed) {\n await this.$store.dispatch('deleteChatMessage', {\n messageId: this.chatViewItem.data.id,\n chatId: this.chatViewItem.data.chat_id\n })\n }\n this.hovered = false\n this.menuOpened = false\n }\n }\n}\n\nexport default ChatMessage\n","import { render } from \"./chat_message.vue?vue&type=template&id=e61e03a2\"\nimport script from \"./chat_message.js?vue&type=script&lang=js\"\nexport * from \"./chat_message.js?vue&type=script&lang=js\"\n\nimport \"./chat_message.vue?vue&type=style&index=0&id=e61e03a2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// Captures a scroll position\nexport const getScrollPosition = () => {\n return {\n scrollTop: window.scrollY,\n scrollHeight: document.documentElement.scrollHeight,\n offsetHeight: window.innerHeight\n }\n}\n\n// A helper function that is used to keep the scroll position fixed as the new elements are added to the top\n// Takes two scroll positions, before and after the update.\nexport const getNewTopPosition = (previousPosition, newPosition) => {\n return previousPosition.scrollTop + (newPosition.scrollHeight - previousPosition.scrollHeight)\n}\n\nexport const isBottomedOut = (offset = 0) => {\n const scrollHeight = window.scrollY + offset\n const totalHeight = document.documentElement.scrollHeight - window.innerHeight\n return totalHeight <= scrollHeight\n}\n// Returns whether or not the scrollbar is visible.\nexport const isScrollable = () => {\n return document.documentElement.scrollHeight > window.innerHeight\n}\n","import _ from 'lodash'\nimport { WSConnectionStatus } from '../../services/api/api.service.js'\nimport { mapGetters, mapState } from 'vuex'\nimport ChatMessage from '../chat_message/chat_message.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport ChatTitle from '../chat_title/chat_title.vue'\nimport chatService from '../../services/chat_service/chat_service.js'\nimport { promiseInterval } from '../../services/promise_interval/promise_interval.js'\nimport { getScrollPosition, getNewTopPosition, isBottomedOut, isScrollable } from './chat_layout_utils.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\nimport { buildFakeMessage } from '../../services/chat_utils/chat_utils.js'\n\nlibrary.add(\n faChevronDown,\n faChevronLeft\n)\n\nconst BOTTOMED_OUT_OFFSET = 10\nconst JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET = 10\nconst SAFE_RESIZE_TIME_OFFSET = 100\nconst MARK_AS_READ_DELAY = 1500\nconst MAX_RETRIES = 10\n\nconst Chat = {\n components: {\n ChatMessage,\n ChatTitle,\n PostStatusForm\n },\n data () {\n return {\n jumpToBottomButtonVisible: false,\n hoveredMessageChainId: undefined,\n lastScrollPosition: {},\n scrollableContainerHeight: '100%',\n errorLoadingChat: false,\n messageRetriers: {}\n }\n },\n created () {\n this.startFetching()\n window.addEventListener('resize', this.handleResize)\n },\n mounted () {\n window.addEventListener('scroll', this.handleScroll)\n if (typeof document.hidden !== 'undefined') {\n document.addEventListener('visibilitychange', this.handleVisibilityChange, false)\n }\n\n this.$nextTick(() => {\n this.handleResize()\n })\n },\n unmounted () {\n window.removeEventListener('scroll', this.handleScroll)\n window.removeEventListener('resize', this.handleResize)\n if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.$store.dispatch('clearCurrentChat')\n },\n computed: {\n recipient () {\n return this.currentChat && this.currentChat.account\n },\n recipientId () {\n return this.$route.params.recipient_id\n },\n formPlaceholder () {\n if (this.recipient) {\n return this.$t('chats.message_user', { nickname: this.recipient.screen_name_ui })\n } else {\n return ''\n }\n },\n chatViewItems () {\n return chatService.getView(this.currentChatMessageService)\n },\n newMessageCount () {\n return this.currentChatMessageService && this.currentChatMessageService.newMessageCount\n },\n streamingEnabled () {\n return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED\n },\n ...mapGetters([\n 'currentChat',\n 'currentChatMessageService',\n 'findOpenedChatByRecipientId',\n 'mergedConfig'\n ]),\n ...mapState({\n backendInteractor: state => state.api.backendInteractor,\n mastoUserSocketStatus: state => state.api.mastoUserSocketStatus,\n mobileLayout: state => state.interface.layoutType === 'mobile',\n currentUser: state => state.users.currentUser\n })\n },\n watch: {\n chatViewItems () {\n // We don't want to scroll to the bottom on a new message when the user is viewing older messages.\n // Therefore we need to know whether the scroll position was at the bottom before the DOM update.\n const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)\n this.$nextTick(() => {\n if (bottomedOutBeforeUpdate) {\n this.scrollDown()\n }\n })\n },\n $route: function () {\n this.startFetching()\n },\n mastoUserSocketStatus (newValue) {\n if (newValue === WSConnectionStatus.JOINED) {\n this.fetchChat({ isFirstFetch: true })\n }\n }\n },\n methods: {\n // Used to animate the avatar near the first message of the message chain when any message belonging to the chain is hovered\n onMessageHover ({ isHovered, messageChainId }) {\n this.hoveredMessageChainId = isHovered ? messageChainId : undefined\n },\n onFilesDropped () {\n this.$nextTick(() => {\n this.handleResize()\n })\n },\n handleVisibilityChange () {\n this.$nextTick(() => {\n if (!document.hidden && this.bottomedOut(BOTTOMED_OUT_OFFSET)) {\n this.scrollDown({ forceRead: true })\n }\n })\n },\n // \"Sticks\" scroll to bottom instead of top, helps with OSK resizing the viewport\n handleResize (opts = {}) {\n const { delayed = false } = opts\n\n if (delayed) {\n setTimeout(() => {\n this.handleResize({ ...opts, delayed: false })\n }, SAFE_RESIZE_TIME_OFFSET)\n return\n }\n\n this.$nextTick(() => {\n const { offsetHeight = undefined } = getScrollPosition()\n const diff = offsetHeight - this.lastScrollPosition.offsetHeight\n if (diff !== 0 && !this.bottomedOut()) {\n this.$nextTick(() => {\n window.scrollBy({ top: -Math.trunc(diff) })\n })\n }\n this.lastScrollPosition = getScrollPosition()\n })\n },\n scrollDown (options = {}) {\n const { behavior = 'auto', forceRead = false } = options\n this.$nextTick(() => {\n window.scrollTo({ top: document.documentElement.scrollHeight, behavior })\n })\n if (forceRead) {\n this.readChat()\n }\n },\n readChat () {\n if (!(this.currentChatMessageService && this.currentChatMessageService.maxId)) { return }\n if (document.hidden) { return }\n const lastReadId = this.currentChatMessageService.maxId\n this.$store.dispatch('readChat', {\n id: this.currentChat.id,\n lastReadId\n })\n },\n bottomedOut (offset) {\n return isBottomedOut(offset)\n },\n reachedTop () {\n return window.scrollY <= 0\n },\n cullOlderCheck () {\n window.setTimeout(() => {\n if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {\n this.$store.dispatch('cullOlderMessages', this.currentChatMessageService.chatId)\n }\n }, 5000)\n },\n handleScroll: _.throttle(function () {\n this.lastScrollPosition = getScrollPosition()\n if (!this.currentChat) { return }\n\n if (this.reachedTop()) {\n this.fetchChat({ maxId: this.currentChatMessageService.minId })\n } else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {\n this.jumpToBottomButtonVisible = false\n this.cullOlderCheck()\n if (this.newMessageCount > 0) {\n // Use a delay before marking as read to prevent situation where new messages\n // arrive just as you're leaving the view and messages that you didn't actually\n // get to see get marked as read.\n window.setTimeout(() => {\n // Don't mark as read if the element doesn't exist, user has left chat view\n if (this.$el) this.readChat()\n }, MARK_AS_READ_DELAY)\n }\n } else {\n this.jumpToBottomButtonVisible = true\n }\n }, 200),\n handleScrollUp (positionBeforeLoading) {\n const positionAfterLoading = getScrollPosition()\n window.scrollTo({\n top: getNewTopPosition(positionBeforeLoading, positionAfterLoading)\n })\n },\n fetchChat ({ isFirstFetch = false, fetchLatest = false, maxId }) {\n const chatMessageService = this.currentChatMessageService\n if (!chatMessageService) { return }\n if (fetchLatest && this.streamingEnabled) { return }\n\n const chatId = chatMessageService.chatId\n const fetchOlderMessages = !!maxId\n const sinceId = fetchLatest && chatMessageService.maxId\n\n return this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })\n .then((messages) => {\n // Clear the current chat in case we're recovering from a ws connection loss.\n if (isFirstFetch) {\n chatService.clear(chatMessageService)\n }\n\n const positionBeforeUpdate = getScrollPosition()\n this.$store.dispatch('addChatMessages', { chatId, messages }).then(() => {\n this.$nextTick(() => {\n if (fetchOlderMessages) {\n this.handleScrollUp(positionBeforeUpdate)\n }\n\n // In vertical screens, the first batch of fetched messages may not always take the\n // full height of the scrollable container.\n // If this is the case, we want to fetch the messages until the scrollable container\n // is fully populated so that the user has the ability to scroll up and load the history.\n if (!isScrollable() && messages.length > 0) {\n this.fetchChat({ maxId: this.currentChatMessageService.minId })\n }\n })\n })\n })\n },\n async startFetching () {\n let chat = this.findOpenedChatByRecipientId(this.recipientId)\n if (!chat) {\n try {\n chat = await this.backendInteractor.getOrCreateChat({ accountId: this.recipientId })\n } catch (e) {\n console.error('Error creating or getting a chat', e)\n this.errorLoadingChat = true\n }\n }\n if (chat) {\n this.$nextTick(() => {\n this.scrollDown({ forceRead: true })\n })\n this.$store.dispatch('addOpenedChat', { chat })\n this.doStartFetching()\n }\n },\n doStartFetching () {\n this.$store.dispatch('startFetchingCurrentChat', {\n fetcher: () => promiseInterval(() => this.fetchChat({ fetchLatest: true }), 5000)\n })\n this.fetchChat({ isFirstFetch: true })\n },\n handleAttachmentPosting () {\n this.$nextTick(() => {\n this.handleResize()\n // When the posting form size changes because of a media attachment, we need an extra resize\n // to account for the potential delay in the DOM update.\n this.scrollDown({ forceRead: true })\n })\n },\n sendMessage ({ status, media, idempotencyKey }) {\n const params = {\n id: this.currentChat.id,\n content: status,\n idempotencyKey\n }\n\n if (media[0]) {\n params.mediaId = media[0].id\n }\n\n const fakeMessage = buildFakeMessage({\n attachments: media,\n chatId: this.currentChat.id,\n content: status,\n userId: this.currentUser.id,\n idempotencyKey\n })\n\n this.$store.dispatch('addChatMessages', {\n chatId: this.currentChat.id,\n messages: [fakeMessage]\n }).then(() => {\n this.handleAttachmentPosting()\n })\n\n return this.doSendMessage({ params, fakeMessage, retriesLeft: MAX_RETRIES })\n },\n doSendMessage ({ params, fakeMessage, retriesLeft = MAX_RETRIES }) {\n if (retriesLeft <= 0) return\n\n this.backendInteractor.sendChatMessage(params)\n .then(data => {\n this.$store.dispatch('addChatMessages', {\n chatId: this.currentChat.id,\n updateMaxId: false,\n messages: [{ ...data, fakeId: fakeMessage.id }]\n })\n\n return data\n })\n .catch(error => {\n console.error('Error sending message', error)\n this.$store.dispatch('handleMessageError', {\n chatId: this.currentChat.id,\n fakeId: fakeMessage.id,\n isRetry: retriesLeft !== MAX_RETRIES\n })\n if ((error.statusCode >= 500 && error.statusCode < 600) || error.message === 'Failed to fetch') {\n this.messageRetriers[fakeMessage.id] = setTimeout(() => {\n this.doSendMessage({ params, fakeMessage, retriesLeft: retriesLeft - 1 })\n }, 1000 * (2 ** (MAX_RETRIES - retriesLeft)))\n }\n return {}\n })\n\n return Promise.resolve(fakeMessage)\n },\n goBack () {\n this.$router.push({ name: 'chats', params: { username: this.currentUser.screen_name } })\n }\n }\n}\n\nexport default Chat\n","import { render } from \"./chat.vue?vue&type=template&id=796d1749\"\nimport script from \"./chat.js?vue&type=script&lang=js\"\nexport * from \"./chat.js?vue&type=script&lang=js\"\n\nimport \"./chat.vue?vue&type=style&index=0&id=796d1749&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <div\n v-if=\"user\"\n class=\"user-profile panel panel-default\"\n >\n <UserCard\n :user-id=\"userId\"\n :switcher=\"true\"\n :selected=\"timeline.viewing\"\n avatar-action=\"zoom\"\n rounded=\"top\"\n :has-note-editor=\"true\"\n />\n <span\n v-if=\"!!user.birthday\"\n class=\"user-birthday\"\n >\n <FAIcon\n class=\"fa-old-padding\"\n icon=\"birthday-cake\"\n />\n {{ $t('user_card.birthday', { birthday: formattedBirthday }) }}\n </span>\n <div\n v-if=\"user.fields_html && user.fields_html.length > 0\"\n class=\"user-profile-fields\"\n >\n <dl\n v-for=\"(field, index) in user.fields_html\"\n :key=\"index\"\n class=\"user-profile-field\"\n >\n <dt\n :title=\"user.fields_text[index].name\"\n class=\"user-profile-field-name\"\n >\n <RichContent\n :html=\"field.name\"\n :emoji=\"user.emoji\"\n />\n </dt>\n <dd\n :title=\"user.fields_text[index].value\"\n class=\"user-profile-field-value\"\n >\n <RichContent\n :html=\"field.value\"\n :emoji=\"user.emoji\"\n />\n </dd>\n </dl>\n </div>\n <tab-switcher\n :active-tab=\"tab\"\n :render-only-focused=\"true\"\n :on-switch=\"onTabSwitch\"\n >\n <Timeline\n key=\"statuses\"\n :label=\"$t('user_card.statuses')\"\n :count=\"user.statuses_count\"\n :embedded=\"true\"\n :title=\"$t('user_profile.timeline_title')\"\n :timeline=\"timeline\"\n timeline-name=\"user\"\n :user-id=\"userId\"\n :pinned-status-ids=\"user.pinnedStatusIds\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n <div\n v-if=\"followsTabVisible\"\n key=\"followees\"\n :label=\"$t('user_card.followees')\"\n :disabled=\"!user.friends_count\"\n >\n <FriendList :user-id=\"userId\">\n <template #item=\"{item}\">\n <FollowCard :user=\"item\" />\n </template>\n </FriendList>\n </div>\n <div\n v-if=\"followersTabVisible\"\n key=\"followers\"\n :label=\"$t('user_card.followers')\"\n :disabled=\"!user.followers_count\"\n >\n <FollowerList :user-id=\"userId\">\n <template #item=\"{item}\">\n <FollowCard\n :user=\"item\"\n :no-follows-you=\"isUs\"\n />\n </template>\n </FollowerList>\n </div>\n <Timeline\n key=\"media\"\n :label=\"$t('user_card.media')\"\n :disabled=\"!media.visibleStatuses.length\"\n :embedded=\"true\"\n :title=\"$t('user_card.media')\"\n timeline-name=\"media\"\n :timeline=\"media\"\n :user-id=\"userId\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n <Timeline\n v-if=\"isUs\"\n key=\"favorites\"\n :label=\"$t('user_card.favorites')\"\n :disabled=\"!favorites.visibleStatuses.length\"\n :embedded=\"true\"\n :title=\"$t('user_card.favorites')\"\n timeline-name=\"favorites\"\n :timeline=\"favorites\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n </tab-switcher>\n <div\n :ref=\"setFooterRef\"\n class=\"panel-footer\"\n />\n </div>\n <div\n v-else\n class=\"panel user-profile-placeholder\"\n >\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('settings.profile_tab') }}\n </div>\n </div>\n <div class=\"panel-body\">\n <span v-if=\"error\">{{ error }}</span>\n <FAIcon\n v-else\n spin\n icon=\"circle-notch\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./user_profile.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-profile {\n flex: 2;\n flex-basis: 500px;\n\n // No sticky header on user profile\n --currentPanelStack: 1;\n\n .user-birthday {\n margin: 0 0.75em 0.5em;\n }\n\n .user-profile-fields {\n margin: 0 0.5em;\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n\n &.emoji {\n width: 18px;\n height: 18px;\n }\n }\n\n .user-profile-field {\n display: flex;\n margin: 0.25em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n\n .user-profile-field-name {\n flex: 0 1 30%;\n font-weight: 500;\n text-align: right;\n color: var(--lightText);\n min-width: 120px;\n border-right: 1px solid var(--border, $fallback--border);\n }\n\n .user-profile-field-value {\n flex: 1 1 70%;\n color: var(--text);\n margin: 0 0 0 0.25em;\n }\n\n .user-profile-field-name,\n .user-profile-field-value {\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n padding: 0.5em 1.5em;\n box-sizing: border-box;\n }\n }\n }\n\n .userlist-placeholder {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 2em;\n }\n}\n\n.user-profile-placeholder {\n .panel-body {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 7em;\n }\n}\n</style>\n","<template>\n <basic-user-card :user=\"user\">\n <div class=\"follow-card-content-container\">\n <span\n v-if=\"isMe || (!noFollowsYou && relationship.followed_by)\"\n class=\"faint\"\n >\n {{ isMe ? $t('user_card.its_you') : $t('user_card.follows_you') }}\n </span>\n <template v-if=\"!loggedIn\">\n <div\n v-if=\"!relationship.following\"\n class=\"follow-card-follow-button\"\n >\n <RemoteFollow :user=\"user\" />\n </div>\n </template>\n <template v-else-if=\"!isMe\">\n <FollowButton\n :relationship=\"relationship\"\n :label-following=\"$t('user_card.follow_unfollow')\"\n class=\"follow-card-follow-button\"\n :user=\"user\"\n />\n <RemoveFollowerButton\n v-if=\"noFollowsYou && relationship.followed_by\"\n :user=\"user\"\n :relationship=\"relationship\"\n class=\"follow-card-button\"\n />\n </template>\n </div>\n </basic-user-card>\n</template>\n\n<script src=\"./follow_card.js\"></script>\n\n<style lang=\"scss\">\n.follow-card {\n &-content-container {\n flex-shrink: 0;\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n line-height: 1.5em;\n }\n\n &-button {\n margin-top: 0.5em;\n padding: 0 1.5em;\n margin-left: 1em;\n }\n\n &-follow-button {\n margin-top: 0.5em;\n margin-left: auto;\n width: 10em;\n }\n}\n</style>\n","import ConfirmModal from '../confirm_modal/confirm_modal.vue'\n\nexport default {\n props: ['user', 'relationship'],\n data () {\n return {\n inProgress: false,\n showingConfirmRemoveFollower: false\n }\n },\n components: {\n ConfirmModal\n },\n computed: {\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else {\n return this.$t('user_card.remove_follower')\n }\n },\n shouldConfirmRemoveUserFromFollowers () {\n return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers\n }\n },\n methods: {\n showConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = true\n },\n hideConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = false\n },\n onClick () {\n if (!this.shouldConfirmRemoveUserFromFollowers) {\n this.doRemoveUserFromFollowers()\n } else {\n this.showConfirmRemoveUserFromFollowers()\n }\n },\n doRemoveUserFromFollowers () {\n this.inProgress = true\n this.$store.dispatch('removeUserFromFollowers', this.relationship.id).then(() => {\n this.inProgress = false\n })\n this.hideConfirmRemoveUserFromFollowers()\n }\n }\n}\n","import { render } from \"./remove_follower_button.vue?vue&type=template&id=bc80064a\"\nimport script from \"./remove_follower_button.js?vue&type=script&lang=js\"\nexport * from \"./remove_follower_button.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"btn button-default follow-button\"\n :class=\"{ toggled: inProgress }\"\n :disabled=\"inProgress\"\n :title=\"$t('user_card.remove_follower')\"\n @click=\"onClick\"\n >\n {{ label }}\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmRemoveFollower\"\n :title=\"$t('user_card.remove_follower_confirm_title')\"\n :confirm-text=\"$t('user_card.remove_follower_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.remove_follower_confirm_cancel_button')\"\n @accepted=\"doRemoveUserFromFollowers\"\n @cancelled=\"hideConfirmRemoveUserFromFollowers\"\n >\n <i18n-t\n keypath=\"user_card.remove_follower_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </button>\n</template>\n\n<script src=\"./remove_follower_button.js\"></script>\n","import BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport RemoveFollowerButton from '../remove_follower_button/remove_follower_button.vue'\n\nconst FollowCard = {\n props: [\n 'user',\n 'noFollowsYou'\n ],\n components: {\n BasicUserCard,\n RemoteFollow,\n FollowButton,\n RemoveFollowerButton\n },\n computed: {\n isMe () {\n return this.$store.state.users.currentUser.id === this.user.id\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n relationship () {\n return this.$store.getters.relationship(this.user.id)\n }\n }\n}\n\nexport default FollowCard\n","import { render } from \"./follow_card.vue?vue&type=template&id=e6b6839c\"\nimport script from \"./follow_card.js?vue&type=script&lang=js\"\nexport * from \"./follow_card.js?vue&type=script&lang=js\"\n\nimport \"./follow_card.vue?vue&type=style&index=0&id=e6b6839c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import get from 'lodash/get'\nimport UserCard from '../user_card/user_card.vue'\nimport FollowCard from '../follow_card/follow_card.vue'\nimport Timeline from '../timeline/timeline.vue'\nimport Conversation from '../conversation/conversation.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport List from '../list/list.vue'\nimport withLoadMore from '../../hocs/with_load_more/with_load_more'\nimport localeService from 'src/services/locale/locale.service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faBirthdayCake\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faBirthdayCake\n)\n\nconst FollowerList = withLoadMore({\n fetch: (props, $store) => $store.dispatch('fetchFollowers', props.userId),\n select: (props, $store) => get($store.getters.findUser(props.userId), 'followerIds', []).map(id => $store.getters.findUser(id)),\n destroy: (props, $store) => $store.dispatch('clearFollowers', props.userId),\n childPropName: 'items',\n additionalPropNames: ['userId']\n})(List)\n\nconst FriendList = withLoadMore({\n fetch: (props, $store) => $store.dispatch('fetchFriends', props.userId),\n select: (props, $store) => get($store.getters.findUser(props.userId), 'friendIds', []).map(id => $store.getters.findUser(id)),\n destroy: (props, $store) => $store.dispatch('clearFriends', props.userId),\n childPropName: 'items',\n additionalPropNames: ['userId']\n})(List)\n\nconst defaultTabKey = 'statuses'\n\nconst UserProfile = {\n data () {\n return {\n error: false,\n userId: null,\n tab: defaultTabKey,\n footerRef: null\n }\n },\n created () {\n const routeParams = this.$route.params\n this.load({ name: routeParams.name, id: routeParams.id })\n this.tab = get(this.$route, 'query.tab', defaultTabKey)\n },\n unmounted () {\n this.stopFetching()\n },\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.user\n },\n favorites () {\n return this.$store.state.statuses.timelines.favorites\n },\n media () {\n return this.$store.state.statuses.timelines.media\n },\n isUs () {\n return this.userId && this.$store.state.users.currentUser.id &&\n this.userId === this.$store.state.users.currentUser.id\n },\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n isExternal () {\n return this.$route.name === 'external-user-profile'\n },\n followsTabVisible () {\n return this.isUs || !this.user.hide_follows\n },\n followersTabVisible () {\n return this.isUs || !this.user.hide_followers\n },\n formattedBirthday () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return this.user.birthday && new Date(Date.parse(this.user.birthday)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })\n }\n },\n methods: {\n setFooterRef (el) {\n this.footerRef = el\n },\n load (userNameOrId) {\n const startFetchingTimeline = (timeline, userId) => {\n // Clear timeline only if load another user's profile\n if (userId !== this.$store.state.statuses.timelines[timeline].userId) {\n this.$store.commit('clearTimeline', { timeline })\n }\n this.$store.dispatch('startFetchingTimeline', { timeline, userId })\n }\n\n const loadById = (userId) => {\n this.userId = userId\n startFetchingTimeline('user', userId)\n startFetchingTimeline('media', userId)\n if (this.isUs) {\n startFetchingTimeline('favorites', userId)\n }\n // Fetch all pinned statuses immediately\n this.$store.dispatch('fetchPinnedStatuses', userId)\n }\n\n // Reset view\n this.userId = null\n this.error = false\n\n const maybeId = userNameOrId.id\n const maybeName = userNameOrId.name\n\n // Check if user data is already loaded in store\n const user = maybeId ? this.$store.getters.findUser(maybeId) : this.$store.getters.findUserByName(maybeName)\n if (user) {\n loadById(user.id)\n } else {\n (maybeId\n ? this.$store.dispatch('fetchUser', maybeId)\n : this.$store.dispatch('fetchUserByName', maybeName))\n .then(({ id }) => loadById(id))\n .catch((reason) => {\n const errorMessage = get(reason, 'error.error')\n if (errorMessage === 'No user with such user_id') { // Known error\n this.error = this.$t('user_profile.profile_does_not_exist')\n } else if (errorMessage) {\n this.error = errorMessage\n } else {\n this.error = this.$t('user_profile.profile_loading_error')\n }\n })\n }\n },\n stopFetching () {\n this.$store.dispatch('stopFetchingTimeline', 'user')\n this.$store.dispatch('stopFetchingTimeline', 'favorites')\n this.$store.dispatch('stopFetchingTimeline', 'media')\n },\n switchUser (userNameOrId) {\n this.stopFetching()\n this.load(userNameOrId)\n },\n onTabSwitch (tab) {\n this.tab = tab\n this.$router.replace({ query: { tab } })\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n }\n },\n watch: {\n '$route.params.id': function (newVal) {\n if (newVal) {\n this.switchUser({ id: newVal })\n }\n },\n '$route.params.name': function (newVal) {\n if (newVal) {\n this.switchUser({ name: newVal })\n }\n },\n '$route.query': function (newVal) {\n this.tab = newVal.tab || defaultTabKey\n }\n },\n components: {\n UserCard,\n Timeline,\n FollowerList,\n FriendList,\n FollowCard,\n TabSwitcher,\n Conversation,\n RichContent\n }\n}\n\nexport default UserProfile\n","import { render } from \"./user_profile.vue?vue&type=template&id=3af4c11e\"\nimport script from \"./user_profile.js?vue&type=script&lang=js\"\nexport * from \"./user_profile.js?vue&type=script&lang=js\"\n\nimport \"./user_profile.vue?vue&type=style&index=0&id=3af4c11e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('nav.search') }}\n </div>\n </div>\n <div class=\"search-input-container\">\n <input\n ref=\"searchInput\"\n v-model=\"searchTerm\"\n class=\"search-input\"\n :placeholder=\"$t('nav.search')\"\n @keyup.enter=\"newQuery(searchTerm)\"\n >\n <button\n class=\"btn button-default search-button\"\n type=\"submit\"\n @click=\"newQuery(searchTerm)\"\n >\n <FAIcon icon=\"search\" />\n </button>\n </div>\n <div\n v-if=\"loading && statusesOffset == 0\"\n class=\"text-center loading-icon\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n <div v-else-if=\"loaded\">\n <div class=\"search-nav-heading\">\n <tab-switcher\n ref=\"tabSwitcher\"\n :on-switch=\"onResultTabSwitch\"\n :active-tab=\"currenResultTab\"\n >\n <span\n key=\"statuses\"\n :label=\"$t('user_card.statuses') + resultCount('visibleStatuses')\"\n />\n <span\n key=\"people\"\n :label=\"$t('search.people') + resultCount('users')\"\n />\n <span\n key=\"hashtags\"\n :label=\"$t('search.hashtags') + resultCount('hashtags')\"\n />\n </tab-switcher>\n </div>\n </div>\n <div class=\"panel-body\">\n <div v-if=\"currenResultTab === 'statuses'\">\n <Status\n v-for=\"status in visibleStatuses\"\n :key=\"status.id\"\n :collapsable=\"false\"\n :expandable=\"false\"\n :compact=\"false\"\n class=\"search-result\"\n :statusoid=\"status\"\n :no-heading=\"false\"\n />\n <button\n v-if=\"!loading && loaded && lastStatusFetchCount > 0\"\n class=\"more-statuses-button button-unstyled -link -fullwidth\"\n @click.prevent=\"search(searchTerm, 'statuses')\"\n >\n <div class=\"new-status-notification text-center\">\n {{ $t('search.load_more') }}\n </div>\n </button>\n <div\n v-else-if=\"loading && statusesOffset > 0\"\n class=\"text-center loading-icon\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n <div\n v-if=\"(visibleStatuses.length === 0 || lastStatusFetchCount === 0) && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>\n {{ visibleStatuses.length === 0 ? $t('search.no_results') : $t('search.no_more_results') }}\n </h4>\n </div>\n </div>\n <div v-else-if=\"currenResultTab === 'people'\">\n <div\n v-if=\"users.length === 0 && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>{{ $t('search.no_results') }}</h4>\n </div>\n <FollowCard\n v-for=\"user in users\"\n :key=\"user.id\"\n :user=\"user\"\n class=\"list-item search-result\"\n />\n </div>\n <div v-else-if=\"currenResultTab === 'hashtags'\">\n <div\n v-if=\"hashtags.length === 0 && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>{{ $t('search.no_results') }}</h4>\n </div>\n <div\n v-for=\"hashtag in hashtags\"\n :key=\"hashtag.url\"\n class=\"status trend search-result\"\n >\n <div class=\"hashtag\">\n <router-link :to=\"{ name: 'tag-timeline', params: { tag: hashtag.name } }\">\n #{{ hashtag.name }}\n </router-link>\n <div v-if=\"lastHistoryRecord(hashtag)\">\n <span v-if=\"lastHistoryRecord(hashtag).accounts == 1\">\n {{ $t('search.person_talking', { count: lastHistoryRecord(hashtag).accounts }) }}\n </span>\n <span v-else>\n {{ $t('search.people_talking', { count: lastHistoryRecord(hashtag).accounts }) }}\n </span>\n </div>\n </div>\n <div\n v-if=\"lastHistoryRecord(hashtag)\"\n class=\"count\"\n >\n {{ lastHistoryRecord(hashtag).uses }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"search-result-footer text-center panel-footer faint\" />\n </div>\n</template>\n\n<script src=\"./search.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.search-result-heading {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n padding: 0.75rem;\n text-align: center;\n}\n\n@media all and (max-width: 800px) {\n .search-nav-heading {\n .tab-switcher .tabs .tab-wrapper {\n display: block;\n justify-content: center;\n flex: 1 1 auto;\n text-align: center;\n }\n }\n}\n\n.search-result {\n box-sizing: border-box;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.search-result-footer {\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n padding: 10px;\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n}\n\n.search-input-container {\n padding: 0.8rem;\n display: flex;\n justify-content: center;\n\n .search-input {\n width: 100%;\n line-height: 1.125rem;\n font-size: 1rem;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n\n .search-button {\n margin-left: 0.5em;\n }\n}\n\n.loading-icon {\n padding: 1em;\n}\n\n.trend {\n display: flex;\n align-items: center;\n\n .hashtag {\n flex: 1 1 auto;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .count {\n flex: 0 0 auto;\n width: 2rem;\n font-size: 1.5rem;\n line-height: 2.25rem;\n font-weight: 500;\n text-align: center;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n.more-statuses-button {\n height: 3.5em;\n line-height: 3.5em;\n}\n\n</style>\n","import FollowCard from '../follow_card/follow_card.vue'\nimport Conversation from '../conversation/conversation.vue'\nimport Status from '../status/status.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport map from 'lodash/map'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faSearch\n} from '@fortawesome/free-solid-svg-icons'\nimport { uniqBy } from 'lodash'\n\nlibrary.add(\n faCircleNotch,\n faSearch\n)\n\nconst Search = {\n components: {\n FollowCard,\n Conversation,\n Status,\n TabSwitcher\n },\n props: [\n 'query'\n ],\n data () {\n return {\n loaded: false,\n loading: false,\n searchTerm: this.query || '',\n userIds: [],\n statuses: [],\n hashtags: [],\n currenResultTab: 'statuses',\n\n statusesOffset: 0,\n lastStatusFetchCount: 0,\n lastQuery: ''\n }\n },\n computed: {\n users () {\n return this.userIds.map(userId => this.$store.getters.findUser(userId))\n },\n visibleStatuses () {\n const allStatusesObject = this.$store.state.statuses.allStatusesObject\n\n return this.statuses.filter(status =>\n allStatusesObject[status.id] && !allStatusesObject[status.id].deleted\n )\n }\n },\n mounted () {\n this.search(this.query)\n },\n watch: {\n query (newValue) {\n this.searchTerm = newValue\n this.search(newValue)\n }\n },\n methods: {\n newQuery (query) {\n this.$router.push({ name: 'search', query: { query } })\n this.$refs.searchInput.focus()\n },\n search (query, searchType = null) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.$refs.searchInput.blur()\n if (this.lastQuery !== query) {\n this.userIds = []\n this.hashtags = []\n this.statuses = []\n\n this.statusesOffset = 0\n this.lastStatusFetchCount = 0\n }\n\n this.$store.dispatch('search', { q: query, resolve: true, offset: this.statusesOffset, type: searchType })\n .then(data => {\n this.loading = false\n\n const oldLength = this.statuses.length\n\n // Always append to old results. If new results are empty, this doesn't change anything\n this.userIds = this.userIds.concat(map(data.accounts, 'id'))\n this.statuses = uniqBy(this.statuses.concat(data.statuses), 'id')\n this.hashtags = this.hashtags.concat(data.hashtags)\n\n this.currenResultTab = this.getActiveTab()\n this.loaded = true\n\n // Offset from whatever we already have\n this.statusesOffset = this.statuses.length\n // Because the amount of new statuses can actually be zero, compare to old lenght instead\n this.lastStatusFetchCount = this.statuses.length - oldLength\n this.lastQuery = query\n })\n },\n resultCount (tabName) {\n const length = this[tabName].length\n return length === 0 ? '' : ` (${length})`\n },\n onResultTabSwitch (key) {\n this.currenResultTab = key\n },\n getActiveTab () {\n if (this.visibleStatuses.length > 0) {\n return 'statuses'\n } else if (this.users.length > 0) {\n return 'people'\n } else if (this.hashtags.length > 0) {\n return 'hashtags'\n }\n\n return 'statuses'\n },\n lastHistoryRecord (hashtag) {\n return hashtag.history && hashtag.history[0]\n }\n }\n}\n\nexport default Search\n","import { render } from \"./search.vue?vue&type=template&id=29ec17bc\"\nimport script from \"./search.js?vue&type=script&lang=js\"\nexport * from \"./search.js?vue&type=script&lang=js\"\n\nimport \"./search.vue?vue&type=style&index=0&id=29ec17bc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('registration.registration') }}\n </div>\n <div class=\"panel-body\">\n <form\n class=\"registration-form\"\n @submit.prevent=\"submit(user)\"\n >\n <div class=\"container\">\n <div class=\"text-fields\">\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.username.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-username\"\n >{{ $t('login.username') }}</label>\n <input\n id=\"sign-up-username\"\n v-model.trim=\"v$.user.username.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :aria-required=\"true\"\n :placeholder=\"$t('registration.username_placeholder')\"\n >\n </div>\n <div\n v-if=\"v$.user.username.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.username.required\">\n <span>{{ $t('registration.validations.username_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.fullname.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-fullname\"\n >{{ $t('registration.fullname') }}</label>\n <input\n id=\"sign-up-fullname\"\n v-model.trim=\"v$.user.fullname.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :aria-required=\"true\"\n :placeholder=\"$t('registration.fullname_placeholder')\"\n >\n </div>\n <div\n v-if=\"v$.user.fullname.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.fullname.required\">\n <span>{{ $t('registration.validations.fullname_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.email.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"email\"\n >{{ accountActivationRequired ? $t('registration.email') : $t('registration.email_optional') }}</label>\n <input\n id=\"email\"\n v-model=\"v$.user.email.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"email\"\n :aria-required=\"accountActivationRequired\"\n >\n </div>\n <div\n v-if=\"v$.user.email.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.email.required\">\n <span>{{ $t('registration.validations.email_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\">\n <label\n class=\"form--label\"\n for=\"bio\"\n >{{ $t('registration.bio_optional') }}</label>\n <textarea\n id=\"bio\"\n v-model=\"user.bio\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :placeholder=\"bioPlaceholder\"\n />\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.password.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-password\"\n >{{ $t('login.password') }}</label>\n <input\n id=\"sign-up-password\"\n v-model=\"user.password\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"password\"\n :aria-required=\"true\"\n >\n </div>\n <div\n v-if=\"v$.user.password.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.password.required\">\n <span>{{ $t('registration.validations.password_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.confirm.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-password-confirmation\"\n >{{ $t('registration.password_confirm') }}</label>\n <input\n id=\"sign-up-password-confirmation\"\n v-model=\"user.confirm\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"password\"\n :aria-required=\"true\"\n >\n </div>\n <div\n v-if=\"v$.user.confirm.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"v$.user.confirm.required.$invalid\">\n <span>{{ $t('registration.validations.password_confirmation_required') }}</span>\n </li>\n <li v-if=\"v$.user.confirm.sameAs.$invalid\">\n <span>{{ $t('registration.validations.password_confirmation_match') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.birthday.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-birthday\"\n >\n {{ birthdayRequired ? $t('registration.birthday') : $t('registration.birthday_optional') }}\n </label>\n <input\n id=\"sign-up-birthday\"\n v-model=\"user.birthday\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"date\"\n :max=\"birthdayRequired ? birthdayMinAttr : undefined\"\n :aria-required=\"birthdayRequired\"\n >\n </div>\n <div\n v-if=\"v$.user.birthday.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"v$.user.birthday.required.$invalid\">\n <span>{{ $t('registration.validations.birthday_required') }}</span>\n </li>\n <li v-if=\"v$.user.birthday.maxValue.$invalid\">\n <span>{{ $tc('registration.validations.birthday_min_age', { date: birthdayMinFormatted }) }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.language.$error }\"\n >\n <interface-language-switcher\n for=\"email-language\"\n :prompt-text=\"$t('registration.email_language')\"\n :language=\"v$.user.language.$model\"\n :set-language=\"val => v$.user.language.$model = val\"\n @click.stop.prevent\n />\n </div>\n\n <div\n v-if=\"accountApprovalRequired\"\n class=\"form-group\"\n >\n <label\n class=\"form--label\"\n for=\"reason\"\n >{{ $t('registration.reason') }}</label>\n <textarea\n id=\"reason\"\n v-model=\"user.reason\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :placeholder=\"reasonPlaceholder\"\n />\n </div>\n\n <div\n v-if=\"captcha.type != 'none'\"\n id=\"captcha-group\"\n class=\"form-group\"\n >\n <label\n class=\"form--label\"\n for=\"captcha-label\"\n >{{ $t('registration.captcha') }}</label>\n\n <template v-if=\"['kocaptcha', 'native'].includes(captcha.type)\">\n <img\n :src=\"captcha.url\"\n @click=\"setCaptcha\"\n >\n\n <sub>{{ $t('registration.new_captcha') }}</sub>\n\n <input\n id=\"captcha-answer\"\n v-model=\"captcha.solution\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"text\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n >\n </template>\n </div>\n\n <div\n v-if=\"token\"\n class=\"form-group\"\n >\n <label for=\"token\">{{ $t('registration.token') }}</label>\n <input\n id=\"token\"\n v-model=\"token\"\n disabled=\"true\"\n class=\"form-control\"\n type=\"text\"\n >\n </div>\n <div class=\"form-group\">\n <button\n :disabled=\"isPending\"\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('registration.register') }}\n </button>\n </div>\n </div>\n\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"terms-of-service\"\n v-html=\"termsOfService\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n <div\n v-if=\"serverValidationErrors.length\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n <span\n v-for=\"error in serverValidationErrors\"\n :key=\"error\"\n >{{ error }}</span>\n </div>\n </div>\n </form>\n </div>\n </div>\n</template>\n\n<script src=\"./registration.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n$validations-cRed: #f04124;\n\n.registration-form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex-direction: row;\n\n > * {\n min-width: 0;\n }\n }\n\n .terms-of-service {\n flex: 0 1 50%;\n margin: 0.8em;\n }\n\n .text-fields {\n margin-top: 0.6em;\n flex: 1 0;\n display: flex;\n flex-direction: column;\n }\n\n textarea {\n min-height: 100px;\n resize: vertical;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0;\n line-height: 2;\n margin-bottom: 1em;\n }\n\n .form-group--error {\n animation-name: shakeError;\n animation-duration: 0.6s;\n animation-timing-function: ease-in-out;\n }\n\n .form-group--error .form--label {\n color: $validations-cRed;\n color: var(--cRed, $validations-cRed);\n }\n\n .form-error {\n margin-top: -0.7em;\n text-align: left;\n\n span {\n font-size: 0.85em;\n }\n }\n\n .form-error ul {\n list-style: none;\n padding: 0 0 0 5px;\n margin-top: 0;\n\n li::before {\n content: \"• \";\n }\n }\n\n form textarea {\n line-height: 16px;\n resize: vertical;\n }\n\n .captcha {\n max-width: 350px;\n margin-bottom: 0.4em;\n }\n\n .btn {\n margin-top: 0.6em;\n height: 2em;\n }\n\n .error {\n text-align: center;\n }\n}\n\n@media all and (max-width: 800px) {\n .registration-form .container {\n flex-direction: column-reverse;\n }\n}\n</style>\n","import useVuelidate from '@vuelidate/core'\nimport { required, requiredIf, sameAs } from '@vuelidate/validators'\nimport { mapActions, mapState } from 'vuex'\nimport InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue'\nimport localeService from '../../services/locale/locale.service.js'\nimport { DAY } from 'src/services/date_utils/date_utils.js'\n\nconst registration = {\n setup () { return { v$: useVuelidate() } },\n data: () => ({\n user: {\n email: '',\n fullname: '',\n username: '',\n password: '',\n confirm: '',\n birthday: '',\n reason: '',\n language: ['']\n },\n captcha: {}\n }),\n components: {\n InterfaceLanguageSwitcher\n },\n validations () {\n return {\n user: {\n email: { required: requiredIf(() => this.accountActivationRequired) },\n username: { required },\n fullname: { required },\n password: { required },\n confirm: {\n required,\n sameAs: sameAs(this.user.password)\n },\n birthday: {\n required: requiredIf(() => this.birthdayRequired),\n maxValue: value => {\n return !this.birthdayRequired || new Date(value).getTime() <= this.birthdayMin.getTime()\n }\n },\n reason: { required: requiredIf(() => this.accountApprovalRequired) },\n language: {}\n }\n }\n },\n created () {\n if ((!this.registrationOpen && !this.token) || this.signedIn) {\n this.$router.push({ name: 'root' })\n }\n\n this.setCaptcha()\n },\n computed: {\n token () { return this.$route.params.token },\n bioPlaceholder () {\n return this.replaceNewlines(this.$t('registration.bio_placeholder'))\n },\n reasonPlaceholder () {\n return this.replaceNewlines(this.$t('registration.reason_placeholder'))\n },\n birthdayMin () {\n const minAge = this.birthdayMinAge\n const today = new Date()\n today.setUTCMilliseconds(0)\n today.setUTCSeconds(0)\n today.setUTCMinutes(0)\n today.setUTCHours(0)\n const minDate = new Date()\n minDate.setTime(today.getTime() - minAge * DAY)\n return minDate\n },\n birthdayMinAttr () {\n return this.birthdayMin.toJSON().replace(/T.+$/, '')\n },\n birthdayMinFormatted () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return this.user.birthday && new Date(Date.parse(this.birthdayMin)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })\n },\n ...mapState({\n registrationOpen: (state) => state.instance.registrationOpen,\n signedIn: (state) => !!state.users.currentUser,\n isPending: (state) => state.users.signUpPending,\n serverValidationErrors: (state) => state.users.signUpErrors,\n termsOfService: (state) => state.instance.tos,\n accountActivationRequired: (state) => state.instance.accountActivationRequired,\n accountApprovalRequired: (state) => state.instance.accountApprovalRequired,\n birthdayRequired: (state) => state.instance.birthdayRequired,\n birthdayMinAge: (state) => state.instance.birthdayMinAge\n })\n },\n methods: {\n ...mapActions(['signUp', 'getCaptcha']),\n async submit () {\n this.user.nickname = this.user.username\n this.user.token = this.token\n\n this.user.captcha_solution = this.captcha.solution\n this.user.captcha_token = this.captcha.token\n this.user.captcha_answer_data = this.captcha.answer_data\n if (this.user.language) {\n this.user.language = localeService.internalToBackendLocaleMulti(this.user.language.filter(k => k))\n }\n\n this.v$.$touch()\n\n if (!this.v$.$invalid) {\n try {\n await this.signUp(this.user)\n this.$router.push({ name: 'friends' })\n } catch (error) {\n console.warn('Registration failed: ', error)\n this.setCaptcha()\n }\n }\n },\n setCaptcha () {\n this.getCaptcha().then(cpt => { this.captcha = cpt })\n },\n replaceNewlines (str) {\n return str.replace(/\\s*\\n\\s*/g, ' \\n')\n }\n }\n}\n\nexport default registration\n","import { render } from \"./registration.vue?vue&type=template&id=f9488ca2\"\nimport script from \"./registration.js?vue&type=script&lang=js\"\nexport * from \"./registration.js?vue&type=script&lang=js\"\n\nimport \"./registration.vue?vue&type=style&index=0&id=f9488ca2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('password_reset.password_reset') }}\n </div>\n <div class=\"panel-body\">\n <form\n class=\"password-reset-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"container\">\n <div v-if=\"!mailerEnabled\">\n <p v-if=\"passwordResetRequested\">\n {{ $t('password_reset.password_reset_required_but_mailer_is_disabled') }}\n </p>\n <p v-else>\n {{ $t('password_reset.password_reset_disabled') }}\n </p>\n </div>\n <div v-else-if=\"success || throttled\">\n <p v-if=\"success\">\n {{ $t('password_reset.check_email') }}\n </p>\n <div class=\"form-group text-center\">\n <router-link :to=\"{name: 'root'}\">\n {{ $t('password_reset.return_home') }}\n </router-link>\n </div>\n </div>\n <div v-else>\n <p\n v-if=\"passwordResetRequested\"\n class=\"password-reset-required error\"\n >\n {{ $t('password_reset.password_reset_required') }}\n </p>\n <p>\n {{ $t('password_reset.instruction') }}\n </p>\n <div class=\"form-group\">\n <input\n ref=\"email\"\n v-model=\"user.email\"\n :disabled=\"isPending\"\n :placeholder=\"$t('password_reset.placeholder')\"\n class=\"form-control\"\n type=\"input\"\n >\n </div>\n <div class=\"form-group\">\n <button\n :disabled=\"isPending\"\n type=\"submit\"\n class=\"btn button-default btn-block\"\n >\n {{ $t('settings.save') }}\n </button>\n </div>\n </div>\n <p\n v-if=\"error\"\n class=\"alert error notice-dismissible\"\n >\n <span>{{ error }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n @click.prevent=\"dismissError()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n </div>\n </form>\n </div>\n </div>\n</template>\n\n<script src=\"./password_reset.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.password-reset-form {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex: 1 0;\n flex-direction: column;\n margin-top: 0.6em;\n max-width: 18rem;\n\n > * {\n min-width: 0;\n }\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 1em;\n padding: 0.3em 0;\n line-height: 1.85em;\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n\n .alert {\n padding: 0.5em;\n margin: 0.3em 0 1em;\n }\n\n .password-reset-required {\n background-color: var(--alertError, $fallback--alertError);\n padding: 10px 0;\n }\n\n .notice-dismissible {\n padding-right: 2rem;\n }\n\n .dismiss {\n cursor: pointer;\n }\n}\n\n</style>\n","import { mapState } from 'vuex'\nimport passwordResetApi from '../../services/new_api/password_reset.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst passwordReset = {\n data: () => ({\n user: {\n email: ''\n },\n isPending: false,\n success: false,\n throttled: false,\n error: null\n }),\n computed: {\n ...mapState({\n signedIn: (state) => !!state.users.currentUser,\n instance: state => state.instance\n }),\n mailerEnabled () {\n return this.instance.mailerEnabled\n }\n },\n created () {\n if (this.signedIn) {\n this.$router.push({ name: 'root' })\n }\n },\n props: {\n passwordResetRequested: {\n default: false,\n type: Boolean\n }\n },\n methods: {\n dismissError () {\n this.error = null\n },\n submit () {\n this.isPending = true\n const email = this.user.email\n const instance = this.instance.server\n\n passwordResetApi({ instance, email }).then(({ status }) => {\n this.isPending = false\n this.user.email = ''\n\n if (status === 204) {\n this.success = true\n this.error = null\n } else if (status === 429) {\n this.throttled = true\n this.error = this.$t('password_reset.too_many_requests')\n }\n }).catch(() => {\n this.isPending = false\n this.user.email = ''\n this.error = this.$t('general.generic_error')\n })\n }\n }\n}\n\nexport default passwordReset\n","import { reduce } from 'lodash'\n\nconst MASTODON_PASSWORD_RESET_URL = '/auth/password'\n\nconst resetPassword = ({ instance, email }) => {\n const params = { email }\n const query = reduce(params, (acc, v, k) => {\n const encoded = `${k}=${encodeURIComponent(v)}`\n return `${acc}&${encoded}`\n }, '')\n const url = `${instance}${MASTODON_PASSWORD_RESET_URL}?${query}`\n\n return window.fetch(url, {\n method: 'POST'\n })\n}\n\nexport default resetPassword\n","import { render } from \"./password_reset.vue?vue&type=template&id=0a88ea38\"\nimport script from \"./password_reset.js?vue&type=script&lang=js\"\nexport * from \"./password_reset.js?vue&type=script&lang=js\"\n\nimport \"./password_reset.vue?vue&type=style&index=0&id=0a88ea38&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('nav.friend_requests') }}\n </div>\n </div>\n <div class=\"panel-body\">\n <FollowRequestCard\n v-for=\"request in requests\"\n :key=\"request.id\"\n :user=\"request\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./follow_requests.js\"></script>\n","<template>\n <basic-user-card :user=\"user\">\n <div class=\"follow-request-card-content-container\">\n <button\n class=\"btn button-default\"\n @click=\"approveUser\"\n >\n {{ $t('user_card.approve') }}\n </button>\n <button\n class=\"btn button-default\"\n @click=\"denyUser\"\n >\n {{ $t('user_card.deny') }}\n </button>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingApproveConfirmDialog\"\n :title=\"$t('user_card.approve_confirm_title')\"\n :confirm-text=\"$t('user_card.approve_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.approve_confirm_cancel_button')\"\n @accepted=\"doApprove\"\n @cancelled=\"hideApproveConfirmDialog\"\n >\n {{ $t('user_card.approve_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n <confirm-modal\n v-if=\"showingDenyConfirmDialog\"\n :title=\"$t('user_card.deny_confirm_title')\"\n :confirm-text=\"$t('user_card.deny_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.deny_confirm_cancel_button')\"\n @accepted=\"doDeny\"\n @cancelled=\"hideDenyConfirmDialog\"\n >\n {{ $t('user_card.deny_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n </teleport>\n </basic-user-card>\n</template>\n\n<script src=\"./follow_request_card.js\"></script>\n\n<style lang=\"scss\">\n.follow-request-card-content-container {\n display: flex;\n flex-flow: row wrap;\n\n button {\n margin-top: 0.5em;\n margin-right: 0.5em;\n flex: 1 1;\n max-width: 12em;\n min-width: 8em;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n</style>\n","import BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { notificationsFromStore } from '../../services/notification_utils/notification_utils.js'\n\nconst FollowRequestCard = {\n props: ['user'],\n components: {\n BasicUserCard,\n ConfirmModal\n },\n data () {\n return {\n showingApproveConfirmDialog: false,\n showingDenyConfirmDialog: false\n }\n },\n methods: {\n findFollowRequestNotificationId () {\n const notif = notificationsFromStore(this.$store).find(\n (notif) => notif.from_profile.id === this.user.id && notif.type === 'follow_request'\n )\n return notif && notif.id\n },\n showApproveConfirmDialog () {\n this.showingApproveConfirmDialog = true\n },\n hideApproveConfirmDialog () {\n this.showingApproveConfirmDialog = false\n },\n showDenyConfirmDialog () {\n this.showingDenyConfirmDialog = true\n },\n hideDenyConfirmDialog () {\n this.showingDenyConfirmDialog = false\n },\n approveUser () {\n if (this.shouldConfirmApprove) {\n this.showApproveConfirmDialog()\n } else {\n this.doApprove()\n }\n },\n doApprove () {\n this.$store.state.api.backendInteractor.approveUser({ id: this.user.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n\n const notifId = this.findFollowRequestNotificationId()\n this.$store.dispatch('markSingleNotificationAsSeen', { id: notifId })\n this.$store.dispatch('updateNotification', {\n id: notifId,\n updater: notification => {\n notification.type = 'follow'\n }\n })\n this.hideApproveConfirmDialog()\n },\n denyUser () {\n if (this.shouldConfirmDeny) {\n this.showDenyConfirmDialog()\n } else {\n this.doDeny()\n }\n },\n doDeny () {\n const notifId = this.findFollowRequestNotificationId()\n this.$store.state.api.backendInteractor.denyUser({ id: this.user.id })\n .then(() => {\n this.$store.dispatch('dismissNotificationLocal', { id: notifId })\n this.$store.dispatch('removeFollowRequest', this.user)\n })\n this.hideDenyConfirmDialog()\n }\n },\n computed: {\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n shouldConfirmApprove () {\n return this.mergedConfig.modalOnApproveFollow\n },\n shouldConfirmDeny () {\n return this.mergedConfig.modalOnDenyFollow\n }\n }\n}\n\nexport default FollowRequestCard\n","import FollowRequestCard from '../follow_request_card/follow_request_card.vue'\n\nconst FollowRequests = {\n components: {\n FollowRequestCard\n },\n computed: {\n requests () {\n return this.$store.state.api.followRequests\n }\n }\n}\n\nexport default FollowRequests\n","import { render } from \"./follow_request_card.vue?vue&type=template&id=3bb26ea8\"\nimport script from \"./follow_request_card.js?vue&type=script&lang=js\"\nexport * from \"./follow_request_card.js?vue&type=script&lang=js\"\n\nimport \"./follow_request_card.vue?vue&type=style&index=0&id=3bb26ea8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./follow_requests.vue?vue&type=template&id=62e19784\"\nimport script from \"./follow_requests.js?vue&type=script&lang=js\"\nexport * from \"./follow_requests.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import oauth from '../../services/new_api/oauth.js'\n\nconst oac = {\n props: ['code'],\n mounted () {\n if (this.code) {\n const { clientId, clientSecret } = this.$store.state.oauth\n\n oauth.getToken({\n clientId,\n clientSecret,\n instance: this.$store.state.instance.server,\n code: this.code\n }).then((result) => {\n this.$store.commit('setToken', result.access_token)\n this.$store.dispatch('loginUser', result.access_token)\n this.$router.push({ name: 'friends' })\n })\n }\n }\n}\n\nexport default oac\n","import { render } from \"./oauth_callback.vue?vue&type=template&id=f514124c\"\nimport script from \"./oauth_callback.js?vue&type=script&lang=js\"\nexport * from \"./oauth_callback.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <h1>...</h1>\n</template>\n\n<script src=\"./oauth_callback.js\"></script>\n","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('who_to_follow.who_to_follow') }}\n </div>\n <div class=\"panel-body\">\n <FollowCard\n v-for=\"user in users\"\n :key=\"user.id\"\n :user=\"user\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./who_to_follow.js\"></script>\n","import apiService from '../../services/api/api.service.js'\nimport FollowCard from '../follow_card/follow_card.vue'\n\nconst WhoToFollow = {\n components: {\n FollowCard\n },\n data () {\n return {\n users: []\n }\n },\n mounted () {\n this.getWhoToFollow()\n },\n methods: {\n showWhoToFollow (reply) {\n reply.forEach((i, index) => {\n this.$store.state.api.backendInteractor.fetchUser({ id: i.acct })\n .then((externalUser) => {\n if (!externalUser.error) {\n this.$store.commit('addNewUsers', [externalUser])\n this.users.push(externalUser)\n }\n })\n })\n },\n getWhoToFollow () {\n const credentials = this.$store.state.users.currentUser.credentials\n if (credentials) {\n apiService.suggestions({ credentials })\n .then((reply) => {\n this.showWhoToFollow(reply)\n })\n }\n }\n }\n}\n\nexport default WhoToFollow\n","import { render } from \"./who_to_follow.vue?vue&type=template&id=1d38a2c8\"\nimport script from \"./who_to_follow.js?vue&type=script&lang=js\"\nexport * from \"./who_to_follow.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"column-inner\">\n <instance-specific-panel v-if=\"showInstanceSpecificPanel\" />\n <staff-panel />\n <terms-of-service-panel />\n <MRFTransparencyPanel />\n <features-panel v-if=\"showFeaturesPanel\" />\n </div>\n</template>\n\n<script src=\"./about.js\"></script>\n","<template>\n <div>\n <div class=\"panel panel-default\">\n <div class=\"panel-body\">\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"tos-content\"\n v-html=\"content\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./terms_of_service_panel.js\"></script>\n\n<style lang=\"scss\">\n.tos-content {\n margin: 1em;\n}\n</style>\n","const TermsOfServicePanel = {\n computed: {\n content () {\n return this.$store.state.instance.tos\n }\n }\n}\n\nexport default TermsOfServicePanel\n","import { render } from \"./terms_of_service_panel.vue?vue&type=template&id=22763f84\"\nimport script from \"./terms_of_service_panel.js?vue&type=script&lang=js\"\nexport * from \"./terms_of_service_panel.js?vue&type=script&lang=js\"\n\nimport \"./terms_of_service_panel.vue?vue&type=style&index=0&id=22763f84&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"staff-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background\">\n <div class=\"title\">\n {{ $t(\"about.staff\") }}\n </div>\n </div>\n <div class=\"panel-body\">\n <div\n v-for=\"group in groupedStaffAccounts\"\n :key=\"group.role\"\n class=\"staff-group\"\n >\n <h4>{{ $t('general.role.' + group.role) }}</h4>\n <basic-user-card\n v-for=\"user in group.users\"\n :key=\"user.screen_name\"\n :user=\"user\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./staff_panel.js\"></script>\n\n<style lang=\"scss\">\n.staff-group {\n padding-left: 1em;\n padding-top: 1em;\n\n .basic-user-card {\n padding-left: 0;\n }\n}\n\n</style>\n","import map from 'lodash/map'\nimport groupBy from 'lodash/groupBy'\nimport { mapGetters, mapState } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\n\nconst StaffPanel = {\n created () {\n const nicknames = this.$store.state.instance.staffAccounts\n nicknames.forEach(nickname => this.$store.dispatch('fetchUserIfMissing', nickname))\n },\n components: {\n BasicUserCard\n },\n computed: {\n groupedStaffAccounts () {\n const staffAccounts = map(this.staffAccounts, this.findUserByName).filter(_ => _)\n const groupedStaffAccounts = groupBy(staffAccounts, 'role')\n\n return [\n { role: 'admin', users: groupedStaffAccounts.admin },\n { role: 'moderator', users: groupedStaffAccounts.moderator }\n ].filter(group => group.users)\n },\n ...mapGetters([\n 'findUserByName'\n ]),\n ...mapState({\n staffAccounts: state => state.instance.staffAccounts\n })\n }\n}\n\nexport default StaffPanel\n","import { render } from \"./staff_panel.vue?vue&type=template&id=56c37220\"\nimport script from \"./staff_panel.js?vue&type=script&lang=js\"\nexport * from \"./staff_panel.js?vue&type=script&lang=js\"\n\nimport \"./staff_panel.vue?vue&type=style&index=0&id=56c37220&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"federationPolicy\"\n class=\"mrf-transparency-panel\"\n >\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background\">\n <div class=\"title\">\n {{ $t(\"about.mrf.federation\") }}\n </div>\n </div>\n <div class=\"panel-body\">\n <div class=\"mrf-section\">\n <h2>{{ $t(\"about.mrf.mrf_policies\") }}</h2>\n <p>{{ $t(\"about.mrf.mrf_policies_desc\") }}</p>\n\n <ul>\n <li\n v-for=\"policy in mrfPolicies\"\n :key=\"policy\"\n v-text=\"policy\"\n />\n </ul>\n\n <h2 v-if=\"hasInstanceSpecificPolicies\">\n {{ $t(\"about.mrf.simple.simple_policies\") }}\n </h2>\n\n <div v-if=\"acceptInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.accept\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.accept_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in acceptInstances\"\n :key=\"entry.instance + '_accept'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"rejectInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.reject\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.reject_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in rejectInstances\"\n :key=\"entry.instance + '_reject'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"quarantineInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.quarantine\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.quarantine_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in quarantineInstances\"\n :key=\"entry.instance + '_quarantine'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"ftlRemovalInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.ftl_removal\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.ftl_removal_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in ftlRemovalInstances\"\n :key=\"entry.instance + '_ftl_removal'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"mediaNsfwInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.media_nsfw\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.media_nsfw_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in mediaNsfwInstances\"\n :key=\"entry.instance + '_media_nsfw'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"mediaRemovalInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.media_removal\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.media_removal_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in mediaRemovalInstances\"\n :key=\"entry.instance + '_media_removal'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <h2 v-if=\"hasKeywordPolicies\">\n {{ $t(\"about.mrf.keyword.keyword_policies\") }}\n </h2>\n\n <div v-if=\"keywordsFtlRemoval.length\">\n <h4>{{ $t(\"about.mrf.keyword.ftl_removal\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsFtlRemoval\"\n :key=\"keyword\"\n v-text=\"keyword\"\n />\n </ul>\n </div>\n\n <div v-if=\"keywordsReject.length\">\n <h4>{{ $t(\"about.mrf.keyword.reject\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsReject\"\n :key=\"keyword\"\n v-text=\"keyword\"\n />\n </ul>\n </div>\n\n <div v-if=\"keywordsReplace.length\">\n <h4>{{ $t(\"about.mrf.keyword.replace\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsReplace\"\n :key=\"keyword\"\n >\n {{ keyword.pattern }}\n {{ $t(\"about.mrf.keyword.is_replaced_by\") }}\n {{ keyword.replacement }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./mrf_transparency_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./mrf_transparency_panel\";\n</style>\n","import { mapState } from 'vuex'\nimport { get } from 'lodash'\n\n/**\n * This is for backwards compatibility. We originally didn't recieve\n * extra info like a reason why an instance was rejected/quarantined/etc.\n * Because we didn't want to break backwards compatibility it was decided\n * to add an extra \"info\" key.\n */\nconst toInstanceReasonObject = (instances, info, key) => {\n return instances.map(instance => {\n if (info[key] && info[key][instance] && info[key][instance].reason) {\n return { instance, reason: info[key][instance].reason }\n }\n return { instance, reason: '' }\n })\n}\n\nconst MRFTransparencyPanel = {\n computed: {\n ...mapState({\n federationPolicy: state => get(state, 'instance.federationPolicy'),\n mrfPolicies: state => get(state, 'instance.federationPolicy.mrf_policies', []),\n quarantineInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.quarantined_instances', []),\n get(state, 'instance.federationPolicy.quarantined_instances_info', []),\n 'quarantined_instances'\n ),\n acceptInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.accept', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'accept'\n ),\n rejectInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.reject', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'reject'\n ),\n ftlRemovalInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.federated_timeline_removal', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'federated_timeline_removal'\n ),\n mediaNsfwInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.media_nsfw', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'media_nsfw'\n ),\n mediaRemovalInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.media_removal', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'media_removal'\n ),\n keywordsFtlRemoval: state => get(state, 'instance.federationPolicy.mrf_keyword.federated_timeline_removal', []),\n keywordsReject: state => get(state, 'instance.federationPolicy.mrf_keyword.reject', []),\n keywordsReplace: state => get(state, 'instance.federationPolicy.mrf_keyword.replace', [])\n }),\n hasInstanceSpecificPolicies () {\n return this.quarantineInstances.length ||\n this.acceptInstances.length ||\n this.rejectInstances.length ||\n this.ftlRemovalInstances.length ||\n this.mediaNsfwInstances.length ||\n this.mediaRemovalInstances.length\n },\n hasKeywordPolicies () {\n return this.keywordsFtlRemoval.length ||\n this.keywordsReject.length ||\n this.keywordsReplace.length\n }\n }\n}\n\nexport default MRFTransparencyPanel\n","import InstanceSpecificPanel from '../instance_specific_panel/instance_specific_panel.vue'\nimport FeaturesPanel from '../features_panel/features_panel.vue'\nimport TermsOfServicePanel from '../terms_of_service_panel/terms_of_service_panel.vue'\nimport StaffPanel from '../staff_panel/staff_panel.vue'\nimport MRFTransparencyPanel from '../mrf_transparency_panel/mrf_transparency_panel.vue'\n\nconst About = {\n components: {\n InstanceSpecificPanel,\n FeaturesPanel,\n TermsOfServicePanel,\n StaffPanel,\n MRFTransparencyPanel\n },\n computed: {\n showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },\n showInstanceSpecificPanel () {\n return this.$store.state.instance.showInstanceSpecificPanel &&\n !this.$store.getters.mergedConfig.hideISP &&\n this.$store.state.instance.instanceSpecificPanelContent\n }\n }\n}\n\nexport default About\n","import { render } from \"./mrf_transparency_panel.vue?vue&type=template&id=67a05c5c\"\nimport script from \"./mrf_transparency_panel.js?vue&type=script&lang=js\"\nexport * from \"./mrf_transparency_panel.js?vue&type=script&lang=js\"\n\nimport \"./mrf_transparency_panel.vue?vue&type=style&index=0&id=67a05c5c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./about.vue?vue&type=template&id=4d996902\"\nimport script from \"./about.js?vue&type=script&lang=js\"\nexport * from \"./about.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('remote_user_resolver.remote_user_resolver') }}\n </div>\n <div class=\"panel-body\">\n <p>\n {{ $t('remote_user_resolver.searching_for') }} @{{ $route.params.username }}@{{ $route.params.hostname }}\n </p>\n <p v-if=\"error\">\n {{ $t('remote_user_resolver.error') }}\n </p>\n </div>\n </div>\n</template>\n\n<script src=\"./remote_user_resolver.js\"></script>\n","const RemoteUserResolver = {\n data: () => ({\n error: false\n }),\n mounted () {\n this.redirect()\n },\n methods: {\n redirect () {\n const acct = this.$route.params.username + '@' + this.$route.params.hostname\n this.$store.state.api.backendInteractor.fetchUser({ id: acct })\n .then((externalUser) => {\n if (externalUser.error) {\n this.error = true\n } else {\n this.$store.commit('addNewUsers', [externalUser])\n const id = externalUser.id\n this.$router.replace({\n name: 'external-user-profile',\n params: { id }\n })\n }\n })\n .catch(() => {\n this.error = true\n })\n }\n }\n}\n\nexport default RemoteUserResolver\n","import { render } from \"./remote_user_resolver.vue?vue&type=template&id=147deeb8\"\nimport script from \"./remote_user_resolver.js?vue&type=script&lang=js\"\nexport * from \"./remote_user_resolver.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"Lists panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('lists.lists') }}\n </div>\n <router-link\n :to=\"{ name: 'lists-new' }\"\n class=\"button-default btn new-list-button\"\n >\n {{ $t(\"lists.new\") }}\n </router-link>\n </div>\n <div class=\"panel-body\">\n <ListsCard\n v-for=\"list in lists.slice().reverse()\"\n :key=\"list\"\n :list=\"list\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./lists.js\"></script>\n\n<style lang=\"scss\">\n.Lists {\n .new-list-button {\n padding: 0 0.5em;\n }\n}\n</style>\n","<template>\n <div class=\"list-card\">\n <router-link\n :to=\"{ name: 'lists-timeline', params: { id: list.id } }\"\n class=\"list-name\"\n >\n {{ list.title }}\n </router-link>\n <router-link\n :to=\"{ name: 'lists-edit', params: { id: list.id } }\"\n class=\"button-list-edit\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"ellipsis-h\"\n />\n </router-link>\n </div>\n</template>\n\n<script src=\"./lists_card.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.list-card {\n display: flex;\n}\n\n.list-name {\n flex-grow: 1;\n}\n\n.list-name,\n.button-list-edit {\n margin: 0;\n padding: 1em;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEllipsisH\n)\n\nconst ListsCard = {\n props: [\n 'list'\n ]\n}\n\nexport default ListsCard\n","import ListsCard from '../lists_card/lists_card.vue'\n\nconst Lists = {\n data () {\n return {\n isNew: false\n }\n },\n components: {\n ListsCard\n },\n computed: {\n lists () {\n return this.$store.state.lists.allLists\n }\n },\n methods: {\n cancelNewList () {\n this.isNew = false\n },\n newList () {\n this.isNew = true\n }\n }\n}\n\nexport default Lists\n","import { render } from \"./lists_card.vue?vue&type=template&id=cb7330aa\"\nimport script from \"./lists_card.js?vue&type=script&lang=js\"\nexport * from \"./lists_card.js?vue&type=script&lang=js\"\n\nimport \"./lists_card.vue?vue&type=style&index=0&id=cb7330aa&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./lists.vue?vue&type=template&id=273aca3d\"\nimport script from \"./lists.js?vue&type=script&lang=js\"\nexport * from \"./lists.js?vue&type=script&lang=js\"\n\nimport \"./lists.vue?vue&type=style&index=0&id=273aca3d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\nconst ListsTimeline = {\n data () {\n return {\n listId: null\n }\n },\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.list }\n },\n watch: {\n $route: function (route) {\n if (route.name === 'lists-timeline' && route.params.id !== this.listId) {\n this.listId = route.params.id\n this.$store.dispatch('stopFetchingTimeline', 'list')\n this.$store.commit('clearTimeline', { timeline: 'list' })\n this.$store.dispatch('fetchList', { listId: this.listId })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'list', listId: this.listId })\n }\n }\n },\n created () {\n this.listId = this.$route.params.id\n this.$store.dispatch('fetchList', { listId: this.listId })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'list', listId: this.listId })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'list')\n this.$store.commit('clearTimeline', { timeline: 'list' })\n }\n}\n\nexport default ListsTimeline\n","import { render } from \"./lists_timeline.vue?vue&type=template&id=464584d8\"\nimport script from \"./lists_timeline.js?vue&type=script&lang=js\"\nexport * from \"./lists_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n title=\"list.name\"\n :timeline=\"timeline\"\n :list-id=\"listId\"\n timeline-name=\"list\"\n />\n</template>\n\n<script src=\"./lists_timeline.js\"></script>\n","<template>\n <div class=\"panel-default panel ListEdit\">\n <div\n ref=\"header\"\n class=\"panel-heading list-edit-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"$router.back\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n <div class=\"title\">\n <i18n-t\n v-if=\"id\"\n keypath=\"lists.editing_list\"\n >\n <template #listTitle>\n {{ title }}\n </template>\n </i18n-t>\n <i18n-t\n v-else\n keypath=\"lists.creating_list\"\n />\n </div>\n </div>\n <div class=\"panel-body\">\n <div class=\"input-wrap\">\n <label for=\"list-edit-title\">{{ $t('lists.title') }}</label>\n {{ ' ' }}\n <input\n id=\"list-edit-title\"\n ref=\"title\"\n v-model=\"titleDraft\"\n >\n <button\n v-if=\"id\"\n class=\"btn button-default follow-button\"\n @click=\"updateListTitle\"\n >\n {{ $t('lists.update_title') }}\n </button>\n </div>\n <tab-switcher\n class=\"list-member-management\"\n :scrollable-tabs=\"true\"\n >\n <div\n v-if=\"id || addedUserIds.size > 0\"\n :label=\"$t('lists.manage_members')\"\n class=\"members-list\"\n >\n <div class=\"users-list\">\n <div\n v-for=\"user in membersUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <BasicUserCard\n :user=\"user\"\n >\n <button\n class=\"btn button-default follow-button\"\n @click=\"toggleRemoveMember(user)\"\n >\n {{ isRemoved(user) ? $t('general.undo') : $t('lists.remove_from_list') }}\n </button>\n </BasicUserCard>\n </div>\n </div>\n </div>\n\n <div\n class=\"search-list\"\n :label=\"$t('lists.add_members')\"\n >\n <ListsUserSearch\n @results=\"onSearchResults\"\n @loading=\"onSearchLoading\"\n @loadingDone=\"onSearchLoadingDone\"\n />\n <div\n v-if=\"searchLoading\"\n class=\"loading\"\n >\n <PanelLoading />\n </div>\n <div\n v-else\n class=\"users-list\"\n >\n <div\n v-for=\"user in searchUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <BasicUserCard\n :user=\"user\"\n >\n <span\n v-if=\"membersUserIds.includes(user.id)\"\n >\n {{ $t('lists.is_in_list') }}\n </span>\n <button\n v-if=\"!membersUserIds.includes(user.id)\"\n class=\"btn button-default follow-button\"\n @click=\"toggleAddFromSearch(user)\"\n >\n {{ isAdded(user) ? $t('general.undo') : $t('lists.add_to_list') }}\n </button>\n <button\n v-else\n class=\"btn button-default follow-button\"\n @click=\"toggleRemoveMember(user)\"\n >\n {{ isRemoved(user) ? $t('general.undo') : $t('lists.remove_from_list') }}\n </button>\n </BasicUserCard>\n </div>\n </div>\n </div>\n </tab-switcher>\n </div>\n <div class=\"panel-footer\">\n <span class=\"spacer\" />\n <button\n v-if=\"!id\"\n class=\"btn button-default footer-button\"\n @click=\"createList\"\n >\n {{ $t('lists.create') }}\n </button>\n <button\n v-else-if=\"!reallyDelete\"\n class=\"btn button-default footer-button\"\n @click=\"reallyDelete = true\"\n >\n {{ $t('lists.delete') }}\n </button>\n <template v-else>\n {{ $t('lists.really_delete') }}\n <button\n class=\"btn button-default footer-button\"\n @click=\"deleteList\"\n >\n {{ $t('general.yes') }}\n </button>\n <button\n class=\"btn button-default footer-button\"\n @click=\"reallyDelete = false\"\n >\n {{ $t('general.no') }}\n </button>\n </template>\n </div>\n </div>\n</template>\n\n<script src=\"./lists_edit.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ListEdit {\n --panel-body-padding: 0.5em;\n\n height: calc(100vh - var(--navbar-height));\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .list-edit-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .panel-body {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n }\n\n .list-member-management {\n flex: 1 0 auto;\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .users-list {\n padding-bottom: 0.7rem;\n overflow-y: auto;\n }\n\n & .search-list,\n & .members-list {\n overflow: hidden;\n flex-direction: column;\n min-height: 0;\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .btn {\n margin: 0 0.5em;\n }\n\n .panel-footer {\n grid-template-columns: minmax(10%, 1fr);\n\n .footer-button {\n min-width: 9em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"ListsUserSearch\">\n <div class=\"input-wrap\">\n <div class=\"input-search\">\n <FAIcon\n class=\"search-icon fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </div>\n <input\n ref=\"search\"\n v-model=\"query\"\n :placeholder=\"$t('lists.search')\"\n @input=\"onInput\"\n >\n </div>\n <div class=\"input-wrap\">\n <Checkbox\n v-model=\"followingOnly\"\n @change=\"onInput\"\n >\n {{ $t('lists.following_only') }}\n </Checkbox>\n </div>\n </div>\n</template>\n\n<script src=\"./lists_user_search.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ListsUserSearch {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n}\n\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\nimport { debounce } from 'lodash'\nimport Checkbox from '../checkbox/checkbox.vue'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst ListsUserSearch = {\n components: {\n Checkbox\n },\n emits: ['loading', 'loadingDone', 'results'],\n data () {\n return {\n loading: false,\n query: '',\n followingOnly: true\n }\n },\n methods: {\n onInput: debounce(function () {\n this.search(this.query)\n }, 2000),\n search (query) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.$emit('loading')\n this.userIds = []\n this.$store.dispatch('search', { q: query, resolve: true, type: 'accounts', following: this.followingOnly })\n .then(data => {\n this.$emit('results', data.accounts.map(a => a.id))\n })\n .finally(() => {\n this.loading = false\n this.$emit('loadingDone')\n })\n }\n }\n}\n\nexport default ListsUserSearch\n","import { render } from \"./lists_user_search.vue?vue&type=template&id=f65a8ae4\"\nimport script from \"./lists_user_search.js?vue&type=script&lang=js\"\nexport * from \"./lists_user_search.js?vue&type=script&lang=js\"\n\nimport \"./lists_user_search.vue?vue&type=style&index=0&id=f65a8ae4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport ListsUserSearch from '../lists_user_search/lists_user_search.vue'\nimport PanelLoading from 'src/components/panel_loading/panel_loading.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst ListsNew = {\n components: {\n BasicUserCard,\n UserAvatar,\n ListsUserSearch,\n TabSwitcher,\n PanelLoading\n },\n data () {\n return {\n title: '',\n titleDraft: '',\n membersUserIds: [],\n removedUserIds: new Set([]), // users we added for members, to undo\n searchUserIds: [],\n addedUserIds: new Set([]), // users we added from search, to undo\n searchLoading: false,\n reallyDelete: false\n }\n },\n created () {\n if (!this.id) return\n this.$store.dispatch('fetchList', { listId: this.id })\n .then(() => {\n this.title = this.findListTitle(this.id)\n this.titleDraft = this.title\n })\n this.$store.dispatch('fetchListAccounts', { listId: this.id })\n .then(() => {\n this.membersUserIds = this.findListAccounts(this.id)\n this.membersUserIds.forEach(userId => {\n this.$store.dispatch('fetchUserIfMissing', userId)\n })\n })\n },\n computed: {\n id () {\n return this.$route.params.id\n },\n membersUsers () {\n return [...this.membersUserIds, ...this.addedUserIds]\n .map(userId => this.findUser(userId)).filter(user => user)\n },\n searchUsers () {\n return this.searchUserIds.map(userId => this.findUser(userId)).filter(user => user)\n },\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n ...mapGetters(['findUser', 'findListTitle', 'findListAccounts'])\n },\n methods: {\n onInput () {\n this.search(this.query)\n },\n toggleRemoveMember (user) {\n if (this.removedUserIds.has(user.id)) {\n this.id && this.addUser(user)\n this.removedUserIds.delete(user.id)\n } else {\n this.id && this.removeUser(user.id)\n this.removedUserIds.add(user.id)\n }\n },\n toggleAddFromSearch (user) {\n if (this.addedUserIds.has(user.id)) {\n this.id && this.removeUser(user.id)\n this.addedUserIds.delete(user.id)\n } else {\n this.id && this.addUser(user)\n this.addedUserIds.add(user.id)\n }\n },\n isRemoved (user) {\n return this.removedUserIds.has(user.id)\n },\n isAdded (user) {\n return this.addedUserIds.has(user.id)\n },\n addUser (user) {\n this.$store.dispatch('addListAccount', { accountId: user.id, listId: this.id })\n },\n removeUser (userId) {\n this.$store.dispatch('removeListAccount', { accountId: userId, listId: this.id })\n },\n onSearchLoading (results) {\n this.searchLoading = true\n },\n onSearchLoadingDone (results) {\n this.searchLoading = false\n },\n onSearchResults (results) {\n this.searchLoading = false\n this.searchUserIds = results\n },\n updateListTitle () {\n this.$store.dispatch('setList', { listId: this.id, title: this.titleDraft })\n .then(() => {\n this.title = this.findListTitle(this.id)\n })\n },\n createList () {\n this.$store.dispatch('createList', { title: this.titleDraft })\n .then((list) => {\n return this\n .$store\n .dispatch('setListAccounts', { listId: list.id, accountIds: [...this.addedUserIds] })\n .then(() => list.id)\n })\n .then((listId) => {\n this.$router.push({ name: 'lists-timeline', params: { id: listId } })\n })\n .catch((e) => {\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'lists.error',\n messageArgs: [e.message],\n level: 'error'\n })\n })\n },\n deleteList () {\n this.$store.dispatch('deleteList', { listId: this.id })\n this.$router.push({ name: 'lists' })\n }\n }\n}\n\nexport default ListsNew\n","import { render } from \"./lists_edit.vue?vue&type=template&id=722535f4\"\nimport script from \"./lists_edit.js?vue&type=script&lang=js\"\nexport * from \"./lists_edit.js?vue&type=script&lang=js\"\n\nimport \"./lists_edit.vue?vue&type=style&index=0&id=722535f4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default announcements-page\">\n <div class=\"panel-heading\">\n <span>\n {{ $t('announcements.page_header') }}\n </span>\n </div>\n <div class=\"panel-body\">\n <section\n v-if=\"canPostAnnouncement\"\n >\n <div class=\"post-form\">\n <div class=\"heading\">\n <h4>{{ $t('announcements.post_form_header') }}</h4>\n </div>\n <div class=\"body\">\n <announcement-editor\n :announcement=\"newAnnouncement\"\n :disabled=\"posting\"\n />\n </div>\n <div class=\"footer\">\n <button\n class=\"btn button-default post-button\"\n :disabled=\"posting\"\n @click.prevent=\"postAnnouncement\"\n >\n {{ $t('announcements.post_action') }}\n </button>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ $t('announcements.post_error', { error }) }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n :title=\"$t('announcements.close_error')\"\n />\n </button>\n </div>\n </div>\n </div>\n </section>\n <section\n v-for=\"announcement in announcements\"\n :key=\"announcement.id\"\n >\n <announcement\n :announcement=\"announcement\"\n />\n </section>\n </div>\n </div>\n</template>\n\n<script src=\"./announcements_page.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.announcements-page {\n .post-form {\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .post-button {\n min-width: 10em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"announcement\">\n <div class=\"heading\">\n <h4>{{ $t('announcements.title') }}</h4>\n </div>\n <div class=\"body\">\n <rich-content\n v-if=\"!editing\"\n :html=\"content\"\n :emoji=\"announcement.emojis\"\n :handle-links=\"true\"\n />\n <announcement-editor\n v-else\n :announcement=\"editedAnnouncement\"\n />\n </div>\n <div class=\"footer\">\n <div\n v-if=\"!editing\"\n class=\"times\"\n >\n <span v-if=\"publishedAt\">\n {{ $t('announcements.published_time_display', { time: publishedAt }) }}\n </span>\n <span v-if=\"startsAt\">\n {{ $t('announcements.start_time_display', { time: startsAt }) }}\n </span>\n <span v-if=\"endsAt\">\n {{ $t('announcements.end_time_display', { time: endsAt }) }}\n </span>\n </div>\n <div\n v-if=\"!editing\"\n class=\"actions\"\n >\n <button\n v-if=\"currentUser\"\n class=\"btn button-default\"\n :class=\"{ toggled: isRead }\"\n :disabled=\"inactive\"\n :title=\"inactive ? $t('announcements.inactive_message') : ''\"\n @click=\"markAsRead\"\n >\n {{ $t('announcements.mark_as_read_action') }}\n </button>\n <button\n v-if=\"canEditAnnouncement\"\n class=\"btn button-default\"\n @click=\"enterEditMode\"\n >\n {{ $t('announcements.edit_action') }}\n </button>\n <button\n v-if=\"canEditAnnouncement\"\n class=\"btn button-default\"\n @click=\"deleteAnnouncement\"\n >\n {{ $t('announcements.delete_action') }}\n </button>\n </div>\n <div\n v-else\n class=\"actions\"\n >\n <button\n class=\"btn button-default\"\n @click=\"submitEdit\"\n >\n {{ $t('announcements.submit_edit_action') }}\n </button>\n <button\n class=\"btn button-default\"\n @click=\"cancelEdit\"\n >\n {{ $t('announcements.cancel_edit_action') }}\n </button>\n <div\n v-if=\"editing && editError\"\n class=\"alert error\"\n >\n {{ $t('announcements.edit_error', { error }) }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n :title=\"$t('announcements.close_error')\"\n />\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./announcement.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.announcement {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .footer {\n display: flex;\n flex-direction: column;\n\n .times {\n display: flex;\n flex-direction: column;\n }\n }\n\n .footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n\n .btn {\n flex: 1;\n margin: 1em;\n max-width: 10em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"announcement-editor\">\n <textarea\n ref=\"textarea\"\n v-model=\"announcement.content\"\n class=\"post-textarea\"\n rows=\"1\"\n cols=\"1\"\n :placeholder=\"$t('announcements.post_placeholder')\"\n :disabled=\"disabled\"\n />\n <span class=\"announcement-metadata\">\n <label for=\"announcement-start-time\">{{ $t('announcements.start_time_prompt') }}</label>\n <input\n id=\"announcement-start-time\"\n v-model=\"announcement.startsAt\"\n :type=\"announcement.allDay ? 'date' : 'datetime-local'\"\n :disabled=\"disabled\"\n >\n </span>\n <span class=\"announcement-metadata\">\n <label for=\"announcement-end-time\">{{ $t('announcements.end_time_prompt') }}</label>\n <input\n id=\"announcement-end-time\"\n v-model=\"announcement.endsAt\"\n :type=\"announcement.allDay ? 'date' : 'datetime-local'\"\n :disabled=\"disabled\"\n >\n </span>\n <span class=\"announcement-metadata\">\n <Checkbox\n id=\"announcement-all-day\"\n v-model=\"announcement.allDay\"\n :disabled=\"disabled\"\n />\n <label for=\"announcement-all-day\">{{ $t('announcements.all_day_prompt') }}</label>\n </span>\n </div>\n</template>\n\n<script src=\"./announcement_editor.js\"></script>\n\n<style lang=\"scss\">\n.announcement-editor {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n\n .announcement-metadata {\n margin-top: 0.5em;\n }\n\n .post-textarea {\n resize: vertical;\n height: 10em;\n overflow: none;\n box-sizing: content-box;\n }\n}\n</style>\n","import Checkbox from '../checkbox/checkbox.vue'\n\nconst AnnouncementEditor = {\n components: {\n Checkbox\n },\n props: {\n announcement: Object,\n disabled: Boolean\n }\n}\n\nexport default AnnouncementEditor\n","import { render } from \"./announcement_editor.vue?vue&type=template&id=357f0d7c\"\nimport script from \"./announcement_editor.js?vue&type=script&lang=js\"\nexport * from \"./announcement_editor.js?vue&type=script&lang=js\"\n\nimport \"./announcement_editor.vue?vue&type=style&index=0&id=357f0d7c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport AnnouncementEditor from '../announcement_editor/announcement_editor.vue'\nimport RichContent from '../rich_content/rich_content.jsx'\nimport localeService from '../../services/locale/locale.service.js'\n\nconst Announcement = {\n components: {\n AnnouncementEditor,\n RichContent\n },\n data () {\n return {\n editing: false,\n editedAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: undefined\n },\n editError: ''\n }\n },\n props: {\n announcement: Object\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n canEditAnnouncement () {\n return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')\n },\n content () {\n return this.announcement.content\n },\n isRead () {\n return this.announcement.read\n },\n publishedAt () {\n const time = this.announcement.published_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n startsAt () {\n const time = this.announcement.starts_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n endsAt () {\n const time = this.announcement.ends_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n inactive () {\n return this.announcement.inactive\n }\n },\n methods: {\n markAsRead () {\n if (!this.isRead) {\n return this.$store.dispatch('markAnnouncementAsRead', this.announcement.id)\n }\n },\n deleteAnnouncement () {\n return this.$store.dispatch('deleteAnnouncement', this.announcement.id)\n },\n formatTimeOrDate (time, locale) {\n const d = new Date(time)\n return this.announcement.all_day ? d.toLocaleDateString(locale) : d.toLocaleString(locale)\n },\n enterEditMode () {\n this.editedAnnouncement.content = this.announcement.pleroma.raw_content\n this.editedAnnouncement.startsAt = this.announcement.starts_at\n this.editedAnnouncement.endsAt = this.announcement.ends_at\n this.editedAnnouncement.allDay = this.announcement.all_day\n this.editing = true\n },\n submitEdit () {\n this.$store.dispatch('editAnnouncement', {\n id: this.announcement.id,\n ...this.editedAnnouncement\n })\n .then(() => {\n this.editing = false\n })\n .catch(error => {\n this.editError = error.error\n })\n },\n cancelEdit () {\n this.editing = false\n },\n clearError () {\n this.editError = undefined\n }\n }\n}\n\nexport default Announcement\n","import { mapState } from 'vuex'\nimport Announcement from '../announcement/announcement.vue'\nimport AnnouncementEditor from '../announcement_editor/announcement_editor.vue'\n\nconst AnnouncementsPage = {\n components: {\n Announcement,\n AnnouncementEditor\n },\n data () {\n return {\n newAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: false\n },\n posting: false,\n error: undefined\n }\n },\n mounted () {\n this.$store.dispatch('fetchAnnouncements')\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n announcements () {\n return this.$store.state.announcements.announcements\n },\n canPostAnnouncement () {\n return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')\n }\n },\n methods: {\n postAnnouncement () {\n this.posting = true\n this.$store.dispatch('postAnnouncement', this.newAnnouncement)\n .then(() => {\n this.newAnnouncement.content = ''\n this.startsAt = undefined\n this.endsAt = undefined\n })\n .catch(error => {\n this.error = error.error\n })\n .finally(() => {\n this.posting = false\n })\n },\n clearError () {\n this.error = undefined\n }\n }\n}\n\nexport default AnnouncementsPage\n","import { render } from \"./announcement.vue?vue&type=template&id=c07fccd0\"\nimport script from \"./announcement.js?vue&type=script&lang=js\"\nexport * from \"./announcement.js?vue&type=script&lang=js\"\n\nimport \"./announcement.vue?vue&type=style&index=0&id=c07fccd0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./announcements_page.vue?vue&type=template&id=33196ec2\"\nimport script from \"./announcements_page.js?vue&type=script&lang=js\"\nexport * from \"./announcements_page.js?vue&type=script&lang=js\"\n\nimport \"./announcements_page.vue?vue&type=style&index=0&id=33196ec2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import PublicTimeline from 'components/public_timeline/public_timeline.vue'\nimport PublicAndExternalTimeline from 'components/public_and_external_timeline/public_and_external_timeline.vue'\nimport FriendsTimeline from 'components/friends_timeline/friends_timeline.vue'\nimport TagTimeline from 'components/tag_timeline/tag_timeline.vue'\nimport BookmarkTimeline from 'components/bookmark_timeline/bookmark_timeline.vue'\nimport ConversationPage from 'components/conversation-page/conversation-page.vue'\nimport Interactions from 'components/interactions/interactions.vue'\nimport DMs from 'components/dm_timeline/dm_timeline.vue'\nimport ChatList from 'components/chat_list/chat_list.vue'\nimport Chat from 'components/chat/chat.vue'\nimport UserProfile from 'components/user_profile/user_profile.vue'\nimport Search from 'components/search/search.vue'\nimport Registration from 'components/registration/registration.vue'\nimport PasswordReset from 'components/password_reset/password_reset.vue'\nimport FollowRequests from 'components/follow_requests/follow_requests.vue'\nimport OAuthCallback from 'components/oauth_callback/oauth_callback.vue'\nimport Notifications from 'components/notifications/notifications.vue'\nimport AuthForm from 'components/auth_form/auth_form.js'\nimport ShoutPanel from 'components/shout_panel/shout_panel.vue'\nimport WhoToFollow from 'components/who_to_follow/who_to_follow.vue'\nimport About from 'components/about/about.vue'\nimport RemoteUserResolver from 'components/remote_user_resolver/remote_user_resolver.vue'\nimport Lists from 'components/lists/lists.vue'\nimport ListsTimeline from 'components/lists_timeline/lists_timeline.vue'\nimport ListsEdit from 'components/lists_edit/lists_edit.vue'\nimport NavPanel from 'src/components/nav_panel/nav_panel.vue'\nimport AnnouncementsPage from 'components/announcements_page/announcements_page.vue'\n\nexport default (store) => {\n const validateAuthenticatedRoute = (to, from, next) => {\n if (store.state.users.currentUser) {\n next()\n } else {\n next(store.state.instance.redirectRootNoLogin || '/main/all')\n }\n }\n\n let routes = [\n {\n name: 'root',\n path: '/',\n redirect: _to => {\n return (store.state.users.currentUser\n ? store.state.instance.redirectRootLogin\n : store.state.instance.redirectRootNoLogin) || '/main/all'\n }\n },\n { name: 'public-external-timeline', path: '/main/all', component: PublicAndExternalTimeline },\n { name: 'public-timeline', path: '/main/public', component: PublicTimeline },\n { name: 'friends', path: '/main/friends', component: FriendsTimeline, beforeEnter: validateAuthenticatedRoute },\n { name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline },\n { name: 'bookmarks', path: '/bookmarks', component: BookmarkTimeline },\n { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },\n {\n name: 'remote-user-profile-acct',\n path: '/remote-users/:_(@)?:username([^/@]+)@:hostname([^/@]+)',\n component: RemoteUserResolver,\n beforeEnter: validateAuthenticatedRoute\n },\n {\n name: 'remote-user-profile',\n path: '/remote-users/:hostname/:username',\n component: RemoteUserResolver,\n beforeEnter: validateAuthenticatedRoute\n },\n { name: 'external-user-profile', path: '/users/$:id', component: UserProfile },\n { name: 'interactions', path: '/users/:username/interactions', component: Interactions, beforeEnter: validateAuthenticatedRoute },\n { name: 'dms', path: '/users/:username/dms', component: DMs, beforeEnter: validateAuthenticatedRoute },\n { name: 'registration', path: '/registration', component: Registration },\n { name: 'password-reset', path: '/password-reset', component: PasswordReset, props: true },\n { name: 'registration-token', path: '/registration/:token', component: Registration },\n { name: 'friend-requests', path: '/friend-requests', component: FollowRequests, beforeEnter: validateAuthenticatedRoute },\n { name: 'notifications', path: '/:username/notifications', component: Notifications, props: () => ({ disableTeleport: true }), beforeEnter: validateAuthenticatedRoute },\n { name: 'login', path: '/login', component: AuthForm },\n { name: 'shout-panel', path: '/shout-panel', component: ShoutPanel, props: () => ({ floating: false }) },\n { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },\n { name: 'search', path: '/search', component: Search, props: (route) => ({ query: route.query.query }) },\n { name: 'who-to-follow', path: '/who-to-follow', component: WhoToFollow, beforeEnter: validateAuthenticatedRoute },\n { name: 'about', path: '/about', component: About },\n { name: 'announcements', path: '/announcements', component: AnnouncementsPage },\n { name: 'user-profile', path: '/users/:name', component: UserProfile },\n { name: 'legacy-user-profile', path: '/:name', component: UserProfile },\n { name: 'lists', path: '/lists', component: Lists },\n { name: 'lists-timeline', path: '/lists/:id', component: ListsTimeline },\n { name: 'lists-edit', path: '/lists/:id/edit', component: ListsEdit },\n { name: 'lists-new', path: '/lists/new', component: ListsEdit },\n { name: 'edit-navigation', path: '/nav-edit', component: NavPanel, props: () => ({ forceExpand: true, forceEditMode: true }), beforeEnter: validateAuthenticatedRoute }\n ]\n\n if (store.state.instance.pleromaChatMessagesAvailable) {\n routes = routes.concat([\n { name: 'chat', path: '/users/:username/chats/:recipient_id', component: Chat, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute },\n { name: 'chats', path: '/users/:username/chats', component: ChatList, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute }\n ])\n }\n\n return routes\n}\n","import * as bodyScrollLock from 'body-scroll-lock'\n\nlet previousNavPaddingRight\nlet previousAppBgWrapperRight\nconst lockerEls = new Set([])\n\nconst disableBodyScroll = (el) => {\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n bodyScrollLock.disableBodyScroll(el, {\n reserveScrollBarGap: true\n })\n lockerEls.add(el)\n setTimeout(() => {\n if (lockerEls.size <= 1) {\n // If previousNavPaddingRight is already set, don't set it again.\n if (previousNavPaddingRight === undefined) {\n const navEl = document.getElementById('nav')\n previousNavPaddingRight = window.getComputedStyle(navEl).getPropertyValue('padding-right')\n navEl.style.paddingRight = previousNavPaddingRight ? `calc(${previousNavPaddingRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`\n }\n // If previousAppBgWrapeprRight is already set, don't set it again.\n if (previousAppBgWrapperRight === undefined) {\n const appBgWrapperEl = document.getElementById('app_bg_wrapper')\n previousAppBgWrapperRight = window.getComputedStyle(appBgWrapperEl).getPropertyValue('right')\n appBgWrapperEl.style.right = previousAppBgWrapperRight ? `calc(${previousAppBgWrapperRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`\n }\n document.body.classList.add('scroll-locked')\n }\n })\n}\n\nconst enableBodyScroll = (el) => {\n lockerEls.delete(el)\n setTimeout(() => {\n if (lockerEls.size === 0) {\n if (previousNavPaddingRight !== undefined) {\n document.getElementById('nav').style.paddingRight = previousNavPaddingRight\n // Restore previousNavPaddingRight to undefined so disableBodyScroll knows it can be set again.\n previousNavPaddingRight = undefined\n }\n if (previousAppBgWrapperRight !== undefined) {\n document.getElementById('app_bg_wrapper').style.right = previousAppBgWrapperRight\n // Restore previousAppBgWrapperRight to undefined so disableBodyScroll knows it can be set again.\n previousAppBgWrapperRight = undefined\n }\n document.body.classList.remove('scroll-locked')\n }\n })\n bodyScrollLock.enableBodyScroll(el)\n}\n\nconst directive = {\n mounted: (el, binding) => {\n if (binding.value) {\n disableBodyScroll(el)\n }\n },\n updated: (el, binding) => {\n if (binding.oldValue === binding.value) {\n return\n }\n\n if (binding.value) {\n disableBodyScroll(el)\n } else {\n enableBodyScroll(el)\n }\n },\n unmounted: (el) => {\n enableBodyScroll(el)\n }\n}\n\nexport default (Vue) => {\n Vue.directive('body-scroll-lock', directive)\n}\n","import { createApp } from 'vue'\nimport { createRouter, createWebHistory } from 'vue-router'\nimport vClickOutside from 'click-outside-vue3'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\n\nimport { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'\n\nimport App from '../App.vue'\nimport routes from './routes'\nimport VBodyScrollLock from 'src/directives/body_scroll_lock'\n\nimport { windowWidth, windowHeight } from '../services/window_utils/window_utils'\nimport { getOrCreateApp, getClientToken } from '../services/new_api/oauth.js'\nimport backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'\nimport { applyTheme, applyConfig } from '../services/style_setter/style_setter.js'\nimport FaviconService from '../services/favicon_service/favicon_service.js'\n\nlet staticInitialResults = null\n\nconst parsedInitialResults = () => {\n if (!document.getElementById('initial-results')) {\n return null\n }\n if (!staticInitialResults) {\n staticInitialResults = JSON.parse(document.getElementById('initial-results').textContent)\n }\n return staticInitialResults\n}\n\nconst decodeUTF8Base64 = (data) => {\n const rawData = atob(data)\n const array = Uint8Array.from([...rawData].map((char) => char.charCodeAt(0)))\n const text = new TextDecoder().decode(array)\n return text\n}\n\nconst preloadFetch = async (request) => {\n const data = parsedInitialResults()\n if (!data || !data[request]) {\n return window.fetch(request)\n }\n const decoded = decodeUTF8Base64(data[request])\n const requestData = JSON.parse(decoded)\n return {\n ok: true,\n json: () => requestData,\n text: () => requestData\n }\n}\n\nconst getInstanceConfig = async ({ store }) => {\n try {\n const res = await preloadFetch('/api/v1/instance')\n if (res.ok) {\n const data = await res.json()\n const textlimit = data.max_toot_chars\n const vapidPublicKey = data.pleroma.vapid_public_key\n\n store.dispatch('setInstanceOption', { name: 'textlimit', value: textlimit })\n store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })\n store.dispatch('setInstanceOption', { name: 'birthdayRequired', value: !!data.pleroma.metadata.birthday_required })\n store.dispatch('setInstanceOption', { name: 'birthdayMinAge', value: data.pleroma.metadata.birthday_min_age || 0 })\n\n if (vapidPublicKey) {\n store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })\n }\n } else {\n throw (res)\n }\n } catch (error) {\n console.error('Could not load instance config, potentially fatal')\n console.error(error)\n }\n}\n\nconst getBackendProvidedConfig = async ({ store }) => {\n try {\n const res = await window.fetch('/api/pleroma/frontend_configurations')\n if (res.ok) {\n const data = await res.json()\n return data.pleroma_fe\n } else {\n throw (res)\n }\n } catch (error) {\n console.error('Could not load backend-provided frontend config, potentially fatal')\n console.error(error)\n }\n}\n\nconst getStaticConfig = async () => {\n try {\n const res = await window.fetch('/static/config.json')\n if (res.ok) {\n return res.json()\n } else {\n throw (res)\n }\n } catch (error) {\n console.warn('Failed to load static/config.json, continuing without it.')\n console.warn(error)\n return {}\n }\n}\n\nconst setSettings = async ({ apiConfig, staticConfig, store }) => {\n const overrides = window.___pleromafe_dev_overrides || {}\n const env = window.___pleromafe_mode.NODE_ENV\n\n // This takes static config and overrides properties that are present in apiConfig\n let config = {}\n if (overrides.staticConfigPreference && env === 'development') {\n console.warn('OVERRIDING API CONFIG WITH STATIC CONFIG')\n config = Object.assign({}, apiConfig, staticConfig)\n } else {\n config = Object.assign({}, staticConfig, apiConfig)\n }\n\n const copyInstanceOption = (name) => {\n store.dispatch('setInstanceOption', { name, value: config[name] })\n }\n\n copyInstanceOption('nsfwCensorImage')\n copyInstanceOption('background')\n copyInstanceOption('hidePostStats')\n copyInstanceOption('hideBotIndication')\n copyInstanceOption('hideUserStats')\n copyInstanceOption('hideFilteredStatuses')\n copyInstanceOption('logo')\n\n store.dispatch('setInstanceOption', {\n name: 'logoMask',\n value: typeof config.logoMask === 'undefined'\n ? true\n : config.logoMask\n })\n\n store.dispatch('setInstanceOption', {\n name: 'logoMargin',\n value: typeof config.logoMargin === 'undefined'\n ? 0\n : config.logoMargin\n })\n copyInstanceOption('logoLeft')\n store.commit('authFlow/setInitialStrategy', config.loginMethod)\n\n copyInstanceOption('redirectRootNoLogin')\n copyInstanceOption('redirectRootLogin')\n copyInstanceOption('showInstanceSpecificPanel')\n copyInstanceOption('minimalScopesMode')\n copyInstanceOption('hideMutedPosts')\n copyInstanceOption('collapseMessageWithSubject')\n copyInstanceOption('scopeCopy')\n copyInstanceOption('subjectLineBehavior')\n copyInstanceOption('postContentType')\n copyInstanceOption('alwaysShowSubjectInput')\n copyInstanceOption('showFeaturesPanel')\n copyInstanceOption('hideSitename')\n copyInstanceOption('sidebarRight')\n\n return store.dispatch('setTheme', config.theme)\n}\n\nconst getTOS = async ({ store }) => {\n try {\n const res = await window.fetch('/static/terms-of-service.html')\n if (res.ok) {\n const html = await res.text()\n store.dispatch('setInstanceOption', { name: 'tos', value: html })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load TOS\")\n console.warn(e)\n }\n}\n\nconst getInstancePanel = async ({ store }) => {\n try {\n const res = await preloadFetch('/instance/panel.html')\n if (res.ok) {\n const html = await res.text()\n store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load instance panel\")\n console.warn(e)\n }\n}\n\nconst getStickers = async ({ store }) => {\n try {\n const res = await window.fetch('/static/stickers.json')\n if (res.ok) {\n const values = await res.json()\n const stickers = (await Promise.all(\n Object.entries(values).map(async ([name, path]) => {\n const resPack = await window.fetch(path + 'pack.json')\n let meta = {}\n if (resPack.ok) {\n meta = await resPack.json()\n }\n return {\n pack: name,\n path,\n meta\n }\n })\n )).sort((a, b) => {\n return a.meta.title.localeCompare(b.meta.title)\n })\n store.dispatch('setInstanceOption', { name: 'stickers', value: stickers })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load stickers\")\n console.warn(e)\n }\n}\n\nconst getAppSecret = async ({ store }) => {\n const { state, commit } = store\n const { oauth, instance } = state\n return getOrCreateApp({ ...oauth, instance: instance.server, commit })\n .then((app) => getClientToken({ ...app, instance: instance.server }))\n .then((token) => {\n commit('setAppToken', token.access_token)\n commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))\n })\n}\n\nconst resolveStaffAccounts = ({ store, accounts }) => {\n const nicknames = accounts.map(uri => uri.split('/').pop())\n store.dispatch('setInstanceOption', { name: 'staffAccounts', value: nicknames })\n}\n\nconst getNodeInfo = async ({ store }) => {\n try {\n const res = await preloadFetch('/nodeinfo/2.0.json')\n if (res.ok) {\n const data = await res.json()\n const metadata = data.metadata\n const features = metadata.features\n store.dispatch('setInstanceOption', { name: 'name', value: metadata.nodeName })\n store.dispatch('setInstanceOption', { name: 'registrationOpen', value: data.openRegistrations })\n store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') })\n store.dispatch('setInstanceOption', { name: 'safeDM', value: features.includes('safe_dm_mentions') })\n store.dispatch('setInstanceOption', { name: 'shoutAvailable', value: features.includes('chat') })\n store.dispatch('setInstanceOption', { name: 'pleromaChatMessagesAvailable', value: features.includes('pleroma_chat_messages') })\n store.dispatch('setInstanceOption', { name: 'pleromaCustomEmojiReactionsAvailable', value: features.includes('pleroma_custom_emoji_reactions') })\n store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })\n store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })\n store.dispatch('setInstanceOption', { name: 'editingAvailable', value: features.includes('editing') })\n store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })\n store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })\n store.dispatch('setInstanceOption', { name: 'quotingAvailable', value: features.includes('quote_posting') })\n\n const uploadLimits = metadata.uploadLimits\n store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) })\n store.dispatch('setInstanceOption', { name: 'avatarlimit', value: parseInt(uploadLimits.avatar) })\n store.dispatch('setInstanceOption', { name: 'backgroundlimit', value: parseInt(uploadLimits.background) })\n store.dispatch('setInstanceOption', { name: 'bannerlimit', value: parseInt(uploadLimits.banner) })\n store.dispatch('setInstanceOption', { name: 'fieldsLimits', value: metadata.fieldsLimits })\n\n store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames })\n store.dispatch('setInstanceOption', { name: 'postFormats', value: metadata.postFormats })\n\n const suggestions = metadata.suggestions\n store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })\n store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })\n\n const software = data.software\n store.dispatch('setInstanceOption', { name: 'backendVersion', value: software.version })\n store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: software.name === 'pleroma' })\n\n const priv = metadata.private\n store.dispatch('setInstanceOption', { name: 'private', value: priv })\n\n const frontendVersion = window.___pleromafe_commit_hash\n store.dispatch('setInstanceOption', { name: 'frontendVersion', value: frontendVersion })\n\n const federation = metadata.federation\n\n store.dispatch('setInstanceOption', {\n name: 'tagPolicyAvailable',\n value: typeof federation.mrf_policies === 'undefined'\n ? false\n : metadata.federation.mrf_policies.includes('TagPolicy')\n })\n\n store.dispatch('setInstanceOption', { name: 'federationPolicy', value: federation })\n store.dispatch('setInstanceOption', {\n name: 'federating',\n value: typeof federation.enabled === 'undefined'\n ? true\n : federation.enabled\n })\n\n const accountActivationRequired = metadata.accountActivationRequired\n store.dispatch('setInstanceOption', { name: 'accountActivationRequired', value: accountActivationRequired })\n\n const accounts = metadata.staffAccounts\n resolveStaffAccounts({ store, accounts })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn('Could not load nodeinfo')\n console.warn(e)\n }\n}\n\nconst setConfig = async ({ store }) => {\n // apiConfig, staticConfig\n const configInfos = await Promise.all([getBackendProvidedConfig({ store }), getStaticConfig()])\n const apiConfig = configInfos[0]\n const staticConfig = configInfos[1]\n\n await setSettings({ store, apiConfig, staticConfig }).then(getAppSecret({ store }))\n}\n\nconst checkOAuthToken = async ({ store }) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n if (store.getters.getUserToken()) {\n try {\n await store.dispatch('loginUser', store.getters.getUserToken())\n } catch (e) {\n console.error(e)\n }\n }\n resolve()\n })\n}\n\nconst afterStoreSetup = async ({ store, i18n }) => {\n store.dispatch('setLayoutWidth', windowWidth())\n store.dispatch('setLayoutHeight', windowHeight())\n\n FaviconService.initFaviconService()\n\n const overrides = window.___pleromafe_dev_overrides || {}\n const server = (typeof overrides.target !== 'undefined') ? overrides.target : window.location.origin\n store.dispatch('setInstanceOption', { name: 'server', value: server })\n\n await setConfig({ store })\n\n const { customTheme, customThemeSource } = store.state.config\n const { theme } = store.state.instance\n const customThemePresent = customThemeSource || customTheme\n\n if (customThemePresent) {\n if (customThemeSource && customThemeSource.themeEngineVersion === CURRENT_VERSION) {\n applyTheme(customThemeSource)\n } else {\n applyTheme(customTheme)\n }\n } else if (theme) {\n // do nothing, it will load asynchronously\n } else {\n console.error('Failed to load any theme!')\n }\n\n applyConfig(store.state.config)\n\n // Now we can try getting the server settings and logging in\n // Most of these are preloaded into the index.html so blocking is minimized\n await Promise.all([\n checkOAuthToken({ store }),\n getInstancePanel({ store }),\n getNodeInfo({ store }),\n getInstanceConfig({ store })\n ])\n\n // Start fetching things that don't need to block the UI\n store.dispatch('fetchMutes')\n store.dispatch('startFetchingAnnouncements')\n getTOS({ store })\n getStickers({ store })\n\n const router = createRouter({\n history: createWebHistory(),\n routes: routes(store),\n scrollBehavior: (to, _from, savedPosition) => {\n if (to.matched.some(m => m.meta.dontScroll)) {\n return false\n }\n return savedPosition || { left: 0, top: 0 }\n }\n })\n\n const app = createApp(App)\n\n app.use(router)\n app.use(store)\n app.use(i18n)\n\n app.use(vClickOutside)\n app.use(VBodyScrollLock)\n app.use(VueVirtualScroller)\n\n app.component('FAIcon', FontAwesomeIcon)\n app.component('FALayers', FontAwesomeLayers)\n\n // remove after vue 3.3\n app.config.unwrapInjectedRef = true\n\n app.mount('#app')\n\n return app\n}\n\nexport default afterStoreSetup\n","import { createStore } from 'vuex'\n\nimport 'custom-event-polyfill'\nimport './lib/event_target_polyfill.js'\n\nimport interfaceModule from './modules/interface.js'\nimport instanceModule from './modules/instance.js'\nimport statusesModule from './modules/statuses.js'\nimport listsModule from './modules/lists.js'\nimport usersModule from './modules/users.js'\nimport apiModule from './modules/api.js'\nimport configModule from './modules/config.js'\nimport profileConfigModule from './modules/profileConfig.js'\nimport serverSideStorageModule from './modules/serverSideStorage.js'\nimport adminSettingsModule from './modules/adminSettings.js'\nimport shoutModule from './modules/shout.js'\nimport oauthModule from './modules/oauth.js'\nimport authFlowModule from './modules/auth_flow.js'\nimport mediaViewerModule from './modules/media_viewer.js'\nimport oauthTokensModule from './modules/oauth_tokens.js'\nimport reportsModule from './modules/reports.js'\nimport pollsModule from './modules/polls.js'\nimport postStatusModule from './modules/postStatus.js'\nimport editStatusModule from './modules/editStatus.js'\nimport statusHistoryModule from './modules/statusHistory.js'\n\nimport chatsModule from './modules/chats.js'\nimport announcementsModule from './modules/announcements.js'\n\nimport { createI18n } from 'vue-i18n'\n\nimport createPersistedState from './lib/persisted_state.js'\nimport pushNotifications from './lib/push_notifications_plugin.js'\n\nimport messages from './i18n/messages.js'\n\nimport afterStoreSetup from './boot/after_store.js'\n\nconst currentLocale = (window.navigator.language || 'en').split('-')[0]\n\nconst i18n = createI18n({\n // By default, use the browser locale, we will update it if neccessary\n locale: 'en',\n fallbackLocale: 'en',\n messages: messages.default\n})\n\nmessages.setLanguage(i18n.global, currentLocale)\n\nconst persistedStateOptions = {\n paths: [\n 'serverSideStorage.cache',\n 'config',\n 'users.lastLoginName',\n 'oauth'\n ]\n};\n\n(async () => {\n let storageError = false\n const plugins = [pushNotifications]\n try {\n const persistedState = await createPersistedState(persistedStateOptions)\n plugins.push(persistedState)\n } catch (e) {\n console.error(e)\n storageError = true\n }\n const store = createStore({\n modules: {\n i18n: {\n getters: {\n i18n: () => i18n.global\n }\n },\n interface: interfaceModule,\n instance: instanceModule,\n // TODO refactor users/statuses modules, they depend on each other\n users: usersModule,\n statuses: statusesModule,\n lists: listsModule,\n api: apiModule,\n config: configModule,\n profileConfig: profileConfigModule,\n serverSideStorage: serverSideStorageModule,\n adminSettings: adminSettingsModule,\n shout: shoutModule,\n oauth: oauthModule,\n authFlow: authFlowModule,\n mediaViewer: mediaViewerModule,\n oauthTokens: oauthTokensModule,\n reports: reportsModule,\n polls: pollsModule,\n postStatus: postStatusModule,\n editStatus: editStatusModule,\n statusHistory: statusHistoryModule,\n chats: chatsModule,\n announcements: announcementsModule\n },\n plugins,\n strict: false // Socket modifies itself, let's ignore this for now.\n // strict: process.env.NODE_ENV !== 'production'\n })\n if (storageError) {\n store.dispatch('pushGlobalNotice', { messageKey: 'errors.storage_unavailable', level: 'error' })\n }\n afterStoreSetup({ store, i18n })\n})()\n\n// These are inlined by webpack's DefinePlugin\n/* eslint-disable */\nwindow.___pleromafe_mode = process.env\nwindow.___pleromafe_commit_hash = COMMIT_HASH\nwindow.___pleromafe_dev_overrides = DEV_OVERRIDES\n","import Cookies from 'js-cookie'\nimport { setPreset, applyTheme, applyConfig } from '../services/style_setter/style_setter.js'\nimport messages from '../i18n/messages'\nimport { set } from 'lodash'\nimport localeService from '../services/locale/locale.service.js'\n\nconst BACKEND_LANGUAGE_COOKIE_NAME = 'userLanguage'\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 'conversationDisplay', // tree | linear\n 'conversationOtherRepliesButton', // below | inside\n 'mentionLinkDisplay', // short | full_for_remote | full\n 'userPopoverAvatarAction' // close | zoom | open\n]\n\nexport const defaultState = {\n expertLevel: 0, // used to track which settings to show and hide\n colors: {},\n theme: undefined,\n customTheme: undefined,\n customThemeSource: undefined,\n hideISP: false,\n hideInstanceWallpaper: false,\n hideShoutbox: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: undefined, // instance default\n hideMutedThreads: undefined, // instance default\n hideWordFilteredPosts: undefined, // instance default\n muteBotStatuses: undefined, // instance default\n collapseMessageWithSubject: undefined, // instance default\n padEmoji: true,\n hideAttachments: false,\n hideAttachmentsInConv: false,\n maxThumbnails: 16,\n hideNsfw: true,\n preloadImage: true,\n loopVideo: true,\n loopVideoSilentOnly: true,\n streaming: false,\n emojiReactionsOnTimeline: true,\n alwaysShowNewPostButton: false,\n autohideFloatingPostButton: false,\n pauseOnUnfocused: true,\n stopGifs: true,\n replyVisibility: 'all',\n thirdColumnMode: 'notifications',\n notificationVisibility: {\n follows: true,\n mentions: true,\n likes: true,\n repeats: true,\n moves: true,\n emojiReactions: true,\n followRequest: true,\n reports: true,\n chatMention: true,\n polls: true\n },\n webPushNotifications: false,\n muteWords: [],\n highlight: {},\n interfaceLanguage: browserLocale,\n hideScopeNotice: false,\n useStreamingApi: false,\n sidebarRight: undefined, // instance default\n scopeCopy: undefined, // instance default\n subjectLineBehavior: undefined, // instance default\n alwaysShowSubjectInput: undefined, // instance default\n postContentType: undefined, // instance default\n minimalScopesMode: undefined, // instance default\n // This hides statuses filtered via a word filter\n hideFilteredStatuses: undefined, // instance default\n modalOnRepeat: undefined, // instance default\n modalOnUnfollow: undefined, // instance default\n modalOnBlock: undefined, // instance default\n modalOnMute: undefined, // instance default\n modalOnDelete: undefined, // instance default\n modalOnLogout: undefined, // instance default\n modalOnApproveFollow: undefined, // instance default\n modalOnDenyFollow: undefined, // instance default\n modalOnRemoveUserFromFollowers: undefined, // instance default\n playVideosInModal: false,\n useOneClickNsfw: false,\n useContainFit: true,\n disableStickyHeaders: false,\n showScrollbars: false,\n userPopoverAvatarAction: 'open',\n userPopoverOverlay: false,\n sidebarColumnWidth: '25rem',\n contentColumnWidth: '45rem',\n notifsColumnWidth: '25rem',\n emojiReactionsScale: 1.0,\n navbarColumnStretch: false,\n greentext: undefined, // instance default\n useAtIcon: undefined, // instance default\n mentionLinkDisplay: undefined, // instance default\n mentionLinkShowTooltip: undefined, // instance default\n mentionLinkShowAvatar: undefined, // instance default\n mentionLinkFadeDomain: undefined, // instance default\n mentionLinkShowYous: undefined, // instance default\n mentionLinkBoldenYou: undefined, // instance default\n hidePostStats: undefined, // instance default\n hideBotIndication: undefined, // instance default\n hideUserStats: undefined, // instance default\n virtualScrolling: undefined, // instance default\n sensitiveByDefault: undefined, // instance default\n conversationDisplay: undefined, // instance default\n conversationTreeAdvanced: undefined, // instance default\n conversationOtherRepliesButton: undefined, // instance default\n conversationTreeFadeAncestors: undefined, // instance default\n maxDepthInThread: undefined, // instance default\n autocompleteSelect: undefined // instance default\n}\n\n// caching the instance default properties\nexport const instanceDefaultProperties = Object.entries(defaultState)\n .filter(([key, value]) => value === undefined)\n .map(([key, value]) => key)\n\nconst config = {\n state: { ...defaultState },\n getters: {\n defaultConfig (state, getters, rootState, rootGetters) {\n const { instance } = rootState\n return {\n ...defaultState,\n ...Object.fromEntries(\n instanceDefaultProperties.map(key => [key, instance[key]])\n )\n }\n },\n mergedConfig (state, getters, rootState, rootGetters) {\n const { defaultConfig } = rootGetters\n return {\n ...defaultConfig,\n // Do not override with undefined\n ...Object.fromEntries(Object.entries(state).filter(([k, v]) => v !== undefined))\n }\n }\n },\n mutations: {\n setOption (state, { name, value }) {\n set(state, name, value)\n },\n setHighlight (state, { user, color, type }) {\n const data = this.state.config.highlight[user]\n if (color || type) {\n state.highlight[user] = { color: color || data.color, type: type || data.type }\n } else {\n delete state.highlight[user]\n }\n }\n },\n actions: {\n loadSettings ({ dispatch }, data) {\n const knownKeys = new Set(Object.keys(defaultState))\n const presentKeys = new Set(Object.keys(data))\n const intersection = new Set()\n for (const elem of presentKeys) {\n if (knownKeys.has(elem)) {\n intersection.add(elem)\n }\n }\n\n intersection.forEach(\n name => dispatch('setOption', { name, value: data[name] })\n )\n },\n setHighlight ({ commit, dispatch }, { user, color, type }) {\n commit('setHighlight', { user, color, type })\n },\n setOption ({ commit, dispatch, state }, { name, value }) {\n const exceptions = new Set([\n 'useStreamingApi'\n ])\n\n if (exceptions.has(name)) {\n switch (name) {\n case 'useStreamingApi': {\n const action = value ? 'enableMastoSockets' : 'disableMastoSockets'\n\n dispatch(action).then(() => {\n commit('setOption', { name: 'useStreamingApi', value })\n }).catch((e) => {\n console.error('Failed starting MastoAPI Streaming socket', e)\n dispatch('disableMastoSockets')\n dispatch('setOption', { name: 'useStreamingApi', value: false })\n })\n }\n }\n } else {\n commit('setOption', { name, value })\n switch (name) {\n case 'theme':\n setPreset(value)\n break\n case 'sidebarColumnWidth':\n case 'contentColumnWidth':\n case 'notifsColumnWidth':\n case 'emojiReactionsScale':\n applyConfig(state)\n break\n case 'customTheme':\n case 'customThemeSource':\n applyTheme(value)\n break\n case 'interfaceLanguage':\n messages.setLanguage(this.getters.i18n, value)\n dispatch('loadUnicodeEmojiData', value)\n Cookies.set(\n BACKEND_LANGUAGE_COOKIE_NAME,\n localeService.internalToBackendLocaleMulti(value)\n )\n break\n case 'thirdColumnMode':\n dispatch('setLayoutWidth', undefined)\n break\n }\n }\n }\n }\n}\n\nexport default config\n","import { humanizeErrors } from '../../modules/errors'\n\nexport function StatusCodeError (statusCode, body, options, response) {\n this.name = 'StatusCodeError'\n this.statusCode = statusCode\n this.message = statusCode + ' - ' + (JSON && JSON.stringify ? JSON.stringify(body) : body)\n this.error = body // legacy attribute\n this.options = options\n this.response = response\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this)\n }\n}\nStatusCodeError.prototype = Object.create(Error.prototype)\nStatusCodeError.prototype.constructor = StatusCodeError\n\nexport class RegistrationError extends Error {\n constructor (error) {\n super()\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this)\n }\n\n try {\n // the error is probably a JSON object with a single key, \"errors\", whose value is another JSON object containing the real errors\n if (typeof error === 'string') {\n error = JSON.parse(error)\n // eslint-disable-next-line\n if (error.hasOwnProperty('error')) {\n error = JSON.parse(error.error)\n }\n }\n\n if (typeof error === 'object') {\n const errorContents = JSON.parse(error.error)\n // keys will have the property that has the error, for example 'ap_id',\n // 'email' or 'captcha', the value will be an array of its error\n // like \"ap_id\": [\"has been taken\"] or \"captcha\": [\"Invalid CAPTCHA\"]\n\n // replace ap_id with username\n if (errorContents.ap_id) {\n errorContents.username = errorContents.ap_id\n delete errorContents.ap_id\n }\n\n this.message = humanizeErrors(errorContents)\n } else {\n this.message = error\n }\n } catch (e) {\n // can't parse it, so just treat it like a string\n this.message = error\n }\n }\n}\n","import { capitalize } from 'lodash'\n\nexport function humanizeErrors (errors) {\n return Object.entries(errors).reduce((errs, [k, val]) => {\n const message = val.reduce((acc, message) => {\n const key = capitalize(k.replace(/_/g, ' '))\n return acc + [key, message].join(' ') + '. '\n }, '')\n return [...errs, message]\n }, [])\n}\n","import { each, map, concat, last, get } from 'lodash'\nimport { parseStatus, parseSource, parseUser, parseNotification, parseAttachment, parseChat, parseLinkHeaderPagination } from '../entity_normalizer/entity_normalizer.service.js'\nimport { RegistrationError, StatusCodeError } from '../errors/errors'\n\n/* eslint-env browser */\nconst MUTES_IMPORT_URL = '/api/pleroma/mutes_import'\nconst BLOCKS_IMPORT_URL = '/api/pleroma/blocks_import'\nconst FOLLOW_IMPORT_URL = '/api/pleroma/follow_import'\nconst DELETE_ACCOUNT_URL = '/api/pleroma/delete_account'\nconst CHANGE_EMAIL_URL = '/api/pleroma/change_email'\nconst CHANGE_PASSWORD_URL = '/api/pleroma/change_password'\nconst MOVE_ACCOUNT_URL = '/api/pleroma/move_account'\nconst ALIASES_URL = '/api/pleroma/aliases'\nconst TAG_USER_URL = '/api/pleroma/admin/users/tag'\nconst PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${screenName}/permission_group/${right}`\nconst ACTIVATE_USER_URL = '/api/pleroma/admin/users/activate'\nconst DEACTIVATE_USER_URL = '/api/pleroma/admin/users/deactivate'\nconst ADMIN_USERS_URL = '/api/pleroma/admin/users'\nconst SUGGESTIONS_URL = '/api/v1/suggestions'\nconst NOTIFICATION_SETTINGS_URL = '/api/pleroma/notification_settings'\nconst NOTIFICATION_READ_URL = '/api/v1/pleroma/notifications/read'\n\nconst MFA_SETTINGS_URL = '/api/pleroma/accounts/mfa'\nconst MFA_BACKUP_CODES_URL = '/api/pleroma/accounts/mfa/backup_codes'\n\nconst MFA_SETUP_OTP_URL = '/api/pleroma/accounts/mfa/setup/totp'\nconst MFA_CONFIRM_OTP_URL = '/api/pleroma/accounts/mfa/confirm/totp'\nconst MFA_DISABLE_OTP_URL = '/api/pleroma/accounts/mfa/totp'\n\nconst MASTODON_LOGIN_URL = '/api/v1/accounts/verify_credentials'\nconst MASTODON_REGISTRATION_URL = '/api/v1/accounts'\nconst MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'\nconst MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications'\nconst MASTODON_DISMISS_NOTIFICATION_URL = id => `/api/v1/notifications/${id}/dismiss`\nconst MASTODON_FAVORITE_URL = id => `/api/v1/statuses/${id}/favourite`\nconst MASTODON_UNFAVORITE_URL = id => `/api/v1/statuses/${id}/unfavourite`\nconst MASTODON_RETWEET_URL = id => `/api/v1/statuses/${id}/reblog`\nconst MASTODON_UNRETWEET_URL = id => `/api/v1/statuses/${id}/unreblog`\nconst MASTODON_DELETE_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_FOLLOW_URL = id => `/api/v1/accounts/${id}/follow`\nconst MASTODON_UNFOLLOW_URL = id => `/api/v1/accounts/${id}/unfollow`\nconst MASTODON_FOLLOWING_URL = id => `/api/v1/accounts/${id}/following`\nconst MASTODON_FOLLOWERS_URL = id => `/api/v1/accounts/${id}/followers`\nconst MASTODON_FOLLOW_REQUESTS_URL = '/api/v1/follow_requests'\nconst MASTODON_APPROVE_USER_URL = id => `/api/v1/follow_requests/${id}/authorize`\nconst MASTODON_DENY_USER_URL = id => `/api/v1/follow_requests/${id}/reject`\nconst MASTODON_DIRECT_MESSAGES_TIMELINE_URL = '/api/v1/timelines/direct'\nconst MASTODON_PUBLIC_TIMELINE = '/api/v1/timelines/public'\nconst MASTODON_USER_HOME_TIMELINE_URL = '/api/v1/timelines/home'\nconst MASTODON_STATUS_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_STATUS_CONTEXT_URL = id => `/api/v1/statuses/${id}/context`\nconst MASTODON_STATUS_SOURCE_URL = id => `/api/v1/statuses/${id}/source`\nconst MASTODON_STATUS_HISTORY_URL = id => `/api/v1/statuses/${id}/history`\nconst MASTODON_USER_URL = '/api/v1/accounts'\nconst MASTODON_USER_LOOKUP_URL = '/api/v1/accounts/lookup'\nconst MASTODON_USER_RELATIONSHIPS_URL = '/api/v1/accounts/relationships'\nconst MASTODON_USER_TIMELINE_URL = id => `/api/v1/accounts/${id}/statuses`\nconst MASTODON_USER_IN_LISTS = id => `/api/v1/accounts/${id}/lists`\nconst MASTODON_LIST_URL = id => `/api/v1/lists/${id}`\nconst MASTODON_LIST_TIMELINE_URL = id => `/api/v1/timelines/list/${id}`\nconst MASTODON_LIST_ACCOUNTS_URL = id => `/api/v1/lists/${id}/accounts`\nconst MASTODON_TAG_TIMELINE_URL = tag => `/api/v1/timelines/tag/${tag}`\nconst MASTODON_BOOKMARK_TIMELINE_URL = '/api/v1/bookmarks'\nconst MASTODON_USER_BLOCKS_URL = '/api/v1/blocks/'\nconst MASTODON_USER_MUTES_URL = '/api/v1/mutes/'\nconst MASTODON_BLOCK_USER_URL = id => `/api/v1/accounts/${id}/block`\nconst MASTODON_UNBLOCK_USER_URL = id => `/api/v1/accounts/${id}/unblock`\nconst MASTODON_MUTE_USER_URL = id => `/api/v1/accounts/${id}/mute`\nconst MASTODON_UNMUTE_USER_URL = id => `/api/v1/accounts/${id}/unmute`\nconst MASTODON_REMOVE_USER_FROM_FOLLOWERS = id => `/api/v1/accounts/${id}/remove_from_followers`\nconst MASTODON_SUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/subscribe`\nconst MASTODON_UNSUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/unsubscribe`\nconst MASTODON_USER_NOTE_URL = id => `/api/v1/accounts/${id}/note`\nconst MASTODON_BOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/bookmark`\nconst MASTODON_UNBOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/unbookmark`\nconst MASTODON_POST_STATUS_URL = '/api/v1/statuses'\nconst MASTODON_MEDIA_UPLOAD_URL = '/api/v1/media'\nconst MASTODON_VOTE_URL = id => `/api/v1/polls/${id}/votes`\nconst MASTODON_POLL_URL = id => `/api/v1/polls/${id}`\nconst MASTODON_STATUS_FAVORITEDBY_URL = id => `/api/v1/statuses/${id}/favourited_by`\nconst MASTODON_STATUS_REBLOGGEDBY_URL = id => `/api/v1/statuses/${id}/reblogged_by`\nconst MASTODON_PROFILE_UPDATE_URL = '/api/v1/accounts/update_credentials'\nconst MASTODON_REPORT_USER_URL = '/api/v1/reports'\nconst MASTODON_PIN_OWN_STATUS = id => `/api/v1/statuses/${id}/pin`\nconst MASTODON_UNPIN_OWN_STATUS = id => `/api/v1/statuses/${id}/unpin`\nconst MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute`\nconst MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute`\nconst MASTODON_SEARCH_2 = '/api/v2/search'\nconst MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search'\nconst MASTODON_DOMAIN_BLOCKS_URL = '/api/v1/domain_blocks'\nconst MASTODON_LISTS_URL = '/api/v1/lists'\nconst MASTODON_STREAMING = '/api/v1/streaming'\nconst MASTODON_KNOWN_DOMAIN_LIST_URL = '/api/v1/instance/peers'\nconst MASTODON_ANNOUNCEMENTS_URL = '/api/v1/announcements'\nconst MASTODON_ANNOUNCEMENTS_DISMISS_URL = id => `/api/v1/announcements/${id}/dismiss`\nconst PLEROMA_EMOJI_REACTIONS_URL = id => `/api/v1/pleroma/statuses/${id}/reactions`\nconst PLEROMA_EMOJI_REACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_EMOJI_UNREACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_CHATS_URL = '/api/v1/pleroma/chats'\nconst PLEROMA_CHAT_URL = id => `/api/v1/pleroma/chats/by-account-id/${id}`\nconst PLEROMA_CHAT_MESSAGES_URL = id => `/api/v1/pleroma/chats/${id}/messages`\nconst PLEROMA_CHAT_READ_URL = id => `/api/v1/pleroma/chats/${id}/read`\nconst PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => `/api/v1/pleroma/chats/${chatId}/messages/${messageId}`\nconst PLEROMA_ADMIN_REPORTS = '/api/pleroma/admin/reports'\nconst PLEROMA_BACKUP_URL = '/api/v1/pleroma/backups'\nconst PLEROMA_ANNOUNCEMENTS_URL = '/api/v1/pleroma/admin/announcements'\nconst PLEROMA_POST_ANNOUNCEMENT_URL = '/api/v1/pleroma/admin/announcements'\nconst PLEROMA_EDIT_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`\nconst PLEROMA_DELETE_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`\n\nconst PLEROMA_ADMIN_CONFIG_URL = '/api/pleroma/admin/config'\nconst PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/pleroma/admin/config/descriptions'\nconst PLEROMA_ADMIN_FRONTENDS_URL = '/api/pleroma/admin/frontends'\nconst PLEROMA_ADMIN_FRONTENDS_INSTALL_URL = '/api/pleroma/admin/frontends/install'\n\nconst oldfetch = window.fetch\n\nconst fetch = (url, options) => {\n options = options || {}\n const baseUrl = ''\n const fullUrl = baseUrl + url\n options.credentials = 'same-origin'\n return oldfetch(fullUrl, options)\n}\n\nconst promisedRequest = ({ method, url, params, payload, credentials, headers = {} }) => {\n const options = {\n method,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...headers\n }\n }\n if (params) {\n url += '?' + Object.entries(params)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n }\n if (payload) {\n options.body = JSON.stringify(payload)\n }\n if (credentials) {\n options.headers = {\n ...options.headers,\n ...authHeaders(credentials)\n }\n }\n return fetch(url, options)\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url, options }, response))\n }\n return resolve(json)\n })\n .catch((error) => {\n return reject(new StatusCodeError(response.status, error, { url, options }, response))\n })\n )\n })\n}\n\nconst updateNotificationSettings = ({ credentials, settings }) => {\n const form = new FormData()\n\n each(settings, (value, key) => {\n form.append(key, value)\n })\n\n return fetch(`${NOTIFICATION_SETTINGS_URL}?${new URLSearchParams(settings)}`, {\n headers: authHeaders(credentials),\n method: 'PUT',\n body: form\n }).then((data) => data.json())\n}\n\nconst updateProfileImages = ({ credentials, avatar = null, avatarName = null, banner = null, background = null }) => {\n const form = new FormData()\n if (avatar !== null) {\n if (avatarName !== null) {\n form.append('avatar', avatar, avatarName)\n } else {\n form.append('avatar', avatar)\n }\n }\n if (banner !== null) form.append('header', banner)\n if (background !== null) form.append('pleroma_background_image', background)\n return fetch(MASTODON_PROFILE_UPDATE_URL, {\n headers: authHeaders(credentials),\n method: 'PATCH',\n body: form\n })\n .then((data) => data.json())\n .then((data) => {\n if (data.error) {\n throw new Error(data.error)\n }\n return parseUser(data)\n })\n}\n\nconst updateProfile = ({ credentials, params }) => {\n return promisedRequest({\n url: MASTODON_PROFILE_UPDATE_URL,\n method: 'PATCH',\n payload: params,\n credentials\n }).then((data) => parseUser(data))\n}\n\n// Params needed:\n// nickname\n// email\n// fullname\n// password\n// password_confirm\n//\n// Optional\n// bio\n// homepage\n// location\n// token\n// language\nconst register = ({ params, credentials }) => {\n const { nickname, ...rest } = params\n return fetch(MASTODON_REGISTRATION_URL, {\n method: 'POST',\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n nickname,\n locale: 'en_US',\n agreement: true,\n ...rest\n })\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return response.json().then((error) => { throw new RegistrationError(error) })\n }\n })\n}\n\nconst getCaptcha = () => fetch('/api/pleroma/captcha').then(resp => resp.json())\n\nconst authHeaders = (accessToken) => {\n if (accessToken) {\n return { Authorization: `Bearer ${accessToken}` }\n } else {\n return { }\n }\n}\n\nconst followUser = ({ id, credentials, ...options }) => {\n const url = MASTODON_FOLLOW_URL(id)\n const form = {}\n if (options.reblogs !== undefined) { form.reblogs = options.reblogs }\n return fetch(url, {\n body: JSON.stringify(form),\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unfollowUser = ({ id, credentials }) => {\n const url = MASTODON_UNFOLLOW_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst fetchUserInLists = ({ id, credentials }) => {\n const url = MASTODON_USER_IN_LISTS(id)\n return fetch(url, {\n headers: authHeaders(credentials)\n }).then((data) => data.json())\n}\n\nconst pinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_PIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unpinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNPIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst muteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_MUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unmuteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst blockUser = ({ id, credentials }) => {\n return fetch(MASTODON_BLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unblockUser = ({ id, credentials }) => {\n return fetch(MASTODON_UNBLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst removeUserFromFollowers = ({ id, credentials }) => {\n return fetch(MASTODON_REMOVE_USER_FROM_FOLLOWERS(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst editUserNote = ({ id, credentials, comment }) => {\n return promisedRequest({\n url: MASTODON_USER_NOTE_URL(id),\n credentials,\n payload: {\n comment\n },\n method: 'POST'\n })\n}\n\nconst approveUser = ({ id, credentials }) => {\n const url = MASTODON_APPROVE_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst denyUser = ({ id, credentials }) => {\n const url = MASTODON_DENY_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst fetchUser = ({ id, credentials }) => {\n const url = `${MASTODON_USER_URL}/${id}`\n return promisedRequest({ url, credentials })\n .then((data) => parseUser(data))\n}\n\nconst fetchUserByName = ({ name, credentials }) => {\n return promisedRequest({\n url: MASTODON_USER_LOOKUP_URL,\n credentials,\n params: { acct: name }\n })\n .then(data => data.id)\n .catch(error => {\n if (error && error.statusCode === 404) {\n // Either the backend does not support lookup endpoint,\n // or there is no user with such name. Fallback and treat name as id.\n return name\n } else {\n throw error\n }\n })\n .then(id => fetchUser({ id, credentials }))\n}\n\nconst fetchUserRelationship = ({ id, credentials }) => {\n const url = `${MASTODON_USER_RELATIONSHIPS_URL}/?id=${id}`\n return fetch(url, { headers: authHeaders(credentials) })\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url }, response))\n }\n return resolve(json)\n }))\n })\n}\n\nconst fetchFriends = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWING_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n 'with_relationships=true'\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst exportFriends = ({ id, credentials }) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let friends = []\n let more = true\n while (more) {\n const maxId = friends.length > 0 ? last(friends).id : undefined\n const users = await fetchFriends({ id, maxId, credentials })\n friends = concat(friends, users)\n if (users.length === 0) {\n more = false\n }\n }\n resolve(friends)\n } catch (err) {\n reject(err)\n }\n })\n}\n\nconst fetchFollowers = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWERS_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n 'with_relationships=true'\n ].filter(_ => _).join('&')\n\n url += args ? '?' + args : ''\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchFollowRequests = ({ credentials }) => {\n const url = MASTODON_FOLLOW_REQUESTS_URL\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchLists = ({ credentials }) => {\n const url = MASTODON_LISTS_URL\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n}\n\nconst createList = ({ title, credentials }) => {\n const url = MASTODON_LISTS_URL\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'POST',\n body: JSON.stringify({ title })\n }).then((data) => data.json())\n}\n\nconst getList = ({ listId, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n}\n\nconst updateList = ({ listId, title, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'PUT',\n body: JSON.stringify({ title })\n })\n}\n\nconst getListAccounts = ({ listId, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(({ id }) => id))\n}\n\nconst addAccountsToList = ({ listId, accountIds, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'POST',\n body: JSON.stringify({ account_ids: accountIds })\n })\n}\n\nconst removeAccountsFromList = ({ listId, accountIds, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'DELETE',\n body: JSON.stringify({ account_ids: accountIds })\n })\n}\n\nconst deleteList = ({ listId, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n return fetch(url, {\n method: 'DELETE',\n headers: authHeaders(credentials)\n })\n}\n\nconst fetchConversation = ({ id, credentials }) => {\n const urlContext = MASTODON_STATUS_CONTEXT_URL(id)\n return fetch(urlContext, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then(({ ancestors, descendants }) => ({\n ancestors: ancestors.map(parseStatus),\n descendants: descendants.map(parseStatus)\n }))\n}\n\nconst fetchStatus = ({ id, credentials }) => {\n const url = MASTODON_STATUS_URL(id)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then((data) => parseStatus(data))\n}\n\nconst fetchStatusSource = ({ id, credentials }) => {\n const url = MASTODON_STATUS_SOURCE_URL(id)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching source', data)\n })\n .then((data) => data.json())\n .then((data) => parseSource(data))\n}\n\nconst fetchStatusHistory = ({ status, credentials }) => {\n const url = MASTODON_STATUS_HISTORY_URL(status.id)\n return promisedRequest({ url, credentials })\n .then((data) => {\n data.reverse()\n return data.map((item) => {\n item.originalStatus = status\n return parseStatus(item)\n })\n })\n}\n\nconst tagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const form = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'PUT',\n headers,\n body: JSON.stringify(form)\n })\n}\n\nconst untagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const body = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'DELETE',\n headers,\n body: JSON.stringify(body)\n })\n}\n\nconst addRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'POST',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst deleteRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'DELETE',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst activateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: ACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deactivateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: DEACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deleteUser = ({ credentials, user }) => {\n const screenName = user.screen_name\n const headers = authHeaders(credentials)\n\n return fetch(`${ADMIN_USERS_URL}?nickname=${screenName}`, {\n method: 'DELETE',\n headers\n })\n}\n\nconst fetchTimeline = ({\n timeline,\n credentials,\n since = false,\n until = false,\n userId = false,\n listId = false,\n tag = false,\n withMuted = false,\n replyVisibility = 'all',\n includeTypes = []\n}) => {\n const timelineUrls = {\n public: MASTODON_PUBLIC_TIMELINE,\n friends: MASTODON_USER_HOME_TIMELINE_URL,\n dms: MASTODON_DIRECT_MESSAGES_TIMELINE_URL,\n notifications: MASTODON_USER_NOTIFICATIONS_URL,\n publicAndExternal: MASTODON_PUBLIC_TIMELINE,\n user: MASTODON_USER_TIMELINE_URL,\n media: MASTODON_USER_TIMELINE_URL,\n list: MASTODON_LIST_TIMELINE_URL,\n favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,\n tag: MASTODON_TAG_TIMELINE_URL,\n bookmarks: MASTODON_BOOKMARK_TIMELINE_URL\n }\n const isNotifications = timeline === 'notifications'\n const params = []\n\n let url = timelineUrls[timeline]\n\n if (timeline === 'user' || timeline === 'media') {\n url = url(userId)\n }\n\n if (timeline === 'list') {\n url = url(listId)\n }\n\n if (since) {\n params.push(['since_id', since])\n }\n if (until) {\n params.push(['max_id', until])\n }\n if (tag) {\n url = url(tag)\n }\n if (timeline === 'media') {\n params.push(['only_media', 1])\n }\n if (timeline === 'public') {\n params.push(['local', true])\n }\n if (timeline === 'public' || timeline === 'publicAndExternal') {\n params.push(['only_media', false])\n }\n if (timeline !== 'favorites' && timeline !== 'bookmarks') {\n params.push(['with_muted', withMuted])\n }\n if (replyVisibility !== 'all') {\n params.push(['reply_visibility', replyVisibility])\n }\n if (includeTypes.length > 0) {\n includeTypes.forEach(type => {\n params.push(['include_types[]', type])\n })\n }\n\n params.push(['limit', 20])\n\n const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n\n return fetch(url, { headers: authHeaders(credentials) })\n .then(async (response) => {\n const success = response.ok\n\n const data = await response.json()\n\n if (success && !data.errors) {\n const pagination = parseLinkHeaderPagination(response.headers.get('Link'), {\n flakeId: timeline !== 'bookmarks' && timeline !== 'notifications'\n })\n\n return { data: data.map(isNotifications ? parseNotification : parseStatus), pagination }\n } else {\n data.errors ||= []\n data.status = response.status\n data.statusText = response.statusText\n return data\n }\n })\n}\n\nconst fetchPinnedStatuses = ({ id, credentials }) => {\n const url = MASTODON_USER_TIMELINE_URL(id) + '?pinned=true'\n return promisedRequest({ url, credentials })\n .then((data) => data.map(parseStatus))\n}\n\nconst verifyCredentials = (user) => {\n return fetch(MASTODON_LOGIN_URL, {\n headers: authHeaders(user)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n .then((data) => data.error ? data : parseUser(data))\n}\n\nconst favorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_FAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unfavorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNFAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst retweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_RETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unretweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNRETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst bookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_BOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst unbookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_UNBOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst postStatus = ({\n credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n poll,\n mediaIds = [],\n inReplyToStatusId,\n quoteId,\n contentType,\n preview,\n idempotencyKey\n}) => {\n const form = new FormData()\n const pollOptions = poll.options || []\n\n form.append('status', status)\n form.append('source', 'Pleroma FE')\n if (spoilerText) form.append('spoiler_text', spoilerText)\n if (visibility) form.append('visibility', visibility)\n if (sensitive) form.append('sensitive', sensitive)\n if (contentType) form.append('content_type', contentType)\n mediaIds.forEach(val => {\n form.append('media_ids[]', val)\n })\n if (pollOptions.some(option => option !== '')) {\n const normalizedPoll = {\n expires_in: parseInt(poll.expiresIn, 10),\n multiple: poll.multiple\n }\n Object.keys(normalizedPoll).forEach(key => {\n form.append(`poll[${key}]`, normalizedPoll[key])\n })\n\n pollOptions.forEach(option => {\n form.append('poll[options][]', option)\n })\n }\n if (inReplyToStatusId) {\n form.append('in_reply_to_id', inReplyToStatusId)\n }\n if (quoteId) {\n form.append('quote_id', quoteId)\n }\n if (preview) {\n form.append('preview', 'true')\n }\n\n const postHeaders = authHeaders(credentials)\n if (idempotencyKey) {\n postHeaders['idempotency-key'] = idempotencyKey\n }\n\n return fetch(MASTODON_POST_STATUS_URL, {\n body: form,\n method: 'POST',\n headers: postHeaders\n })\n .then((response) => {\n return response.json()\n })\n .then((data) => data.error ? data : parseStatus(data))\n}\n\nconst editStatus = ({\n id,\n credentials,\n status,\n spoilerText,\n sensitive,\n poll,\n mediaIds = [],\n contentType\n}) => {\n const form = new FormData()\n const pollOptions = poll.options || []\n\n form.append('status', status)\n if (spoilerText) form.append('spoiler_text', spoilerText)\n if (sensitive) form.append('sensitive', sensitive)\n if (contentType) form.append('content_type', contentType)\n mediaIds.forEach(val => {\n form.append('media_ids[]', val)\n })\n\n if (pollOptions.some(option => option !== '')) {\n const normalizedPoll = {\n expires_in: parseInt(poll.expiresIn, 10),\n multiple: poll.multiple\n }\n Object.keys(normalizedPoll).forEach(key => {\n form.append(`poll[${key}]`, normalizedPoll[key])\n })\n\n pollOptions.forEach(option => {\n form.append('poll[options][]', option)\n })\n }\n\n const putHeaders = authHeaders(credentials)\n\n return fetch(MASTODON_STATUS_URL(id), {\n body: form,\n method: 'PUT',\n headers: putHeaders\n })\n .then((response) => {\n return response.json()\n })\n .then((data) => data.error ? data : parseStatus(data))\n}\n\nconst deleteStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_DELETE_URL(id),\n credentials,\n method: 'DELETE'\n })\n}\n\nconst uploadMedia = ({ formData, credentials }) => {\n return fetch(MASTODON_MEDIA_UPLOAD_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((data) => data.json())\n .then((data) => parseAttachment(data))\n}\n\nconst setMediaDescription = ({ id, description, credentials }) => {\n return promisedRequest({\n url: `${MASTODON_MEDIA_UPLOAD_URL}/${id}`,\n method: 'PUT',\n headers: authHeaders(credentials),\n payload: {\n description\n }\n }).then((data) => parseAttachment(data))\n}\n\nconst importMutes = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(MUTES_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst importBlocks = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(BLOCKS_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst importFollows = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(FOLLOW_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst deleteAccount = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(DELETE_ACCOUNT_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst changeEmail = ({ credentials, email, password }) => {\n const form = new FormData()\n\n form.append('email', email)\n form.append('password', password)\n\n return fetch(CHANGE_EMAIL_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst moveAccount = ({ credentials, password, targetAccount }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('target_account', targetAccount)\n\n return fetch(MOVE_ACCOUNT_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst addAlias = ({ credentials, alias }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'PUT',\n credentials,\n payload: { alias }\n })\n}\n\nconst deleteAlias = ({ credentials, alias }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'DELETE',\n credentials,\n payload: { alias }\n })\n}\n\nconst listAliases = ({ credentials }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'GET',\n credentials,\n params: {\n _cacheBooster: (new Date()).getTime()\n }\n })\n}\n\nconst changePassword = ({ credentials, password, newPassword, newPasswordConfirmation }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('new_password', newPassword)\n form.append('new_password_confirmation', newPasswordConfirmation)\n\n return fetch(CHANGE_PASSWORD_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst settingsMFA = ({ credentials }) => {\n return fetch(MFA_SETTINGS_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst mfaDisableOTP = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(MFA_DISABLE_OTP_URL, {\n body: form,\n method: 'DELETE',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst mfaConfirmOTP = ({ credentials, password, token }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('code', token)\n\n return fetch(MFA_CONFIRM_OTP_URL, {\n body: form,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\nconst mfaSetupOTP = ({ credentials }) => {\n return fetch(MFA_SETUP_OTP_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\nconst generateMfaBackupCodes = ({ credentials }) => {\n return fetch(MFA_BACKUP_CODES_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst fetchMutes = ({ maxId, credentials }) => {\n const query = new URLSearchParams({ with_relationships: true })\n if (maxId) {\n query.append('max_id', maxId)\n }\n return promisedRequest({ url: `${MASTODON_USER_MUTES_URL}?${query.toString()}`, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst muteUser = ({ id, expiresIn, credentials }) => {\n const payload = {}\n if (expiresIn) {\n payload.expires_in = expiresIn\n }\n return promisedRequest({ url: MASTODON_MUTE_USER_URL(id), credentials, method: 'POST', payload })\n}\n\nconst unmuteUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_USER_URL(id), credentials, method: 'POST' })\n}\n\nconst subscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_SUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst unsubscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNSUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst fetchBlocks = ({ maxId, credentials }) => {\n const query = new URLSearchParams({ with_relationships: true })\n if (maxId) {\n query.append('max_id', maxId)\n }\n return promisedRequest({ url: `${MASTODON_USER_BLOCKS_URL}?${query.toString()}`, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst addBackup = ({ credentials }) => {\n return promisedRequest({\n url: PLEROMA_BACKUP_URL,\n method: 'POST',\n credentials\n })\n}\n\nconst listBackups = ({ credentials }) => {\n return promisedRequest({\n url: PLEROMA_BACKUP_URL,\n method: 'GET',\n credentials,\n params: {\n _cacheBooster: (new Date()).getTime()\n }\n })\n}\n\nconst fetchOAuthTokens = ({ credentials }) => {\n const url = '/api/oauth_tokens.json'\n\n return fetch(url, {\n headers: authHeaders(credentials)\n }).then((data) => {\n if (data.ok) {\n return data.json()\n }\n throw new Error('Error fetching auth tokens', data)\n })\n}\n\nconst revokeOAuthToken = ({ id, credentials }) => {\n const url = `/api/oauth_tokens/${id}`\n\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'DELETE'\n })\n}\n\nconst suggestions = ({ credentials }) => {\n return fetch(SUGGESTIONS_URL, {\n headers: authHeaders(credentials)\n }).then((data) => data.json())\n}\n\nconst markNotificationsAsSeen = ({ id, credentials, single = false }) => {\n const body = new FormData()\n\n if (single) {\n body.append('id', id)\n } else {\n body.append('max_id', id)\n }\n\n return fetch(NOTIFICATION_READ_URL, {\n body,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst vote = ({ pollId, choices, credentials }) => {\n const form = new FormData()\n form.append('choices', choices)\n\n return promisedRequest({\n url: MASTODON_VOTE_URL(encodeURIComponent(pollId)),\n method: 'POST',\n credentials,\n payload: {\n choices\n }\n })\n}\n\nconst fetchPoll = ({ pollId, credentials }) => {\n return promisedRequest(\n {\n url: MASTODON_POLL_URL(encodeURIComponent(pollId)),\n method: 'GET',\n credentials\n }\n )\n}\n\nconst fetchFavoritedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_FAVORITEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchRebloggedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_REBLOGGEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchEmojiReactions = ({ id, credentials }) => {\n return promisedRequest({ url: PLEROMA_EMOJI_REACTIONS_URL(id), credentials })\n .then((reactions) => reactions.map(r => {\n r.accounts = r.accounts.map(parseUser)\n return r\n }))\n}\n\nconst reactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_REACT_URL(id, emoji),\n method: 'PUT',\n credentials\n }).then(parseStatus)\n}\n\nconst unreactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_UNREACT_URL(id, emoji),\n method: 'DELETE',\n credentials\n }).then(parseStatus)\n}\n\nconst reportUser = ({ credentials, userId, statusIds, comment, forward }) => {\n return promisedRequest({\n url: MASTODON_REPORT_USER_URL,\n method: 'POST',\n payload: {\n account_id: userId,\n status_ids: statusIds,\n comment,\n forward\n },\n credentials\n })\n}\n\nconst searchUsers = ({ credentials, query }) => {\n return promisedRequest({\n url: MASTODON_USER_SEARCH_URL,\n params: {\n q: query,\n resolve: true\n },\n credentials\n })\n .then((data) => data.map(parseUser))\n}\n\nconst search2 = ({ credentials, q, resolve, limit, offset, following, type }) => {\n let url = MASTODON_SEARCH_2\n const params = []\n\n if (q) {\n params.push(['q', encodeURIComponent(q)])\n }\n\n if (resolve) {\n params.push(['resolve', resolve])\n }\n\n if (limit) {\n params.push(['limit', limit])\n }\n\n if (offset) {\n params.push(['offset', offset])\n }\n\n if (following) {\n params.push(['following', true])\n }\n\n if (type) {\n params.push(['following', type])\n }\n\n params.push(['with_relationships', true])\n\n const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching search result', data)\n })\n .then((data) => { return data.json() })\n .then((data) => {\n data.accounts = data.accounts.slice(0, limit).map(u => parseUser(u))\n data.statuses = data.statuses.slice(0, limit).map(s => parseStatus(s))\n return data\n })\n}\n\nconst fetchKnownDomains = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_KNOWN_DOMAIN_LIST_URL, credentials })\n}\n\nconst fetchDomainMutes = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_DOMAIN_BLOCKS_URL, credentials })\n}\n\nconst muteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'POST',\n payload: { domain },\n credentials\n })\n}\n\nconst unmuteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'DELETE',\n payload: { domain },\n credentials\n })\n}\n\nconst dismissNotification = ({ credentials, id }) => {\n return promisedRequest({\n url: MASTODON_DISMISS_NOTIFICATION_URL(id),\n method: 'POST',\n payload: { id },\n credentials\n })\n}\n\nconst adminFetchAnnouncements = ({ credentials }) => {\n return promisedRequest({ url: PLEROMA_ANNOUNCEMENTS_URL, credentials })\n}\n\nconst fetchAnnouncements = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_ANNOUNCEMENTS_URL, credentials })\n}\n\nconst dismissAnnouncement = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_ANNOUNCEMENTS_DISMISS_URL(id),\n credentials,\n method: 'POST'\n })\n}\n\nconst announcementToPayload = ({ content, startsAt, endsAt, allDay }) => {\n const payload = { content }\n\n if (typeof startsAt !== 'undefined') {\n payload.starts_at = startsAt ? new Date(startsAt).toISOString() : null\n }\n\n if (typeof endsAt !== 'undefined') {\n payload.ends_at = endsAt ? new Date(endsAt).toISOString() : null\n }\n\n if (typeof allDay !== 'undefined') {\n payload.all_day = allDay\n }\n\n return payload\n}\n\nconst postAnnouncement = ({ credentials, content, startsAt, endsAt, allDay }) => {\n return promisedRequest({\n url: PLEROMA_POST_ANNOUNCEMENT_URL,\n credentials,\n method: 'POST',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay })\n })\n}\n\nconst editAnnouncement = ({ id, credentials, content, startsAt, endsAt, allDay }) => {\n return promisedRequest({\n url: PLEROMA_EDIT_ANNOUNCEMENT_URL(id),\n credentials,\n method: 'PATCH',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay })\n })\n}\n\nconst deleteAnnouncement = ({ id, credentials }) => {\n return promisedRequest({\n url: PLEROMA_DELETE_ANNOUNCEMENT_URL(id),\n credentials,\n method: 'DELETE'\n })\n}\n\nexport const getMastodonSocketURI = ({ credentials, stream, args = {} }) => {\n return Object.entries({\n ...(credentials\n ? { access_token: credentials }\n : {}\n ),\n stream,\n ...args\n }).reduce((acc, [key, val]) => {\n return acc + `${key}=${val}&`\n }, MASTODON_STREAMING + '?')\n}\n\nconst MASTODON_STREAMING_EVENTS = new Set([\n 'update',\n 'notification',\n 'delete',\n 'filters_changed',\n 'status.update'\n])\n\nconst PLEROMA_STREAMING_EVENTS = new Set([\n 'pleroma:chat_update'\n])\n\n// A thin wrapper around WebSocket API that allows adding a pre-processor to it\n// Uses EventTarget and a CustomEvent to proxy events\nexport const ProcessedWS = ({\n url,\n preprocessor = handleMastoWS,\n id = 'Unknown'\n}) => {\n const eventTarget = new EventTarget()\n const socket = new WebSocket(url)\n if (!socket) throw new Error(`Failed to create socket ${id}`)\n const proxy = (original, eventName, processor = a => a) => {\n original.addEventListener(eventName, (eventData) => {\n eventTarget.dispatchEvent(new CustomEvent(\n eventName,\n { detail: processor(eventData) }\n ))\n })\n }\n socket.addEventListener('open', (wsEvent) => {\n console.debug(`[WS][${id}] Socket connected`, wsEvent)\n })\n socket.addEventListener('error', (wsEvent) => {\n console.debug(`[WS][${id}] Socket errored`, wsEvent)\n })\n socket.addEventListener('close', (wsEvent) => {\n console.debug(\n `[WS][${id}] Socket disconnected with code ${wsEvent.code}`,\n wsEvent\n )\n })\n // Commented code reason: very spammy, uncomment to enable message debug logging\n /*\n socket.addEventListener('message', (wsEvent) => {\n console.debug(\n `[WS][${id}] Message received`,\n wsEvent\n )\n })\n /**/\n\n proxy(socket, 'open')\n proxy(socket, 'close')\n proxy(socket, 'message', preprocessor)\n proxy(socket, 'error')\n\n // 1000 = Normal Closure\n eventTarget.close = () => { socket.close(1000, 'Shutting down socket') }\n eventTarget.getState = () => socket.readyState\n\n return eventTarget\n}\n\nexport const handleMastoWS = (wsEvent) => {\n const { data } = wsEvent\n if (!data) return\n const parsedEvent = JSON.parse(data)\n const { event, payload } = parsedEvent\n if (MASTODON_STREAMING_EVENTS.has(event) || PLEROMA_STREAMING_EVENTS.has(event)) {\n // MastoBE and PleromaBE both send payload for delete as a PLAIN string\n if (event === 'delete') {\n return { event, id: payload }\n }\n const data = payload ? JSON.parse(payload) : null\n if (event === 'update') {\n return { event, status: parseStatus(data) }\n } else if (event === 'status.update') {\n return { event, status: parseStatus(data) }\n } else if (event === 'notification') {\n return { event, notification: parseNotification(data) }\n } else if (event === 'pleroma:chat_update') {\n return { event, chatUpdate: parseChat(data) }\n }\n } else {\n console.warn('Unknown event', wsEvent)\n return null\n }\n}\n\nexport const WSConnectionStatus = Object.freeze({\n JOINED: 1,\n CLOSED: 2,\n ERROR: 3,\n DISABLED: 4,\n STARTING: 5,\n STARTING_INITIAL: 6\n})\n\nconst chats = ({ credentials }) => {\n return fetch(PLEROMA_CHATS_URL, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => {\n return { chats: data.map(parseChat).filter(c => c) }\n })\n}\n\nconst getOrCreateChat = ({ accountId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_URL(accountId),\n method: 'POST',\n credentials\n })\n}\n\nconst chatMessages = ({ id, credentials, maxId, sinceId, limit = 20 }) => {\n let url = PLEROMA_CHAT_MESSAGES_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n\n return promisedRequest({\n url,\n method: 'GET',\n credentials\n })\n}\n\nconst sendChatMessage = ({ id, content, mediaId = null, idempotencyKey, credentials }) => {\n const payload = {\n content\n }\n\n if (mediaId) {\n payload.media_id = mediaId\n }\n\n const headers = {}\n\n if (idempotencyKey) {\n headers['idempotency-key'] = idempotencyKey\n }\n\n return promisedRequest({\n url: PLEROMA_CHAT_MESSAGES_URL(id),\n method: 'POST',\n payload,\n credentials,\n headers\n })\n}\n\nconst readChat = ({ id, lastReadId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_READ_URL(id),\n method: 'POST',\n payload: {\n last_read_id: lastReadId\n },\n credentials\n })\n}\n\nconst deleteChatMessage = ({ chatId, messageId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_DELETE_CHAT_MESSAGE_URL(chatId, messageId),\n method: 'DELETE',\n credentials\n })\n}\n\nconst setReportState = ({ id, state, credentials }) => {\n // TODO: Can't use promisedRequest because on OK this does not return json\n // See https://git.pleroma.social/pleroma/pleroma-fe/-/merge_requests/1322\n return fetch(PLEROMA_ADMIN_REPORTS, {\n headers: {\n ...authHeaders(credentials),\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'PATCH',\n body: JSON.stringify({\n reports: [{\n id,\n state\n }]\n })\n })\n .then(data => {\n if (data.status >= 500) {\n throw Error(data.statusText)\n } else if (data.status >= 400) {\n return data.json()\n }\n return data\n })\n .then(data => {\n if (data.errors) {\n throw Error(data.errors[0].message)\n }\n })\n}\n\n// ADMIN STUFF // EXPERIMENTAL\nconst fetchInstanceDBConfig = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_CONFIG_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst fetchInstanceConfigDescriptions = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_DESCRIPTIONS_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst fetchAvailableFrontends = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_FRONTENDS_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst pushInstanceDBConfig = ({ credentials, payload }) => {\n return fetch(PLEROMA_ADMIN_CONFIG_URL, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...authHeaders(credentials)\n },\n method: 'POST',\n body: JSON.stringify(payload)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst installFrontend = ({ credentials, payload }) => {\n return fetch(PLEROMA_ADMIN_FRONTENDS_INSTALL_URL, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...authHeaders(credentials)\n },\n method: 'POST',\n body: JSON.stringify(payload)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst apiService = {\n verifyCredentials,\n fetchTimeline,\n fetchPinnedStatuses,\n fetchConversation,\n fetchStatus,\n fetchStatusSource,\n fetchStatusHistory,\n fetchFriends,\n exportFriends,\n fetchFollowers,\n followUser,\n unfollowUser,\n pinOwnStatus,\n unpinOwnStatus,\n muteConversation,\n unmuteConversation,\n blockUser,\n unblockUser,\n removeUserFromFollowers,\n editUserNote,\n fetchUser,\n fetchUserByName,\n fetchUserRelationship,\n favorite,\n unfavorite,\n retweet,\n unretweet,\n bookmarkStatus,\n unbookmarkStatus,\n postStatus,\n editStatus,\n deleteStatus,\n uploadMedia,\n setMediaDescription,\n fetchMutes,\n muteUser,\n unmuteUser,\n subscribeUser,\n unsubscribeUser,\n fetchBlocks,\n fetchOAuthTokens,\n revokeOAuthToken,\n tagUser,\n untagUser,\n deleteUser,\n addRight,\n deleteRight,\n activateUser,\n deactivateUser,\n register,\n getCaptcha,\n updateProfileImages,\n updateProfile,\n importMutes,\n importBlocks,\n importFollows,\n deleteAccount,\n changeEmail,\n moveAccount,\n addAlias,\n deleteAlias,\n listAliases,\n changePassword,\n settingsMFA,\n mfaDisableOTP,\n generateMfaBackupCodes,\n mfaSetupOTP,\n mfaConfirmOTP,\n addBackup,\n listBackups,\n fetchFollowRequests,\n fetchLists,\n createList,\n getList,\n updateList,\n getListAccounts,\n addAccountsToList,\n removeAccountsFromList,\n deleteList,\n approveUser,\n denyUser,\n suggestions,\n markNotificationsAsSeen,\n dismissNotification,\n vote,\n fetchPoll,\n fetchFavoritedByUsers,\n fetchRebloggedByUsers,\n fetchEmojiReactions,\n reactWithEmoji,\n unreactWithEmoji,\n reportUser,\n updateNotificationSettings,\n search2,\n searchUsers,\n fetchKnownDomains,\n fetchDomainMutes,\n muteDomain,\n unmuteDomain,\n chats,\n getOrCreateChat,\n chatMessages,\n sendChatMessage,\n readChat,\n deleteChatMessage,\n setReportState,\n fetchUserInLists,\n fetchAnnouncements,\n dismissAnnouncement,\n postAnnouncement,\n editAnnouncement,\n deleteAnnouncement,\n adminFetchAnnouncements,\n fetchInstanceDBConfig,\n fetchInstanceConfigDescriptions,\n fetchAvailableFrontends,\n pushInstanceDBConfig,\n installFrontend\n}\n\nexport default apiService\n","import { kebabCase } from 'lodash'\n\nconst propsToNative = props => Object.keys(props).reduce((acc, cur) => {\n acc[kebabCase(cur)] = props[cur]\n return acc\n}, {})\n\nexport { propsToNative }\n","import { invertLightness, contrastRatio } from 'chromatism'\n\n// useful for visualizing color when debugging\nexport const consoleColor = (color) => console.log('%c##########', 'background: ' + color + '; color: ' + color)\n\n/**\n * Convert r, g, b values into hex notation. All components are [0-255]\n *\n * @param {Number|String|Object} r - Either red component, {r,g,b} object, or hex string\n * @param {Number} [g] - Green component\n * @param {Number} [b] - Blue component\n */\nexport const rgb2hex = (r, g, b) => {\n if (r === null || typeof r === 'undefined') {\n return undefined\n }\n // TODO: clean up this mess\n if (r[0] === '#' || r === 'transparent') {\n return r\n }\n if (typeof r === 'object') {\n ({ r, g, b } = r)\n }\n [r, g, b] = [r, g, b].map(val => {\n val = Math.ceil(val)\n val = val < 0 ? 0 : val\n val = val > 255 ? 255 : val\n return val\n })\n return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`\n}\n\n/**\n * Converts 8-bit RGB component into linear component\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n * https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation\n *\n * @param {Number} bit - color component [0..255]\n * @returns {Number} linear component [0..1]\n */\nconst c2linear = (bit) => {\n // W3C gives 0.03928 while wikipedia states 0.04045\n // what those magical numbers mean - I don't know.\n // something about gamma-correction, i suppose.\n // Sticking with W3C example.\n const c = bit / 255\n if (c < 0.03928) {\n return c / 12.92\n } else {\n return Math.pow((c + 0.055) / 1.055, 2.4)\n }\n}\n\n/**\n * Converts sRGB into linear RGB\n * @param {Object} srgb - sRGB color\n * @returns {Object} linear rgb color\n */\nconst srgbToLinear = (srgb) => {\n return 'rgb'.split('').reduce((acc, c) => { acc[c] = c2linear(srgb[c]); return acc }, {})\n}\n\n/**\n * Calculates relative luminance for given color\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n *\n * @param {Object} srgb - sRGB color\n * @returns {Number} relative luminance\n */\nexport const relativeLuminance = (srgb) => {\n const { r, g, b } = srgbToLinear(srgb)\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\n/**\n * Generates color ratio between two colors. Order is unimporant\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n *\n * @param {Object} a - sRGB color\n * @param {Object} b - sRGB color\n * @returns {Number} color ratio\n */\nexport const getContrastRatio = (a, b) => {\n const la = relativeLuminance(a)\n const lb = relativeLuminance(b)\n const [l1, l2] = la > lb ? [la, lb] : [lb, la]\n\n return (l1 + 0.05) / (l2 + 0.05)\n}\n\n/**\n * Same as `getContrastRatio` but for multiple layers in-between\n *\n * @param {Object} text - text color (topmost layer)\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n * @param {Object} bedrock - layer at the very bottom\n */\nexport const getContrastRatioLayers = (text, layers, bedrock) => {\n return getContrastRatio(alphaBlendLayers(bedrock, layers), text)\n}\n\n/**\n * This performs alpha blending between solid background and semi-transparent foreground\n *\n * @param {Object} fg - top layer color\n * @param {Number} fga - top layer's alpha\n * @param {Object} bg - bottom layer color\n * @returns {Object} sRGB of resulting color\n */\nexport const alphaBlend = (fg, fga, bg) => {\n if (fga === 1 || typeof fga === 'undefined') return fg\n return 'rgb'.split('').reduce((acc, c) => {\n // Simplified https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending\n // for opaque bg and transparent fg\n acc[c] = (fg[c] * fga + bg[c] * (1 - fga))\n return acc\n }, {})\n}\n\n/**\n * Same as `alphaBlend` but for multiple layers in-between\n *\n * @param {Object} bedrock - layer at the very bottom\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n */\nexport const alphaBlendLayers = (bedrock, layers) => layers.reduce((acc, [color, opacity]) => {\n return alphaBlend(color, opacity, acc)\n}, bedrock)\n\nexport const invert = (rgb) => {\n return 'rgb'.split('').reduce((acc, c) => {\n acc[c] = 255 - rgb[c]\n return acc\n }, {})\n}\n\n/**\n * Converts #rrggbb hex notation into an {r, g, b} object\n *\n * @param {String} hex - #rrggbb string\n * @returns {Object} rgb representation of the color, values are 0-255\n */\nexport const hex2rgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n }\n : null\n}\n\n/**\n * Old somewhat weird function for mixing two colors together\n *\n * @param {Object} a - one color (rgb)\n * @param {Object} b - other color (rgb)\n * @returns {Object} result\n */\nexport const mixrgb = (a, b) => {\n return 'rgb'.split('').reduce((acc, k) => {\n acc[k] = (a[k] + b[k]) / 2\n return acc\n }, {})\n}\n/**\n * Converts rgb object into a CSS rgba() color\n *\n * @param {Object} color - rgb\n * @returns {String} CSS rgba() color\n */\nexport const rgba2css = function (rgba) {\n return `rgba(${Math.floor(rgba.r)}, ${Math.floor(rgba.g)}, ${Math.floor(rgba.b)}, ${rgba.a})`\n}\n\n/**\n * Get text color for given background color and intended text color\n * This checks if text and background don't have enough color and inverts\n * text color's lightness if needed. If text color is still not enough it\n * will fall back to black or white\n *\n * @param {Object} bg - background color\n * @param {Object} text - intended text color\n * @param {Boolean} preserve - try to preserve intended text color's hue/saturation (i.e. no BW)\n */\nexport const getTextColor = function (bg, text, preserve) {\n const contrast = getContrastRatio(bg, text)\n\n if (contrast < 4.5) {\n const base = typeof text.a !== 'undefined' ? { a: text.a } : {}\n const result = Object.assign(base, invertLightness(text).rgb)\n if (!preserve && getContrastRatio(bg, result) < 4.5) {\n // B&W\n return contrastRatio(bg, text).rgb\n }\n // Inverted color\n return result\n }\n return text\n}\n\n/**\n * Converts color to CSS Color value\n *\n * @param {Object|String} input - color\n * @param {Number} [a] - alpha value\n * @returns {String} a CSS Color value\n */\nexport const getCssColor = (input, a) => {\n let rgb = {}\n if (typeof input === 'object') {\n rgb = input\n } else if (typeof input === 'string') {\n if (input.startsWith('#')) {\n rgb = hex2rgb(input)\n } else {\n return input\n }\n }\n return rgba2css({ ...rgb, a })\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","export const SECOND = 1000\nexport const MINUTE = 60 * SECOND\nexport const HOUR = 60 * MINUTE\nexport const DAY = 24 * HOUR\nexport const WEEK = 7 * DAY\nexport const MONTH = 30 * DAY\nexport const YEAR = 365.25 * DAY\n\nexport const relativeTime = (date, nowThreshold = 1) => {\n if (typeof date === 'string') date = Date.parse(date)\n const round = Date.now() > date ? Math.floor : Math.ceil\n const d = Math.abs(Date.now() - date)\n const r = { num: round(d / YEAR), key: 'time.unit.years' }\n if (d < nowThreshold * SECOND) {\n r.num = 0\n r.key = 'time.now'\n } else if (d < MINUTE) {\n r.num = round(d / SECOND)\n r.key = 'time.unit.seconds'\n } else if (d < HOUR) {\n r.num = round(d / MINUTE)\n r.key = 'time.unit.minutes'\n } else if (d < DAY) {\n r.num = round(d / HOUR)\n r.key = 'time.unit.hours'\n } else if (d < WEEK) {\n r.num = round(d / DAY)\n r.key = 'time.unit.days'\n } else if (d < MONTH) {\n r.num = round(d / WEEK)\n r.key = 'time.unit.weeks'\n } else if (d < YEAR) {\n r.num = round(d / MONTH)\n r.key = 'time.unit.months'\n }\n return r\n}\n\nexport const relativeTimeShort = (date, nowThreshold = 1) => {\n const r = relativeTime(date, nowThreshold)\n r.key += '_short'\n return r\n}\n\nexport const unitToSeconds = (unit, amount) => {\n switch (unit) {\n case 'minutes': return 0.001 * amount * MINUTE\n case 'hours': return 0.001 * amount * HOUR\n case 'days': return 0.001 * amount * DAY\n }\n}\n\nexport const secondsToUnit = (unit, amount) => {\n switch (unit) {\n case 'minutes': return (1000 * amount) / MINUTE\n case 'hours': return (1000 * amount) / HOUR\n case 'days': return (1000 * amount) / DAY\n }\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","import escape from 'escape-html'\nimport parseLinkHeader from 'parse-link-header'\nimport { isStatusNotification } from '../notification_utils/notification_utils.js'\nimport punycode from 'punycode.js'\n\n/** NOTICE! **\n * Do not initialize UI-generated data here.\n * It will override existing data.\n *\n * i.e. user.pinnedStatusIds was set to [] here\n * UI code would update it with data but upon next user fetch\n * it would be reverted back to []\n */\n\nconst qvitterStatusType = (status) => {\n if (status.is_post_verb) {\n return 'status'\n }\n\n if (status.retweeted_status) {\n return 'retweet'\n }\n\n if ((typeof status.uri === 'string' && status.uri.match(/(fave|objectType=Favourite)/)) ||\n (typeof status.text === 'string' && status.text.match(/favorited/))) {\n return 'favorite'\n }\n\n if (status.text.match(/deleted notice {{tag/) || status.qvitter_delete_notice) {\n return 'deletion'\n }\n\n if (status.text.match(/started following/) || status.activity_type === 'follow') {\n return 'follow'\n }\n\n return 'unknown'\n}\n\nexport const parseUser = (data) => {\n const output = {}\n const masto = Object.prototype.hasOwnProperty.call(data, 'acct')\n // case for users in \"mentions\" property for statuses in MastoAPI\n const mastoShort = masto && !Object.prototype.hasOwnProperty.call(data, 'avatar')\n\n output.inLists = null\n output.id = String(data.id)\n output._original = data // used for server-side settings\n\n if (masto) {\n output.screen_name = data.acct\n output.fqn = data.fqn\n output.statusnet_profile_url = data.url\n\n // There's nothing else to get\n if (mastoShort) {\n return output\n }\n\n output.emoji = data.emojis\n output.name = escape(data.display_name)\n output.name_html = output.name\n output.name_unescaped = data.display_name\n\n output.description = data.note\n // TODO cleanup this shit, output.description is overriden with source data\n output.description_html = data.note\n\n output.fields = data.fields\n output.fields_html = data.fields.map(field => {\n return {\n name: escape(field.name),\n value: field.value\n }\n })\n output.fields_text = data.fields.map(field => {\n return {\n name: unescape(field.name.replace(/<[^>]*>/g, '')),\n value: unescape(field.value.replace(/<[^>]*>/g, ''))\n }\n })\n\n // Utilize avatar_static for gif avatars?\n output.profile_image_url = data.avatar\n output.profile_image_url_original = data.avatar\n\n // Same, utilize header_static?\n output.cover_photo = data.header\n\n output.friends_count = data.following_count\n\n output.bot = data.bot\n\n if (data.pleroma) {\n if (data.pleroma.settings_store) {\n output.storage = data.pleroma.settings_store['pleroma-fe']\n }\n const relationship = data.pleroma.relationship\n\n output.background_image = data.pleroma.background_image\n output.favicon = data.pleroma.favicon\n output.token = data.pleroma.chat_token\n\n if (relationship) {\n output.relationship = relationship\n }\n\n output.allow_following_move = data.pleroma.allow_following_move\n\n output.hide_follows = data.pleroma.hide_follows\n output.hide_followers = data.pleroma.hide_followers\n output.hide_follows_count = data.pleroma.hide_follows_count\n output.hide_followers_count = data.pleroma.hide_followers_count\n\n output.rights = {\n moderator: data.pleroma.is_moderator,\n admin: data.pleroma.is_admin\n }\n // TODO: Clean up in UI? This is duplication from what BE does for qvitterapi\n if (output.rights.admin) {\n output.role = 'admin'\n } else if (output.rights.moderator) {\n output.role = 'moderator'\n } else {\n output.role = 'member'\n }\n\n output.birthday = data.pleroma.birthday\n\n if (data.pleroma.privileges) {\n output.privileges = data.pleroma.privileges\n } else if (data.pleroma.is_admin) {\n output.privileges = [\n 'users_read',\n 'users_manage_invites',\n 'users_manage_activation_state',\n 'users_manage_tags',\n 'users_manage_credentials',\n 'users_delete',\n 'messages_read',\n 'messages_delete',\n 'instances_delete',\n 'reports_manage_reports',\n 'moderation_log_read',\n 'announcements_manage_announcements',\n 'emoji_manage_emoji',\n 'statistics_read'\n ]\n } else if (data.pleroma.is_moderator) {\n output.privileges = [\n 'messages_delete',\n 'reports_manage_reports'\n ]\n } else {\n output.privileges = []\n }\n }\n\n if (data.source) {\n output.description = data.source.note\n output.default_scope = data.source.privacy\n output.fields = data.source.fields\n if (data.source.pleroma) {\n output.no_rich_text = data.source.pleroma.no_rich_text\n output.show_role = data.source.pleroma.show_role\n output.discoverable = data.source.pleroma.discoverable\n output.show_birthday = data.pleroma.show_birthday\n }\n }\n\n // TODO: handle is_local\n output.is_local = !output.screen_name.includes('@')\n } else {\n output.screen_name = data.screen_name\n\n output.name = data.name\n output.name_html = data.name_html\n\n output.description = data.description\n output.description_html = data.description_html\n\n output.profile_image_url = data.profile_image_url\n output.profile_image_url_original = data.profile_image_url_original\n\n output.cover_photo = data.cover_photo\n\n output.friends_count = data.friends_count\n\n // output.bot = ??? missing\n\n output.statusnet_profile_url = data.statusnet_profile_url\n\n output.is_local = data.is_local\n output.role = data.role\n output.show_role = data.show_role\n\n if (data.rights) {\n output.rights = {\n moderator: data.rights.delete_others_notice,\n admin: data.rights.admin\n }\n }\n output.no_rich_text = data.no_rich_text\n output.default_scope = data.default_scope\n output.hide_follows = data.hide_follows\n output.hide_followers = data.hide_followers\n output.hide_follows_count = data.hide_follows_count\n output.hide_followers_count = data.hide_followers_count\n output.background_image = data.background_image\n // Websocket token\n output.token = data.token\n\n // Convert relationsip data to expected format\n output.relationship = {\n muting: data.muted,\n blocking: data.statusnet_blocking,\n followed_by: data.follows_you,\n following: data.following\n }\n }\n\n output.created_at = new Date(data.created_at)\n output.locked = data.locked\n output.followers_count = data.followers_count\n output.statuses_count = data.statuses_count\n\n if (data.pleroma) {\n output.follow_request_count = data.pleroma.follow_request_count\n\n output.tags = data.pleroma.tags\n\n // deactivated was changed to is_active in Pleroma 2.3.0\n // so check if is_active is present\n output.deactivated = typeof data.pleroma.is_active !== 'undefined'\n ? !data.pleroma.is_active // new backend\n : data.pleroma.deactivated // old backend\n\n output.notification_settings = data.pleroma.notification_settings\n output.unread_chat_count = data.pleroma.unread_chat_count\n }\n\n output.tags = output.tags || []\n output.rights = output.rights || {}\n output.notification_settings = output.notification_settings || {}\n\n // Convert punycode to unicode for UI\n output.screen_name_ui = output.screen_name\n if (output.screen_name && output.screen_name.includes('@')) {\n const parts = output.screen_name.split('@')\n const unicodeDomain = punycode.toUnicode(parts[1])\n if (unicodeDomain !== parts[1]) {\n // Add some identifier so users can potentially spot spoofing attempts:\n // lain.com and xn--lin-6cd.com would appear identical otherwise.\n output.screen_name_ui_contains_non_ascii = true\n output.screen_name_ui = [parts[0], unicodeDomain].join('@')\n } else {\n output.screen_name_ui_contains_non_ascii = false\n }\n }\n\n return output\n}\n\nexport const parseAttachment = (data) => {\n const output = {}\n const masto = !Object.prototype.hasOwnProperty.call(data, 'oembed')\n\n if (masto) {\n // Not exactly same...\n output.mimetype = data.pleroma ? data.pleroma.mime_type : data.type\n output.meta = data.meta // not present in BE yet\n output.id = data.id\n } else {\n output.mimetype = data.mimetype\n // output.meta = ??? missing\n }\n\n output.url = data.url\n output.large_thumb_url = data.preview_url\n output.description = data.description\n\n return output\n}\n\nexport const parseSource = (data) => {\n const output = {}\n\n output.text = data.text\n output.spoiler_text = data.spoiler_text\n output.content_type = data.content_type\n\n return output\n}\n\nexport const parseStatus = (data) => {\n const output = {}\n const masto = Object.prototype.hasOwnProperty.call(data, 'account')\n\n if (masto) {\n output.favorited = data.favourited\n output.fave_num = data.favourites_count\n\n output.repeated = data.reblogged\n output.repeat_num = data.reblogs_count\n\n output.bookmarked = data.bookmarked\n\n output.type = data.reblog ? 'retweet' : 'status'\n output.nsfw = data.sensitive\n\n output.raw_html = data.content\n output.emojis = data.emojis\n\n output.tags = data.tags\n\n output.edited_at = data.edited_at\n\n if (data.pleroma) {\n const { pleroma } = data\n output.text = pleroma.content ? data.pleroma.content['text/plain'] : data.content\n output.summary = pleroma.spoiler_text ? data.pleroma.spoiler_text['text/plain'] : data.spoiler_text\n output.statusnet_conversation_id = data.pleroma.conversation_id\n output.is_local = pleroma.local\n output.in_reply_to_screen_name = data.pleroma.in_reply_to_account_acct\n output.thread_muted = pleroma.thread_muted\n output.emoji_reactions = pleroma.emoji_reactions\n output.parent_visible = pleroma.parent_visible === undefined ? true : pleroma.parent_visible\n output.quote = pleroma.quote ? parseStatus(pleroma.quote) : undefined\n output.quote_id = pleroma.quote_id ? pleroma.quote_id : (output.quote ? output.quote.id : undefined)\n output.quote_url = pleroma.quote_url\n output.quote_visible = pleroma.quote_visible\n } else {\n output.text = data.content\n output.summary = data.spoiler_text\n }\n\n output.in_reply_to_status_id = data.in_reply_to_id\n output.in_reply_to_user_id = data.in_reply_to_account_id\n output.replies_count = data.replies_count\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.reblog)\n }\n\n output.summary_raw_html = escape(data.spoiler_text)\n output.external_url = data.url\n output.poll = data.poll\n if (output.poll) {\n output.poll.options = (output.poll.options || []).map(field => ({\n ...field,\n title_html: escape(field.title)\n }))\n }\n output.pinned = data.pinned\n output.muted = data.muted\n } else {\n output.favorited = data.favorited\n output.fave_num = data.fave_num\n\n output.repeated = data.repeated\n output.repeat_num = data.repeat_num\n\n // catchall, temporary\n // Object.assign(output, data)\n\n output.type = qvitterStatusType(data)\n\n if (data.nsfw === undefined) {\n output.nsfw = isNsfw(data)\n if (data.retweeted_status) {\n output.nsfw = data.retweeted_status.nsfw\n }\n } else {\n output.nsfw = data.nsfw\n }\n\n output.raw_html = data.statusnet_html\n output.text = data.text\n\n output.in_reply_to_status_id = data.in_reply_to_status_id\n output.in_reply_to_user_id = data.in_reply_to_user_id\n output.in_reply_to_screen_name = data.in_reply_to_screen_name\n output.statusnet_conversation_id = data.statusnet_conversation_id\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.retweeted_status)\n }\n\n output.summary = data.summary\n output.summary_html = data.summary_html\n output.external_url = data.external_url\n output.is_local = data.is_local\n }\n\n output.id = String(data.id)\n output.visibility = data.visibility\n output.card = data.card\n output.created_at = new Date(data.created_at)\n\n // Converting to string, the right way.\n output.in_reply_to_status_id = output.in_reply_to_status_id\n ? String(output.in_reply_to_status_id)\n : null\n output.in_reply_to_user_id = output.in_reply_to_user_id\n ? String(output.in_reply_to_user_id)\n : null\n\n output.user = parseUser(masto ? data.account : data.user)\n\n output.attentions = ((masto ? data.mentions : data.attentions) || []).map(parseUser)\n\n output.attachments = ((masto ? data.media_attachments : data.attachments) || [])\n .map(parseAttachment)\n\n const retweetedStatus = masto ? data.reblog : data.retweeted_status\n if (retweetedStatus) {\n output.retweeted_status = parseStatus(retweetedStatus)\n }\n\n output.favoritedBy = []\n output.rebloggedBy = []\n\n if (Object.prototype.hasOwnProperty.call(data, 'originalStatus')) {\n Object.assign(output, data.originalStatus)\n }\n\n return output\n}\n\nexport const parseNotification = (data) => {\n const mastoDict = {\n favourite: 'like',\n reblog: 'repeat'\n }\n const masto = !Object.prototype.hasOwnProperty.call(data, 'ntype')\n const output = {}\n\n if (masto) {\n output.type = mastoDict[data.type] || data.type\n output.seen = data.pleroma.is_seen\n output.status = isStatusNotification(output.type) ? parseStatus(data.status) : null\n output.action = output.status // TODO: Refactor, this is unneeded\n output.target = output.type !== 'move'\n ? null\n : parseUser(data.target)\n output.from_profile = parseUser(data.account)\n output.emoji = data.emoji\n output.emoji_url = data.emoji_url\n if (data.report) {\n output.report = data.report\n output.report.content = data.report.content\n output.report.acct = parseUser(data.report.account)\n output.report.actor = parseUser(data.report.actor)\n output.report.statuses = data.report.statuses.map(parseStatus)\n }\n } else {\n const parsedNotice = parseStatus(data.notice)\n output.type = data.ntype\n output.seen = Boolean(data.is_seen)\n output.status = output.type === 'like'\n ? parseStatus(data.notice.favorited_status)\n : parsedNotice\n output.action = parsedNotice\n output.from_profile = output.type === 'pleroma:chat_mention' ? parseUser(data.account) : parseUser(data.from_profile)\n }\n\n output.created_at = new Date(data.created_at)\n output.id = parseInt(data.id)\n\n return output\n}\n\nconst isNsfw = (status) => {\n const nsfwRegex = /#nsfw/i\n return (status.tags || []).includes('nsfw') || !!(status.text || '').match(nsfwRegex)\n}\n\nexport const parseLinkHeaderPagination = (linkHeader, opts = {}) => {\n const flakeId = opts.flakeId\n const parsedLinkHeader = parseLinkHeader(linkHeader)\n if (!parsedLinkHeader) return\n const maxId = parsedLinkHeader.next.max_id\n const minId = parsedLinkHeader.prev.min_id\n\n return {\n maxId: flakeId ? maxId : parseInt(maxId, 10),\n minId: flakeId ? minId : parseInt(minId, 10)\n }\n}\n\nexport const parseChat = (chat) => {\n const output = {}\n output.id = chat.id\n output.account = parseUser(chat.account)\n output.unread = chat.unread\n output.lastMessage = parseChatMessage(chat.last_message)\n output.updated_at = new Date(chat.updated_at)\n return output\n}\n\nexport const parseChatMessage = (message) => {\n if (!message) { return }\n if (message.isNormalized) { return message }\n const output = message\n output.id = message.id\n output.created_at = new Date(message.created_at)\n output.chat_id = message.chat_id\n output.emojis = message.emojis\n output.content = message.content\n if (message.attachment) {\n output.attachments = [parseAttachment(message.attachment)]\n } else {\n output.attachments = []\n }\n output.pending = !!message.pending\n output.error = false\n output.idempotency_key = message.idempotency_key\n output.isNormalized = true\n return output\n}\n","const createFaviconService = () => {\n const favicons = []\n const faviconWidth = 128\n const faviconHeight = 128\n const badgeRadius = 32\n\n const initFaviconService = () => {\n const nodes = document.querySelectorAll('link[rel=\"icon\"]')\n nodes.forEach(favicon => {\n if (favicon) {\n const favcanvas = document.createElement('canvas')\n favcanvas.width = faviconWidth\n favcanvas.height = faviconHeight\n const favimg = new Image()\n favimg.crossOrigin = 'anonymous'\n favimg.src = favicon.href\n const favcontext = favcanvas.getContext('2d')\n favicons.push({ favcanvas, favimg, favcontext, favicon })\n }\n })\n }\n\n const isImageLoaded = (img) => img.complete && img.naturalHeight !== 0\n\n const clearFaviconBadge = () => {\n if (favicons.length === 0) return\n favicons.forEach(({ favimg, favcanvas, favcontext, favicon }) => {\n if (!favimg || !favcontext || !favicon) return\n\n favcontext.clearRect(0, 0, faviconWidth, faviconHeight)\n if (isImageLoaded(favimg)) {\n favcontext.drawImage(favimg, 0, 0, favimg.width, favimg.height, 0, 0, faviconWidth, faviconHeight)\n }\n favicon.href = favcanvas.toDataURL('image/png')\n })\n }\n\n const drawFaviconBadge = () => {\n if (favicons.length === 0) return\n clearFaviconBadge()\n favicons.forEach(({ favimg, favcanvas, favcontext, favicon }) => {\n if (!favimg || !favcontext || !favcontext) return\n\n const style = getComputedStyle(document.body)\n const badgeColor = `${style.getPropertyValue('--badgeNotification') || 'rgb(240, 100, 100)'}`\n\n if (isImageLoaded(favimg)) {\n favcontext.drawImage(favimg, 0, 0, favimg.width, favimg.height, 0, 0, faviconWidth, faviconHeight)\n }\n favcontext.fillStyle = badgeColor\n favcontext.beginPath()\n favcontext.arc(faviconWidth - badgeRadius, badgeRadius, badgeRadius, 0, 2 * Math.PI, false)\n favcontext.fill()\n favicon.href = favcanvas.toDataURL('image/png')\n })\n }\n\n return {\n initFaviconService,\n clearFaviconBadge,\n drawFaviconBadge\n }\n}\n\nconst FaviconService = createFaviconService()\n\nexport default FaviconService\n","const fileSizeFormat = (numArg) => {\n const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']\n let num = numArg\n if (num < 1) {\n return num + ' ' + units[0]\n }\n\n const 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 const unit = units[exponent]\n return { num, unit }\n}\nconst fileSizeFormatService = {\n fileSizeFormat\n}\nexport default fileSizeFormatService\n","// TODO this func might as well take the entire file and use its mimetype\n// or the entire service could be just mimetype service that only operates\n// on mimetypes and not files. Currently the naming is confusing.\nexport const fileType = mimetype => {\n if (mimetype.match(/flash/)) {\n return 'flash'\n }\n\n if (mimetype.match(/text\\/html/)) {\n return 'html'\n }\n\n if (mimetype.match(/image/)) {\n return 'image'\n }\n\n if (mimetype.match(/video/)) {\n return 'video'\n }\n\n if (mimetype.match(/audio/)) {\n return 'audio'\n }\n\n return 'unknown'\n}\n\nexport const fileTypeExt = url => {\n if (url.match(/\\.(png|jpe?g|gif|webp|avif)$/)) {\n return 'image'\n }\n if (url.match(/\\.(ogv|mp4|webm|mov)$/)) {\n return 'video'\n }\n if (url.match(/\\.(it|s3m|mod|umx|mp3|aac|m4a|flac|alac|ogg|oga|opus|wav|ape|midi?)$/)) {\n return 'audio'\n }\n return 'unknown'\n}\n\nexport const fileMatchesSomeType = (types, file) =>\n types.some(type => fileType(file.mimetype) === type)\n\nconst fileTypeService = {\n fileType,\n fileTypeExt,\n fileMatchesSomeType\n}\n\nexport default fileTypeService\n","import languagesObject from '../../i18n/messages'\nimport ISO6391 from 'iso-639-1'\nimport _ from 'lodash'\n\nconst specialLanguageCodes = {\n ja_easy: 'ja',\n zh_Hant: 'zh-HANT',\n zh: 'zh-Hans'\n}\n\nconst internalToBrowserLocale = code => specialLanguageCodes[code] || code\n\nconst internalToBackendLocale = code => internalToBrowserLocale(code).replace('_', '-')\nconst internalToBackendLocaleMulti = codes => {\n const langs = Array.isArray(codes) ? codes : [codes]\n return langs.map(internalToBackendLocale).join(',')\n}\n\nconst getLanguageName = (code) => {\n const specialLanguageNames = {\n ja_easy: 'やさしいにほんご',\n 'nan-TW': '臺語(閩南語)',\n zh: '简体中文',\n zh_Hant: '繁體中文'\n }\n const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)\n const browserLocale = internalToBrowserLocale(code)\n return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)\n}\n\nconst languages = _.map(languagesObject.languages, (code) => ({ code, name: getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))\n\nconst localeService = {\n internalToBrowserLocale,\n internalToBackendLocale,\n internalToBackendLocaleMulti,\n languages,\n getLanguageName\n}\n\nexport default localeService\n","import { filter, sortBy, includes } from 'lodash'\nimport { muteWordHits } from '../status_parser/status_parser.js'\nimport { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'\n\nexport const notificationsFromStore = store => store.state.statuses.notifications.data\n\nexport const visibleTypes = store => {\n const rootState = store.rootState || store.state\n\n return ([\n rootState.config.notificationVisibility.likes && 'like',\n rootState.config.notificationVisibility.mentions && 'mention',\n rootState.config.notificationVisibility.repeats && 'repeat',\n rootState.config.notificationVisibility.follows && 'follow',\n rootState.config.notificationVisibility.followRequest && 'follow_request',\n rootState.config.notificationVisibility.moves && 'move',\n rootState.config.notificationVisibility.emojiReactions && 'pleroma:emoji_reaction',\n rootState.config.notificationVisibility.reports && 'pleroma:report',\n rootState.config.notificationVisibility.polls && 'poll'\n ].filter(_ => _))\n}\n\nconst statusNotifications = ['like', 'mention', 'repeat', 'pleroma:emoji_reaction', 'poll']\n\nexport const isStatusNotification = (type) => includes(statusNotifications, type)\n\nexport const isValidNotification = (notification) => {\n if (isStatusNotification(notification.type) && !notification.status) {\n return false\n }\n return true\n}\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nconst isMutedNotification = (store, notification) => {\n if (!notification.status) return\n return notification.status.muted || muteWordHits(notification.status, store.rootGetters.mergedConfig.muteWords).length > 0\n}\n\nexport const maybeShowNotification = (store, notification) => {\n const rootState = store.rootState || store.state\n\n if (notification.seen) return\n if (!visibleTypes(store).includes(notification.type)) return\n if (notification.type === 'mention' && isMutedNotification(store, notification)) return\n\n const notificationObject = prepareNotificationObject(notification, store.rootGetters.i18n)\n showDesktopNotification(rootState, notificationObject)\n}\n\nexport const filteredNotificationsFromStore = (store, types) => {\n // map is just to clone the array since sort mutates it and it causes some issues\n let sortedNotifications = notificationsFromStore(store).map(_ => _).sort(sortById)\n sortedNotifications = sortBy(sortedNotifications, 'seen')\n return sortedNotifications.filter(\n (notification) => (types || visibleTypes(store)).includes(notification.type)\n )\n}\n\nexport const unseenNotificationsFromStore = store =>\n filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)\n\nexport const prepareNotificationObject = (notification, i18n) => {\n const notifObj = {\n tag: notification.id\n }\n const status = notification.status\n const title = notification.from_profile.name\n notifObj.title = title\n notifObj.icon = notification.from_profile.profile_image_url\n let i18nString\n switch (notification.type) {\n case 'like':\n i18nString = 'favorited_you'\n break\n case 'repeat':\n i18nString = 'repeated_you'\n break\n case 'follow':\n i18nString = 'followed_you'\n break\n case 'move':\n i18nString = 'migrated_to'\n break\n case 'follow_request':\n i18nString = 'follow_request'\n break\n case 'pleroma:report':\n i18nString = 'submitted_report'\n break\n case 'poll':\n i18nString = 'poll_ended'\n break\n }\n\n if (notification.type === 'pleroma:emoji_reaction') {\n notifObj.body = i18n.t('notifications.reacted_with', [notification.emoji])\n } else if (i18nString) {\n notifObj.body = i18n.t('notifications.' + i18nString)\n } else if (isStatusNotification(notification.type)) {\n notifObj.body = notification.status.text\n }\n\n // Shows first attached non-nsfw image, if any. Should add configuration for this somehow...\n if (status && status.attachments && status.attachments.length > 0 && !status.nsfw &&\n status.attachments[0].mimetype.startsWith('image/')) {\n notifObj.image = status.attachments[0].url\n }\n\n return notifObj\n}\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\n// For using include_types when fetching notifications.\n// Note: chat_mention excluded as pleroma-fe polls them separately\nconst mastoApiNotificationTypes = [\n 'mention',\n 'favourite',\n 'reblog',\n 'follow',\n 'move',\n 'pleroma:emoji_reaction',\n 'pleroma:report'\n]\n\nconst update = ({ store, notifications, older }) => {\n store.dispatch('addNewNotifications', { notifications, older })\n}\n\nconst fetchAndUpdate = ({ store, credentials, older = false, since }) => {\n const args = { credentials }\n const { getters } = store\n const rootState = store.rootState || store.state\n const timelineData = rootState.statuses.notifications\n const hideMutedPosts = getters.mergedConfig.hideMutedPosts\n\n args.includeTypes = mastoApiNotificationTypes\n args.withMuted = !hideMutedPosts\n\n args.timeline = 'notifications'\n if (older) {\n if (timelineData.minId !== Number.POSITIVE_INFINITY) {\n args.until = timelineData.minId\n }\n return fetchNotifications({ store, args, older })\n } else {\n // fetch new notifications\n if (since === undefined && timelineData.maxId !== Number.POSITIVE_INFINITY) {\n args.since = timelineData.maxId\n } else if (since !== null) {\n args.since = since\n }\n const result = fetchNotifications({ store, args, older })\n\n // If there's any unread notifications, try fetch notifications since\n // the newest read notification to check if any of the unread notifs\n // have changed their 'seen' state (marked as read in another session), so\n // we can update the state in this session to mark them as read as well.\n // The normal maxId-check does not tell if older notifications have changed\n const notifications = timelineData.data\n const readNotifsIds = notifications.filter(n => n.seen).map(n => n.id)\n const numUnseenNotifs = notifications.length - readNotifsIds.length\n if (numUnseenNotifs > 0 && readNotifsIds.length > 0) {\n args.since = Math.max(...readNotifsIds)\n fetchNotifications({ store, args, older })\n }\n\n return result\n }\n}\n\nconst fetchNotifications = ({ store, args, older }) => {\n return apiService.fetchTimeline(args)\n .then((response) => {\n if (response.errors) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n const notifications = response.data\n update({ store, notifications, older })\n return notifications\n })\n .catch((error) => {\n store.dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'notifications.error',\n messageArgs: [error.message],\n timeout: 5000\n })\n console.error(error)\n })\n}\n\nconst startFetching = ({ credentials, store }) => {\n // Initially there's set flag to silence all desktop notifications so\n // that there won't spam of them when user just opened up the FE we\n // reset that flag after a while to show new notifications once again.\n setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\n\nconst notificationsFetcher = {\n fetchAndUpdate,\n startFetching\n}\n\nexport default notificationsFetcher\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 && window.getComputedStyle(child.offsetParent).position !== 'sticky' && (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","\n// promiseInterval - replacement for setInterval for promises, starts counting\n// the interval only after a promise is done instead of immediately.\n// - promiseCall is a function that returns a promise, it's called the first\n// time after the first interval.\n// - interval is the interval delay in ms.\n\nexport const promiseInterval = (promiseCall, interval) => {\n let stopped = false\n let timeout = null\n\n const func = () => {\n const promise = promiseCall()\n // something unexpected happened and promiseCall did not\n // return a promise, abort the loop.\n if (!(promise && promise.finally)) {\n console.warn('promiseInterval: promise call did not return a promise, stopping interval.')\n return\n }\n promise.finally(() => {\n if (stopped) return\n timeout = window.setTimeout(func, interval)\n })\n }\n\n const stopFetcher = () => {\n stopped = true\n window.clearTimeout(timeout)\n }\n\n timeout = window.setTimeout(func, interval)\n\n return { stop: stopFetcher }\n}\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","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 quoteId = 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 quoteId,\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 editStatus = ({\n store,\n statusId,\n status,\n spoilerText,\n sensitive,\n poll,\n media = [],\n contentType = 'text/plain'\n}) => {\n const mediaIds = map(media, 'id')\n\n return apiService.editStatus({\n id: statusId,\n credentials: store.state.users.currentUser.credentials,\n status,\n spoilerText,\n sensitive,\n poll,\n mediaIds,\n contentType\n })\n .then((data) => {\n if (!data.error) {\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 console.error('Error editing status', 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 editStatus,\n uploadMedia,\n setMediaDescription\n}\n\nexport default statusPosterService\n","import { convert } from 'chromatism'\nimport { rgb2hex, hex2rgb, rgba2css, getCssColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { getColors, computeDynamicColor, getOpacitySlot } from '../theme_data/theme_data.service.js'\nimport { defaultState } from '../../modules/config.js'\n\nexport const applyTheme = (input) => {\n const { rules } = generatePreset(input)\n const head = document.head\n const body = document.body\n body.classList.add('hidden')\n\n const styleEl = document.createElement('style')\n head.appendChild(styleEl)\n const styleSheet = styleEl.sheet\n\n styleSheet.toString()\n styleSheet.insertRule(`:root { ${rules.radii} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.colors} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.shadows} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.fonts} }`, 'index-max')\n body.classList.remove('hidden')\n}\n\nconst configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale }) =>\n ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale })\n\nconst defaultConfigColumns = configColumns(defaultState)\n\nexport const applyConfig = (config) => {\n const columns = configColumns(config)\n\n if (columns === defaultConfigColumns) {\n return\n }\n\n const head = document.head\n const body = document.body\n body.classList.add('hidden')\n\n const rules = Object\n .entries(columns)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}: ${v}`).join(';')\n\n const styleEl = document.createElement('style')\n head.appendChild(styleEl)\n const styleSheet = styleEl.sheet\n\n styleSheet.toString()\n styleSheet.insertRule(`:root { ${rules} }`, 'index-max')\n body.classList.remove('hidden')\n}\n\nexport const getCssShadow = (input, usesDropShadow) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n .filter(_ => usesDropShadow ? _.inset : _)\n .map((shad) => [\n shad.x,\n shad.y,\n shad.blur,\n shad.spread\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha),\n shad.inset ? 'inset' : ''\n ]).join(' ')).join(', ')\n}\n\nconst getCssShadowFilter = (input) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n // drop-shadow doesn't support inset or spread\n .filter((shad) => !shad.inset && Number(shad.spread) === 0)\n .map((shad) => [\n shad.x,\n shad.y,\n // drop-shadow's blur is twice as strong compared to box-shadow\n shad.blur / 2\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha)\n ]).join(' '))\n .map(_ => `drop-shadow(${_})`)\n .join(' ')\n}\n\nexport const generateColors = (themeData) => {\n const sourceColors = !themeData.themeEngineVersion\n ? colors2to3(themeData.colors || themeData)\n : themeData.colors || themeData\n\n const { colors, opacity } = getColors(sourceColors, themeData.opacity || {})\n\n const htmlColors = Object.entries(colors)\n .reduce((acc, [k, v]) => {\n if (!v) return acc\n acc.solid[k] = rgb2hex(v)\n acc.complete[k] = typeof v.a === 'undefined' ? rgb2hex(v) : rgba2css(v)\n return acc\n }, { complete: {}, solid: {} })\n return {\n rules: {\n colors: Object.entries(htmlColors.complete)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}: ${v}`)\n .join(';')\n },\n theme: {\n colors: htmlColors.solid,\n opacity\n }\n }\n}\n\nexport const generateRadii = (input) => {\n let inputRadii = input.radii || {}\n // v1 -> v2\n if (typeof input.btnRadius !== 'undefined') {\n inputRadii = Object\n .entries(input)\n .filter(([k, v]) => k.endsWith('Radius'))\n .reduce((acc, e) => { acc[e[0].split('Radius')[0]] = e[1]; return acc }, {})\n }\n const radii = Object.entries(inputRadii).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {\n btn: 4,\n input: 4,\n checkbox: 2,\n panel: 10,\n avatar: 5,\n avatarAlt: 50,\n tooltip: 2,\n attachment: 5,\n chatMessage: inputRadii.panel\n })\n\n return {\n rules: {\n radii: Object.entries(radii).filter(([k, v]) => v).map(([k, v]) => `--${k}Radius: ${v}px`).join(';')\n },\n theme: {\n radii\n }\n }\n}\n\nexport const generateFonts = (input) => {\n const fonts = Object.entries(input.fonts || {}).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = Object.entries(v).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, acc[k])\n return acc\n }, {\n interface: {\n family: 'sans-serif'\n },\n input: {\n family: 'inherit'\n },\n post: {\n family: 'inherit'\n },\n postCode: {\n family: 'monospace'\n }\n })\n\n return {\n rules: {\n fonts: Object\n .entries(fonts)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}Font: ${v.family}`).join(';')\n },\n theme: {\n fonts\n }\n }\n}\n\nconst border = (top, shadow) => ({\n x: 0,\n y: top ? 1 : -1,\n blur: 0,\n spread: 0,\n color: shadow ? '#000000' : '#FFFFFF',\n alpha: 0.2,\n inset: true\n})\nconst buttonInsetFakeBorders = [border(true, false), border(false, true)]\nconst inputInsetFakeBorders = [border(true, true), border(false, false)]\nconst hoverGlow = {\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '--faint',\n alpha: 1\n}\n\nexport const DEFAULT_SHADOWS = {\n panel: [{\n x: 1,\n y: 1,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n topBar: [{\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n popup: [{\n x: 2,\n y: 2,\n blur: 3,\n spread: 0,\n color: '#000000',\n alpha: 0.5\n }],\n avatar: [{\n x: 0,\n y: 1,\n blur: 8,\n spread: 0,\n color: '#000000',\n alpha: 0.7\n }],\n avatarStatus: [],\n panelHeader: [],\n button: [{\n x: 0,\n y: 0,\n blur: 2,\n spread: 0,\n color: '#000000',\n alpha: 1\n }, ...buttonInsetFakeBorders],\n buttonHover: [hoverGlow, ...buttonInsetFakeBorders],\n buttonPressed: [hoverGlow, ...inputInsetFakeBorders],\n input: [...inputInsetFakeBorders, {\n x: 0,\n y: 0,\n blur: 2,\n inset: true,\n spread: 0,\n color: '#000000',\n alpha: 1\n }]\n}\nexport const generateShadows = (input, colors) => {\n // TODO this is a small hack for `mod` to work with shadows\n // this is used to get the \"context\" of shadow, i.e. for `mod` properly depend on background color of element\n const hackContextDict = {\n button: 'btn',\n panel: 'bg',\n top: 'topBar',\n popup: 'popover',\n avatar: 'bg',\n panelHeader: 'panel',\n input: 'input'\n }\n\n const cleanInputShadows = Object.fromEntries(\n Object.entries(input.shadows || {})\n .map(([name, shadowSlot]) => [\n name,\n // defaulting color to black to avoid potential problems\n shadowSlot.map(shadowDef => ({ color: '#000000', ...shadowDef }))\n ])\n )\n const inputShadows = cleanInputShadows && !input.themeEngineVersion\n ? shadows2to3(cleanInputShadows, input.opacity)\n : cleanInputShadows || {}\n const shadows = Object.entries({\n ...DEFAULT_SHADOWS,\n ...inputShadows\n }).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const slotFirstWord = slotName.replace(/[A-Z].*$/, '')\n const colorSlotName = hackContextDict[slotFirstWord]\n const isLightOnDark = relativeLuminance(convert(colors[colorSlotName]).rgb) < 0.5\n const mod = isLightOnDark ? 1 : -1\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n color: rgb2hex(computeDynamicColor(\n def.color,\n (variableSlot) => convert(colors[variableSlot]).rgb,\n mod\n ))\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n\n return {\n rules: {\n shadows: Object\n .entries(shadows)\n // TODO for v2.2: if shadow doesn't have non-inset shadows with spread > 0 - optionally\n // convert all non-inset shadows into filter: drop-shadow() to boost performance\n .map(([k, v]) => [\n `--${k}Shadow: ${getCssShadow(v)}`,\n `--${k}ShadowFilter: ${getCssShadowFilter(v)}`,\n `--${k}ShadowInset: ${getCssShadow(v, true)}`\n ].join(';'))\n .join(';')\n },\n theme: {\n shadows\n }\n }\n}\n\nexport const composePreset = (colors, radii, shadows, fonts) => {\n return {\n rules: {\n ...shadows.rules,\n ...colors.rules,\n ...radii.rules,\n ...fonts.rules\n },\n theme: {\n ...shadows.theme,\n ...colors.theme,\n ...radii.theme,\n ...fonts.theme\n }\n }\n}\n\nexport const generatePreset = (input) => {\n const colors = generateColors(input)\n return composePreset(\n colors,\n generateRadii(input),\n generateShadows(input, colors.theme.colors, colors.mod),\n generateFonts(input)\n )\n}\n\nexport const getThemes = () => {\n const cache = 'no-store'\n\n return window.fetch('/static/styles.json', { cache })\n .then((data) => data.json())\n .then((themes) => {\n return Object.entries(themes).map(([k, v]) => {\n let promise = null\n if (typeof v === 'object') {\n promise = Promise.resolve(v)\n } else if (typeof v === 'string') {\n promise = window.fetch(v, { cache })\n .then((data) => data.json())\n .catch((e) => {\n console.error(e)\n return null\n })\n }\n return [k, promise]\n })\n })\n .then((promises) => {\n return promises\n .reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {})\n })\n}\nexport const colors2to3 = (colors) => {\n return Object.entries(colors).reduce((acc, [slotName, color]) => {\n const btnPositions = ['', 'Panel', 'TopBar']\n switch (slotName) {\n case 'lightBg':\n return { ...acc, highlight: color }\n case 'btnText':\n return {\n ...acc,\n ...btnPositions\n .reduce(\n (statePositionAcc, position) =>\n ({ ...statePositionAcc, ['btn' + position + 'Text']: color })\n , {}\n )\n }\n default:\n return { ...acc, [slotName]: color }\n }\n }, {})\n}\n\n/**\n * This handles compatibility issues when importing v2 theme's shadows to current format\n *\n * Back in v2 shadows allowed you to use dynamic colors however those used pure CSS3 variables\n */\nexport const shadows2to3 = (shadows, opacity) => {\n return Object.entries(shadows).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const isDynamic = ({ color = '#000000' }) => color.startsWith('--')\n const getOpacity = ({ color }) => opacity[getOpacitySlot(color.substring(2).split(',')[0])]\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n alpha: isDynamic(def) ? getOpacity(def) || 1 : def.alpha\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n}\n\nexport const getPreset = (val) => {\n return getThemes()\n .then((themes) => themes[val] ? themes[val] : themes['pleroma-dark'])\n .then((theme) => {\n const isV1 = Array.isArray(theme)\n const data = isV1 ? {} : theme.theme\n\n if (isV1) {\n const bg = hex2rgb(theme[1])\n const fg = hex2rgb(theme[2])\n const text = hex2rgb(theme[3])\n const link = hex2rgb(theme[4])\n\n const cRed = hex2rgb(theme[5] || '#FF0000')\n const cGreen = hex2rgb(theme[6] || '#00FF00')\n const cBlue = hex2rgb(theme[7] || '#0000FF')\n const cOrange = hex2rgb(theme[8] || '#E3FF00')\n\n data.colors = { bg, fg, text, link, cRed, cBlue, cGreen, cOrange }\n }\n\n return { theme: data, source: theme.source }\n })\n}\n\nexport const setPreset = (val) => getPreset(val).then(data => applyTheme(data.theme))\n","import { invertLightness, brightness } from 'chromatism'\nimport { alphaBlend, mixrgb } from '../color_convert/color_convert.js'\n/* This is a definition of all layer combinations\n * each key is a topmost layer, each value represents layer underneath\n * this is essentially a simplified tree\n */\nexport const LAYERS = {\n undelay: null, // root\n topBar: null, // no transparency support\n badge: null, // no transparency support\n profileTint: null, // doesn't matter\n fg: null,\n bg: 'underlay',\n highlight: 'bg',\n panel: 'bg',\n popover: 'bg',\n selectedMenu: 'popover',\n btn: 'bg',\n btnPanel: 'panel',\n btnTopBar: 'topBar',\n input: 'bg',\n inputPanel: 'panel',\n inputTopBar: 'topBar',\n alert: 'bg',\n alertPanel: 'panel',\n poll: 'bg',\n chatBg: 'underlay',\n chatMessage: 'chatBg'\n}\n\n/* By default opacity slots have 1 as default opacity\n * this allows redefining it to something else\n */\nexport const DEFAULT_OPACITY = {\n profileTint: 0.5,\n alert: 0.5,\n input: 0.5,\n faint: 0.5,\n underlay: 0.15,\n alertPopup: 0.95\n}\n\n/** SUBJECT TO CHANGE IN THE FUTURE, this is all beta\n * Color and opacity slots definitions. Each key represents a slot.\n *\n * Short-hands:\n * String beginning with `--` - value after dashes treated as sole\n * dependency - i.e. `--value` equivalent to { depends: ['value']}\n * String beginning with `#` - value would be treated as solid color\n * defined in hexadecimal representation (i.e. #FFFFFF) and will be\n * used as default. `#FFFFFF` is equivalent to { default: '#FFFFFF'}\n *\n * Full definition:\n * @property {String[]} depends - color slot names this color depends ones.\n * cyclic dependencies are supported to some extent but not recommended.\n * @property {String} [opacity] - opacity slot used by this color slot.\n * opacity is inherited from parents. To break inheritance graph use null\n * @property {Number} [priority] - EXPERIMENTAL. used to pre-sort slots so\n * that slots with higher priority come earlier\n * @property {Function(mod, ...colors)} [color] - function that will be\n * used to determine the color. By default it just copies first color in\n * dependency list.\n * @argument {Number} mod - `1` (light-on-dark) or `-1` (dark-on-light)\n * depending on background color (for textColor)/given color.\n * @argument {...Object} deps - each argument after mod represents each\n * color from `depends` array. All colors take user customizations into\n * account and represented by { r, g, b } objects.\n * @returns {Object} resulting color, should be in { r, g, b } form\n *\n * @property {Boolean|String} [textColor] - true to mark color slot as text\n * color. This enables automatic text color generation for the slot. Use\n * 'preserve' string if you don't want text color to fall back to\n * black/white. Use 'bw' to only ever use black or white. This also makes\n * following properties required:\n * @property {String} [layer] - which layer the text sit on top on - used\n * to account for transparency in text color calculation\n * layer is inherited from parents. To break inheritance graph use null\n * @property {String} [variant] - which color slot is background (same as\n * above, used to account for transparency)\n */\nexport const SLOT_INHERITANCE = {\n bg: {\n depends: [],\n opacity: 'bg',\n priority: 1\n },\n wallpaper: {\n depends: ['bg'],\n color: (mod, bg) => brightness(-2 * mod, bg).rgb\n },\n fg: {\n depends: [],\n priority: 1\n },\n text: {\n depends: [],\n layer: 'bg',\n opacity: null,\n priority: 1\n },\n underlay: {\n default: '#000000',\n opacity: 'underlay'\n },\n link: {\n depends: ['accent'],\n priority: 1\n },\n accent: {\n depends: ['link'],\n priority: 1\n },\n faint: {\n depends: ['text'],\n opacity: 'faint'\n },\n faintLink: {\n depends: ['link'],\n opacity: 'faint'\n },\n postFaintLink: {\n depends: ['postLink'],\n opacity: 'faint'\n },\n\n cBlue: '#0000ff',\n cRed: '#FF0000',\n cGreen: '#00FF00',\n cOrange: '#E3FF00',\n\n profileBg: {\n depends: ['bg'],\n color: (mod, bg) => ({\n r: Math.floor(bg.r * 0.53),\n g: Math.floor(bg.g * 0.56),\n b: Math.floor(bg.b * 0.59)\n })\n },\n profileTint: {\n depends: ['bg'],\n layer: 'profileTint',\n opacity: 'profileTint'\n },\n\n highlight: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n highlightLightText: {\n depends: ['lightText'],\n layer: 'highlight',\n textColor: true\n },\n highlightPostLink: {\n depends: ['postLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightFaintText: {\n depends: ['faint'],\n layer: 'highlight',\n textColor: true\n },\n highlightFaintLink: {\n depends: ['faintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightText: {\n depends: ['text'],\n layer: 'highlight',\n textColor: true\n },\n highlightLink: {\n depends: ['link'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightIcon: {\n depends: ['highlight', 'highlightText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n popover: {\n depends: ['bg'],\n opacity: 'popover'\n },\n popoverLightText: {\n depends: ['lightText'],\n layer: 'popover',\n textColor: true\n },\n popoverPostLink: {\n depends: ['postLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverFaintText: {\n depends: ['faint'],\n layer: 'popover',\n textColor: true\n },\n popoverFaintLink: {\n depends: ['faintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverText: {\n depends: ['text'],\n layer: 'popover',\n textColor: true\n },\n popoverLink: {\n depends: ['link'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverIcon: {\n depends: ['popover', 'popoverText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedPost: '--highlight',\n selectedPostFaintText: {\n depends: ['highlightFaintText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLightText: {\n depends: ['highlightLightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostPostLink: {\n depends: ['highlightPostLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostText: {\n depends: ['highlightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLink: {\n depends: ['highlightLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostIcon: {\n depends: ['selectedPost', 'selectedPostText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenu: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuLightText: {\n depends: ['highlightLightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintText: {\n depends: ['highlightFaintText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuText: {\n depends: ['highlightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuLink: {\n depends: ['highlightLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuIcon: {\n depends: ['selectedMenu', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenuPopover: {\n depends: ['popover'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuPopoverLightText: {\n depends: ['selectedMenuLightText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintText: {\n depends: ['selectedMenuFaintText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintLink: {\n depends: ['selectedMenuFaintLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverText: {\n depends: ['selectedMenuText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverLink: {\n depends: ['selectedMenuLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverIcon: {\n depends: ['selectedMenuPopover', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n lightText: {\n depends: ['text'],\n layer: 'bg',\n textColor: 'preserve',\n color: (mod, text) => brightness(20 * mod, text).rgb\n },\n\n postLink: {\n depends: ['link'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n postGreentext: {\n depends: ['cGreen'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n postCyantext: {\n depends: ['cBlue'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n border: {\n depends: ['fg'],\n opacity: 'border',\n color: (mod, fg) => brightness(2 * mod, fg).rgb\n },\n\n poll: {\n depends: ['accent', 'bg'],\n copacity: 'poll',\n color: (mod, accent, bg) => alphaBlend(accent, 0.4, bg)\n },\n pollText: {\n depends: ['text'],\n layer: 'poll',\n textColor: true\n },\n\n icon: {\n depends: ['bg', 'text'],\n inheritsOpacity: false,\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n // Foreground\n fgText: {\n depends: ['text'],\n layer: 'fg',\n textColor: true\n },\n fgLink: {\n depends: ['link'],\n layer: 'fg',\n textColor: 'preserve'\n },\n\n // Panel header\n panel: {\n depends: ['fg'],\n opacity: 'panel'\n },\n panelText: {\n depends: ['text'],\n layer: 'panel',\n textColor: true\n },\n panelFaint: {\n depends: ['fgText'],\n layer: 'panel',\n opacity: 'faint',\n textColor: true\n },\n panelLink: {\n depends: ['fgLink'],\n layer: 'panel',\n textColor: 'preserve'\n },\n\n // Top bar\n topBar: '--fg',\n topBarText: {\n depends: ['fgText'],\n layer: 'topBar',\n textColor: true\n },\n topBarLink: {\n depends: ['fgLink'],\n layer: 'topBar',\n textColor: 'preserve'\n },\n\n // Tabs\n tab: {\n depends: ['btn']\n },\n tabText: {\n depends: ['btnText'],\n layer: 'btn',\n textColor: true\n },\n tabActiveText: {\n depends: ['text'],\n layer: 'bg',\n textColor: true\n },\n\n // Buttons\n btn: {\n depends: ['fg'],\n variant: 'btn',\n opacity: 'btn'\n },\n btnText: {\n depends: ['fgText'],\n layer: 'btn',\n textColor: true\n },\n btnPanelText: {\n depends: ['btnText'],\n layer: 'btnPanel',\n variant: 'btn',\n textColor: true\n },\n btnTopBarText: {\n depends: ['btnText'],\n layer: 'btnTopBar',\n variant: 'btn',\n textColor: true\n },\n\n // Buttons: pressed\n btnPressed: {\n depends: ['btn'],\n layer: 'btn'\n },\n btnPressedText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedPanel: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedTopBar: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnPressed',\n textColor: true\n },\n\n // Buttons: toggled\n btnToggled: {\n depends: ['btn'],\n layer: 'btn',\n color: (mod, btn) => brightness(mod * 20, btn).rgb\n },\n btnToggledText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnToggled',\n textColor: true\n },\n\n // Buttons: disabled\n btnDisabled: {\n depends: ['btn', 'bg'],\n color: (mod, btn, bg) => alphaBlend(btn, 0.25, bg)\n },\n btnDisabledText: {\n depends: ['btnText', 'btnDisabled'],\n layer: 'btn',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledPanelText: {\n depends: ['btnPanelText', 'btnDisabled'],\n layer: 'btnPanel',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledTopBarText: {\n depends: ['btnTopBarText', 'btnDisabled'],\n layer: 'btnTopBar',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n\n // Input fields\n input: {\n depends: ['fg'],\n opacity: 'input'\n },\n inputText: {\n depends: ['text'],\n layer: 'input',\n textColor: true\n },\n inputPanelText: {\n depends: ['panelText'],\n layer: 'inputPanel',\n variant: 'input',\n textColor: true\n },\n inputTopbarText: {\n depends: ['topBarText'],\n layer: 'inputTopBar',\n variant: 'input',\n textColor: true\n },\n\n alertError: {\n depends: ['cRed'],\n opacity: 'alert'\n },\n alertErrorText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertError',\n textColor: true\n },\n alertErrorPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertError',\n textColor: true\n },\n\n alertWarning: {\n depends: ['cOrange'],\n opacity: 'alert'\n },\n alertWarningText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertWarning',\n textColor: true\n },\n alertWarningPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertWarning',\n textColor: true\n },\n\n alertSuccess: {\n depends: ['cGreen'],\n opacity: 'alert'\n },\n alertSuccessText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertSuccess',\n textColor: true\n },\n alertSuccessPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertSuccess',\n textColor: true\n },\n\n alertNeutral: {\n depends: ['text'],\n opacity: 'alert'\n },\n alertNeutralText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertNeutral',\n color: (mod, text) => invertLightness(text).rgb,\n textColor: true\n },\n alertNeutralPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertNeutral',\n textColor: true\n },\n\n alertPopupError: {\n depends: ['alertError'],\n opacity: 'alertPopup'\n },\n alertPopupErrorText: {\n depends: ['alertErrorText'],\n layer: 'popover',\n variant: 'alertPopupError',\n textColor: true\n },\n\n alertPopupWarning: {\n depends: ['alertWarning'],\n opacity: 'alertPopup'\n },\n alertPopupWarningText: {\n depends: ['alertWarningText'],\n layer: 'popover',\n variant: 'alertPopupWarning',\n textColor: true\n },\n\n alertPopupSuccess: {\n depends: ['alertSuccess'],\n opacity: 'alertPopup'\n },\n alertPopupSuccessText: {\n depends: ['alertSuccessText'],\n layer: 'popover',\n variant: 'alertPopupSuccess',\n textColor: true\n },\n\n alertPopupNeutral: {\n depends: ['alertNeutral'],\n opacity: 'alertPopup'\n },\n alertPopupNeutralText: {\n depends: ['alertNeutralText'],\n layer: 'popover',\n variant: 'alertPopupNeutral',\n textColor: true\n },\n\n badgeNotification: '--cRed',\n badgeNotificationText: {\n depends: ['text', 'badgeNotification'],\n layer: 'badge',\n variant: 'badgeNotification',\n textColor: 'bw'\n },\n\n badgeNeutral: '--cGreen',\n badgeNeutralText: {\n depends: ['text', 'badgeNeutral'],\n layer: 'badge',\n variant: 'badgeNeutral',\n textColor: 'bw'\n },\n\n chatBg: {\n depends: ['bg']\n },\n\n chatMessageIncomingBg: {\n depends: ['chatBg']\n },\n\n chatMessageIncomingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: true\n },\n\n chatMessageIncomingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: 'preserve'\n },\n\n chatMessageIncomingBorder: {\n depends: ['border'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n },\n\n chatMessageOutgoingBg: {\n depends: ['chatMessageIncomingBg'],\n color: (mod, chatMessage) => brightness(5 * mod, chatMessage).rgb\n },\n\n chatMessageOutgoingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: true\n },\n\n chatMessageOutgoingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: 'preserve'\n },\n\n chatMessageOutgoingBorder: {\n depends: ['chatMessageOutgoingBg'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n }\n}\n","import { convert, brightness, contrastRatio } from 'chromatism'\nimport { alphaBlendLayers, getTextColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { LAYERS, DEFAULT_OPACITY, SLOT_INHERITANCE } from './pleromafe.js'\n\n/*\n * # What's all this?\n * Here be theme engine for pleromafe. All of this supposed to ease look\n * and feel customization, making widget styles and make developer's life\n * easier when it comes to supporting themes. Like many other theme systems\n * it operates on color definitions, or \"slots\" - for example you define\n * \"button\" color slot and then in UI component Button's CSS you refer to\n * it as a CSS3 Variable.\n *\n * Some applications allow you to customize colors for certain things.\n * Some UI toolkits allow you to define colors for each type of widget.\n * Most of them are pretty barebones and have no assistance for common\n * problems and cases, and in general themes themselves are very hard to\n * maintain in all aspects. This theme engine tries to solve all of the\n * common problems with themes.\n *\n * You don't have redefine several similar colors if you just want to\n * change one color - all color slots are derived from other ones, so you\n * can have at least one or two \"basic\" colors defined and have all other\n * components inherit and modify basic ones.\n *\n * You don't have to test contrast ratio for colors or pick text color for\n * each element even if you have light-on-dark elements in dark-on-light\n * theme.\n *\n * You don't have to maintain order of code for inheriting slots from othet\n * slots - dependency graph resolving does it for you.\n */\n\n/* This indicates that this version of code outputs similar theme data and\n * should be incremented if output changes - for instance if getTextColor\n * function changes and older themes no longer render text colors as\n * author intended previously.\n */\nexport const CURRENT_VERSION = 3\n\nexport const getLayersArray = (layer, data = LAYERS) => {\n const array = [layer]\n let parent = data[layer]\n while (parent) {\n array.unshift(parent)\n parent = data[parent]\n }\n return array\n}\n\nexport const getLayers = (layer, variant = layer, opacitySlot, colors, opacity) => {\n return getLayersArray(layer).map((currentLayer) => ([\n currentLayer === layer\n ? colors[variant]\n : colors[currentLayer],\n currentLayer === layer\n ? opacity[opacitySlot] || 1\n : opacity[currentLayer]\n ]))\n}\n\nconst getDependencies = (key, inheritance) => {\n const data = inheritance[key]\n if (typeof data === 'string' && data.startsWith('--')) {\n return [data.substring(2)]\n } else {\n if (data === null) return []\n const { depends, layer, variant } = data\n const layerDeps = layer\n ? getLayersArray(layer).map(currentLayer => {\n return currentLayer === layer\n ? variant || layer\n : currentLayer\n })\n : []\n if (Array.isArray(depends)) {\n return [...depends, ...layerDeps]\n } else {\n return [...layerDeps]\n }\n }\n}\n\n/**\n * Sorts inheritance object topologically - dependant slots come after\n * dependencies\n *\n * @property {Object} inheritance - object defining the nodes\n * @property {Function} getDeps - function that returns dependencies for\n * given value and inheritance object.\n * @returns {String[]} keys of inheritance object, sorted in topological\n * order. Additionally, dependency-less nodes will always be first in line\n */\nexport const topoSort = (\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n // This is an implementation of https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n\n const allKeys = Object.keys(inheritance)\n const whites = new Set(allKeys)\n const grays = new Set()\n const blacks = new Set()\n const unprocessed = [...allKeys]\n const output = []\n\n const step = (node) => {\n if (whites.has(node)) {\n // Make node \"gray\"\n whites.delete(node)\n grays.add(node)\n // Do step for each node connected to it (one way)\n getDeps(node, inheritance).forEach(step)\n // Make node \"black\"\n grays.delete(node)\n blacks.add(node)\n // Put it into the output list\n output.push(node)\n } else if (grays.has(node)) {\n console.debug('Cyclic depenency in topoSort, ignoring')\n output.push(node)\n } else if (blacks.has(node)) {\n // do nothing\n } else {\n throw new Error('Unintended condition in topoSort!')\n }\n }\n while (unprocessed.length > 0) {\n step(unprocessed.pop())\n }\n\n // The index thing is to make sorting stable on browsers\n // where Array.sort() isn't stable\n return output.map((data, index) => ({ data, index })).sort(({ data: a, index: ai }, { data: b, index: bi }) => {\n const depsA = getDeps(a, inheritance).length\n const depsB = getDeps(b, inheritance).length\n\n if (depsA === depsB || (depsB !== 0 && depsA !== 0)) return ai - bi\n if (depsA === 0 && depsB !== 0) return -1\n if (depsB === 0 && depsA !== 0) return 1\n return 0 // failsafe, shouldn't happen?\n }).map(({ data }) => data)\n}\n\nconst expandSlotValue = (value) => {\n if (typeof value === 'object') return value\n return {\n depends: value.startsWith('--') ? [value.substring(2)] : [],\n default: value.startsWith('#') ? value : undefined\n }\n}\n/**\n * retrieves opacity slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * TODO refactor this\n */\nexport const getOpacitySlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (value.opacity === null) return\n if (value.opacity) return value.opacity\n const findInheritedOpacity = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.opacity || dependency === null) {\n return dependency.opacity\n } else if (dependency.depends && visited.includes(depSlot)) {\n return findInheritedOpacity(depSlot, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedOpacity(k)\n }\n}\n\n/**\n * retrieves layer slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * this is basically copypaste of getOpacitySlot except it checks if key is\n * in LAYERS\n * TODO refactor this\n */\nexport const getLayerSlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (LAYERS[k]) return k\n if (value.layer === null) return\n if (value.layer) return value.layer\n const findInheritedLayer = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.layer || dependency === null) {\n return dependency.layer\n } else if (dependency.depends) {\n return findInheritedLayer(dependency, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedLayer(k)\n }\n}\n\n/**\n * topologically sorted SLOT_INHERITANCE\n */\nexport const SLOT_ORDERED = topoSort(\n Object.entries(SLOT_INHERITANCE)\n .sort(([aK, aV], [bK, bV]) => ((aV && aV.priority) || 0) - ((bV && bV.priority) || 0))\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})\n)\n\n/**\n * All opacity slots used in color slots, their default values and affected\n * color slots.\n */\nexport const OPACITIES = Object.entries(SLOT_INHERITANCE).reduce((acc, [k, v]) => {\n const opacity = getOpacitySlot(k, SLOT_INHERITANCE, getDependencies)\n if (opacity) {\n return {\n ...acc,\n [opacity]: {\n defaultValue: DEFAULT_OPACITY[opacity] || 1,\n affectedSlots: [...((acc[opacity] && acc[opacity].affectedSlots) || []), k]\n }\n }\n } else {\n return acc\n }\n}, {})\n\n/**\n * Handle dynamic color\n */\nexport const computeDynamicColor = (sourceColor, getColor, mod) => {\n if (typeof sourceColor !== 'string' || !sourceColor.startsWith('--')) return sourceColor\n let targetColor = null\n // Color references other color\n const [variable, modifier] = sourceColor.split(/,/g).map(str => str.trim())\n const variableSlot = variable.substring(2)\n targetColor = getColor(variableSlot)\n if (modifier) {\n targetColor = brightness(Number.parseFloat(modifier) * mod, targetColor).rgb\n }\n return targetColor\n}\n\n/**\n * THE function you want to use. Takes provided colors and opacities\n * value and uses inheritance data to figure out color needed for the slot.\n */\nexport const getColors = (sourceColors, sourceOpacity) => SLOT_ORDERED.reduce(({ colors, opacity }, key) => {\n const sourceColor = sourceColors[key]\n const value = expandSlotValue(SLOT_INHERITANCE[key])\n const deps = getDependencies(key, SLOT_INHERITANCE)\n const isTextColor = !!value.textColor\n const variant = value.variant || value.layer\n\n let backgroundColor = null\n\n if (isTextColor) {\n backgroundColor = alphaBlendLayers(\n { ...(colors[deps[0]] || convert(sourceColors[key] || '#FF00FF').rgb) },\n getLayers(\n getLayerSlot(key) || 'bg',\n variant || 'bg',\n getOpacitySlot(variant),\n colors,\n opacity\n )\n )\n } else if (variant && variant !== key) {\n backgroundColor = colors[variant] || convert(sourceColors[variant]).rgb\n } else {\n backgroundColor = colors.bg || convert(sourceColors.bg)\n }\n\n const isLightOnDark = relativeLuminance(backgroundColor) < 0.5\n const mod = isLightOnDark ? 1 : -1\n\n let outputColor = null\n if (sourceColor) {\n // Color is defined in source color\n let targetColor = sourceColor\n if (targetColor === 'transparent') {\n // We take only layers below current one\n const layers = getLayers(\n getLayerSlot(key),\n key,\n getOpacitySlot(key) || key,\n colors,\n opacity\n ).slice(0, -1)\n targetColor = {\n ...alphaBlendLayers(\n convert('#FF00FF').rgb,\n layers\n ),\n a: 0\n }\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('--')) {\n targetColor = computeDynamicColor(\n sourceColor,\n variableSlot => colors[variableSlot] || sourceColors[variableSlot],\n mod\n )\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('#')) {\n targetColor = convert(targetColor).rgb\n }\n outputColor = { ...targetColor }\n } else if (value.default) {\n // same as above except in object form\n outputColor = convert(value.default).rgb\n } else {\n // calculate color\n const defaultColorFunc = (mod, dep) => ({ ...dep })\n const colorFunc = value.color || defaultColorFunc\n\n if (value.textColor) {\n if (value.textColor === 'bw') {\n outputColor = contrastRatio(backgroundColor).rgb\n } else {\n let color = { ...colors[deps[0]] }\n if (value.color) {\n color = colorFunc(mod, ...deps.map((dep) => ({ ...colors[dep] })))\n }\n outputColor = getTextColor(\n backgroundColor,\n { ...color },\n value.textColor === 'preserve'\n )\n }\n } else {\n // background color case\n outputColor = colorFunc(\n mod,\n ...deps.map((dep) => ({ ...colors[dep] }))\n )\n }\n }\n if (!outputColor) {\n throw new Error('Couldn\\'t generate color for ' + key)\n }\n\n const opacitySlot = value.opacity || getOpacitySlot(key)\n const ownOpacitySlot = value.opacity\n\n if (ownOpacitySlot === null) {\n outputColor.a = 1\n } else if (sourceColor === 'transparent') {\n outputColor.a = 0\n } else {\n const opacityOverriden = ownOpacitySlot && sourceOpacity[opacitySlot] !== undefined\n\n const dependencySlot = deps[0]\n const dependencyColor = dependencySlot && colors[dependencySlot]\n\n if (!ownOpacitySlot && dependencyColor && !value.textColor && ownOpacitySlot !== null) {\n // Inheriting color from dependency (weird, i know)\n // except if it's a text color or opacity slot is set to 'null'\n outputColor.a = dependencyColor.a\n } else if (!dependencyColor && !opacitySlot) {\n // Remove any alpha channel if no dependency and no opacitySlot found\n delete outputColor.a\n } else {\n // Otherwise try to assign opacity\n if (dependencyColor && dependencyColor.a === 0) {\n // transparent dependency shall make dependents transparent too\n outputColor.a = 0\n } else {\n // Otherwise check if opacity is overriden and use that or default value instead\n outputColor.a = Number(\n opacityOverriden\n ? sourceOpacity[opacitySlot]\n : (OPACITIES[opacitySlot] || {}).defaultValue\n )\n }\n }\n }\n\n if (Number.isNaN(outputColor.a) || outputColor.a === undefined) {\n outputColor.a = 1\n }\n\n if (opacitySlot) {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity: { ...opacity, [opacitySlot]: outputColor.a }\n }\n } else {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity\n }\n }\n}, { colors: {}, opacity: {} })\n","import { hex2rgb } from '../color_convert/color_convert.js'\nconst highlightStyle = (prefs) => {\n if (prefs === undefined) return\n const { color, type } = prefs\n if (typeof color !== 'string') return\n const rgb = hex2rgb(color)\n if (rgb == null) return\n const solidColor = `rgb(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)})`\n const tintColor = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .1)`\n const tintColor2 = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .2)`\n const customProps = {\n '--____highlight-solidColor': solidColor,\n '--____highlight-tintColor': tintColor,\n '--____highlight-tintColor2': tintColor2\n }\n if (type === 'striped') {\n return {\n backgroundImage: [\n 'repeating-linear-gradient(135deg,',\n `${tintColor} ,`,\n `${tintColor} 20px,`,\n `${tintColor2} 20px,`,\n `${tintColor2} 40px`\n ].join(' '),\n backgroundPosition: '0 0',\n ...customProps\n }\n } else if (type === 'solid') {\n return {\n backgroundColor: tintColor2,\n ...customProps\n }\n } else if (type === 'side') {\n return {\n backgroundImage: [\n 'linear-gradient(to right,',\n `${solidColor} ,`,\n `${solidColor} 2px,`,\n 'transparent 6px'\n ].join(' '),\n backgroundPosition: '0 0',\n ...customProps\n }\n }\n}\n\nconst highlightClass = (user) => {\n return 'USER____' + user.screen_name\n .replace(/\\./g, '_')\n .replace(/@/g, '_AT_')\n}\n\nexport {\n highlightClass,\n highlightStyle\n}\n","import { includes } from 'lodash'\n\nconst generateProfileLink = (id, screenName, restrictedNicknames) => {\n const complicated = !screenName || (isExternal(screenName) || includes(restrictedNicknames, screenName))\n return {\n name: (complicated ? 'external-user-profile' : 'user-profile'),\n params: (complicated ? { id } : { name: screenName })\n }\n}\n\nconst isExternal = screenName => screenName && screenName.includes('@')\n\nexport default generateProfileLink\n","<template>\n <button\n v-if=\"usePlaceholder\"\n class=\"Attachment -placeholder button-unstyled\"\n :class=\"classNames\"\n @click=\"openModal\"\n >\n <a\n v-if=\"type !== 'html'\"\n class=\"placeholder\"\n target=\"_blank\"\n :href=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n @click.prevent\n >\n <FAIcon :icon=\"placeholderIconClass\" />\n <b>{{ nsfw ? \"NSFW / \" : \"\" }}</b>{{ edit ? '' : placeholderName }}\n </a>\n <div\n v-if=\"edit || remove\"\n class=\"attachment-buttons\"\n >\n <button\n v-if=\"remove\"\n class=\"button-unstyled attachment-button\"\n @click.prevent=\"onRemove\"\n >\n <FAIcon icon=\"trash-alt\" />\n </button>\n </div>\n <div\n v-if=\"size !== 'hide' && !hideDescription && (edit || localDescription || showDescription)\"\n class=\"description-container\"\n :class=\"{ '-static': !edit }\"\n >\n <input\n v-if=\"edit\"\n v-model=\"localDescription\"\n type=\"text\"\n class=\"description-field\"\n :placeholder=\"$t('post_status.media_description')\"\n @keydown.enter.prevent=\"\"\n >\n <p v-else>\n {{ localDescription }}\n </p>\n </div>\n </button>\n <div\n v-else\n class=\"Attachment\"\n :class=\"classNames\"\n >\n <div\n v-show=\"!isEmpty\"\n class=\"attachment-wrapper\"\n >\n <a\n v-if=\"hidden\"\n class=\"image-container\"\n :href=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <img\n :key=\"nsfwImage\"\n class=\"nsfw\"\n :src=\"nsfwImage\"\n >\n <FAIcon\n v-if=\"type === 'video'\"\n class=\"play-icon\"\n icon=\"play-circle\"\n />\n </a>\n <div\n v-if=\"!hidden\"\n class=\"attachment-buttons\"\n >\n <button\n v-if=\"type === 'flash' && flashLoaded\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.attachment_stop_flash')\"\n @click.prevent=\"stopFlash\"\n >\n <FAIcon icon=\"stop\" />\n </button>\n <button\n v-if=\"attachment.description && size !== 'small' && !edit && type !== 'unknown'\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.show_attachment_description')\"\n @click.prevent=\"toggleDescription\"\n >\n <FAIcon icon=\"align-right\" />\n </button>\n <button\n v-if=\"!useModal && type !== 'unknown'\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.show_attachment_in_modal')\"\n @click.prevent=\"openModalForce\"\n >\n <FAIcon icon=\"search-plus\" />\n </button>\n <button\n v-if=\"nsfw && hideNsfwLocal\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.hide_attachment')\"\n @click.prevent=\"toggleHidden\"\n >\n <FAIcon icon=\"times\" />\n </button>\n <button\n v-if=\"shiftUp\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.move_up')\"\n @click.prevent=\"onShiftUp\"\n >\n <FAIcon icon=\"chevron-left\" />\n </button>\n <button\n v-if=\"shiftDn\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.move_down')\"\n @click.prevent=\"onShiftDn\"\n >\n <FAIcon icon=\"chevron-right\" />\n </button>\n <button\n v-if=\"remove\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.remove_attachment')\"\n @click.prevent=\"onRemove\"\n >\n <FAIcon icon=\"trash-alt\" />\n </button>\n </div>\n\n <a\n v-if=\"type === 'image' && (!hidden || preloadImage)\"\n class=\"image-container\"\n :class=\"{'-hidden': hidden && preloadImage }\"\n :href=\"attachment.url\"\n target=\"_blank\"\n @click.stop.prevent=\"openModal\"\n >\n <StillImage\n class=\"image\"\n :referrerpolicy=\"referrerpolicy\"\n :mimetype=\"attachment.mimetype\"\n :src=\"attachment.large_thumb_url || attachment.url\"\n :image-load-handler=\"onImageLoad\"\n :alt=\"attachment.description\"\n />\n </a>\n\n <a\n v-if=\"type === 'unknown' && !hidden\"\n class=\"placeholder-container\"\n :href=\"attachment.url\"\n target=\"_blank\"\n >\n <FAIcon\n :size=\"compact ? '2x' : '5x'\"\n :icon=\"placeholderIconClass\"\n :title=\"localDescription\"\n />\n <p v-if=\"!compact\">\n {{ localDescription }}\n </p>\n </a>\n\n <component\n :is=\"videoTag\"\n v-if=\"type === 'video' && !hidden\"\n class=\"video-container\"\n :class=\"{ 'button-unstyled': 'isModal' }\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <VideoAttachment\n class=\"video\"\n :attachment=\"attachment\"\n :controls=\"!useModal\"\n @play=\"$emit('play')\"\n @pause=\"$emit('pause')\"\n />\n <FAIcon\n v-if=\"useModal\"\n class=\"play-icon\"\n icon=\"play-circle\"\n />\n </component>\n\n <span\n v-if=\"type === 'audio' && !hidden\"\n class=\"audio-container\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <audio\n v-if=\"type === 'audio'\"\n :src=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n controls\n @play=\"$emit('play')\"\n @pause=\"$emit('pause')\"\n />\n </span>\n\n <div\n v-if=\"type === 'html' && attachment.oembed\"\n class=\"oembed-container\"\n @click.prevent=\"linkClicked\"\n >\n <div\n v-if=\"attachment.thumb_url\"\n class=\"image\"\n >\n <img :src=\"attachment.thumb_url\">\n </div>\n <div class=\"text\">\n <!-- eslint-disable vue/no-v-html -->\n <h1><a :href=\"attachment.url\">{{ attachment.oembed.title }}</a></h1>\n <div v-html=\"attachment.oembed.oembedHTML\" />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n\n <span\n v-if=\"type === 'flash' && !hidden\"\n class=\"flash-container\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <Flash\n ref=\"flash\"\n class=\"flash\"\n :src=\"attachment.large_thumb_url || attachment.url\"\n @playerOpened=\"setFlashLoaded(true)\"\n @playerClosed=\"setFlashLoaded(false)\"\n />\n </span>\n </div>\n <div\n v-if=\"size !== 'hide' && !hideDescription && (edit || (localDescription && showDescription))\"\n class=\"description-container\"\n :class=\"{ '-static': !edit }\"\n >\n <input\n v-if=\"edit\"\n v-model=\"localDescription\"\n type=\"text\"\n class=\"description-field\"\n :placeholder=\"$t('post_status.media_description')\"\n @keydown.enter.prevent=\"\"\n >\n <p v-else>\n {{ localDescription }}\n </p>\n </div>\n </div>\n</template>\n\n<script src=\"./attachment.js\"></script>\n\n<style src=\"./attachment.scss\" lang=\"scss\"></style>\n","import StillImage from '../still-image/still-image.vue'\nimport Flash from '../flash/flash.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport nsfwImage from '../../assets/nsfw.png'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faFile,\n faMusic,\n faImage,\n faVideo,\n faPlayCircle,\n faTimes,\n faStop,\n faSearchPlus,\n faTrashAlt,\n faPencilAlt,\n faAlignRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFile,\n faMusic,\n faImage,\n faVideo,\n faPlayCircle,\n faTimes,\n faStop,\n faSearchPlus,\n faTrashAlt,\n faPencilAlt,\n faAlignRight\n)\n\nconst Attachment = {\n props: [\n 'attachment',\n 'compact',\n 'description',\n 'hideDescription',\n 'nsfw',\n 'size',\n 'setMedia',\n 'remove',\n 'shiftUp',\n 'shiftDn',\n 'edit'\n ],\n data () {\n return {\n localDescription: this.description || this.attachment.description,\n nsfwImage: this.$store.state.instance.nsfwCensorImage || nsfwImage,\n hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,\n preloadImage: this.$store.getters.mergedConfig.preloadImage,\n loading: false,\n img: fileTypeService.fileType(this.attachment.mimetype) === 'image' && document.createElement('img'),\n modalOpen: false,\n showHidden: false,\n flashLoaded: false,\n showDescription: false\n }\n },\n components: {\n Flash,\n StillImage,\n VideoAttachment\n },\n computed: {\n classNames () {\n return [\n {\n '-loading': this.loading,\n '-nsfw-placeholder': this.hidden,\n '-editable': this.edit !== undefined,\n '-compact': this.compact\n },\n '-type-' + this.type,\n this.size && '-size-' + this.size,\n `-${this.useContainFit ? 'contain' : 'cover'}-fit`\n ]\n },\n usePlaceholder () {\n return this.size === 'hide'\n },\n useContainFit () {\n return this.$store.getters.mergedConfig.useContainFit\n },\n placeholderName () {\n if (this.attachment.description === '' || !this.attachment.description) {\n return this.type.toUpperCase()\n }\n return this.attachment.description\n },\n placeholderIconClass () {\n if (this.type === 'image') return 'image'\n if (this.type === 'video') return 'video'\n if (this.type === 'audio') return 'music'\n return 'file'\n },\n referrerpolicy () {\n return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'\n },\n type () {\n return fileTypeService.fileType(this.attachment.mimetype)\n },\n hidden () {\n return this.nsfw && this.hideNsfwLocal && !this.showHidden\n },\n isEmpty () {\n return (this.type === 'html' && !this.attachment.oembed)\n },\n useModal () {\n let modalTypes = []\n switch (this.size) {\n case 'hide':\n case 'small':\n modalTypes = ['image', 'video', 'audio', 'flash']\n break\n default:\n modalTypes = this.mergedConfig.playVideosInModal\n ? ['image', 'video', 'flash']\n : ['image']\n break\n }\n return modalTypes.includes(this.type)\n },\n videoTag () {\n return this.useModal ? 'button' : 'span'\n },\n ...mapGetters(['mergedConfig'])\n },\n watch: {\n 'attachment.description' (newVal) {\n this.localDescription = newVal\n },\n localDescription (newVal) {\n this.onEdit(newVal)\n }\n },\n methods: {\n linkClicked ({ target }) {\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n openModal (event) {\n if (this.useModal) {\n this.$emit('setMedia')\n this.$store.dispatch('setCurrentMedia', this.attachment)\n } else if (this.type === 'unknown') {\n window.open(this.attachment.url)\n }\n },\n openModalForce (event) {\n this.$emit('setMedia')\n this.$store.dispatch('setCurrentMedia', this.attachment)\n },\n onEdit (event) {\n this.edit && this.edit(this.attachment, event)\n },\n onRemove () {\n this.remove && this.remove(this.attachment)\n },\n onShiftUp () {\n this.shiftUp && this.shiftUp(this.attachment)\n },\n onShiftDn () {\n this.shiftDn && this.shiftDn(this.attachment)\n },\n stopFlash () {\n this.$refs.flash.closePlayer()\n },\n setFlashLoaded (event) {\n this.flashLoaded = event\n },\n toggleDescription () {\n this.showDescription = !this.showDescription\n },\n toggleHidden (event) {\n if (\n (this.mergedConfig.useOneClickNsfw && !this.showHidden) &&\n (this.type !== 'video' || this.mergedConfig.playVideosInModal)\n ) {\n this.openModal(event)\n return\n }\n if (this.img && !this.preloadImage) {\n if (this.img.onload) {\n this.img.onload()\n } else {\n this.loading = true\n this.img.src = this.attachment.url\n this.img.onload = () => {\n this.loading = false\n this.showHidden = !this.showHidden\n }\n }\n } else {\n this.showHidden = !this.showHidden\n }\n },\n onImageLoad (image) {\n const width = image.naturalWidth\n const height = image.naturalHeight\n this.$emit('naturalSizeLoad', { id: this.attachment.id, width, height })\n }\n }\n}\n\nexport default Attachment\n","import { render } from \"./attachment.vue?vue&type=template&id=581d66b2\"\nimport script from \"./attachment.js?vue&type=script&lang=js\"\nexport * from \"./attachment.js?vue&type=script&lang=js\"\n\nimport \"./attachment.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"avatars\">\n <router-link\n v-for=\"user in slicedUsers\"\n :key=\"user.id\"\n :to=\"userProfileLink(user)\"\n class=\"avatars-item\"\n >\n <UserAvatar\n :user=\"user\"\n class=\"avatar-small\"\n />\n </router-link>\n </div>\n</template>\n\n<script src=\"./avatar_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.avatars {\n display: flex;\n margin: 0;\n padding: 0;\n\n // For hiding overflowing elements\n flex-wrap: wrap;\n height: 24px;\n\n .avatars-item {\n margin: 0 0 5px 5px;\n\n &:first-child {\n padding-left: 5px;\n }\n\n .avatar-small {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n height: 24px;\n width: 24px;\n }\n }\n}\n</style>\n","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","import { render } from \"./avatar_list.vue?vue&type=template&id=432beb66\"\nimport script from \"./avatar_list.js?vue&type=script&lang=js\"\nexport * from \"./avatar_list.js?vue&type=script&lang=js\"\n\nimport \"./avatar_list.vue?vue&type=style&index=0&id=432beb66&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"basic-user-card\">\n <router-link\n :to=\"userProfileLink(user)\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"user.id\"\n :overlay-centers=\"true\"\n overlay-centers-selector=\".avatar\"\n >\n <UserAvatar\n class=\"user-avatar avatar\"\n :user=\"user\"\n @click.prevent\n />\n </UserPopover>\n </router-link>\n <div\n class=\"basic-user-card-collapsed-content\"\n >\n <div\n :title=\"user.name\"\n class=\"basic-user-card-user-name\"\n >\n <RichContent\n class=\"basic-user-card-user-name-value\"\n :html=\"user.name\"\n :emoji=\"user.emoji\"\n />\n </div>\n <div>\n <user-link\n class=\"basic-user-card-screen-name\"\n :user=\"user\"\n />\n </div>\n <slot />\n </div>\n </div>\n</template>\n\n<script src=\"./basic_user_card.js\"></script>\n\n<style lang=\"scss\">\n.basic-user-card {\n display: flex;\n flex: 1 0;\n margin: 0;\n padding: 0.6em 1em;\n\n --emoji-size: 14px;\n\n &-collapsed-content {\n margin-left: 0.7em;\n text-align: left;\n flex: 1;\n min-width: 0;\n }\n\n &-user-name {\n img {\n object-fit: contain;\n height: 16px;\n width: 16px;\n vertical-align: middle;\n }\n }\n\n &-user-name-value,\n &-screen-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-expanded-content {\n flex: 1;\n margin-left: 0.7em;\n min-width: 0;\n }\n}\n</style>\n","import UserPopover from '../user_popover/user_popover.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst BasicUserCard = {\n props: [\n 'user'\n ],\n components: {\n UserPopover,\n UserAvatar,\n RichContent,\n UserLink\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 BasicUserCard\n","import { render } from \"./basic_user_card.vue?vue&type=template&id=d8a50982\"\nimport script from \"./basic_user_card.js?vue&type=script&lang=js\"\nexport * from \"./basic_user_card.js?vue&type=script&lang=js\"\n\nimport \"./basic_user_card.vue?vue&type=style&index=0&id=d8a50982&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <label\n class=\"checkbox\"\n :class=\"{ disabled, indeterminate, 'indeterminate-fix': indeterminateTransitionFix }\"\n >\n <input\n type=\"checkbox\"\n class=\"visible-for-screenreader-only\"\n :disabled=\"disabled\"\n :checked=\"modelValue\"\n :indeterminate=\"indeterminate\"\n @change=\"$emit('update:modelValue', $event.target.checked)\"\n >\n <i\n class=\"checkbox-indicator\"\n :aria-hidden=\"true\"\n @transitionend.capture=\"onTransitionEnd\"\n />\n <span\n v-if=\"!!$slots.default\"\n class=\"label\"\n >\n <slot />\n </span>\n </label>\n</template>\n\n<script>\nexport default {\n props: [\n 'modelValue',\n 'indeterminate',\n 'disabled'\n ],\n emits: ['update:modelValue'],\n data: (vm) => ({\n indeterminateTransitionFix: vm.indeterminate\n }),\n watch: {\n indeterminate (e) {\n if (e) {\n this.indeterminateTransitionFix = true\n }\n }\n },\n methods: {\n onTransitionEnd (e) {\n if (!this.indeterminate) {\n this.indeterminateTransitionFix = false\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.checkbox {\n position: relative;\n display: inline-block;\n min-height: 1.2em;\n\n &-indicator {\n position: relative;\n padding-left: 1.2em;\n }\n\n &-indicator::before {\n position: absolute;\n right: 0;\n top: 0;\n display: block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1em;\n font-size: 1.1em;\n color: transparent;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n &.disabled {\n .checkbox-indicator::before,\n .label {\n opacity: 0.5;\n }\n\n .label {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n input[type=\"checkbox\"] {\n &:checked + .checkbox-indicator::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:indeterminate + .checkbox-indicator::before {\n content: \"–\";\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n }\n\n &.indeterminate-fix {\n input[type=\"checkbox\"] + .checkbox-indicator::before {\n content: \"–\";\n }\n }\n\n & > span {\n margin-left: 0.5em;\n }\n}\n</style>\n","import { render } from \"./checkbox.vue?vue&type=template&id=7164e0b5\"\nimport script from \"./checkbox.vue?vue&type=script&lang=js\"\nexport * from \"./checkbox.vue?vue&type=script&lang=js\"\n\nimport \"./checkbox.vue?vue&type=style&index=0&id=7164e0b5&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import DialogModal from '../dialog_modal/dialog_modal.vue'\n\n/**\n * This component emits the following events:\n * cancelled, emitted when the action should not be performed;\n * accepted, emitted when the action should be performed;\n *\n * The caller should close this dialog after receiving any of the two events.\n */\nconst ConfirmModal = {\n components: {\n DialogModal\n },\n props: {\n title: {\n type: String\n },\n cancelText: {\n type: String\n },\n confirmText: {\n type: String\n }\n },\n computed: {\n },\n methods: {\n onCancel () {\n this.$emit('cancelled')\n },\n onAccept () {\n this.$emit('accepted')\n }\n }\n}\n\nexport default ConfirmModal\n","import { render } from \"./confirm_modal.vue?vue&type=template&id=c74bcd96\"\nimport script from \"./confirm_modal.js?vue&type=script&lang=js\"\nexport * from \"./confirm_modal.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <dialog-modal\n v-body-scroll-lock=\"true\"\n class=\"confirm-modal\"\n :on-cancel=\"onCancel\"\n >\n <template #header>\n <span v-text=\"title\" />\n </template>\n\n <slot />\n\n <template #footer>\n <button\n class=\"btn button-default\"\n @click.prevent=\"onAccept\"\n v-text=\"confirmText\"\n />\n\n <button\n class=\"btn button-default\"\n @click.prevent=\"onCancel\"\n v-text=\"cancelText\"\n />\n </template>\n </dialog-modal>\n</template>\n\n<script src=\"./confirm_modal.js\"></script>\n","<template>\n <span\n :class=\"{ 'dark-overlay': darkOverlay }\"\n @click.self.stop=\"onCancel()\"\n >\n <div\n class=\"dialog-modal panel panel-default\"\n @click.stop=\"\"\n >\n <div class=\"panel-heading dialog-modal-heading\">\n <div class=\"title\">\n <slot name=\"header\" />\n </div>\n </div>\n <div class=\"dialog-modal-content\">\n <slot name=\"default\" />\n </div>\n <div class=\"dialog-modal-footer user-interactions panel-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </span>\n</template>\n\n<script src=\"./dialog_modal.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n// TODO: unify with other modals.\n.dark-overlay {\n &::before {\n bottom: 0;\n content: \" \";\n display: block;\n cursor: default;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n background: rgb(27 31 35 / 50%);\n z-index: 2000;\n }\n}\n\n.dialog-modal.panel {\n top: 0;\n left: 50%;\n max-height: 80vh;\n max-width: 90vw;\n margin: 15vh auto;\n position: fixed;\n transform: translateX(-50%);\n z-index: 2001;\n cursor: default;\n display: block;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .dialog-modal-heading {\n .title {\n text-align: center;\n }\n }\n\n .dialog-modal-content {\n margin: 0;\n padding: 1rem;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n white-space: normal;\n }\n\n .dialog-modal-footer {\n margin: 0;\n padding: 0.5em;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n display: flex;\n justify-content: flex-end;\n\n button {\n width: auto;\n margin-left: 0.5rem;\n }\n }\n}\n\n</style>\n","const DialogModal = {\n props: {\n darkOverlay: {\n default: true,\n type: Boolean\n },\n onCancel: {\n default: () => {},\n type: Function\n }\n }\n}\n\nexport default DialogModal\n","import { render } from \"./dialog_modal.vue?vue&type=template&id=5b856fbc\"\nimport script from \"./dialog_modal.js?vue&type=script&lang=js\"\nexport * from \"./dialog_modal.js?vue&type=script&lang=js\"\n\nimport \"./dialog_modal.vue?vue&type=style&index=0&id=5b856fbc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n ref=\"root\"\n class=\"emoji-input\"\n :class=\"{ 'with-picker': !hideEmojiButton }\"\n >\n <slot\n :id=\"'textbox-' + randomSeed\"\n :aria-owns=\"suggestionListId\"\n aria-autocomplete=\"both\"\n :aria-expanded=\"showSuggestions\"\n :aria-activedescendant=\"(!showSuggestions || highlighted === -1) ? '' : suggestionItemId(highlighted)\"\n />\n <!-- TODO: make the 'x' disappear if at the end maybe? -->\n <div\n ref=\"hiddenOverlay\"\n class=\"hidden-overlay\"\n :style=\"overlayStyle\"\n :aria-hidden=\"true\"\n >\n <span>{{ preText }}</span>\n <span\n ref=\"hiddenOverlayCaret\"\n class=\"caret\"\n >x</span>\n <span>{{ postText }}</span>\n </div>\n <screen-reader-notice\n ref=\"screenReaderNotice\"\n aria-live=\"assertive\"\n />\n <template v-if=\"enableEmojiPicker\">\n <button\n v-if=\"!hideEmojiButton\"\n class=\"button-unstyled emoji-picker-icon\"\n type=\"button\"\n :title=\"$t('emoji.add_emoji')\"\n @click.prevent=\"togglePicker\"\n >\n <FAIcon :icon=\"['far', 'smile-beam']\" />\n </button>\n <EmojiPicker\n v-if=\"enableEmojiPicker\"\n ref=\"picker\"\n :enable-sticker-picker=\"enableStickerPicker\"\n class=\"emoji-picker-panel\"\n @emoji=\"insert\"\n @sticker-uploaded=\"onStickerUploaded\"\n @sticker-upload-failed=\"onStickerUploadFailed\"\n @show=\"onPickerShown\"\n @close=\"onPickerClosed\"\n />\n </template>\n <Popover\n ref=\"suggestorPopover\"\n class=\"autocomplete-panel\"\n placement=\"bottom\"\n :trigger-attrs=\"{ 'aria-hidden': true }\"\n >\n <template #content>\n <div\n :id=\"suggestionListId\"\n ref=\"panel-body\"\n class=\"autocomplete-panel-body\"\n role=\"listbox\"\n >\n <div\n v-for=\"(suggestion, index) in suggestions\"\n :id=\"suggestionItemId(index)\"\n :key=\"index\"\n class=\"autocomplete-item\"\n role=\"option\"\n :class=\"{ highlighted: index === highlighted }\"\n :aria-label=\"autoCompleteItemLabel(suggestion)\"\n :aria-selected=\"index === highlighted\"\n @click.stop.prevent=\"onClick($event, suggestion)\"\n >\n <span class=\"image\">\n <img\n v-if=\"suggestion.img\"\n :src=\"suggestion.img\"\n >\n <span v-else>{{ suggestion.replacement }}</span>\n </span>\n <div class=\"label\">\n <span\n v-if=\"suggestion.user\"\n class=\"displayText\"\n >\n {{ suggestion.displayText }}<UnicodeDomainIndicator\n :user=\"suggestion.user\"\n :at=\"false\"\n />\n </span>\n <span\n v-if=\"!suggestion.user\"\n class=\"displayText\"\n >\n {{ maybeLocalizedEmojiName(suggestion) }}\n </span>\n <span class=\"detailText\">{{ suggestion.detailText }}</span>\n </div>\n </div>\n </div>\n </template>\n </Popover>\n </div>\n</template>\n\n<script src=\"./emoji_input.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.emoji-input {\n display: flex;\n flex-direction: column;\n position: relative;\n\n .emoji-picker-icon {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0.2em 0.25em;\n font-size: 1.3em;\n cursor: pointer;\n line-height: 24px;\n\n &:hover i {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .emoji-picker-panel {\n position: absolute;\n z-index: 20;\n margin-top: 2px;\n\n &.hide {\n display: none;\n }\n }\n\n input,\n textarea {\n flex: 1 0 auto;\n }\n\n &.with-picker input {\n padding-right: 30px;\n }\n\n .hidden-overlay {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: hidden;\n\n /* DEBUG STUFF */\n color: red;\n\n /* set opacity to non-zero to see the overlay */\n\n .caret {\n width: 0;\n margin-right: calc(-1ch - 1px);\n border: 1px solid red;\n }\n }\n}\n\n.autocomplete {\n &-panel {\n position: absolute;\n }\n\n &-item {\n display: flex;\n cursor: pointer;\n padding: 0.2em 0.4em;\n border-bottom: 1px solid rgb(0 0 0 / 40%);\n height: 32px;\n\n .image {\n width: 32px;\n height: 32px;\n line-height: 32px;\n text-align: center;\n font-size: 32px;\n margin-right: 4px;\n\n img {\n width: 32px;\n height: 32px;\n object-fit: contain;\n }\n }\n\n .label {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 0.1em 0 0.2em;\n\n .displayText {\n line-height: 1.5;\n }\n\n .detailText {\n font-size: 9px;\n line-height: 9px;\n }\n }\n\n &.highlighted {\n background-color: $fallback--fg;\n background-color: var(--selectedMenuPopover, $fallback--fg);\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n</style>\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 const 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","const ScreenReaderNotice = {\n props: {\n ariaLive: {\n type: String,\n defualt: 'assertive'\n }\n },\n data () {\n return {\n currentText: ''\n }\n },\n methods: {\n announce (text) {\n this.currentText = text\n setTimeout(() => { this.currentText = '' }, 1000)\n }\n }\n}\n\nexport default ScreenReaderNotice\n","import { render } from \"./screen_reader_notice.vue?vue&type=template&id=4978e64a\"\nimport script from \"./screen_reader_notice.js?vue&type=script&lang=js\"\nexport * from \"./screen_reader_notice.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"visible-for-screenreader-only\"\n :aria-live=\"ariaLive\"\n >\n {{ currentText }}\n </div>\n</template>\n\n<script src=\"./screen_reader_notice.js\"></script>\n","import Completion from '../../services/completion/completion.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport Popover from 'src/components/popover/popover.vue'\nimport ScreenReaderNotice from 'src/components/screen_reader_notice/screen_reader_notice.vue'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport { take } from 'lodash'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { ensureFinalFallback } from '../../i18n/languages.js'\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 <input/> and <textarea/> elements\n *\n * Intended usage is:\n * <EmojiInput v-model=\"something\">\n * <input v-model=\"something\"/>\n * </EmojiInput>\n *\n * Works only with <input> and <textarea>. Intended to use with only one nested\n * input. It will find first input or textarea and work with that, multiple\n * nested children not tested. You HAVE TO duplicate v-model for both\n * <emoji-input> and <input>/<textarea> otherwise it will not work.\n *\n * Be prepared for CSS troubles though because it still wraps component in a div\n * while TRYING to make it look like nothing happened, but it could break stuff.\n */\n\nconst EmojiInput = {\n emits: ['update:modelValue', 'shown'],\n props: {\n suggest: {\n /**\n * suggest: function (input: String) => Suggestion[]\n *\n * Function that takes input string which takes string (textAtCaret)\n * and returns an array of Suggestions\n *\n * Suggestion is an object containing following properties:\n * displayText: string. Main display text, what actual suggestion\n * represents (user's screen name/emoji shortcode)\n * replacement: string. Text that should replace the textAtCaret\n * detailText: string, optional. Subtitle text, providing additional info\n * if present (user's nickname)\n * imageUrl: string, optional. Image to display alongside with suggestion,\n * currently if no image is provided, replacement will be used (for\n * unicode emojis)\n *\n * TODO: make it asynchronous when adding proper server-provided user\n * suggestions\n *\n * For commonly used suggestors (emoji, users, both) use suggestor.js\n */\n required: true,\n type: Function\n },\n modelValue: {\n /**\n * Used for v-model\n */\n required: true,\n type: String\n },\n enableEmojiPicker: {\n /**\n * Enables emoji picker support, this implies that custom emoji are supported\n */\n required: false,\n type: Boolean,\n default: false\n },\n hideEmojiButton: {\n /**\n * intended to use with external picker trigger, i.e. you have a button outside\n * input that will open up the picker, see triggerShowPicker()\n */\n required: false,\n type: Boolean,\n default: false\n },\n enableStickerPicker: {\n /**\n * Enables sticker picker support, only makes sense when enableEmojiPicker=true\n */\n required: false,\n type: Boolean,\n default: false\n },\n placement: {\n /**\n * Forces the panel to take a specific position relative to the input element.\n * The 'auto' placement chooses either bottom or top depending on which has the available space (when both have available space, bottom is preferred).\n */\n required: false,\n type: String, // 'auto', 'top', 'bottom'\n default: 'auto'\n },\n newlineOnCtrlEnter: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n randomSeed: `${Math.random()}`.replace('.', '-'),\n input: undefined,\n caretEl: undefined,\n highlighted: -1,\n caret: 0,\n focused: false,\n blurTimeout: null,\n temporarilyHideSuggestions: false,\n disableClickOutside: false,\n suggestions: [],\n overlayStyle: {},\n pickerShown: false\n }\n },\n components: {\n Popover,\n EmojiPicker,\n UnicodeDomainIndicator,\n ScreenReaderNotice\n },\n computed: {\n padEmoji () {\n return this.$store.getters.mergedConfig.padEmoji\n },\n defaultCandidateIndex () {\n return this.$store.getters.mergedConfig.autocompleteSelect ? 0 : -1\n },\n preText () {\n return this.modelValue.slice(0, this.caret)\n },\n postText () {\n return this.modelValue.slice(this.caret)\n },\n showSuggestions () {\n return this.focused &&\n this.suggestions &&\n this.suggestions.length > 0 &&\n !this.pickerShown &&\n !this.temporarilyHideSuggestions\n },\n textAtCaret () {\n return this.wordAtCaret?.word\n },\n wordAtCaret () {\n if (this.modelValue && this.caret) {\n const word = Completion.wordAtPosition(this.modelValue, this.caret - 1) || {}\n return word\n }\n },\n languages () {\n return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)\n },\n maybeLocalizedEmojiNamesAndKeywords () {\n return emoji => {\n const names = [emoji.displayText]\n const keywords = []\n\n if (emoji.displayTextI18n) {\n names.push(this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args))\n }\n\n if (emoji.annotations) {\n this.languages.forEach(lang => {\n names.push(emoji.annotations[lang]?.name)\n\n keywords.push(...(emoji.annotations[lang]?.keywords || []))\n })\n }\n\n return {\n names: names.filter(k => k),\n keywords: keywords.filter(k => k)\n }\n }\n },\n maybeLocalizedEmojiName () {\n return emoji => {\n if (!emoji.annotations) {\n return emoji.displayText\n }\n\n if (emoji.displayTextI18n) {\n return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)\n }\n\n for (const lang of this.languages) {\n if (emoji.annotations[lang]?.name) {\n return emoji.annotations[lang].name\n }\n }\n\n return emoji.displayText\n }\n },\n onInputScroll () {\n this.$refs.hiddenOverlay.scrollTo({\n top: this.input.scrollTop,\n left: this.input.scrollLeft\n })\n },\n suggestionListId () {\n return `suggestions-${this.randomSeed}`\n },\n suggestionItemId () {\n return (index) => `suggestion-item-${index}-${this.randomSeed}`\n }\n },\n mounted () {\n const { root, hiddenOverlayCaret, suggestorPopover } = this.$refs\n const input = root.querySelector('.emoji-input > input') || root.querySelector('.emoji-input > textarea')\n if (!input) return\n this.input = input\n this.caretEl = hiddenOverlayCaret\n if (suggestorPopover.setAnchorEl) {\n suggestorPopover.setAnchorEl(this.caretEl) // unit test compat\n this.$refs.picker.setAnchorEl(this.caretEl)\n } else {\n console.warn('setAnchorEl not found, are we in a unit test?')\n }\n const style = getComputedStyle(this.input)\n this.overlayStyle.padding = style.padding\n this.overlayStyle.border = style.border\n this.overlayStyle.margin = style.margin\n this.overlayStyle.lineHeight = style.lineHeight\n this.overlayStyle.fontFamily = style.fontFamily\n this.overlayStyle.fontSize = style.fontSize\n this.overlayStyle.wordWrap = style.wordWrap\n this.overlayStyle.whiteSpace = style.whiteSpace\n this.resize()\n input.addEventListener('blur', this.onBlur)\n input.addEventListener('focus', this.onFocus)\n input.addEventListener('paste', this.onPaste)\n input.addEventListener('keyup', this.onKeyUp)\n input.addEventListener('keydown', this.onKeyDown)\n input.addEventListener('click', this.onClickInput)\n input.addEventListener('transitionend', this.onTransition)\n input.addEventListener('input', this.onInput)\n input.addEventListener('scroll', this.onInputScroll)\n },\n unmounted () {\n const { input } = this\n if (input) {\n input.removeEventListener('blur', this.onBlur)\n input.removeEventListener('focus', this.onFocus)\n input.removeEventListener('paste', this.onPaste)\n input.removeEventListener('keyup', this.onKeyUp)\n input.removeEventListener('keydown', this.onKeyDown)\n input.removeEventListener('click', this.onClickInput)\n input.removeEventListener('transitionend', this.onTransition)\n input.removeEventListener('input', this.onInput)\n input.removeEventListener('scroll', this.onInputScroll)\n }\n },\n watch: {\n showSuggestions: function (newValue, oldValue) {\n this.$emit('shown', newValue)\n if (newValue) {\n this.$refs.suggestorPopover.showPopover()\n } else {\n this.$refs.suggestorPopover.hidePopover()\n }\n },\n textAtCaret: async function (newWord) {\n if (newWord === undefined) return\n const firstchar = newWord.charAt(0)\n if (newWord === firstchar) {\n this.suggestions = []\n return\n }\n const matchedSuggestions = await this.suggest(newWord, this.maybeLocalizedEmojiNamesAndKeywords)\n // Async: cancel if textAtCaret has changed during wait\n if (this.textAtCaret !== newWord || matchedSuggestions.length <= 0) {\n this.suggestions = []\n return\n }\n this.suggestions = take(matchedSuggestions, 5)\n .map(({ imageUrl, ...rest }) => ({\n ...rest,\n img: imageUrl || ''\n }))\n this.highlighted = this.defaultCandidateIndex\n this.$refs.screenReaderNotice.announce(\n this.$tc('tool_tip.autocomplete_available',\n this.suggestions.length,\n { number: this.suggestions.length }))\n }\n },\n methods: {\n triggerShowPicker () {\n this.$nextTick(() => {\n this.$refs.picker.showPicker()\n this.scrollIntoView()\n })\n // This temporarily disables \"click outside\" handler\n // since external trigger also means click originates\n // from outside, thus preventing picker from opening\n this.disableClickOutside = true\n setTimeout(() => {\n this.disableClickOutside = false\n }, 0)\n },\n togglePicker () {\n this.input.focus()\n if (!this.pickerShown) {\n this.scrollIntoView()\n this.$refs.picker.showPicker()\n this.$refs.picker.startEmojiLoad()\n } else {\n this.$refs.picker.hidePicker()\n }\n },\n replace (replacement) {\n const newValue = Completion.replaceWord(this.modelValue, this.wordAtCaret, replacement)\n this.$emit('update:modelValue', newValue)\n this.caret = 0\n },\n insert ({ insertion, keepOpen, surroundingSpace = true }) {\n const before = this.modelValue.substring(0, this.caret) || ''\n const after = this.modelValue.substring(this.caret) || ''\n\n /* Using a bit more smart approach to padding emojis with spaces:\n * - put a space before cursor if there isn't one already, unless we\n * are at the beginning of post or in spam mode\n * - put a space after emoji if there isn't one already unless we are\n * in spam mode\n *\n * The idea is that when you put a cursor somewhere in between sentence\n * inserting just ' :emoji: ' will add more spaces to post which might\n * break the flow/spacing, as well as the case where user ends sentence\n * with a space before adding emoji.\n *\n * Spam mode is intended for creating multi-part emojis and overall spamming\n * them, masto seem to be rendering :emoji::emoji: correctly now so why not\n */\n const isSpaceRegex = /\\s/\n const spaceBefore = (surroundingSpace && !isSpaceRegex.exec(before.slice(-1)) && before.length && this.padEmoji > 0) ? ' ' : ''\n const spaceAfter = (surroundingSpace && !isSpaceRegex.exec(after[0]) && this.padEmoji) ? ' ' : ''\n\n const newValue = [\n before,\n spaceBefore,\n insertion,\n spaceAfter,\n after\n ].join('')\n this.$emit('update:modelValue', newValue)\n const position = this.caret + (insertion + spaceAfter + spaceBefore).length\n if (!keepOpen) {\n this.input.focus()\n }\n\n this.$nextTick(function () {\n // Re-focus inputbox after clicking suggestion\n // Set selection right after the replacement instead of the very end\n this.input.setSelectionRange(position, position)\n this.caret = position\n })\n },\n replaceText (e, suggestion) {\n const len = this.suggestions.length || 0\n if (this.textAtCaret.length === 1) { return }\n if (len > 0 || suggestion) {\n const chosenSuggestion = suggestion || this.suggestions[this.highlighted]\n const replacement = chosenSuggestion.replacement\n const newValue = Completion.replaceWord(this.modelValue, this.wordAtCaret, replacement)\n this.$emit('update:modelValue', newValue)\n this.highlighted = 0\n const position = this.wordAtCaret.start + replacement.length\n\n this.$nextTick(function () {\n // Re-focus inputbox after clicking suggestion\n this.input.focus()\n // Set selection right after the replacement instead of the very end\n this.input.setSelectionRange(position, position)\n this.caret = position\n })\n e.preventDefault()\n }\n },\n cycleBackward (e) {\n const len = this.suggestions.length || 0\n\n this.highlighted -= 1\n if (this.highlighted === -1) {\n this.input.focus()\n } else if (this.highlighted < -1) {\n this.highlighted = len - 1\n }\n if (len > 0) {\n e.preventDefault()\n }\n },\n cycleForward (e) {\n const len = this.suggestions.length || 0\n\n this.highlighted += 1\n if (this.highlighted >= len) {\n this.highlighted = -1\n this.input.focus()\n }\n if (len > 0) {\n e.preventDefault()\n }\n },\n scrollIntoView () {\n const rootRef = this.$refs.picker.$el\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const scrollerRef = this.$el.closest('.sidebar-scroller') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n\n const scrollerBottomBorder = currentScroll + scrollerHeight\n // We check where the bottom border of root element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const rootBottomBorder = rootRef.offsetHeight + findOffset(rootRef, scrollerRef).top\n\n const bottomDelta = Math.max(0, rootBottomBorder - scrollerBottomBorder)\n // could also check top delta but there's no case for it\n const targetScroll = currentScroll + bottomDelta\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n\n this.$nextTick(() => {\n const { offsetHeight } = this.input\n const { picker } = this.$refs\n const pickerBottom = picker.$el.getBoundingClientRect().bottom\n if (pickerBottom > window.innerHeight) {\n picker.$el.style.top = 'auto'\n picker.$el.style.bottom = offsetHeight + 'px'\n }\n })\n },\n onPickerShown () {\n this.pickerShown = true\n },\n onPickerClosed () {\n this.pickerShown = false\n },\n onBlur (e) {\n // Clicking on any suggestion removes focus from autocomplete,\n // preventing click handler ever executing.\n this.blurTimeout = setTimeout(() => {\n this.focused = false\n this.setCaret(e)\n }, 200)\n },\n onClick (e, suggestion) {\n this.replaceText(e, suggestion)\n },\n onFocus (e) {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout)\n this.blurTimeout = null\n }\n\n this.focused = true\n this.setCaret(e)\n this.temporarilyHideSuggestions = false\n },\n onKeyUp (e) {\n const { key } = e\n this.setCaret(e)\n\n // Setting hider in keyUp to prevent suggestions from blinking\n // when moving away from suggested spot\n if (key === 'Escape') {\n this.temporarilyHideSuggestions = true\n } else {\n this.temporarilyHideSuggestions = false\n }\n },\n onPaste (e) {\n this.setCaret(e)\n },\n onKeyDown (e) {\n const { ctrlKey, shiftKey, key } = e\n if (this.newlineOnCtrlEnter && ctrlKey && key === 'Enter') {\n this.insert({ insertion: '\\n', surroundingSpace: false })\n // Ensure only one new line is added on macos\n e.stopPropagation()\n e.preventDefault()\n\n // Scroll the input element to the position of the cursor\n this.$nextTick(() => {\n this.input.blur()\n this.input.focus()\n })\n }\n // Disable suggestions hotkeys if suggestions are hidden\n if (!this.temporarilyHideSuggestions) {\n if (key === 'Tab') {\n if (shiftKey) {\n this.cycleBackward(e)\n } else {\n this.cycleForward(e)\n }\n }\n if (key === 'ArrowUp') {\n this.cycleBackward(e)\n } else if (key === 'ArrowDown') {\n this.cycleForward(e)\n }\n if (key === 'Enter') {\n if (!ctrlKey) {\n this.replaceText(e)\n }\n }\n }\n // Probably add optional keyboard controls for emoji picker?\n\n // Escape hides suggestions, if suggestions are hidden it\n // de-focuses the element (i.e. default browser behavior)\n if (key === 'Escape') {\n if (!this.temporarilyHideSuggestions) {\n this.input.focus()\n }\n }\n },\n onInput (e) {\n this.setCaret(e)\n this.$emit('update:modelValue', e.target.value)\n },\n onStickerUploaded (e) {\n this.$emit('sticker-uploaded', e)\n },\n onStickerUploadFailed (e) {\n this.$emit('sticker-upload-Failed', e)\n },\n setCaret ({ target: { selectionStart } }) {\n this.caret = selectionStart\n this.$nextTick(() => {\n this.$refs.suggestorPopover.updateStyles()\n })\n },\n resize () {\n },\n autoCompleteItemLabel (suggestion) {\n if (suggestion.user) {\n return suggestion.displayText + ' ' + suggestion.detailText\n } else {\n return this.maybeLocalizedEmojiName(suggestion)\n }\n }\n }\n}\n\nexport default EmojiInput\n","import { render } from \"./emoji_input.vue?vue&type=template&id=401ef83a\"\nimport script from \"./emoji_input.js?vue&type=script&lang=js\"\nexport * from \"./emoji_input.js?vue&type=script&lang=js\"\n\nimport \"./emoji_input.vue?vue&type=style&index=0&id=401ef83a&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n ref=\"popover\"\n trigger=\"click\"\n popover-class=\"emoji-picker popover-default\"\n :trigger-attrs=\"{ 'aria-hidden': true }\"\n @show=\"onPopoverShown\"\n @close=\"onPopoverClosed\"\n >\n <template #content>\n <div class=\"heading\">\n <!--\n Body scroll lock needs to be on every scrollable element on safari iOS.\n Here we tell it to enable scrolling for this element.\n See https://github.com/willmcpo/body-scroll-lock#vanilla-js\n -->\n <span\n ref=\"header\"\n v-body-scroll-lock=\"isInModal\"\n class=\"emoji-tabs\"\n >\n <span\n v-for=\"group in filteredEmojiGroups\"\n :ref=\"setGroupRef('group-header-' + group.id)\"\n :key=\"group.id\"\n class=\"emoji-tabs-item\"\n :class=\"{\n active: activeGroupView === group.id\n }\"\n :title=\"group.text\"\n role=\"button\"\n @click.prevent=\"highlight(group.id)\"\n >\n <span\n v-if=\"group.image\"\n class=\"emoji-picker-header-image\"\n >\n <still-image\n :alt=\"group.text\"\n :src=\"group.image\"\n />\n </span>\n <FAIcon\n v-else\n :icon=\"group.icon\"\n fixed-width\n />\n </span>\n </span>\n <span\n v-if=\"stickerPickerEnabled\"\n class=\"additional-tabs\"\n >\n <span\n class=\"stickers-tab-icon additional-tabs-item\"\n :class=\"{active: showingStickers}\"\n :title=\"$t('emoji.stickers')\"\n @click.prevent=\"toggleStickers\"\n >\n <FAIcon\n icon=\"sticky-note\"\n fixed-width\n />\n </span>\n </span>\n </div>\n <div\n v-if=\"contentLoaded\"\n class=\"content\"\n >\n <div\n class=\"emoji-content\"\n :class=\"{hidden: showingStickers}\"\n >\n <div class=\"emoji-search\">\n <input\n ref=\"search\"\n v-model=\"keyword\"\n type=\"text\"\n class=\"form-control\"\n :placeholder=\"$t('emoji.search_emoji')\"\n @input=\"$event.target.composing = false\"\n >\n </div>\n <!-- Enables scrolling for this element on safari iOS. See comments for header. -->\n <DynamicScroller\n ref=\"emoji-groups\"\n v-body-scroll-lock=\"isInModal\"\n class=\"emoji-groups\"\n :class=\"groupsScrolledClass\"\n :min-item-size=\"minItemSize\"\n :items=\"emojiItems\"\n :emit-update=\"true\"\n @update=\"onScroll\"\n @visible=\"recalculateItemPerRow\"\n @resize=\"recalculateItemPerRow\"\n >\n <template #default=\"{ item: group, index, active }\">\n <DynamicScrollerItem\n :ref=\"setGroupRef('group-' + group.id)\"\n :item=\"group\"\n :active=\"active\"\n :data-index=\"index\"\n :size-dependencies=\"[group.emojis.length]\"\n >\n <div\n class=\"emoji-group\"\n >\n <h6\n v-if=\"group.isFirstRow\"\n class=\"emoji-group-title\"\n >\n {{ group.text }}\n </h6>\n <span\n v-for=\"emoji in group.emojis\"\n :key=\"group.id + emoji.displayText\"\n :title=\"maybeLocalizedEmojiName(emoji)\"\n class=\"emoji-item\"\n role=\"button\"\n @click.stop.prevent=\"onEmoji(emoji)\"\n >\n <span\n v-if=\"!emoji.imageUrl\"\n class=\"emoji-picker-emoji -unicode\"\n >{{ emoji.replacement }}</span>\n <still-image\n v-else\n class=\"emoji-picker-emoji -custom\"\n loading=\"lazy\"\n :alt=\"maybeLocalizedEmojiName(emoji)\"\n :src=\"emoji.imageUrl\"\n :data-emoji-name=\"group.id + emoji.displayText\"\n />\n </span>\n </div>\n </DynamicScrollerItem>\n </template>\n </DynamicScroller>\n <div class=\"keep-open\">\n <Checkbox v-model=\"keepOpen\">\n {{ $t('emoji.keep_open') }}\n </Checkbox>\n </div>\n </div>\n <div\n v-if=\"showingStickers\"\n class=\"stickers-content\"\n >\n <sticker-picker\n @uploaded=\"onStickerUploaded\"\n @upload-failed=\"onStickerUploadFailed\"\n />\n </div>\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./emoji_picker.js\"></script>\n<style lang=\"scss\" src=\"./emoji_picker.scss\"></style>\n","import { defineAsyncComponent } from 'vue'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Popover from 'src/components/popover/popover.vue'\nimport StillImage from '../still-image/still-image.vue'\nimport { ensureFinalFallback } from '../../i18n/languages.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBoxOpen,\n faStickyNote,\n faSmileBeam,\n faSmile,\n faUser,\n faPaw,\n faIceCream,\n faBus,\n faBasketballBall,\n faLightbulb,\n faCode,\n faFlag\n} from '@fortawesome/free-solid-svg-icons'\nimport { debounce, trim, chunk } from 'lodash'\n\nlibrary.add(\n faBoxOpen,\n faStickyNote,\n faSmileBeam,\n faSmile,\n faUser,\n faPaw,\n faIceCream,\n faBus,\n faBasketballBall,\n faLightbulb,\n faCode,\n faFlag\n)\n\nconst UNICODE_EMOJI_GROUP_ICON = {\n 'smileys-and-emotion': 'smile',\n 'people-and-body': 'user',\n 'animals-and-nature': 'paw',\n 'food-and-drink': 'ice-cream',\n 'travel-and-places': 'bus',\n activities: 'basketball-ball',\n objects: 'lightbulb',\n symbols: 'code',\n flags: 'flag'\n}\n\nconst maybeLocalizedKeywords = (emoji, languages, nameLocalizer) => {\n const res = [emoji.displayText, nameLocalizer(emoji)]\n if (emoji.annotations) {\n languages.forEach(lang => {\n const keywords = emoji.annotations[lang]?.keywords || []\n const name = emoji.annotations[lang]?.name\n res.push(...(keywords.concat([name]).filter(k => k)))\n })\n }\n return res\n}\n\nconst filterByKeyword = (list, keyword = '', languages, nameLocalizer) => {\n if (keyword === '') return list\n\n const keywordLowercase = keyword.toLowerCase()\n const orderedEmojiList = []\n for (const emoji of list) {\n const indices = maybeLocalizedKeywords(emoji, languages, nameLocalizer)\n .map(k => k.toLowerCase().indexOf(keywordLowercase))\n .filter(k => k > -1)\n\n const indexOfKeyword = indices.length ? Math.min(...indices) : -1\n\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 getOffset = (elem) => {\n const style = elem.style.transform\n const res = /translateY\\((\\d+)px\\)/.exec(style)\n if (!res) { return 0 }\n return res[1]\n}\n\nconst toHeaderId = id => {\n return id.replace(/^row-\\d+-/, '')\n}\n\nconst EmojiPicker = {\n props: {\n enableStickerPicker: {\n required: false,\n type: Boolean,\n default: false\n },\n hideCustomEmoji: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n inject: ['popoversZLayer'],\n data () {\n return {\n keyword: '',\n activeGroup: 'custom',\n showingStickers: false,\n groupsScrolledClass: 'scrolled-top',\n keepOpen: false,\n customEmojiTimeout: null,\n // Lazy-load only after the first time `showing` becomes true.\n contentLoaded: false,\n groupRefs: {},\n emojiRefs: {},\n filteredEmojiGroups: [],\n width: 0\n }\n },\n components: {\n StickerPicker: defineAsyncComponent(() => import('../sticker_picker/sticker_picker.vue')),\n Checkbox,\n StillImage,\n Popover\n },\n methods: {\n showPicker () {\n this.$refs.popover.showPopover()\n this.onShowing()\n },\n hidePicker () {\n this.$refs.popover.hidePopover()\n },\n setAnchorEl (el) {\n this.$refs.popover.setAnchorEl(el)\n },\n setGroupRef (name) {\n return el => { this.groupRefs[name] = el }\n },\n onPopoverShown () {\n this.$emit('show')\n },\n onPopoverClosed () {\n this.$emit('close')\n },\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 if (!this.keepOpen) {\n this.$refs.popover.hidePopover()\n }\n this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })\n },\n onScroll (startIndex, endIndex, visibleStartIndex, visibleEndIndex) {\n const target = this.$refs['emoji-groups'].$el\n this.scrolledGroup(target, visibleStartIndex, visibleEndIndex)\n },\n scrolledGroup (target, start, end) {\n const top = target.scrollTop + 5\n this.$nextTick(() => {\n this.emojiItems.slice(start, end + 1).forEach(group => {\n const headerId = toHeaderId(group.id)\n const ref = this.groupRefs['group-' + group.id]\n if (!ref) { return }\n const elem = ref.$el.parentElement\n if (!elem) { return }\n if (elem && getOffset(elem) <= top) {\n this.activeGroup = headerId\n }\n })\n this.scrollHeader()\n })\n },\n scrollHeader () {\n // Scroll the active tab's header into view\n const headerRef = this.groupRefs['group-header-' + this.activeGroup]\n const left = headerRef.offsetLeft\n const right = left + headerRef.offsetWidth\n const headerCont = this.$refs.header\n const currentScroll = headerCont.scrollLeft\n const currentScrollRight = currentScroll + headerCont.clientWidth\n const setScroll = s => { headerCont.scrollLeft = s }\n\n const margin = 7 // .emoji-tabs-item: padding\n if (left - margin < currentScroll) {\n setScroll(left - margin)\n } else if (right + margin > currentScrollRight) {\n setScroll(right + margin - headerCont.clientWidth)\n }\n },\n highlight (groupId) {\n this.setShowStickers(false)\n const indexInList = this.emojiItems.findIndex(k => k.id === groupId)\n this.$refs['emoji-groups'].scrollToItem(indexInList)\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 toggleStickers () {\n this.showingStickers = !this.showingStickers\n },\n setShowStickers (value) {\n this.showingStickers = value\n },\n filterByKeyword (list, keyword) {\n return filterByKeyword(list, keyword, this.languages, this.maybeLocalizedEmojiName)\n },\n onShowing () {\n const oldContentLoaded = this.contentLoaded\n this.recalculateItemPerRow()\n this.$nextTick(() => {\n this.$refs.search.focus()\n })\n this.contentLoaded = true\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n if (!oldContentLoaded) {\n this.$nextTick(() => {\n if (this.defaultGroup) {\n this.highlight(this.defaultGroup)\n }\n })\n }\n },\n getFilteredEmojiGroups () {\n return this.allEmojiGroups\n .map(group => ({\n ...group,\n emojis: this.filterByKeyword(group.emojis, trim(this.keyword))\n }))\n .filter(group => group.emojis.length > 0)\n },\n recalculateItemPerRow () {\n this.$nextTick(() => {\n if (!this.$refs['emoji-groups']) {\n return\n }\n this.width = this.$refs['emoji-groups'].$el.clientWidth\n })\n }\n },\n watch: {\n keyword () {\n this.onScroll()\n this.debouncedHandleKeywordChange()\n },\n allCustomGroups () {\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n }\n },\n computed: {\n minItemSize () {\n return this.emojiHeight\n },\n emojiHeight () {\n return 32 + 4\n },\n emojiWidth () {\n return 32 + 4\n },\n itemPerRow () {\n return this.width ? Math.floor(this.width / this.emojiWidth - 1) : 6\n },\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 allCustomGroups () {\n if (this.hideCustomEmoji) {\n return {}\n }\n const emojis = this.$store.getters.groupedCustomEmojis\n if (emojis.unpacked) {\n emojis.unpacked.text = this.$t('emoji.unpacked')\n }\n return emojis\n },\n defaultGroup () {\n return Object.keys(this.allCustomGroups)[0]\n },\n unicodeEmojiGroups () {\n return this.$store.getters.standardEmojiGroupList.map(group => ({\n id: `standard-${group.id}`,\n text: this.$t(`emoji.unicode_groups.${group.id}`),\n icon: UNICODE_EMOJI_GROUP_ICON[group.id],\n emojis: group.emojis\n }))\n },\n allEmojiGroups () {\n return Object.entries(this.allCustomGroups)\n .map(([_, v]) => v)\n .concat(this.unicodeEmojiGroups)\n },\n stickerPickerEnabled () {\n return (this.$store.state.instance.stickers || []).length !== 0\n },\n debouncedHandleKeywordChange () {\n return debounce(() => {\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n }, 500)\n },\n emojiItems () {\n return this.filteredEmojiGroups.map(group =>\n chunk(group.emojis, this.itemPerRow)\n .map((items, index) => ({\n ...group,\n id: index === 0 ? group.id : `row-${index}-${group.id}`,\n emojis: items,\n isFirstRow: index === 0\n })))\n .reduce((a, c) => a.concat(c), [])\n },\n languages () {\n return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)\n },\n maybeLocalizedEmojiName () {\n return emoji => {\n if (!emoji.annotations) {\n return emoji.displayText\n }\n\n if (emoji.displayTextI18n) {\n return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)\n }\n\n for (const lang of this.languages) {\n if (emoji.annotations[lang]?.name) {\n return emoji.annotations[lang].name\n }\n }\n\n return emoji.displayText\n }\n },\n isInModal () {\n return this.popoversZLayer === 'modals'\n }\n }\n}\n\nexport default EmojiPicker\n","import { render } from \"./emoji_picker.vue?vue&type=template&id=7dac5382\"\nimport script from \"./emoji_picker.js?vue&type=script&lang=js\"\nexport * from \"./emoji_picker.js?vue&type=script&lang=js\"\n\nimport \"./emoji_picker.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","const createRuffleService = () => {\n let ruffleInstance = null\n\n const getRuffle = () => new Promise((resolve, reject) => {\n if (ruffleInstance) {\n resolve(ruffleInstance)\n return\n }\n // Ruffle needs these to be set before it's loaded\n // https://github.com/ruffle-rs/ruffle/issues/3952\n window.RufflePlayer = {}\n window.RufflePlayer.config = {\n polyfills: false,\n publicPath: '/static/ruffle'\n }\n\n // Currently it's seems like a better way of loading ruffle\n // because it needs the wasm publically accessible, but it needs path to it\n // and filename of wasm seems to be pseudo-randomly generated (is it a hash?)\n const script = document.createElement('script')\n // see webpack config, using CopyPlugin to copy it from node_modules\n // provided via ruffle-mirror\n script.src = '/static/ruffle/ruffle.js'\n script.type = 'text/javascript'\n script.onerror = (e) => { reject(e) }\n script.onabort = (e) => { reject(e) }\n script.oncancel = (e) => { reject(e) }\n script.onload = () => {\n ruffleInstance = window.RufflePlayer\n resolve(ruffleInstance)\n }\n document.body.appendChild(script)\n })\n\n return { getRuffle }\n}\n\nconst RuffleService = createRuffleService()\n\nexport default RuffleService\n","<template>\n <div class=\"Flash\">\n <div\n v-if=\"player === true || player === 'hidden'\"\n ref=\"container\"\n class=\"player\"\n :class=\"{ hidden: player === 'hidden' }\"\n />\n <button\n v-if=\"player !== true\"\n class=\"button-unstyled placeholder\"\n @click=\"openPlayer\"\n >\n <span\n v-if=\"player === 'hidden'\"\n class=\"label\"\n >\n {{ $t('general.loading') }}\n </span>\n <span\n v-if=\"player === 'error'\"\n class=\"label\"\n >\n {{ $t('general.flash_fail') }}\n </span>\n <span\n v-else\n class=\"label\"\n >\n <p>\n {{ $t('general.flash_content') }}\n </p>\n <p>\n <FAIcon icon=\"exclamation-triangle\" />\n {{ $t('general.flash_security') }}\n </p>\n </span>\n </button>\n </div>\n</template>\n\n<script src=\"./flash.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Flash {\n display: inline-block;\n width: 100%;\n height: 100%;\n position: relative;\n\n .player {\n height: 100%;\n width: 100%;\n }\n\n .placeholder {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--bg);\n color: var(--link);\n }\n\n .hider {\n top: 0;\n }\n\n .label {\n text-align: center;\n flex: 1 1 0;\n line-height: 1.2;\n white-space: normal;\n word-wrap: normal;\n }\n\n .hidden {\n display: none;\n visibility: \"hidden\";\n }\n}\n</style>\n","import RuffleService from '../../services/ruffle_service/ruffle_service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faStop,\n faExclamationTriangle\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faStop,\n faExclamationTriangle\n)\n\nconst Flash = {\n props: ['src'],\n data () {\n return {\n player: false, // can be true, \"hidden\", false. hidden = element exists\n loaded: false,\n ruffleInstance: null\n }\n },\n methods: {\n openPlayer () {\n if (this.player) return // prevent double-loading, or re-loading on failure\n this.player = 'hidden'\n RuffleService.getRuffle().then((ruffle) => {\n const player = ruffle.newest().createPlayer()\n player.config = {\n letterbox: 'on'\n }\n const container = this.$refs.container\n container.appendChild(player)\n player.style.width = '100%'\n player.style.height = '100%'\n player.load(this.src).then(() => {\n this.player = true\n }).catch((e) => {\n console.error('Error loading ruffle', e)\n this.player = 'error'\n })\n this.ruffleInstance = player\n this.$emit('playerOpened')\n })\n },\n closePlayer () {\n this.ruffleInstance && this.ruffleInstance.remove()\n this.player = false\n this.$emit('playerClosed')\n }\n }\n}\n\nexport default Flash\n","import { render } from \"./flash.vue?vue&type=template&id=651ce37d\"\nimport script from \"./flash.js?vue&type=script&lang=js\"\nexport * from \"./flash.js?vue&type=script&lang=js\"\n\nimport \"./flash.vue?vue&type=style&index=0&id=651ce37d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","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 ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'\nexport default {\n props: ['relationship', 'user', 'labelFollowing', 'buttonClass'],\n components: {\n ConfirmModal\n },\n data () {\n return {\n inProgress: false,\n showingConfirmUnfollow: false\n }\n },\n computed: {\n shouldConfirmUnfollow () {\n return this.$store.getters.mergedConfig.modalOnUnfollow\n },\n isPressed () {\n return this.inProgress || this.relationship.following\n },\n title () {\n if (this.inProgress || this.relationship.following) {\n return this.$t('user_card.follow_unfollow')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_cancel')\n } else {\n return this.$t('user_card.follow')\n }\n },\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else if (this.relationship.following) {\n return this.labelFollowing || this.$t('user_card.following')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_sent')\n } else {\n return this.$t('user_card.follow')\n }\n },\n disabled () {\n return this.inProgress || this.user.deactivated\n }\n },\n methods: {\n showConfirmUnfollow () {\n this.showingConfirmUnfollow = true\n },\n hideConfirmUnfollow () {\n this.showingConfirmUnfollow = false\n },\n onClick () {\n this.relationship.following || this.relationship.requested ? this.unfollow() : this.follow()\n },\n follow () {\n this.inProgress = true\n requestFollow(this.relationship.id, this.$store).then(() => {\n this.inProgress = false\n })\n },\n unfollow () {\n if (this.shouldConfirmUnfollow) {\n this.showConfirmUnfollow()\n } else {\n this.doUnfollow()\n }\n },\n doUnfollow () {\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 this.hideConfirmUnfollow()\n }\n }\n}\n","import { render } from \"./follow_button.vue?vue&type=template&id=6a0717e7\"\nimport script from \"./follow_button.js?vue&type=script&lang=js\"\nexport * from \"./follow_button.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"btn button-default follow-button\"\n :class=\"{ toggled: isPressed }\"\n :disabled=\"disabled\"\n :title=\"title\"\n @click=\"onClick\"\n >\n {{ label }}\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmUnfollow\"\n :title=\"$t('user_card.unfollow_confirm_title')\"\n :confirm-text=\"$t('user_card.unfollow_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.unfollow_confirm_cancel_button')\"\n @accepted=\"doUnfollow\"\n @cancelled=\"hideConfirmUnfollow\"\n >\n <i18n-t\n keypath=\"user_card.unfollow_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </button>\n</template>\n\n<script src=\"./follow_button.js\"></script>\n","<template>\n <div\n ref=\"galleryContainer\"\n class=\"Gallery\"\n :class=\"{ '-long': tooManyAttachments && hidingLong }\"\n >\n <div class=\"gallery-rows\">\n <div\n v-for=\"(row, rowIndex) in rows\"\n :key=\"rowIndex\"\n class=\"gallery-row\"\n :style=\"rowStyle(row)\"\n :class=\"{ '-audio': row.audio, '-minimal': row.minimal, '-grid': grid }\"\n >\n <div\n class=\"gallery-row-inner\"\n :class=\"{ '-grid': grid }\"\n >\n <Attachment\n v-for=\"(attachment, attachmentIndex) in row.items\"\n :key=\"attachment.id\"\n class=\"gallery-item\"\n :compact=\"compact\"\n :nsfw=\"nsfw\"\n :attachment=\"attachment\"\n :size=\"size\"\n :editable=\"editable\"\n :remove=\"removeAttachment\"\n :shift-up=\"!(attachmentIndex === 0 && rowIndex === 0) && shiftUpAttachment\"\n :shift-dn=\"!(attachmentIndex === row.items.length - 1 && rowIndex === rows.length - 1) && shiftDnAttachment\"\n :edit=\"editAttachment\"\n :description=\"descriptions && descriptions[attachment.id]\"\n :hide-description=\"size === 'small' || tooManyAttachments && hidingLong\"\n :style=\"itemStyle(attachment.id, row.items)\"\n @setMedia=\"onMedia\"\n @naturalSizeLoad=\"onNaturalSizeLoad\"\n />\n </div>\n </div>\n </div>\n <div\n v-if=\"tooManyAttachments\"\n class=\"many-attachments\"\n >\n <div class=\"many-attachments-text\">\n {{ $t(\"status.many_attachments\", { number: attachments.length }) }}\n </div>\n <div class=\"many-attachments-buttons\">\n <span\n v-if=\"!hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"toggleHidingLong(true)\"\n >\n {{ $t(\"status.collapse_attachments\") }}\n </button>\n </span>\n <span\n v-if=\"hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"toggleHidingLong(false)\"\n >\n {{ $t(\"status.show_all_attachments\") }}\n </button>\n </span>\n <span\n v-if=\"hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"openGallery\"\n >\n {{ $t(\"status.open_gallery\") }}\n </button>\n </span>\n </div>\n </div>\n </div>\n</template>\n\n<script src='./gallery.js'></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Gallery {\n .gallery-rows {\n display: flex;\n flex-direction: column;\n }\n\n .gallery-row {\n position: relative;\n height: 0;\n width: 100%;\n flex-grow: 1;\n\n .gallery-row-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-flow: row wrap;\n align-content: stretch;\n\n .gallery-item {\n margin: 0 0.5em 0 0;\n flex-grow: 1;\n height: 100%;\n box-sizing: border-box;\n // to make failed images a bit more noticeable on chromium\n min-width: 2em;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &.-grid {\n width: 100%;\n height: auto;\n position: relative;\n display: grid;\n grid-gap: 0.5em;\n grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));\n\n .gallery-item {\n margin: 0;\n height: 200px;\n }\n }\n }\n\n &.-grid,\n &.-minimal {\n height: auto;\n\n .gallery-row-inner {\n position: relative;\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.5em;\n }\n }\n\n &.-long {\n .gallery-rows {\n max-height: 25em;\n overflow: hidden;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n\n .many-attachments-text {\n text-align: center;\n line-height: 2;\n }\n\n .many-attachments-buttons {\n display: flex;\n }\n\n .many-attachments-button {\n display: flex;\n flex: 1;\n justify-content: center;\n line-height: 2;\n\n button {\n padding: 0 2em;\n }\n }\n}\n</style>\n","import Attachment from '../attachment/attachment.vue'\nimport { sumBy, set } from 'lodash'\n\nconst Gallery = {\n props: [\n 'attachments',\n 'compact',\n 'limitRows',\n 'descriptions',\n 'limit',\n 'nsfw',\n 'setMedia',\n 'size',\n 'editable',\n 'removeAttachment',\n 'shiftUpAttachment',\n 'shiftDnAttachment',\n 'editAttachment',\n 'grid'\n ],\n data () {\n return {\n sizes: {},\n hidingLong: true\n }\n },\n components: { Attachment },\n computed: {\n rows () {\n if (!this.attachments) {\n return []\n }\n const attachments = this.limit > 0\n ? this.attachments.slice(0, this.limit)\n : this.attachments\n if (this.size === 'hide') {\n return attachments.map(item => ({ minimal: true, items: [item] }))\n }\n const rows = this.grid\n ? [{ grid: true, items: attachments }]\n : attachments.reduce((acc, attachment, i) => {\n if (attachment.mimetype.includes('audio')) {\n return [...acc, { audio: true, items: [attachment] }, { items: [] }]\n }\n if (!(\n attachment.mimetype.includes('image') ||\n attachment.mimetype.includes('video') ||\n attachment.mimetype.includes('flash')\n )) {\n return [...acc, { minimal: true, items: [attachment] }, { items: [] }]\n }\n const maxPerRow = 3\n const attachmentsRemaining = this.attachments.length - i + 1\n const currentRow = acc[acc.length - 1].items\n currentRow.push(attachment)\n if (currentRow.length >= maxPerRow && attachmentsRemaining > maxPerRow) {\n return [...acc, { items: [] }]\n } else {\n return acc\n }\n }, [{ items: [] }]).filter(_ => _.items.length > 0)\n return rows\n },\n attachmentsDimensionalScore () {\n return this.rows.reduce((acc, row) => {\n let size = 0\n if (row.minimal) {\n size += 1 / 8\n } else if (row.audio) {\n size += 1 / 4\n } else {\n size += 1 / (row.items.length + 0.6)\n }\n return acc + size\n }, 0)\n },\n tooManyAttachments () {\n if (this.editable || this.size === 'small') {\n return false\n } else if (this.size === 'hide') {\n return this.attachments.length > 8\n } else {\n return this.attachmentsDimensionalScore > 1\n }\n }\n },\n methods: {\n onNaturalSizeLoad ({ id, width, height }) {\n set(this.sizes, id, { width, height })\n },\n rowStyle (row) {\n if (row.audio) {\n return { 'padding-bottom': '25%' } // fixed reduced height for audio\n } else if (!row.minimal && !row.grid) {\n return { 'padding-bottom': `${(100 / (row.items.length + 0.6))}%` }\n }\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 toggleHidingLong (event) {\n this.hidingLong = event\n },\n openGallery () {\n this.$store.dispatch('setMedia', this.attachments)\n this.$store.dispatch('setCurrentMedia', this.attachments[0])\n },\n onMedia () {\n this.$store.dispatch('setMedia', this.attachments)\n }\n }\n}\n\nexport default Gallery\n","import { render } from \"./gallery.vue?vue&type=template&id=3f62ea7c\"\nimport script from \"./gallery.js?vue&type=script&lang=js\"\nexport * from \"./gallery.js?vue&type=script&lang=js\"\n\nimport \"./gallery.vue?vue&type=style&index=0&id=3f62ea7c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"interface-language-switcher\">\n <label>\n {{ promptText }}\n </label>\n <ul class=\"setting-list\">\n <li\n v-for=\"index of controlledLanguage.keys()\"\n :key=\"index\"\n >\n <label>\n {{ index === 0 ? $t('settings.primary_language') : $tc('settings.fallback_language', index, { index }) }}\n <Select\n class=\"language-select\"\n :model-value=\"controlledLanguage[index]\"\n @update:modelValue=\"val => setLanguageAt(index, val)\"\n >\n <option\n v-for=\"lang in languages\"\n :key=\"lang.code\"\n :value=\"lang.code\"\n >\n {{ lang.name }}\n </option>\n </Select>\n </label>\n <button\n v-if=\"controlledLanguage.length > 1 && index !== 0\"\n class=\"button-default btn\"\n @click=\"() => removeLanguageAt(index)\"\n >\n {{ $t('settings.remove_language') }}\n </button>\n </li>\n <li>\n <button\n class=\"button-default btn\"\n @click=\"addLanguage\"\n >\n {{ $t('settings.add_language') }}\n </button>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\nimport localeService from '../../services/locale/locale.service.js'\nimport Select from '../select/select.vue'\n\nexport default {\n components: {\n // eslint-disable-next-line vue/no-reserved-component-names\n Select\n },\n props: {\n promptText: {\n type: String,\n required: true\n },\n language: {\n type: [Array, String],\n required: true\n },\n setLanguage: {\n type: Function,\n required: true\n }\n },\n computed: {\n languages () {\n return localeService.languages\n },\n\n controlledLanguage: {\n get: function () {\n return Array.isArray(this.language) ? this.language : [this.language]\n },\n set: function (val) {\n this.setLanguage(val)\n }\n }\n },\n\n methods: {\n getLanguageName (code) {\n return localeService.getLanguageName(code)\n },\n addLanguage () {\n this.controlledLanguage = [...this.controlledLanguage, '']\n },\n setLanguageAt (index, val) {\n const lang = [...this.controlledLanguage]\n lang[index] = val\n this.controlledLanguage = lang\n },\n removeLanguageAt (index) {\n const lang = [...this.controlledLanguage]\n lang.splice(index, 1)\n this.controlledLanguage = lang\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.interface-language-switcher {\n .language-select {\n margin-right: 1em;\n }\n}\n</style>\n","import { render } from \"./interface_language_switcher.vue?vue&type=template&id=416a09f6\"\nimport script from \"./interface_language_switcher.vue?vue&type=script&lang=js\"\nexport * from \"./interface_language_switcher.vue?vue&type=script&lang=js\"\n\nimport \"./interface_language_switcher.vue?vue&type=style&index=0&id=416a09f6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <a\n class=\"link-preview-card\"\n :href=\"card.url\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n <div\n v-if=\"useImage && imageLoaded\"\n class=\"card-image\"\n >\n <img :src=\"card.image\">\n </div>\n <div class=\"card-content\">\n <span class=\"card-host faint\">\n <span\n v-if=\"censored\"\n class=\"nsfw-alert alert warning\"\n >{{ $t('status.nsfw') }}</span>\n {{ card.provider_name }}\n </span>\n <h4 class=\"card-title\">{{ card.title }}</h4>\n <p\n v-if=\"useDescription\"\n class=\"card-description\"\n >{{ card.description }}</p>\n </div>\n </a>\n </div>\n</template>\n\n<script src=\"./link-preview.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.link-preview-card {\n display: flex;\n flex-direction: row;\n cursor: pointer;\n overflow: hidden;\n margin-top: 0.5em;\n\n .card-image {\n flex-shrink: 0;\n width: 120px;\n max-width: 25%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n }\n }\n\n .card-content {\n max-height: 100%;\n margin: 0.5em;\n display: flex;\n flex-direction: column;\n }\n\n .card-host {\n font-size: 0.85em;\n }\n\n .card-description {\n margin: 0.5em 0 0;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n line-height: 1.2em;\n // cap description at 3 lines, the 1px is to clean up some stray pixels\n // TODO: fancier fade-out at the bottom to show off that it's too long?\n max-height: calc(1.2em * 3 - 1px);\n }\n\n .nsfw-alert {\n margin: 2em 0;\n }\n\n color: $fallback--text;\n color: var(--text, $fallback--text);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n</style>\n","import { mapGetters } from 'vuex'\n\nconst LinkPreview = {\n name: 'LinkPreview',\n props: [\n 'card',\n 'size',\n 'nsfw'\n ],\n data () {\n return {\n imageLoaded: false\n }\n },\n computed: {\n useImage () {\n // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid\n // as it makes sure to hide the image if somehow NSFW tagged preview can\n // exist.\n return this.card.image && !this.censored && this.size !== 'hide'\n },\n censored () {\n return this.nsfw && this.hideNsfwConfig\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\n },\n hideNsfwConfig () {\n return this.mergedConfig.hideNsfw\n },\n ...mapGetters([\n 'mergedConfig'\n ])\n },\n created () {\n if (this.useImage) {\n const newImg = new Image()\n newImg.onload = () => {\n this.imageLoaded = true\n }\n newImg.src = this.card.image\n }\n }\n}\n\nexport default LinkPreview\n","import { render } from \"./link-preview.vue?vue&type=template&id=5bb8ccfc\"\nimport script from \"./link-preview.js?vue&type=script&lang=js\"\nexport * from \"./link-preview.js?vue&type=script&lang=js\"\n\nimport \"./link-preview.vue?vue&type=style&index=0&id=5bb8ccfc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"list\"\n role=\"list\"\n >\n <div\n v-for=\"item in items\"\n :key=\"getKey(item)\"\n class=\"list-item\"\n role=\"listitem\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div\n v-if=\"items.length === 0 && !!$slots.empty\"\n class=\"list-empty-content faint\"\n >\n <slot name=\"empty\" />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n items: {\n type: Array,\n default: () => []\n },\n getKey: {\n type: Function,\n default: item => item.id\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.list {\n &-item:not(:last-child) {\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n &-empty-content {\n text-align: center;\n padding: 10px;\n }\n}\n</style>\n","import { render } from \"./list.vue?vue&type=template&id=033f777b\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\n\nimport \"./list.vue?vue&type=style&index=0&id=033f777b&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/* eslint-env browser */\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faUpload, faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUpload,\n faCircleNotch\n)\n\nconst mediaUpload = {\n data () {\n return {\n uploadCount: 0,\n uploadReady: true\n }\n },\n computed: {\n uploading () {\n return this.uploadCount > 0\n }\n },\n methods: {\n onClick () {\n if (this.uploadReady) {\n this.$refs.input.click()\n }\n },\n uploadFile (file) {\n const self = this\n const store = this.$store\n if (file.size > store.state.instance.uploadlimit) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(store.state.instance.uploadlimit)\n self.$emit('upload-failed', 'file_too_big', { filesize: filesize.num, filesizeunit: filesize.unit, allowedsize: allowedsize.num, allowedsizeunit: allowedsize.unit })\n return\n }\n const formData = new FormData()\n formData.append('file', file)\n\n self.$emit('uploading')\n self.uploadCount++\n\n statusPosterService.uploadMedia({ store, formData })\n .then((fileData) => {\n self.$emit('uploaded', fileData)\n self.decreaseUploadCount()\n }, (error) => {\n console.error('Error uploading file', error)\n self.$emit('upload-failed', 'default')\n self.decreaseUploadCount()\n })\n },\n decreaseUploadCount () {\n this.uploadCount--\n if (this.uploadCount === 0) {\n this.$emit('all-uploaded')\n }\n },\n clearFile () {\n this.uploadReady = false\n this.$nextTick(() => {\n this.uploadReady = true\n })\n },\n multiUpload (files) {\n for (const file of files) {\n this.uploadFile(file)\n }\n },\n change ({ target }) {\n this.multiUpload(target.files)\n }\n },\n props: {\n dropFiles: Object,\n disabled: Boolean,\n normalButton: Boolean,\n acceptTypes: {\n type: String,\n default: '*/*'\n }\n },\n watch: {\n dropFiles: function (fileInfos) {\n if (!this.uploading) {\n this.multiUpload(fileInfos)\n }\n }\n }\n}\n\nexport default mediaUpload\n","import { render } from \"./media_upload.vue?vue&type=template&id=f831fc74\"\nimport script from \"./media_upload.js?vue&type=script&lang=js\"\nexport * from \"./media_upload.js?vue&type=script&lang=js\"\n\nimport \"./media_upload.vue?vue&type=style&index=0&id=f831fc74&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"media-upload\"\n :class=\"[normalButton ? 'button-default btn' : 'button-unstyled', { disabled }]\"\n :title=\"$t('tool_tip.media_upload')\"\n @click=\"onClick\"\n >\n <FAIcon\n v-if=\"uploading\"\n class=\"progress-icon\"\n icon=\"circle-notch\"\n spin\n />\n <FAIcon\n v-if=\"!uploading\"\n class=\"new-icon\"\n icon=\"upload\"\n />\n <template v-if=\"normalButton\">\n {{ ' ' }}\n {{ uploading ? $t('general.loading') : $t('tool_tip.media_upload') }}\n </template>\n <input\n v-if=\"uploadReady\"\n ref=\"input\"\n class=\"hidden-input-file\"\n :disabled=\"disabled\"\n type=\"file\"\n multiple=\"true\"\n :accept=\"acceptTypes\"\n @change=\"change\"\n >\n </button>\n</template>\n\n<script src=\"./media_upload.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.media-upload {\n .hidden-input-file {\n display: none;\n }\n}\n\nlabel.media-upload {\n cursor: pointer; // We use <label> for interactivity... i wonder if it's fine\n}\n</style>\n","<template>\n <span\n class=\"MentionLink\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <a\n v-if=\"!user\"\n :href=\"url\"\n class=\"original\"\n target=\"_blank\"\n v-html=\"content\"\n /><!-- eslint-enable vue/no-v-html -->\n <UserPopover\n v-else\n :user-id=\"user.id\"\n :disabled=\"!shouldShowTooltip\"\n >\n <span\n v-if=\"user\"\n class=\"new\"\n :style=\"style\"\n :class=\"classnames\"\n >\n <a\n class=\"short button-unstyled\"\n :class=\"{ '-with-tooltip': shouldShowTooltip }\"\n :href=\"url\"\n @click.prevent=\"onClick\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <UserAvatar\n v-if=\"shouldShowAvatar\"\n class=\"mention-avatar\"\n :user=\"user\"\n /><span\n class=\"shortName\"\n ><FAIcon\n v-if=\"useAtIcon\"\n size=\"sm\"\n icon=\"at\"\n class=\"at\"\n />{{ !useAtIcon ? '@' : '' }}<span\n class=\"userName\"\n v-html=\"userName\"\n /><span\n v-if=\"shouldShowFullUserName\"\n class=\"serverName\"\n :class=\"{ '-faded': shouldFadeDomain }\"\n v-html=\"'@' + serverName\"\n /><UnicodeDomainIndicator\n v-if=\"shouldShowFullUserName\"\n :user=\"user\"\n />\n </span>\n <span\n v-if=\"isYou && shouldShowYous\"\n :class=\"{ '-you': shouldBoldenYou }\"\n > {{ ' ' + $t('status.you') }}</span>\n <!-- eslint-enable vue/no-v-html -->\n </a><span\n ref=\"full\"\n class=\"full\"\n >\n <!-- eslint-disable vue/no-v-html -->\n @<span v-html=\"userName\" /><span v-html=\"'@' + serverName\" />\n <!-- eslint-enable vue/no-v-html -->\n </span>\n </span>\n </UserPopover>\n </span>\n</template>\n\n<script src=\"./mention_link.js\" />\n\n<style lang=\"scss\" src=\"./mention_link.scss\" />\n","import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters, mapState } from 'vuex'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport { defineAsyncComponent } from 'vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAt\n)\n\nconst MentionLink = {\n name: 'MentionLink',\n components: {\n UserAvatar,\n UnicodeDomainIndicator,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n props: {\n url: {\n required: true,\n type: String\n },\n content: {\n required: true,\n type: String\n },\n userId: {\n required: false,\n type: String\n },\n userScreenName: {\n required: false,\n type: String\n }\n },\n data () {\n return {\n hasSelection: false\n }\n },\n methods: {\n onClick () {\n if (this.shouldShowTooltip) return\n const link = generateProfileLink(\n this.userId || this.user.id,\n this.userScreenName || this.user.screen_name\n )\n this.$router.push(link)\n },\n handleSelection () {\n this.hasSelection = document.getSelection().containsNode(this.$refs.full, true)\n }\n },\n mounted () {\n document.addEventListener('selectionchange', this.handleSelection)\n },\n unmounted () {\n document.removeEventListener('selectionchange', this.handleSelection)\n },\n computed: {\n user () {\n return this.url && this.$store && this.$store.getters.findUserByUrl(this.url)\n },\n isYou () {\n // FIXME why user !== currentUser???\n return this.user && this.user.id === this.currentUser.id\n },\n userName () {\n return this.user && this.userNameFullUi.split('@')[0]\n },\n serverName () {\n // XXX assumed that domain does not contain @\n return this.user && (this.userNameFullUi.split('@')[1] || this.$store.getters.instanceDomain)\n },\n userNameFull () {\n return this.user && this.user.screen_name\n },\n userNameFullUi () {\n return this.user && this.user.screen_name_ui\n },\n highlight () {\n return this.user && this.mergedConfig.highlight[this.user.screen_name]\n },\n highlightType () {\n return this.highlight && ('-' + this.highlight.type)\n },\n highlightClass () {\n if (this.highlight) return highlightClass(this.user)\n },\n style () {\n if (this.highlight) {\n const {\n backgroundColor,\n backgroundPosition,\n backgroundImage,\n ...rest\n } = highlightStyle(this.highlight)\n return rest\n }\n },\n classnames () {\n return [\n {\n '-you': this.isYou && this.shouldBoldenYou,\n '-highlighted': this.highlight,\n '-has-selection': this.hasSelection\n },\n this.highlightType\n ]\n },\n useAtIcon () {\n return this.mergedConfig.useAtIcon\n },\n isRemote () {\n return this.userName !== this.userNameFull\n },\n shouldShowFullUserName () {\n const conf = this.mergedConfig.mentionLinkDisplay\n if (conf === 'short') {\n return false\n } else if (conf === 'full') {\n return true\n } else { // full_for_remote\n return this.isRemote\n }\n },\n shouldShowTooltip () {\n return this.mergedConfig.mentionLinkShowTooltip\n },\n shouldShowAvatar () {\n return this.mergedConfig.mentionLinkShowAvatar\n },\n shouldShowYous () {\n return this.mergedConfig.mentionLinkShowYous\n },\n shouldBoldenYou () {\n return this.mergedConfig.mentionLinkBoldenYou\n },\n shouldFadeDomain () {\n return this.mergedConfig.mentionLinkFadeDomain\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n }\n}\n\nexport default MentionLink\n","import { render } from \"./mention_link.vue?vue&type=template&id=11ab9a6c\"\nimport script from \"./mention_link.js?vue&type=script&lang=js\"\nexport * from \"./mention_link.js?vue&type=script&lang=js\"\n\nimport \"./mention_link.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span class=\"MentionsLine\">\n <MentionLink\n v-for=\"mention in mentionsComputed\"\n :key=\"mention.index\"\n class=\"mention-link\"\n :content=\"mention.content\"\n :url=\"mention.url\"\n /><span\n v-if=\"manyMentions\"\n class=\"extraMentions\"\n >\n <span\n v-if=\"expanded\"\n class=\"fullExtraMentions\"\n >{{ ' ' }}<MentionLink\n v-for=\"mention in extraMentions\"\n :key=\"mention.index\"\n class=\"mention-link\"\n :content=\"mention.content\"\n :url=\"mention.url\"\n />\n </span><button\n v-if=\"!expanded\"\n class=\"button-unstyled showMoreLess\"\n @click=\"toggleShowMore\"\n >\n {{ $t('status.plus_more', { number: extraMentions.length }) }}\n </button><button\n v-if=\"expanded\"\n class=\"button-unstyled showMoreLess\"\n @click=\"toggleShowMore\"\n >\n {{ $t('general.show_less') }}\n </button>\n </span>\n </span>\n</template>\n<script src=\"./mentions_line.js\"></script>\n<style lang=\"scss\" src=\"./mentions_line.scss\" />\n","import MentionLink from 'src/components/mention_link/mention_link.vue'\nimport { mapGetters } from 'vuex'\n\nexport const MENTIONS_LIMIT = 5\n\nconst MentionsLine = {\n name: 'MentionsLine',\n props: {\n mentions: {\n required: true,\n type: Array\n }\n },\n data: () => ({ expanded: false }),\n components: {\n MentionLink\n },\n computed: {\n mentionsComputed () {\n return this.mentions.slice(0, MENTIONS_LIMIT)\n },\n extraMentions () {\n return this.mentions.slice(MENTIONS_LIMIT)\n },\n manyMentions () {\n return this.extraMentions.length > 0\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n toggleShowMore () {\n this.expanded = !this.expanded\n }\n }\n}\n\nexport default MentionsLine\n","import { render } from \"./mentions_line.vue?vue&type=template&id=0e41a1da\"\nimport script from \"./mentions_line.js?vue&type=script&lang=js\"\nexport * from \"./mentions_line.js?vue&type=script&lang=js\"\n\nimport \"./mentions_line.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-show=\"isOpen\"\n v-body-scroll-lock=\"isOpen && !noBackground\"\n class=\"modal-view\"\n :class=\"classes\"\n @click.self=\"$emit('backdropClicked')\"\n >\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n provide: {\n popoversZLayer: 'modals'\n },\n props: {\n isOpen: {\n type: Boolean,\n default: true\n },\n noBackground: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n classes () {\n return {\n 'modal-background': !this.noBackground,\n open: this.isOpen\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.modal-view {\n z-index: var(--ZI_modals);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n pointer-events: none;\n animation-duration: 0.2s;\n animation-name: modal-background-fadein;\n opacity: 0;\n\n > * {\n pointer-events: initial;\n }\n\n &.modal-background {\n pointer-events: initial;\n background-color: rgb(0 0 0 / 50%);\n }\n\n &.open {\n opacity: 1;\n }\n}\n\n@keyframes modal-background-fadein {\n from {\n background-color: rgb(0 0 0 / 0%);\n }\n\n to {\n background-color: rgb(0 0 0 / 50%);\n }\n}\n</style>\n","import { render } from \"./modal.vue?vue&type=template&id=e92832fc\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\n\nimport \"./modal.vue?vue&type=style&index=0&id=e92832fc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <teleport\n :disabled=\"minimalMode || disableTeleport\"\n :to=\"teleportTarget\"\n >\n <component\n :is=\"noHeading ? 'div' : 'aside'\"\n ref=\"root\"\n :class=\"{ minimal: minimalMode }\"\n class=\"Notifications\"\n >\n <div :class=\"mainClass\">\n <div\n v-if=\"!noHeading\"\n class=\"notifications-heading panel-heading -sticky\"\n >\n <div class=\"title\">\n {{ $t('notifications.notifications') }}\n <span\n v-if=\"unseenCount\"\n class=\"badge badge-notification unseen-count\"\n >{{ unseenCount }}</span>\n </div>\n <div\n v-if=\"showScrollTop\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled scroll-to-top-button\"\n type=\"button\"\n :title=\"$t('general.scroll_to_top')\"\n @click=\"scrollToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n </div>\n <button\n v-if=\"unseenCount\"\n class=\"button-default read-button\"\n type=\"button\"\n @click.prevent=\"markAsSeen\"\n >\n {{ $t('notifications.read') }}\n </button>\n <NotificationFilters class=\"rightside-button\" />\n </div>\n <div\n class=\"panel-body\"\n role=\"feed\"\n >\n <div\n v-for=\"notification in notificationsToDisplay\"\n :key=\"notification.id\"\n role=\"listitem\"\n class=\"notification\"\n :class=\"{unseen: !minimalMode && !notification.seen}\"\n >\n <div class=\"notification-overlay\" />\n <notification :notification=\"notification\" />\n </div>\n </div>\n <div class=\"panel-footer\">\n <div\n v-if=\"bottomedOut\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('notifications.no_more_notifications') }}\n </div>\n <button\n v-else-if=\"!loading\"\n class=\"button-unstyled -link -fullwidth\"\n @click.prevent=\"fetchOlderNotifications()\"\n >\n <div class=\"new-status-notification text-center\">\n {{ minimalMode ? $t('interactions.load_older') : $t('notifications.load_older') }}\n </div>\n </button>\n <div\n v-else\n class=\"new-status-notification text-center\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n </div>\n </div>\n </component>\n </teleport>\n</template>\n\n<script src=\"./notifications.js\"></script>\n<style lang=\"scss\" src=\"./notifications.scss\"></style>\n","<template>\n <article\n v-if=\"notification.type === 'mention'\"\n >\n <Status\n class=\"Notification\"\n :compact=\"true\"\n :statusoid=\"notification.status\"\n />\n </article>\n <article v-else>\n <div\n v-if=\"needMute && !unmuted\"\n class=\"Notification container -muted\"\n >\n <small>\n <user-link\n :user=\"notification.from_profile\"\n :at=\"false\"\n />\n </small>\n <button\n class=\"button-unstyled unmute\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"eye-slash\"\n />\n </button>\n </div>\n <div\n v-else\n class=\"Notification non-mention\"\n :class=\"[userClass, { highlighted: userStyle }, '-type--' + notification.type]\"\n :style=\"[ userStyle ]\"\n >\n <a\n class=\"avatar-container\"\n :href=\"$router.resolve(userProfileLink).href\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"notification.from_profile.id\"\n :overlay-centers=\"true\"\n >\n <UserAvatar\n class=\"post-avatar\"\n :bot=\"botIndicator\"\n :compact=\"true\"\n :better-shadow=\"betterShadow\"\n :user=\"notification.from_profile\"\n />\n </UserPopover>\n </a>\n <div class=\"notification-right\">\n <span class=\"notification-details\">\n <div class=\"name-and-action\">\n <!-- eslint-disable vue/no-v-html -->\n <bdi v-if=\"!!notification.from_profile.name_html\">\n <RichContent\n class=\"username\"\n :title=\"'@'+notification.from_profile.screen_name_ui\"\n :html=\"notification.from_profile.name_html\"\n :emoji=\"notification.from_profile.emoji\"\n />\n </bdi>\n <!-- eslint-enable vue/no-v-html -->\n <span\n v-else\n class=\"username\"\n :title=\"'@'+notification.from_profile.screen_name_ui\"\n >\n {{ notification.from_profile.name }}\n </span>\n {{ ' ' }}\n <span v-if=\"notification.type === 'like'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"star\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.favorited_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'repeat'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"retweet\"\n :title=\"$t('tool_tip.repeat')\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.repeated_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'follow'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"user-plus\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.followed_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'follow_request'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"user\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.follow_request') }}</small>\n </span>\n <span v-if=\"notification.type === 'move'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"suitcase-rolling\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.migrated_to') }}</small>\n </span>\n <span v-if=\"notification.type === 'pleroma:emoji_reaction'\">\n <small>\n <i18n-t\n scope=\"global\"\n keypath=\"notifications.reacted_with\"\n >\n <img\n v-if=\"notification.emoji_url\"\n class=\"emoji-reaction-emoji emoji-reaction-emoji-image\"\n :src=\"notification.emoji_url\"\n :alt=\"notification.emoji\"\n :title=\"notification.emoji\"\n >\n <span\n v-else\n class=\"emoji-reaction-emoji\"\n >{{ notification.emoji }}</span>\n </i18n-t>\n </small>\n </span>\n <span v-if=\"notification.type === 'pleroma:report'\">\n <small>{{ $t('notifications.submitted_report') }}</small>\n </span>\n <span v-if=\"notification.type === 'poll'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"poll-h\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.poll_ended') }}</small>\n </span>\n </div>\n <div\n v-if=\"isStatusNotification\"\n class=\"timeago\"\n >\n <router-link\n v-if=\"notification.status\"\n :to=\"{ name: 'conversation', params: { id: notification.status.id } }\"\n class=\"timeago-link faint-link\"\n >\n <Timeago\n :time=\"notification.created_at\"\n :auto-update=\"240\"\n />\n </router-link>\n <button\n class=\"button-unstyled expand-icon\"\n :title=\"$t('tool_tip.toggle_expand')\"\n :aria-expanded=\"statusExpanded\"\n @click.prevent=\"toggleStatusExpanded\"\n >\n <FAIcon\n class=\"fa-scale-110\"\n fixed-width\n :icon=\"statusExpanded ? 'compress-alt' : 'expand-alt'\"\n />\n </button>\n </div>\n <div\n v-else\n class=\"timeago\"\n >\n <span class=\"faint\">\n <Timeago\n :time=\"notification.created_at\"\n :auto-update=\"240\"\n />\n </span>\n </div>\n <button\n v-if=\"needMute\"\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.toggle_mute')\"\n :aria-expanded=\"!unmuted\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"eye-slash\"\n />\n </button>\n </span>\n <div\n v-if=\"notification.type === 'follow' || notification.type === 'follow_request'\"\n class=\"follow-text\"\n >\n <user-link\n class=\"follow-name\"\n :user=\"notification.from_profile\"\n />\n <div\n v-if=\"notification.type === 'follow_request'\"\n style=\"white-space: nowrap;\"\n >\n <button\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.accept_follow_request')\"\n @click=\"approveUser()\"\n >\n <FAIcon\n icon=\"check\"\n class=\"fa-scale-110 fa-old-padding follow-request-accept\"\n />\n </button>\n <button\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.reject_follow_request')\"\n @click=\"denyUser()\"\n >\n <FAIcon\n icon=\"times\"\n class=\"fa-scale-110 fa-old-padding follow-request-reject\"\n />\n </button>\n </div>\n </div>\n <div\n v-else-if=\"notification.type === 'move'\"\n class=\"move-text\"\n >\n <user-link\n :user=\"notification.target\"\n />\n </div>\n <Report\n v-else-if=\"notification.type === 'pleroma:report'\"\n :report-id=\"notification.report.id\"\n />\n <template v-else>\n <StatusContent\n :class=\"{ faint: !statusExpanded }\"\n :compact=\"!statusExpanded\"\n :status=\"notification.action\"\n />\n </template>\n </div>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingApproveConfirmDialog\"\n :title=\"$t('user_card.approve_confirm_title')\"\n :confirm-text=\"$t('user_card.approve_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.approve_confirm_cancel_button')\"\n @accepted=\"doApprove\"\n @cancelled=\"hideApproveConfirmDialog\"\n >\n {{ $t('user_card.approve_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n <confirm-modal\n v-if=\"showingDenyConfirmDialog\"\n :title=\"$t('user_card.deny_confirm_title')\"\n :confirm-text=\"$t('user_card.deny_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.deny_confirm_cancel_button')\"\n @accepted=\"doDeny\"\n @cancelled=\"hideDenyConfirmDialog\"\n >\n {{ $t('user_card.deny_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n </teleport>\n </article>\n</template>\n\n<script src=\"./notification.js\"></script>\n<style src=\"./notification.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"Report\">\n <div class=\"reported-user\">\n <span>{{ $t('report.reported_user') }}</span>\n <router-link :to=\"generateUserProfileLink(report.acct)\">\n @{{ report.acct.screen_name }}\n </router-link>\n </div>\n <div class=\"reporter\">\n <span>{{ $t('report.reporter') }}</span>\n <router-link :to=\"generateUserProfileLink(report.actor)\">\n @{{ report.actor.screen_name }}\n </router-link>\n </div>\n <div class=\"report-state\">\n <span>{{ $t('report.state') }}</span>\n <Select\n :id=\"report-state\"\n v-model=\"state\"\n class=\"form-control\"\n >\n <option\n v-for=\"state in ['open', 'closed', 'resolved']\"\n :key=\"state\"\n :value=\"state\"\n >\n {{ $t('report.state_' + state) }}\n </option>\n </Select>\n </div>\n <RichContent\n class=\"report-content\"\n :html=\"report.content\"\n :emoji=\"[]\"\n />\n <div v-if=\"report.statuses.length\">\n <small>{{ $t('report.reported_statuses') }}</small>\n <router-link\n v-for=\"status in report.statuses\"\n :key=\"status.id\"\n :to=\"{ name: 'conversation', params: { id: status.id } }\"\n class=\"reported-status\"\n >\n <div class=\"reported-status-heading\">\n <span class=\"reported-status-name\">{{ status.user.name }}</span>\n <Timeago\n :time=\"status.created_at\"\n :auto-update=\"240\"\n class=\"faint\"\n />\n </div>\n <status-content :status=\"status\" />\n </router-link>\n </div>\n <div v-if=\"report.notes.length\">\n <small>{{ $t('report.notes') }}</small>\n <div\n v-for=\"note in report.notes\"\n :key=\"note.id\"\n class=\"note\"\n >\n <span>{{ note.content }}</span>\n <Timeago\n :time=\"note.created_at\"\n :auto-update=\"240\"\n class=\"faint\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./report.js\"></script>\n<style src=\"./report.scss\" lang=\"scss\"></style>\n","import Select from '../select/select.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst Report = {\n props: [\n 'reportId'\n ],\n components: {\n Select,\n StatusContent,\n Timeago,\n RichContent\n },\n computed: {\n report () {\n console.log(this.$store.state.reports.reports[this.reportId] || {})\n return this.$store.state.reports.reports[this.reportId] || {}\n },\n state: {\n get: function () { return this.report.state },\n set: function (val) { this.setReportState(val) }\n }\n },\n methods: {\n generateUserProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n },\n setReportState (state) {\n return this.$store.dispatch('setReportState', { id: this.report.id, state })\n }\n }\n}\n\nexport default Report\n","import { render } from \"./report.vue?vue&type=template&id=86a2fdce\"\nimport script from \"./report.js?vue&type=script&lang=js\"\nexport * from \"./report.js?vue&type=script&lang=js\"\n\nimport \"./report.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import StatusContent from '../status_content/status_content.vue'\nimport { mapState } from 'vuex'\nimport Status from '../status/status.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport Report from '../report/report.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport UserPopover from '../user_popover/user_popover.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { isStatusNotification } from '../../services/notification_utils/notification_utils.js'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCheck,\n faTimes,\n faStar,\n faRetweet,\n faUserPlus,\n faEyeSlash,\n faUser,\n faSuitcaseRolling,\n faExpandAlt,\n faCompressAlt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCheck,\n faTimes,\n faStar,\n faRetweet,\n faUserPlus,\n faUser,\n faEyeSlash,\n faSuitcaseRolling,\n faExpandAlt,\n faCompressAlt\n)\n\nconst Notification = {\n data () {\n return {\n statusExpanded: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter,\n unmuted: false,\n showingApproveConfirmDialog: false,\n showingDenyConfirmDialog: false\n }\n },\n props: ['notification'],\n components: {\n StatusContent,\n UserAvatar,\n UserCard,\n Timeago,\n Status,\n Report,\n RichContent,\n UserPopover,\n UserLink,\n ConfirmModal\n },\n methods: {\n toggleStatusExpanded () {\n this.statusExpanded = !this.statusExpanded\n },\n generateUserProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n },\n getUser (notification) {\n return this.$store.state.users.usersObject[notification.from_profile.id]\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n showApproveConfirmDialog () {\n this.showingApproveConfirmDialog = true\n },\n hideApproveConfirmDialog () {\n this.showingApproveConfirmDialog = false\n },\n showDenyConfirmDialog () {\n this.showingDenyConfirmDialog = true\n },\n hideDenyConfirmDialog () {\n this.showingDenyConfirmDialog = false\n },\n approveUser () {\n if (this.shouldConfirmApprove) {\n this.showApproveConfirmDialog()\n } else {\n this.doApprove()\n }\n },\n doApprove () {\n this.$store.state.api.backendInteractor.approveUser({ id: this.user.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n this.$store.dispatch('markSingleNotificationAsSeen', { id: this.notification.id })\n this.$store.dispatch('updateNotification', {\n id: this.notification.id,\n updater: notification => {\n notification.type = 'follow'\n }\n })\n this.hideApproveConfirmDialog()\n },\n denyUser () {\n if (this.shouldConfirmDeny) {\n this.showDenyConfirmDialog()\n } else {\n this.doDeny()\n }\n },\n doDeny () {\n this.$store.state.api.backendInteractor.denyUser({ id: this.user.id })\n .then(() => {\n this.$store.dispatch('dismissNotificationLocal', { id: this.notification.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n })\n this.hideDenyConfirmDialog()\n }\n },\n computed: {\n userClass () {\n return highlightClass(this.notification.from_profile)\n },\n userStyle () {\n const highlight = this.$store.getters.mergedConfig.highlight\n const user = this.notification.from_profile\n return highlightStyle(highlight[user.screen_name])\n },\n user () {\n return this.$store.getters.findUser(this.notification.from_profile.id)\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.user)\n },\n targetUser () {\n return this.$store.getters.findUser(this.notification.target.id)\n },\n targetUserProfileLink () {\n return this.generateUserProfileLink(this.targetUser)\n },\n needMute () {\n return this.$store.getters.relationship(this.user.id).muting\n },\n isStatusNotification () {\n return isStatusNotification(this.notification.type)\n },\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n shouldConfirmApprove () {\n return this.mergedConfig.modalOnApproveFollow\n },\n shouldConfirmDeny () {\n return this.mergedConfig.modalOnDenyFollow\n },\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n }\n}\n\nexport default Notification\n","import { render } from \"./notification.vue?vue&type=template&id=1ab1e6c0\"\nimport script from \"./notification.js?vue&type=script&lang=js\"\nexport * from \"./notification.js?vue&type=script&lang=js\"\n\nimport \"./notification.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"NotificationFilters\"\n placement=\"bottom\"\n :bound-to=\"{ x: 'container' }\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('likes')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.likes }\"\n />{{ $t('settings.notification_visibility_likes') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('repeats')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.repeats }\"\n />{{ $t('settings.notification_visibility_repeats') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('follows')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.follows }\"\n />{{ $t('settings.notification_visibility_follows') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('mentions')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.mentions }\"\n />{{ $t('settings.notification_visibility_mentions') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('emojiReactions')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.emojiReactions }\"\n />{{ $t('settings.notification_visibility_emoji_reactions') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('moves')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.moves }\"\n />{{ $t('settings.notification_visibility_moves') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('polls')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.polls }\"\n />{{ $t('settings.notification_visibility_polls') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"filter-trigger-button button-unstyled\">\n <FAIcon icon=\"filter\" />\n </button>\n </template>\n </Popover>\n</template>\n\n<script>\nimport Popover from '../popover/popover.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faFilter } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFilter\n)\n\nexport default {\n components: { Popover },\n computed: {\n filters () {\n return this.$store.getters.mergedConfig.notificationVisibility\n }\n },\n methods: {\n toggleNotificationFilter (type) {\n this.$store.dispatch('setOption', {\n name: 'notificationVisibility',\n value: {\n ...this.filters,\n [type]: !this.filters[type]\n }\n })\n }\n }\n}\n</script>\n","import { render } from \"./notification_filters.vue?vue&type=template&id=0ad39446\"\nimport script from \"./notification_filters.vue?vue&type=script&lang=js\"\nexport * from \"./notification_filters.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { computed } from 'vue'\nimport { mapGetters } from 'vuex'\nimport Notification from '../notification/notification.vue'\nimport NotificationFilters from './notification_filters.vue'\nimport notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js'\nimport {\n notificationsFromStore,\n filteredNotificationsFromStore,\n unseenNotificationsFromStore\n} from '../../services/notification_utils/notification_utils.js'\nimport FaviconService from '../../services/favicon_service/favicon_service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch, faArrowUp, faMinus } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faArrowUp,\n faMinus\n)\n\nconst DEFAULT_SEEN_TO_DISPLAY_COUNT = 30\n\nconst Notifications = {\n components: {\n Notification,\n NotificationFilters\n },\n props: {\n // Disables panel styles, unread mark, potentially other notification-related actions\n // meant for \"Interactions\" timeline\n minimalMode: Boolean,\n // Custom filter mode, an array of strings, possible values 'mention', 'repeat', 'like', 'follow', used to override global filter for use in \"Interactions\" timeline\n filterMode: Array,\n // Disable teleporting (i.e. for /users/user/notifications)\n disableTeleport: Boolean\n },\n data () {\n return {\n showScrollTop: false,\n bottomedOut: false,\n // How many seen notifications to display in the list. The more there are,\n // the heavier the page becomes. This count is increased when loading\n // older notifications, and cut back to default whenever hitting \"Read!\".\n seenToDisplayCount: DEFAULT_SEEN_TO_DISPLAY_COUNT\n }\n },\n provide () {\n return {\n popoversZLayer: computed(() => this.popoversZLayer)\n }\n },\n computed: {\n mainClass () {\n return this.minimalMode ? '' : 'panel panel-default'\n },\n notifications () {\n return notificationsFromStore(this.$store)\n },\n error () {\n return this.$store.state.statuses.notifications.error\n },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n filteredNotifications () {\n return filteredNotificationsFromStore(this.$store, this.filterMode)\n },\n unseenCount () {\n return this.unseenNotifications.length\n },\n unseenCountTitle () {\n return this.unseenCount + (this.unreadChatCount) + this.unreadAnnouncementCount\n },\n loading () {\n return this.$store.state.statuses.notifications.loading\n },\n noHeading () {\n const { layoutType } = this.$store.state.interface\n return this.minimalMode || layoutType === 'mobile'\n },\n teleportTarget () {\n const { layoutType } = this.$store.state.interface\n const map = {\n wide: '#notifs-column',\n mobile: '#mobile-notifications'\n }\n return map[layoutType] || '#notifs-sidebar'\n },\n popoversZLayer () {\n const { layoutType } = this.$store.state.interface\n return layoutType === 'mobile' ? 'navbar' : null\n },\n notificationsToDisplay () {\n return this.filteredNotifications.slice(0, this.unseenCount + this.seenToDisplayCount)\n },\n noSticky () { return this.$store.getters.mergedConfig.disableStickyHeaders },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n },\n mounted () {\n this.scrollerRef = this.$refs.root.closest('.column.-scrollable')\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.mobile-notifications')\n }\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.column.main')\n }\n this.scrollerRef.addEventListener('scroll', this.updateScrollPosition)\n },\n unmounted () {\n if (!this.scrollerRef) return\n this.scrollerRef.removeEventListener('scroll', this.updateScrollPosition)\n },\n watch: {\n unseenCountTitle (count) {\n if (count > 0) {\n FaviconService.drawFaviconBadge()\n this.$store.dispatch('setPageTitle', `(${count})`)\n } else {\n FaviconService.clearFaviconBadge()\n this.$store.dispatch('setPageTitle', '')\n }\n },\n teleportTarget () {\n // handle scroller change\n this.$nextTick(() => {\n this.scrollerRef.removeEventListener('scroll', this.updateScrollPosition)\n this.scrollerRef = this.$refs.root.closest('.column.-scrollable')\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.mobile-notifications')\n }\n this.scrollerRef.addEventListener('scroll', this.updateScrollPosition)\n this.updateScrollPosition()\n })\n }\n },\n methods: {\n scrollToTop () {\n const scrollable = this.scrollerRef\n scrollable.scrollTo({ top: this.$refs.root.offsetTop })\n // this.$refs.root.scrollIntoView({ behavior: 'smooth', block: 'start' })\n },\n updateScrollPosition () {\n this.showScrollTop = this.$refs.root.offsetTop < this.scrollerRef.scrollTop\n },\n markAsSeen () {\n this.$store.dispatch('markNotificationsAsSeen')\n this.seenToDisplayCount = DEFAULT_SEEN_TO_DISPLAY_COUNT\n },\n fetchOlderNotifications () {\n if (this.loading) {\n return\n }\n\n const seenCount = this.filteredNotifications.length - this.unseenCount\n if (this.seenToDisplayCount < seenCount) {\n this.seenToDisplayCount = Math.min(this.seenToDisplayCount + 20, seenCount)\n return\n } else if (this.seenToDisplayCount > seenCount) {\n this.seenToDisplayCount = seenCount\n }\n\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n store.commit('setNotificationsLoading', { value: true })\n notificationsFetcher.fetchAndUpdate({\n store,\n credentials,\n older: true\n }).then(notifs => {\n store.commit('setNotificationsLoading', { value: false })\n if (notifs.length === 0) {\n this.bottomedOut = true\n }\n this.seenToDisplayCount += notifs.length\n })\n }\n }\n}\n\nexport default Notifications\n","import { render } from \"./notifications.vue?vue&type=template&id=fdd5b5f4\"\nimport script from \"./notifications.js?vue&type=script&lang=js\"\nexport * from \"./notifications.js?vue&type=script&lang=js\"\n\nimport \"./notifications.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel-loading\">\n <span class=\"loading-text\">\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"3x\"\n />\n {{ $t('general.loading') }}\n </span>\n </div>\n</template>\n\n<script>\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nexport default {}\n</script>\n\n<style lang=\"scss\">\n@import \"src/variables\";\n\n.panel-loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n\n .loading-text svg {\n line-height: 0;\n vertical-align: middle;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n</style>\n","import { render } from \"./panel_loading.vue?vue&type=template&id=0255a870\"\nimport script from \"./panel_loading.vue?vue&type=script&lang=js\"\nexport * from \"./panel_loading.vue?vue&type=script&lang=js\"\n\nimport \"./panel_loading.vue?vue&type=style&index=0&id=0255a870&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","const Popover = {\n name: 'Popover',\n props: {\n // Action to trigger popover: either 'hover' or 'click'\n trigger: String,\n\n // 'top', 'bottom', 'left', 'right'\n placement: String,\n\n // Takes object with properties 'x' and 'y', values of these can be\n // 'container' for using offsetParent as boundaries for either axis\n // or 'viewport'\n boundTo: Object,\n\n // Takes a selector to use as a replacement for the parent container\n // for getting boundaries for x an y axis\n boundToSelector: String,\n\n // Takes a top/bottom/left/right object, how much space to leave\n // between boundary and popover element\n margin: Object,\n\n // Takes a x/y object and tells how many pixels to offset from\n // anchor point on either axis\n offset: Object,\n\n // Replaces the classes you may want for the popover container.\n // Use 'popover-default' in addition to get the default popover\n // styles with your custom class.\n popoverClass: String,\n\n // If true, subtract padding when calculating position for the popover,\n // use it when popover offset looks to be different on top vs bottom.\n removePadding: Boolean,\n\n // self-explanatory (i hope)\n disabled: Boolean,\n\n // Instead of putting popover next to anchor, overlay popover's center on top of anchor's center\n overlayCenters: Boolean,\n\n // What selector (witin popover!) to use for determining center of popover\n overlayCentersSelector: String,\n\n // Lets hover popover stay when clicking inside of it\n stayOnClick: Boolean,\n\n // Use styled button (to avoid nested buttons)\n normalButton: Boolean,\n\n triggerAttrs: {\n type: Object,\n default: {}\n }\n },\n inject: ['popoversZLayer'], // override popover z layer\n data () {\n return {\n // lockReEntry is a flag that is set when mouse cursor is leaving the popover's content\n // so that if mouse goes back into popover it won't be re-shown again to prevent annoyance\n // with popovers refusing to be hidden when user wants to interact with something in below popover\n anchorEl: null,\n // There's an issue where having teleport enabled by default causes things just...\n // not render at all, i.e. main post status form and its emoji inputs\n teleport: false,\n lockReEntry: false,\n hidden: true,\n styles: {},\n oldSize: { width: 0, height: 0 },\n scrollable: null,\n // used to avoid blinking if hovered onto popover\n graceTimeout: null,\n parentPopover: null,\n disableClickOutside: false,\n childrenShown: new Set()\n }\n },\n methods: {\n setAnchorEl (el) {\n this.anchorEl = el\n this.updateStyles()\n },\n containerBoundingClientRect () {\n const container = this.boundToSelector ? this.$el.closest(this.boundToSelector) : this.$el.offsetParent\n return container.getBoundingClientRect()\n },\n updateStyles () {\n if (this.hidden) {\n this.styles = {}\n return\n }\n\n // Popover will be anchored around this element, trigger ref is the container, so\n // its children are what are inside the slot. Expect only one v-slot:trigger.\n const anchorEl = this.anchorEl || (this.$refs.trigger && this.$refs.trigger.children[0]) || this.$el\n // SVGs don't have offsetWidth/Height, use fallback\n const anchorHeight = anchorEl.offsetHeight || anchorEl.clientHeight\n const anchorWidth = anchorEl.offsetWidth || anchorEl.clientWidth\n const anchorScreenBox = anchorEl.getBoundingClientRect()\n\n const anchorStyle = getComputedStyle(anchorEl)\n const topPadding = parseFloat(anchorStyle.paddingTop)\n const bottomPadding = parseFloat(anchorStyle.paddingBottom)\n const rightPadding = parseFloat(anchorStyle.paddingRight)\n const leftPadding = parseFloat(anchorStyle.paddingLeft)\n\n // Screen position of the origin point for popover = center of the anchor\n const origin = {\n x: anchorScreenBox.left + anchorWidth * 0.5,\n y: anchorScreenBox.top + anchorHeight * 0.5\n }\n const content = this.$refs.content\n const overlayCenter = this.overlayCenters\n ? this.$refs.content.querySelector(this.overlayCentersSelector)\n : null\n\n // Minor optimization, don't call a slow reflow call if we don't have to\n const parentScreenBox = this.boundTo &&\n (this.boundTo.x === 'container' || this.boundTo.y === 'container') &&\n this.containerBoundingClientRect()\n\n const margin = this.margin || {}\n\n // What are the screen bounds for the popover? Viewport vs container\n // when using viewport, using default margin values to dodge the navbar\n const xBounds = this.boundTo && this.boundTo.x === 'container'\n ? {\n min: parentScreenBox.left + (margin.left || 0),\n max: parentScreenBox.right - (margin.right || 0)\n }\n : {\n min: 0 + (margin.left || 10),\n max: window.innerWidth - (margin.right || 10)\n }\n\n const yBounds = this.boundTo && this.boundTo.y === 'container'\n ? {\n min: parentScreenBox.top + (margin.top || 0),\n max: parentScreenBox.bottom - (margin.bottom || 0)\n }\n : {\n min: 0 + (margin.top || 50),\n max: window.innerHeight - (margin.bottom || 5)\n }\n\n let horizOffset = 0\n let vertOffset = 0\n\n if (overlayCenter) {\n const box = content.getBoundingClientRect()\n const overlayCenterScreenBox = overlayCenter.getBoundingClientRect()\n const leftInnerOffset = overlayCenterScreenBox.left - box.left\n const topInnerOffset = overlayCenterScreenBox.top - box.top\n horizOffset = -leftInnerOffset - overlayCenter.offsetWidth * 0.5\n vertOffset = -topInnerOffset - overlayCenter.offsetHeight * 0.5\n } else {\n horizOffset = content.offsetWidth * -0.5\n vertOffset = content.offsetHeight * -0.5\n }\n\n const leftBorder = origin.x + horizOffset\n const rightBorder = leftBorder + content.offsetWidth\n const topBorder = origin.y + vertOffset\n const bottomBorder = topBorder + content.offsetHeight\n\n // If overflowing from left, move it so that it doesn't\n if (leftBorder < xBounds.min) {\n horizOffset += xBounds.min - leftBorder\n }\n\n // If overflowing from right, move it so that it doesn't\n if (rightBorder > xBounds.max) {\n horizOffset -= rightBorder - xBounds.max\n }\n\n // If overflowing from top, move it so that it doesn't\n if (topBorder < yBounds.min) {\n vertOffset += yBounds.min - topBorder\n }\n\n // If overflowing from bottom, move it so that it doesn't\n if (bottomBorder > yBounds.max) {\n vertOffset -= bottomBorder - yBounds.max\n }\n\n let translateX = 0\n let translateY = 0\n\n if (overlayCenter) {\n translateX = origin.x + horizOffset\n translateY = origin.y + vertOffset\n } else if (this.placement !== 'right' && this.placement !== 'left') {\n // Default to whatever user wished with placement prop\n let usingTop = this.placement !== 'bottom'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n const topBoundary = origin.y - anchorHeight * 0.5 + (this.removePadding ? topPadding : 0)\n const bottomBoundary = origin.y + anchorHeight * 0.5 - (this.removePadding ? bottomPadding : 0)\n if (bottomBoundary + content.offsetHeight > yBounds.max) usingTop = true\n if (topBoundary - content.offsetHeight < yBounds.min) usingTop = false\n\n const yOffset = (this.offset && this.offset.y) || 0\n translateY = usingTop\n ? topBoundary - yOffset - content.offsetHeight\n : bottomBoundary + yOffset\n\n const xOffset = (this.offset && this.offset.x) || 0\n translateX = origin.x + horizOffset + xOffset\n } else {\n // Default to whatever user wished with placement prop\n let usingRight = this.placement !== 'left'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n const rightBoundary = origin.x - anchorWidth * 0.5 + (this.removePadding ? rightPadding : 0)\n const leftBoundary = origin.x + anchorWidth * 0.5 - (this.removePadding ? leftPadding : 0)\n if (leftBoundary + content.offsetWidth > xBounds.max) usingRight = true\n if (rightBoundary - content.offsetWidth < xBounds.min) usingRight = false\n\n const xOffset = (this.offset && this.offset.x) || 0\n translateX = usingRight\n ? rightBoundary - xOffset - content.offsetWidth\n : leftBoundary + xOffset\n\n const yOffset = (this.offset && this.offset.y) || 0\n translateY = origin.y + vertOffset + yOffset\n }\n\n this.styles = {\n left: `${Math.round(translateX)}px`,\n top: `${Math.round(translateY)}px`\n }\n\n if (this.popoversZLayer) {\n this.styles['--ZI_popover_override'] = `var(--ZI_${this.popoversZLayer}_popovers)`\n }\n if (parentScreenBox) {\n this.styles.maxWidth = `${Math.round(parentScreenBox.width)}px`\n }\n },\n showPopover () {\n if (this.disabled) return\n this.disableClickOutside = true\n setTimeout(() => {\n this.disableClickOutside = false\n }, 0)\n const wasHidden = this.hidden\n this.hidden = false\n this.parentPopover && this.parentPopover.onChildPopoverState(this, true)\n if (this.trigger === 'click' || this.stayOnClick) {\n document.addEventListener('click', this.onClickOutside)\n }\n this.scrollable.addEventListener('scroll', this.onScroll)\n this.scrollable.addEventListener('resize', this.onResize)\n this.$nextTick(() => {\n if (wasHidden) this.$emit('show')\n this.updateStyles()\n })\n },\n hidePopover () {\n if (this.disabled) return\n if (!this.hidden) this.$emit('close')\n this.hidden = true\n this.parentPopover && this.parentPopover.onChildPopoverState(this, false)\n if (this.trigger === 'click') {\n document.removeEventListener('click', this.onClickOutside)\n }\n this.scrollable.removeEventListener('scroll', this.onScroll)\n this.scrollable.removeEventListener('resize', this.onResize)\n },\n onMouseenter (e) {\n if (this.trigger === 'hover') {\n this.lockReEntry = false\n clearTimeout(this.graceTimeout)\n this.graceTimeout = null\n this.showPopover()\n }\n },\n onMouseleave (e) {\n if (this.trigger === 'hover' && this.childrenShown.size === 0) {\n this.graceTimeout = setTimeout(() => this.hidePopover(), 1)\n }\n },\n onMouseenterContent (e) {\n if (this.trigger === 'hover' && !this.lockReEntry) {\n this.lockReEntry = true\n clearTimeout(this.graceTimeout)\n this.graceTimeout = null\n this.showPopover()\n }\n },\n onMouseleaveContent (e) {\n if (this.trigger === 'hover' && this.childrenShown.size === 0) {\n this.graceTimeout = setTimeout(() => this.hidePopover(), 1)\n }\n },\n onClick (e) {\n if (this.trigger === 'click') {\n if (this.hidden) {\n this.showPopover()\n } else {\n this.hidePopover()\n }\n }\n },\n onClickOutside (e) {\n if (this.disableClickOutside) return\n if (this.hidden) return\n if (this.$refs.content && this.$refs.content.contains(e.target)) return\n if (this.$el.contains(e.target)) return\n if (this.childrenShown.size > 0) return\n this.hidePopover()\n if (this.parentPopover) this.parentPopover.onClickOutside(e)\n },\n onScroll (e) {\n this.updateStyles()\n },\n onResize (e) {\n this.updateStyles()\n },\n onChildPopoverState (childRef, state) {\n if (state) {\n this.childrenShown.add(childRef)\n } else {\n this.childrenShown.delete(childRef)\n }\n }\n },\n updated () {\n // Monitor changes to content size, update styles only when content sizes have changed,\n // that should be the only time we need to move the popover box if we don't care about scroll\n // or resize\n const content = this.$refs.content\n if (!content) return\n if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {\n this.updateStyles()\n this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }\n }\n },\n mounted () {\n this.teleport = true\n let scrollable = this.$refs.trigger.closest('.column.-scrollable') ||\n this.$refs.trigger.closest('.mobile-notifications')\n if (!scrollable) scrollable = window\n this.scrollable = scrollable\n let parent = this.$parent\n while (parent && parent.$.type.name !== 'Popover') {\n parent = parent.$parent\n }\n this.parentPopover = parent\n },\n beforeUnmount () {\n this.hidePopover()\n }\n}\n\nexport default Popover\n","import { render } from \"./popover.vue?vue&type=template&id=5ac74c76\"\nimport script from \"./popover.js?vue&type=script&lang=js\"\nexport * from \"./popover.js?vue&type=script&lang=js\"\n\nimport \"./popover.vue?vue&type=style&index=0&id=5ac74c76&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n @mouseenter=\"onMouseenter\"\n @mouseleave=\"onMouseleave\"\n >\n <button\n ref=\"trigger\"\n class=\"popover-trigger-button\"\n :class=\"normalButton ? 'button-default btn' : 'button-unstyled'\"\n type=\"button\"\n v-bind=\"triggerAttrs\"\n @click=\"onClick\"\n >\n <slot name=\"trigger\" />\n </button>\n <teleport\n :disabled=\"!teleport\"\n to=\"#popovers\"\n >\n <transition name=\"fade\">\n <div\n v-if=\"!hidden\"\n ref=\"content\"\n :style=\"styles\"\n class=\"popover\"\n :class=\"popoverClass || 'popover-default'\"\n @mouseenter=\"onMouseenterContent\"\n @mouseleave=\"onMouseleaveContent\"\n @click=\"onClickContent\"\n >\n <slot\n name=\"content\"\n class=\"popover-inner\"\n :close=\"hidePopover\"\n />\n </div>\n </transition>\n </teleport>\n </span>\n</template>\n\n<script src=\"./popover.js\" />\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.popover-trigger-button {\n display: inline-block;\n}\n\n.popover {\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n position: fixed;\n min-width: 0;\n max-width: calc(100vw - 20px);\n box-shadow: 2px 2px 3px rgb(0 0 0 / 50%);\n box-shadow: var(--popupShadow);\n}\n\n.popover-default {\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 3;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--text;\n color: var(--popoverText, $fallback--text);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --postLink: var(--popoverPostLink, $fallback--link);\n --postFaintLink: var(--popoverPostFaintLink, $fallback--link);\n --icon: var(--popoverIcon, $fallback--icon);\n}\n\n.dropdown-menu {\n display: block;\n padding: 0.5rem 0;\n font-size: 1em;\n text-align: left;\n list-style: none;\n max-width: 100vw;\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n white-space: nowrap;\n\n .dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n .dropdown-item {\n line-height: 21px;\n overflow: hidden;\n display: block;\n padding: 0.5em 0.75em;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: none;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n\n --btnText: var(--popoverText, $fallback--text);\n\n &-icon {\n svg {\n width: 22px;\n margin-right: 0.75rem;\n color: var(--menuPopoverIcon, $fallback--icon);\n }\n }\n\n &.-has-submenu {\n .chevron-icon {\n margin-right: 0.25rem;\n margin-left: 2rem;\n }\n }\n\n &:active,\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n box-shadow: none;\n\n --btnText: var(--selectedMenuPopoverText, $fallback--link);\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n svg {\n color: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n\n .menu-checkbox {\n display: inline-block;\n vertical-align: middle;\n min-width: 22px;\n max-width: 22px;\n min-height: 22px;\n max-height: 22px;\n line-height: 22px;\n text-align: center;\n border-radius: 0;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.75em;\n\n &.menu-checkbox-checked::after {\n font-size: 1.25em;\n content: \"✓\";\n }\n\n &.-radio {\n border-radius: 9999px;\n\n &.menu-checkbox-checked::after {\n font-size: 2em;\n content: \"•\";\n }\n }\n }\n }\n\n .button-default.dropdown-item {\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuPopoverText, $fallback--link);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n}\n</style>\n","<template>\n <div\n ref=\"form\"\n class=\"post-status-form\"\n >\n <form\n autocomplete=\"off\"\n @submit.prevent\n @dragover.prevent=\"fileDrag\"\n >\n <div class=\"form-group\">\n <i18n-t\n v-if=\"!$store.state.users.currentUser.locked && newStatus.visibility == 'private' && !disableLockWarning\"\n keypath=\"post_status.account_not_locked_warning\"\n tag=\"p\"\n class=\"visibility-notice\"\n scope=\"global\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"openProfileTab\"\n >\n {{ $t('post_status.account_not_locked_warning_link') }}\n </button>\n </i18n-t>\n <p\n v-if=\"!hideScopeNotice && newStatus.visibility === 'public'\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.public') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"!hideScopeNotice && newStatus.visibility === 'unlisted'\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.unlisted') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"!hideScopeNotice && newStatus.visibility === 'private' && $store.state.users.currentUser.locked\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.private') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"newStatus.visibility === 'direct'\"\n class=\"visibility-notice\"\n >\n <span v-if=\"safeDMEnabled\">{{ $t('post_status.direct_warning_to_first_only') }}</span>\n <span v-else>{{ $t('post_status.direct_warning_to_all') }}</span>\n </p>\n <div\n v-if=\"isEdit\"\n class=\"visibility-notice edit-warning\"\n >\n <p>{{ $t('post_status.edit_remote_warning') }}</p>\n <p>{{ $t('post_status.edit_unsupported_warning') }}</p>\n </div>\n <div\n v-if=\"!disablePreview\"\n class=\"preview-heading faint\"\n >\n <a\n class=\"preview-toggle faint\"\n @click.stop.prevent=\"togglePreview\"\n >\n {{ $t('post_status.preview') }}\n <FAIcon :icon=\"showPreview ? 'chevron-left' : 'chevron-right'\" />\n </a>\n <div\n v-show=\"previewLoading\"\n class=\"preview-spinner\"\n >\n <FAIcon\n class=\"fa-old-padding\"\n spin\n icon=\"circle-notch\"\n />\n </div>\n </div>\n <div\n v-if=\"showPreview\"\n class=\"preview-container\"\n >\n <div\n v-if=\"!preview\"\n class=\"preview-status\"\n >\n {{ $t('general.loading') }}\n </div>\n <div\n v-else-if=\"preview.error\"\n class=\"preview-status preview-error\"\n >\n {{ preview.error }}\n </div>\n <StatusContent\n v-else\n :status=\"preview\"\n class=\"preview-status\"\n />\n </div>\n <div\n v-if=\"quotable\"\n role=\"radiogroup\"\n class=\"btn-group reply-or-quote-selector\"\n >\n <button\n :id=\"`reply-or-quote-option-${randomSeed}-reply`\"\n class=\"btn button-default reply-or-quote-option\"\n :class=\"{ toggled: !newStatus.quoting }\"\n tabindex=\"0\"\n role=\"radio\"\n :aria-labelledby=\"`reply-or-quote-option-${randomSeed}-reply`\"\n :aria-checked=\"!newStatus.quoting\"\n @click=\"newStatus.quoting = false\"\n >\n {{ $t('post_status.reply_option') }}\n </button>\n <button\n :id=\"`reply-or-quote-option-${randomSeed}-quote`\"\n class=\"btn button-default reply-or-quote-option\"\n :class=\"{ toggled: newStatus.quoting }\"\n tabindex=\"0\"\n role=\"radio\"\n :aria-labelledby=\"`reply-or-quote-option-${randomSeed}-quote`\"\n :aria-checked=\"newStatus.quoting\"\n @click=\"newStatus.quoting = true\"\n >\n {{ $t('post_status.quote_option') }}\n </button>\n </div>\n <EmojiInput\n v-if=\"!disableSubject && (newStatus.spoilerText || alwaysShowSubject)\"\n v-model=\"newStatus.spoilerText\"\n enable-emoji-picker\n :suggest=\"emojiSuggestor\"\n class=\"form-control\"\n >\n <template #default=\"inputProps\">\n <input\n v-model=\"newStatus.spoilerText\"\n type=\"text\"\n :placeholder=\"$t('post_status.content_warning')\"\n :disabled=\"posting && !optimisticPosting\"\n v-bind=\"propsToNative(inputProps)\"\n size=\"1\"\n class=\"form-post-subject\"\n >\n </template>\n </EmojiInput>\n <EmojiInput\n ref=\"emoji-input\"\n v-model=\"newStatus.status\"\n :suggest=\"emojiUserSuggestor\"\n :placement=\"emojiPickerPlacement\"\n class=\"form-control main-input\"\n enable-emoji-picker\n hide-emoji-button\n :newline-on-ctrl-enter=\"submitOnEnter\"\n enable-sticker-picker\n @input=\"onEmojiInputInput\"\n @sticker-uploaded=\"addMediaFile\"\n @sticker-upload-failed=\"uploadFailed\"\n @shown=\"handleEmojiInputShow\"\n >\n <template #default=\"inputProps\">\n <textarea\n ref=\"textarea\"\n v-model=\"newStatus.status\"\n :placeholder=\"placeholder || $t('post_status.default')\"\n rows=\"1\"\n cols=\"1\"\n :disabled=\"posting && !optimisticPosting\"\n class=\"form-post-body\"\n :class=\"{ 'scrollable-form': !!maxHeight }\"\n v-bind=\"propsToNative(inputProps)\"\n @keydown.exact.enter=\"submitOnEnter && postStatus($event, newStatus)\"\n @keydown.meta.enter=\"postStatus($event, newStatus)\"\n @keydown.ctrl.enter=\"!submitOnEnter && postStatus($event, newStatus)\"\n @input=\"resize\"\n @compositionupdate=\"resize\"\n @paste=\"paste\"\n />\n <p\n v-if=\"hasStatusLengthLimit\"\n class=\"character-counter faint\"\n :class=\"{ error: isOverLengthLimit }\"\n >\n {{ charactersLeft }}\n </p>\n </template>\n </EmojiInput>\n <div\n v-if=\"!disableScopeSelector\"\n class=\"visibility-tray\"\n >\n <scope-selector\n v-if=\"!disableVisibilitySelector\"\n :show-all=\"showAllScopes\"\n :user-default=\"userDefaultScope\"\n :original-scope=\"copyMessageScope\"\n :initial-scope=\"newStatus.visibility\"\n :on-scope-change=\"changeVis\"\n />\n\n <div\n v-if=\"postFormats.length > 1\"\n class=\"text-format\"\n >\n <Select\n id=\"post-content-type\"\n v-model=\"newStatus.contentType\"\n class=\"form-control\"\n :attrs=\"{ 'aria-label': $t('post_status.content_type_selection') }\"\n >\n <option\n v-for=\"postFormat in postFormats\"\n :key=\"postFormat\"\n :value=\"postFormat\"\n >\n {{ $t(`post_status.content_type[\"${postFormat}\"]`) }}\n </option>\n </Select>\n </div>\n <div\n v-if=\"postFormats.length === 1 && postFormats[0] !== 'text/plain'\"\n class=\"text-format\"\n >\n <span class=\"only-format\">\n {{ $t(`post_status.content_type[\"${postFormats[0]}\"]`) }}\n </span>\n </div>\n </div>\n </div>\n <poll-form\n v-if=\"pollsAvailable\"\n ref=\"pollForm\"\n :visible=\"pollFormVisible\"\n @update-poll=\"setPoll\"\n />\n <div\n ref=\"bottom\"\n class=\"form-bottom\"\n >\n <div class=\"form-bottom-left\">\n <media-upload\n ref=\"mediaUpload\"\n class=\"media-upload-icon\"\n :drop-files=\"dropFiles\"\n :disabled=\"uploadFileLimitReached\"\n @uploading=\"startedUploadingFiles\"\n @uploaded=\"addMediaFile\"\n @upload-failed=\"uploadFailed\"\n @all-uploaded=\"finishedUploadingFiles\"\n />\n <button\n class=\"emoji-icon button-unstyled\"\n :title=\"$t('emoji.add_emoji')\"\n @click=\"showEmojiPicker\"\n >\n <FAIcon icon=\"smile-beam\" />\n </button>\n <button\n v-if=\"pollsAvailable\"\n class=\"poll-icon button-unstyled\"\n :class=\"{ selected: pollFormVisible }\"\n :title=\"$t('polls.add_poll')\"\n @click=\"togglePollForm\"\n >\n <FAIcon icon=\"poll-h\" />\n </button>\n </div>\n <button\n v-if=\"posting\"\n disabled\n class=\"btn button-default\"\n >\n {{ $t('post_status.posting') }}\n </button>\n <button\n v-else-if=\"isOverLengthLimit\"\n disabled\n class=\"btn button-default\"\n >\n {{ $t('post_status.post') }}\n </button>\n <button\n v-else\n :disabled=\"uploadingFiles || disableSubmit\"\n class=\"btn button-default\"\n @click.stop.prevent=\"postStatus($event, newStatus)\"\n >\n {{ $t('post_status.post') }}\n </button>\n </div>\n <div\n v-show=\"showDropIcon !== 'hide'\"\n :style=\"{ animation: showDropIcon === 'show' ? 'fade-in 0.25s' : 'fade-out 0.5s' }\"\n class=\"drop-indicator\"\n @dragleave=\"fileDragStop\"\n @drop.stop=\"fileDrop\"\n >\n <FAIcon :icon=\"uploadFileLimitReached ? 'ban' : 'upload'\" />\n </div>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n Error: {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n <gallery\n v-if=\"newStatus.files && newStatus.files.length > 0\"\n class=\"attachments\"\n :grid=\"true\"\n :nsfw=\"false\"\n :attachments=\"newStatus.files\"\n :descriptions=\"newStatus.mediaDescriptions\"\n :set-media=\"() => $store.dispatch('setMedia', newStatus.files)\"\n :editable=\"true\"\n :edit-attachment=\"editAttachment\"\n :remove-attachment=\"removeMediaFile\"\n :shift-up-attachment=\"newStatus.files.length > 1 && shiftUpMediaFile\"\n :shift-dn-attachment=\"newStatus.files.length > 1 && shiftDnMediaFile\"\n @play=\"$emit('mediaplay', attachment.id)\"\n @pause=\"$emit('mediapause', attachment.id)\"\n />\n <div\n v-if=\"newStatus.files.length > 0 && !disableSensitivityCheckbox\"\n class=\"upload_settings\"\n >\n <Checkbox v-model=\"newStatus.nsfw\">\n {{ $t('post_status.attachments_sensitive') }}\n </Checkbox>\n </div>\n </form>\n </div>\n</template>\n\n<script src=\"./post_status_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.post-status-form {\n position: relative;\n\n .attachments {\n margin-bottom: 0.5em;\n }\n\n .form-bottom {\n display: flex;\n justify-content: space-between;\n padding: 0.5em;\n height: 2.5em;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .form-bottom-left {\n display: flex;\n flex: 1;\n padding-right: 7px;\n margin-right: 7px;\n max-width: 10em;\n }\n\n .preview-heading {\n display: flex;\n padding-left: 0.5em;\n }\n\n .preview-toggle {\n flex: 1;\n cursor: pointer;\n user-select: none;\n\n &:hover {\n text-decoration: underline;\n }\n\n svg,\n i {\n margin-left: 0.2em;\n font-size: 0.8em;\n transform: rotate(90deg);\n }\n }\n\n .preview-container {\n margin-bottom: 1em;\n }\n\n .preview-error {\n font-style: italic;\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n\n .preview-status {\n border: 1px solid $fallback--border;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n padding: 0.5em;\n margin: 0;\n }\n\n .reply-or-quote-selector {\n margin-bottom: 0.5em;\n }\n\n .text-format {\n .only-format {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n .visibility-tray {\n display: flex;\n justify-content: space-between;\n padding-top: 5px;\n align-items: baseline;\n }\n\n .visibility-notice.edit-warning {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n // Order is not necessary but a good indicator\n .media-upload-icon {\n order: 1;\n justify-content: left;\n }\n\n .emoji-icon {\n order: 2;\n justify-content: center;\n }\n\n .poll-icon {\n order: 3;\n justify-content: right;\n }\n\n .media-upload-icon,\n .poll-icon,\n .emoji-icon {\n font-size: 1.85em;\n line-height: 1.1;\n flex: 1;\n padding: 0 0.1em;\n display: flex;\n align-items: center;\n\n &.selected,\n &:hover {\n // needs to be specific to override icon default color\n svg,\n i,\n label {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n &.disabled {\n svg,\n i {\n cursor: not-allowed;\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n\n &:hover {\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n }\n }\n }\n }\n\n .error {\n text-align: center;\n }\n\n .media-upload-wrapper {\n margin-right: 0.2em;\n margin-bottom: 0.5em;\n width: 18em;\n\n img,\n video {\n object-fit: contain;\n max-height: 10em;\n }\n\n .video {\n max-height: 10em;\n }\n\n input {\n flex: 1;\n width: 100%;\n }\n }\n\n .status-input-wrapper {\n display: flex;\n position: relative;\n width: 100%;\n flex-direction: column;\n }\n\n .btn[disabled] {\n cursor: not-allowed;\n }\n\n form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n position: relative;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.25em 0.5em 0.5em;\n line-height: 1.85;\n }\n\n .form-post-body {\n // TODO: make a resizable textarea component?\n box-sizing: content-box; // needed for easier computation of dynamic size\n overflow: hidden;\n transition: min-height 200ms 100ms;\n // stock padding + 1 line of text (for counter)\n padding-bottom: calc(var(--_padding) + var(--post-line-height) * 1em);\n // two lines of text\n height: calc(var(--post-line-height) * 1em);\n min-height: calc(var(--post-line-height) * 1em);\n resize: none;\n\n &.scrollable-form {\n overflow-y: auto;\n }\n }\n\n .main-input {\n position: relative;\n }\n\n .character-counter {\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0 0.5em;\n\n &.error {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 0.6; }\n }\n\n @keyframes fade-out {\n from { opacity: 0.6; }\n to { opacity: 0; }\n }\n\n .drop-indicator {\n position: absolute;\n width: 100%;\n height: 100%;\n font-size: 5em;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n border: 2px dashed $fallback--text;\n border: 2px dashed var(--text, $fallback--text);\n }\n}\n</style>\n","<template>\n <div\n v-if=\"visible\"\n class=\"poll-form\"\n >\n <div\n v-for=\"(option, index) in options\"\n :key=\"index\"\n class=\"poll-option\"\n >\n <div class=\"input-container\">\n <input\n :id=\"`poll-${index}`\"\n v-model=\"options[index]\"\n size=\"1\"\n class=\"poll-option-input\"\n type=\"text\"\n :placeholder=\"$t('polls.option')\"\n :maxlength=\"maxLength\"\n @change=\"updatePollToParent\"\n @keydown.enter.stop.prevent=\"nextOption(index)\"\n >\n </div>\n <button\n v-if=\"options.length > 2\"\n class=\"delete-option button-unstyled -hover-highlight\"\n @click=\"deleteOption(index)\"\n >\n <FAIcon icon=\"times\" />\n </button>\n </div>\n <button\n v-if=\"options.length < maxOptions\"\n class=\"add-option faint button-unstyled -hover-highlight\"\n @click=\"addOption\"\n >\n <FAIcon\n icon=\"plus\"\n size=\"sm\"\n />\n\n {{ $t(\"polls.add_option\") }}\n </button>\n <div class=\"poll-type-expiry\">\n <div\n class=\"poll-type\"\n :title=\"$t('polls.type')\"\n >\n <Select\n v-model=\"pollType\"\n class=\"poll-type-select\"\n unstyled=\"true\"\n @change=\"updatePollToParent\"\n >\n <option value=\"single\">\n {{ $t('polls.single_choice') }}\n </option>\n <option value=\"multiple\">\n {{ $t('polls.multiple_choices') }}\n </option>\n </Select>\n </div>\n <div\n class=\"poll-expiry\"\n :title=\"$t('polls.expiry')\"\n >\n <input\n v-model=\"expiryAmount\"\n type=\"number\"\n class=\"expiry-amount hide-number-spinner\"\n :min=\"minExpirationInCurrentUnit\"\n :max=\"maxExpirationInCurrentUnit\"\n @change=\"expiryAmountChange\"\n >\n {{ ' ' }}\n <Select\n v-model=\"expiryUnit\"\n unstyled=\"true\"\n class=\"expiry-unit\"\n @change=\"expiryAmountChange\"\n >\n <option\n v-for=\"unit in expiryUnits\"\n :key=\"unit\"\n :value=\"unit\"\n >\n {{ $tc(`time.unit.${unit}_short`, expiryAmount, ['']) }}\n </option>\n </Select>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./poll_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.poll-form {\n display: flex;\n flex-direction: column;\n padding: 0 0.5em 0.5em;\n\n .add-option {\n align-self: flex-start;\n padding-top: 0.25em;\n padding-left: 0.1em;\n }\n\n .poll-option {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin-bottom: 0.25em;\n }\n\n .input-container {\n width: 100%;\n\n input {\n // Hack: dodge the floating X icon\n padding-right: 2.5em;\n width: 100%;\n }\n }\n\n .delete-option {\n // Hack: Move the icon over the input box\n width: 1.5em;\n margin-left: -1.5em;\n z-index: 1;\n }\n\n .poll-type-expiry {\n margin-top: 0.5em;\n display: flex;\n width: 100%;\n }\n\n .poll-type {\n margin-right: 0.75em;\n flex: 1 1 60%;\n\n .poll-type-select {\n padding-right: 0.75em;\n }\n }\n\n .poll-expiry {\n display: flex;\n\n .expiry-amount {\n width: 3em;\n text-align: right;\n }\n }\n}\n</style>\n","import * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport { uniq } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport Select from '../select/select.vue'\nimport {\n faTimes,\n faPlus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faPlus\n)\n\nexport default {\n components: {\n Select\n },\n name: 'PollForm',\n props: ['visible'],\n data: () => ({\n pollType: 'single',\n options: ['', ''],\n expiryAmount: 10,\n expiryUnit: 'minutes'\n }),\n computed: {\n pollLimits () {\n return this.$store.state.instance.pollLimits\n },\n maxOptions () {\n return this.pollLimits.max_options\n },\n maxLength () {\n return this.pollLimits.max_option_chars\n },\n expiryUnits () {\n const allUnits = ['minutes', 'hours', 'days']\n const expiry = this.convertExpiryFromUnit\n return allUnits.filter(\n unit => this.pollLimits.max_expiration >= expiry(unit, 1)\n )\n },\n minExpirationInCurrentUnit () {\n return Math.ceil(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.min_expiration\n )\n )\n },\n maxExpirationInCurrentUnit () {\n return Math.floor(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.max_expiration\n )\n )\n }\n },\n methods: {\n clear () {\n this.pollType = 'single'\n this.options = ['', '']\n this.expiryAmount = 10\n this.expiryUnit = 'minutes'\n },\n nextOption (index) {\n const element = this.$el.querySelector(`#poll-${index + 1}`)\n if (element) {\n element.focus()\n } else {\n // Try adding an option and try focusing on it\n const addedOption = this.addOption()\n if (addedOption) {\n this.$nextTick(function () {\n this.nextOption(index)\n })\n }\n }\n },\n addOption () {\n if (this.options.length < this.maxOptions) {\n this.options.push('')\n return true\n }\n return false\n },\n deleteOption (index, event) {\n if (this.options.length > 2) {\n this.options.splice(index, 1)\n this.updatePollToParent()\n }\n },\n convertExpiryToUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n return DateUtils.secondsToUnit(unit, amount)\n },\n convertExpiryFromUnit (unit, amount) {\n return DateUtils.unitToSeconds(unit, amount)\n },\n expiryAmountChange () {\n this.expiryAmount =\n Math.max(this.minExpirationInCurrentUnit, this.expiryAmount)\n this.expiryAmount =\n Math.min(this.maxExpirationInCurrentUnit, this.expiryAmount)\n this.updatePollToParent()\n },\n updatePollToParent () {\n const expiresIn = this.convertExpiryFromUnit(\n this.expiryUnit,\n this.expiryAmount\n )\n\n const options = uniq(this.options.filter(option => option !== ''))\n if (options.length < 2) {\n this.$emit('update-poll', { error: this.$t('polls.not_enough_options') })\n return\n }\n this.$emit('update-poll', {\n options,\n multiple: this.pollType === 'multiple',\n expiresIn\n })\n }\n }\n}\n","import { render } from \"./poll_form.vue?vue&type=template&id=24ea52c8\"\nimport script from \"./poll_form.js?vue&type=script&lang=js\"\nexport * from \"./poll_form.js?vue&type=script&lang=js\"\n\nimport \"./poll_form.vue?vue&type=style&index=0&id=24ea52c8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import statusPoster from '../../services/status_poster/status_poster.service.js'\nimport MediaUpload from '../media_upload/media_upload.vue'\nimport ScopeSelector from '../scope_selector/scope_selector.vue'\nimport EmojiInput from '../emoji_input/emoji_input.vue'\nimport PollForm from '../poll/poll_form.vue'\nimport Attachment from '../attachment/attachment.vue'\nimport Gallery from 'src/components/gallery/gallery.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { propsToNative } from '../../services/attributes_helper/attributes_helper.service.js'\nimport { reject, map, uniqBy, debounce } from 'lodash'\nimport suggestor from '../emoji_input/suggestor.js'\nimport { mapGetters, mapState } from 'vuex'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Select from '../select/select.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSmileBeam,\n faPollH,\n faUpload,\n faBan,\n faTimes,\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSmileBeam,\n faPollH,\n faUpload,\n faBan,\n faTimes,\n faCircleNotch\n)\n\nconst buildMentionsString = ({ user, attentions = [] }, currentUser) => {\n let allAttentions = [...attentions]\n\n allAttentions.unshift(user)\n\n allAttentions = uniqBy(allAttentions, 'id')\n allAttentions = reject(allAttentions, { id: currentUser.id })\n\n const mentions = map(allAttentions, (attention) => {\n return `@${attention.screen_name}`\n })\n\n return mentions.length > 0 ? mentions.join(' ') + ' ' : ''\n}\n\n// Converts a string with px to a number like '2px' -> 2\nconst pxStringToNumber = (str) => {\n return Number(str.substring(0, str.length - 2))\n}\n\nconst PostStatusForm = {\n props: [\n 'statusId',\n 'statusText',\n 'statusIsSensitive',\n 'statusPoll',\n 'statusFiles',\n 'statusMediaDescriptions',\n 'statusScope',\n 'statusContentType',\n 'replyTo',\n 'repliedUser',\n 'attentions',\n 'copyMessageScope',\n 'subject',\n 'disableSubject',\n 'disableScopeSelector',\n 'disableVisibilitySelector',\n 'disableNotice',\n 'disableLockWarning',\n 'disablePolls',\n 'disableSensitivityCheckbox',\n 'disableSubmit',\n 'disablePreview',\n 'placeholder',\n 'maxHeight',\n 'postHandler',\n 'preserveFocus',\n 'autoFocus',\n 'fileLimit',\n 'submitOnEnter',\n 'emojiPickerPlacement',\n 'optimisticPosting'\n ],\n emits: [\n 'posted',\n 'resize',\n 'mediaplay',\n 'mediapause'\n ],\n components: {\n MediaUpload,\n EmojiInput,\n PollForm,\n ScopeSelector,\n Checkbox,\n Select,\n Attachment,\n StatusContent,\n Gallery\n },\n mounted () {\n this.updateIdempotencyKey()\n this.resize(this.$refs.textarea)\n\n if (this.replyTo) {\n const textLength = this.$refs.textarea.value.length\n this.$refs.textarea.setSelectionRange(textLength, textLength)\n }\n\n if (this.replyTo || this.autoFocus) {\n this.$refs.textarea.focus()\n }\n },\n data () {\n const preset = this.$route.query.message\n let statusText = preset || ''\n\n const { scopeCopy } = this.$store.getters.mergedConfig\n\n if (this.replyTo) {\n const currentUser = this.$store.state.users.currentUser\n statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)\n }\n\n const scope = ((this.copyMessageScope && scopeCopy) || this.copyMessageScope === 'direct')\n ? this.copyMessageScope\n : this.$store.state.users.currentUser.default_scope\n\n const { postContentType: contentType, sensitiveByDefault } = this.$store.getters.mergedConfig\n\n let statusParams = {\n spoilerText: this.subject || '',\n status: statusText,\n nsfw: !!sensitiveByDefault,\n files: [],\n poll: {},\n mediaDescriptions: {},\n visibility: scope,\n contentType\n }\n\n if (this.statusId) {\n const statusContentType = this.statusContentType || contentType\n statusParams = {\n spoilerText: this.subject || '',\n status: this.statusText || '',\n nsfw: this.statusIsSensitive || !!sensitiveByDefault,\n files: this.statusFiles || [],\n poll: this.statusPoll || {},\n mediaDescriptions: this.statusMediaDescriptions || {},\n visibility: this.statusScope || scope,\n contentType: statusContentType,\n quoting: false\n }\n }\n\n return {\n randomSeed: `${Math.random()}`.replace('.', '-'),\n dropFiles: [],\n uploadingFiles: false,\n error: null,\n posting: false,\n highlighted: 0,\n newStatus: statusParams,\n caret: 0,\n pollFormVisible: false,\n showDropIcon: 'hide',\n dropStopTimeout: null,\n preview: null,\n previewLoading: false,\n emojiInputShown: false,\n idempotencyKey: ''\n }\n },\n computed: {\n users () {\n return this.$store.state.users.users\n },\n userDefaultScope () {\n return this.$store.state.users.currentUser.default_scope\n },\n showAllScopes () {\n return !this.mergedConfig.minimalScopesMode\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.getters.standardEmojiList,\n ...this.$store.state.instance.customEmoji\n ],\n store: this.$store\n })\n },\n emojiSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.getters.standardEmojiList,\n ...this.$store.state.instance.customEmoji\n ]\n })\n },\n emoji () {\n return this.$store.getters.standardEmojiList || []\n },\n customEmoji () {\n return this.$store.state.instance.customEmoji || []\n },\n statusLength () {\n return this.newStatus.status.length\n },\n spoilerTextLength () {\n return this.newStatus.spoilerText.length\n },\n statusLengthLimit () {\n return this.$store.state.instance.textlimit\n },\n hasStatusLengthLimit () {\n return this.statusLengthLimit > 0\n },\n charactersLeft () {\n return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)\n },\n isOverLengthLimit () {\n return this.hasStatusLengthLimit && (this.charactersLeft < 0)\n },\n minimalScopesMode () {\n return this.$store.state.instance.minimalScopesMode\n },\n alwaysShowSubject () {\n return this.mergedConfig.alwaysShowSubjectInput\n },\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n safeDMEnabled () {\n return this.$store.state.instance.safeDM\n },\n pollsAvailable () {\n return this.$store.state.instance.pollsAvailable &&\n this.$store.state.instance.pollLimits.max_options >= 2 &&\n this.disablePolls !== true\n },\n hideScopeNotice () {\n return this.disableNotice || this.$store.getters.mergedConfig.hideScopeNotice\n },\n pollContentError () {\n return this.pollFormVisible &&\n this.newStatus.poll &&\n this.newStatus.poll.error\n },\n showPreview () {\n return !this.disablePreview && (!!this.preview || this.previewLoading)\n },\n emptyStatus () {\n return this.newStatus.status.trim() === '' && this.newStatus.files.length === 0\n },\n uploadFileLimitReached () {\n return this.newStatus.files.length >= this.fileLimit\n },\n isEdit () {\n return typeof this.statusId !== 'undefined' && this.statusId.trim() !== ''\n },\n quotable () {\n if (!this.$store.state.instance.quotingAvailable) {\n return false\n }\n\n if (!this.replyTo) {\n return false\n }\n\n const repliedStatus = this.$store.state.statuses.allStatusesObject[this.replyTo]\n if (!repliedStatus) {\n return false\n }\n\n if (repliedStatus.visibility === 'public' ||\n repliedStatus.visibility === 'unlisted' ||\n repliedStatus.visibility === 'local') {\n return true\n } else if (repliedStatus.visibility === 'private') {\n return repliedStatus.user.id === this.$store.state.users.currentUser.id\n }\n\n return false\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n mobileLayout: state => state.interface.mobileLayout\n })\n },\n watch: {\n newStatus: {\n deep: true,\n handler () {\n this.statusChanged()\n }\n }\n },\n methods: {\n statusChanged () {\n this.autoPreview()\n this.updateIdempotencyKey()\n },\n clearStatus () {\n const newStatus = this.newStatus\n this.newStatus = {\n status: '',\n spoilerText: '',\n files: [],\n visibility: newStatus.visibility,\n contentType: newStatus.contentType,\n poll: {},\n mediaDescriptions: {},\n quoting: false\n }\n this.pollFormVisible = false\n this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()\n this.clearPollForm()\n if (this.preserveFocus) {\n this.$nextTick(() => {\n this.$refs.textarea.focus()\n })\n }\n const el = this.$el.querySelector('textarea')\n el.style.height = 'auto'\n el.style.height = undefined\n this.error = null\n if (this.preview) this.previewStatus()\n },\n async postStatus (event, newStatus, opts = {}) {\n if (this.posting && !this.optimisticPosting) { return }\n if (this.disableSubmit) { return }\n if (this.emojiInputShown) { return }\n if (this.submitOnEnter) {\n event.stopPropagation()\n event.preventDefault()\n }\n\n if (this.optimisticPosting && (this.emptyStatus || this.isOverLengthLimit)) { return }\n\n if (this.emptyStatus) {\n this.error = this.$t('post_status.empty_status_error')\n return\n }\n\n const poll = this.pollFormVisible ? this.newStatus.poll : {}\n if (this.pollContentError) {\n this.error = this.pollContentError\n return\n }\n\n this.posting = true\n\n try {\n await this.setAllMediaDescriptions()\n } catch (e) {\n this.error = this.$t('post_status.media_description_error')\n this.posting = false\n return\n }\n\n const replyOrQuoteAttr = newStatus.quoting ? 'quoteId' : 'inReplyToStatusId'\n\n const postingOptions = {\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: newStatus.files,\n store: this.$store,\n [replyOrQuoteAttr]: this.replyTo,\n contentType: newStatus.contentType,\n poll,\n idempotencyKey: this.idempotencyKey\n }\n\n const postHandler = this.postHandler ? this.postHandler : statusPoster.postStatus\n\n postHandler(postingOptions).then((data) => {\n if (!data.error) {\n this.clearStatus()\n this.$emit('posted', data)\n } else {\n this.error = data.error\n }\n this.posting = false\n })\n },\n previewStatus () {\n if (this.emptyStatus && this.newStatus.spoilerText.trim() === '') {\n this.preview = { error: this.$t('post_status.preview_empty') }\n this.previewLoading = false\n return\n }\n const newStatus = this.newStatus\n this.previewLoading = true\n const replyOrQuoteAttr = newStatus.quoting ? 'quoteId' : 'inReplyToStatusId'\n statusPoster.postStatus({\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: [],\n store: this.$store,\n [replyOrQuoteAttr]: this.replyTo,\n contentType: newStatus.contentType,\n poll: {},\n preview: true\n }).then((data) => {\n // Don't apply preview if not loading, because it means\n // user has closed the preview manually.\n if (!this.previewLoading) return\n if (!data.error) {\n this.preview = data\n } else {\n this.preview = { error: data.error }\n }\n }).catch((error) => {\n this.preview = { error }\n }).finally(() => {\n this.previewLoading = false\n })\n },\n debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),\n autoPreview () {\n if (!this.preview) return\n this.previewLoading = true\n this.debouncePreviewStatus()\n },\n closePreview () {\n this.preview = null\n this.previewLoading = false\n },\n togglePreview () {\n if (this.showPreview) {\n this.closePreview()\n } else {\n this.previewStatus()\n }\n },\n addMediaFile (fileInfo) {\n this.newStatus.files.push(fileInfo)\n this.$emit('resize', { delayed: true })\n },\n removeMediaFile (fileInfo) {\n const index = this.newStatus.files.indexOf(fileInfo)\n this.newStatus.files.splice(index, 1)\n this.$emit('resize')\n },\n editAttachment (fileInfo, newText) {\n this.newStatus.mediaDescriptions[fileInfo.id] = newText\n },\n shiftUpMediaFile (fileInfo) {\n const { files } = this.newStatus\n const index = this.newStatus.files.indexOf(fileInfo)\n files.splice(index, 1)\n files.splice(index - 1, 0, fileInfo)\n },\n shiftDnMediaFile (fileInfo) {\n const { files } = this.newStatus\n const index = this.newStatus.files.indexOf(fileInfo)\n files.splice(index, 1)\n files.splice(index + 1, 0, fileInfo)\n },\n uploadFailed (errString, templateArgs) {\n templateArgs = templateArgs || {}\n this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)\n },\n startedUploadingFiles () {\n this.uploadingFiles = true\n },\n finishedUploadingFiles () {\n this.$emit('resize')\n this.uploadingFiles = false\n },\n type (fileInfo) {\n return fileTypeService.fileType(fileInfo.mimetype)\n },\n paste (e) {\n this.autoPreview()\n this.resize(e)\n if (e.clipboardData.files.length > 0) {\n // prevent pasting of file as text\n e.preventDefault()\n // Strangely, files property gets emptied after event propagation\n // Trying to wrap it in array doesn't work. Plus I doubt it's possible\n // to hold more than one file in clipboard.\n this.dropFiles = [e.clipboardData.files[0]]\n }\n },\n fileDrop (e) {\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n e.preventDefault() // allow dropping text like before\n this.dropFiles = e.dataTransfer.files\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'hide'\n }\n },\n fileDragStop (e) {\n // The false-setting is done with delay because just using leave-events\n // directly caused unwanted flickering, this is not perfect either but\n // much less noticable.\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'fade'\n this.dropStopTimeout = setTimeout(() => (this.showDropIcon = 'hide'), 500)\n },\n fileDrag (e) {\n e.dataTransfer.dropEffect = this.uploadFileLimitReached ? 'none' : 'copy'\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'show'\n }\n },\n onEmojiInputInput (e) {\n this.$nextTick(() => {\n this.resize(this.$refs.textarea)\n })\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n\n // Reset to default height for empty form, nothing else to do here.\n if (target.value === '') {\n target.style.height = null\n this.$emit('resize')\n return\n }\n\n const formRef = this.$refs.form\n const bottomRef = this.$refs.bottom\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const bottomBottomPaddingStr = window.getComputedStyle(bottomRef)['padding-bottom']\n const bottomBottomPadding = pxStringToNumber(bottomBottomPaddingStr)\n\n const scrollerRef = this.$el.closest('.column.-scrollable') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n\n // Getting info about padding we have to account for, removing 'px' part\n const topPaddingStr = window.getComputedStyle(target)['padding-top']\n const bottomPaddingStr = window.getComputedStyle(target)['padding-bottom']\n const topPadding = pxStringToNumber(topPaddingStr)\n const bottomPadding = pxStringToNumber(bottomPaddingStr)\n const vertPadding = topPadding + bottomPadding\n\n const oldHeight = pxStringToNumber(target.style.height)\n\n /* Explanation:\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight\n * scrollHeight returns element's scrollable content height, i.e. visible\n * element + overscrolled parts of it. We use it to determine when text\n * inside the textarea exceeded its height, so we can set height to prevent\n * overscroll, i.e. make textarea grow with the text. HOWEVER, since we\n * explicitly set new height, scrollHeight won't go below that, so we can't\n * SHRINK the textarea when there's extra space. To workaround that we set\n * height to 'auto' which makes textarea tiny again, so that scrollHeight\n * will match text height again. HOWEVER, shrinking textarea can screw with\n * the scroll since there might be not enough padding around form-bottom to even\n * warrant a scroll, so it will jump to 0 and refuse to move anywhere,\n * so we check current scroll position before shrinking and then restore it\n * with needed delta.\n */\n\n // this part has to be BEFORE the content size update\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n const scrollerBottomBorder = currentScroll + scrollerHeight\n\n // BEGIN content size update\n target.style.height = 'auto'\n const heightWithoutPadding = Math.floor(target.scrollHeight - vertPadding)\n let newHeight = this.maxHeight ? Math.min(heightWithoutPadding, this.maxHeight) : heightWithoutPadding\n // This is a bit of a hack to combat target.scrollHeight being different on every other input\n // on some browsers for whatever reason. Don't change the height if difference is 1px or less.\n if (Math.abs(newHeight - oldHeight) <= 1) {\n newHeight = oldHeight\n }\n target.style.height = `${newHeight}px`\n this.$emit('resize', newHeight)\n // END content size update\n\n // We check where the bottom border of form-bottom element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const bottomBottomBorder = bottomRef.offsetHeight + findOffset(bottomRef, scrollerRef).top + bottomBottomPadding\n\n const isBottomObstructed = scrollerBottomBorder < bottomBottomBorder\n const isFormBiggerThanScroller = scrollerHeight < formRef.offsetHeight\n const bottomChangeDelta = bottomBottomBorder - scrollerBottomBorder\n // The intention is basically this;\n // Keep form-bottom always visible so that submit button is in view EXCEPT\n // if form element bigger than scroller and caret isn't at the end, so that\n // if you scroll up and edit middle of text you won't get scrolled back to bottom\n const shouldScrollToBottom = isBottomObstructed &&\n !(isFormBiggerThanScroller &&\n this.$refs.textarea.selectionStart !== this.$refs.textarea.value.length)\n const totalDelta = shouldScrollToBottom ? bottomChangeDelta : 0\n const targetScroll = Math.round(currentScroll + totalDelta)\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n },\n showEmojiPicker () {\n this.$refs.textarea.focus()\n this.$refs['emoji-input'].triggerShowPicker()\n },\n clearError () {\n this.error = null\n },\n changeVis (visibility) {\n this.newStatus.visibility = visibility\n },\n togglePollForm () {\n this.pollFormVisible = !this.pollFormVisible\n },\n setPoll (poll) {\n this.newStatus.poll = poll\n },\n clearPollForm () {\n if (this.$refs.pollForm) {\n this.$refs.pollForm.clear()\n }\n },\n dismissScopeNotice () {\n this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true })\n },\n setMediaDescription (id) {\n const description = this.newStatus.mediaDescriptions[id]\n if (!description || description.trim() === '') return\n return statusPoster.setMediaDescription({ store: this.$store, id, description })\n },\n setAllMediaDescriptions () {\n const ids = this.newStatus.files.map(file => file.id)\n return Promise.all(ids.map(id => this.setMediaDescription(id)))\n },\n handleEmojiInputShow (value) {\n this.emojiInputShown = value\n },\n updateIdempotencyKey () {\n this.idempotencyKey = Date.now().toString()\n },\n openProfileTab () {\n this.$store.dispatch('openSettingsModalTab', 'profile')\n },\n propsToNative (props) {\n return propsToNative(props)\n }\n }\n}\n\nexport default PostStatusForm\n","import { render } from \"./post_status_form.vue?vue&type=template&id=59414186\"\nimport script from \"./post_status_form.js?vue&type=script&lang=js\"\nexport * from \"./post_status_form.js?vue&type=script&lang=js\"\n\nimport \"./post_status_form.vue?vue&type=style&index=0&id=59414186&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n :disabled=\"progress || disabled\"\n @click=\"onClick\"\n >\n <template v-if=\"progress && $slots.progress\">\n <slot name=\"progress\" />\n </template>\n <template v-else>\n <slot />\n </template>\n </button>\n</template>\n\n<script>\nexport default {\n props: {\n disabled: {\n type: Boolean\n },\n click: { // click event handler. Must return a promise\n type: Function,\n default: () => Promise.resolve()\n }\n },\n data () {\n return {\n progress: false\n }\n },\n methods: {\n onClick () {\n this.progress = true\n this.click().then(() => { this.progress = false })\n }\n }\n}\n</script>\n","import { render } from \"./progress_button.vue?vue&type=template&id=9f751ae6\"\nimport script from \"./progress_button.vue?vue&type=script&lang=js\"\nexport * from \"./progress_button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"remote-follow\">\n <form\n method=\"POST\"\n :action=\"subscribeUrl\"\n >\n <input\n type=\"hidden\"\n name=\"nickname\"\n :value=\"user.screen_name\"\n >\n <input\n type=\"hidden\"\n name=\"profile\"\n value=\"\"\n >\n <button\n click=\"submit\"\n class=\"button-default remote-button\"\n >\n {{ $t('user_card.remote_follow') }}\n </button>\n </form>\n </div>\n</template>\n\n<script src=\"./remote_follow.js\"></script>\n\n<style lang=\"scss\">\n.remote-follow {\n max-width: 220px;\n\n .remote-button {\n width: 100%;\n min-height: 2em;\n }\n}\n</style>\n","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","import { render } from \"./remote_follow.vue?vue&type=template&id=2aed8421\"\nimport script from \"./remote_follow.js?vue&type=script&lang=js\"\nexport * from \"./remote_follow.js?vue&type=script&lang=js\"\n\nimport \"./remote_follow.vue?vue&type=style&index=0&id=2aed8421&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!showNothing\"\n class=\"ScopeSelector\"\n >\n <button\n v-if=\"showDirect\"\n class=\"button-unstyled scope\"\n :class=\"css.direct\"\n :title=\"$t('post_status.scope.direct')\"\n type=\"button\"\n @click=\"changeVis('direct')\"\n >\n <FAIcon\n icon=\"envelope\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showPrivate\"\n class=\"button-unstyled scope\"\n :class=\"css.private\"\n :title=\"$t('post_status.scope.private')\"\n type=\"button\"\n @click=\"changeVis('private')\"\n >\n <FAIcon\n icon=\"lock\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showUnlisted\"\n class=\"button-unstyled scope\"\n :class=\"css.unlisted\"\n :title=\"$t('post_status.scope.unlisted')\"\n type=\"button\"\n @click=\"changeVis('unlisted')\"\n >\n <FAIcon\n icon=\"lock-open\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showPublic\"\n class=\"button-unstyled scope\"\n :class=\"css.public\"\n :title=\"$t('post_status.scope.public')\"\n type=\"button\"\n @click=\"changeVis('public')\"\n >\n <FAIcon\n icon=\"globe\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n </div>\n</template>\n\n<script src=\"./scope_selector.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ScopeSelector {\n .scope {\n display: inline-block;\n cursor: pointer;\n min-width: 1.3em;\n min-height: 1.3em;\n text-align: center;\n\n &.selected svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEnvelope,\n faLock,\n faLockOpen,\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEnvelope,\n faGlobe,\n faLock,\n faLockOpen\n)\n\nconst ScopeSelector = {\n props: [\n 'showAll',\n 'userDefault',\n 'originalScope',\n 'initialScope',\n 'onScopeChange'\n ],\n data () {\n return {\n currentScope: this.initialScope\n }\n },\n computed: {\n showNothing () {\n return !this.showPublic && !this.showUnlisted && !this.showPrivate && !this.showDirect\n },\n showPublic () {\n return this.originalScope !== 'direct' && this.shouldShow('public')\n },\n showUnlisted () {\n return this.originalScope !== 'direct' && this.shouldShow('unlisted')\n },\n showPrivate () {\n return this.originalScope !== 'direct' && this.shouldShow('private')\n },\n showDirect () {\n return this.shouldShow('direct')\n },\n css () {\n return {\n public: { selected: this.currentScope === 'public' },\n unlisted: { selected: this.currentScope === 'unlisted' },\n private: { selected: this.currentScope === 'private' },\n direct: { selected: this.currentScope === 'direct' }\n }\n }\n },\n methods: {\n shouldShow (scope) {\n return this.showAll ||\n this.currentScope === scope ||\n this.originalScope === scope ||\n this.userDefault === scope ||\n scope === 'direct'\n },\n changeVis (scope) {\n this.currentScope = scope\n this.onScopeChange && this.onScopeChange(scope)\n }\n }\n}\n\nexport default ScopeSelector\n","import { render } from \"./scope_selector.vue?vue&type=template&id=3b2dbc9a\"\nimport script from \"./scope_selector.js?vue&type=script&lang=js\"\nexport * from \"./scope_selector.js?vue&type=script&lang=js\"\n\nimport \"./scope_selector.vue?vue&type=style&index=0&id=3b2dbc9a&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown\n)\n\nexport default {\n emits: ['update:modelValue'],\n props: [\n 'modelValue',\n 'disabled',\n 'unstyled',\n 'kind',\n 'attrs'\n ]\n}\n","import { render } from \"./select.vue?vue&type=template&id=1f77c9b6\"\nimport script from \"./select.js?vue&type=script&lang=js\"\nexport * from \"./select.js?vue&type=script&lang=js\"\n\nimport \"./select.vue?vue&type=style&index=0&id=1f77c9b6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <label\n class=\"Select input\"\n :class=\"{ disabled, unstyled }\"\n >\n <select\n :disabled=\"disabled\"\n :value=\"modelValue\"\n v-bind=\"attrs\"\n @change=\"$emit('update:modelValue', $event.target.value)\"\n >\n <slot />\n </select>\n {{ ' ' }}\n <FAIcon\n class=\"select-down-icon\"\n icon=\"chevron-down\"\n />\n </label>\n</template>\n\n<script src=\"./select.js\"> </script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* TODO fix order of styles */\nlabel.Select {\n padding: 0;\n\n select {\n appearance: none;\n background: transparent;\n border: none;\n color: $fallback--text;\n color: var(--inputText, --text, $fallback--text);\n margin: 0;\n padding: 0 2em 0 0.2em;\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n width: 100%;\n z-index: 1;\n height: 2em;\n line-height: 16px;\n }\n\n .select-down-icon {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 5px;\n height: 100%;\n width: 0.875em;\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n line-height: 2;\n z-index: 0;\n pointer-events: none;\n }\n}\n</style>\n","<template>\n <div\n v-if=\"!hideStatus\"\n ref=\"root\"\n class=\"Status\"\n :class=\"[{ '-focused': isFocused }, { '-conversation': inlineExpanded }]\"\n >\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ error }}\n <span\n class=\"fa-scale-110 fa-old-padding\"\n @click=\"clearError\"\n >\n <FAIcon icon=\"times\" />\n </span>\n </div>\n <template v-if=\"muted && !isPreview\">\n <div class=\"status-container muted\">\n <small class=\"status-username\">\n <FAIcon\n v-if=\"muted && retweet\"\n class=\"fa-scale-110 fa-old-padding repeat-icon\"\n icon=\"retweet\"\n />\n <user-link\n :user=\"status.user\"\n :at=\"false\"\n />\n </small>\n <small\n v-if=\"showReasonMutedThread\"\n class=\"mute-thread\"\n >\n {{ $t('status.thread_muted') }}\n </small>\n <small\n v-if=\"showReasonMutedThread && muteWordHits.length > 0\"\n class=\"mute-thread\"\n >\n {{ $t('status.thread_muted_and_words') }}\n </small>\n <small\n class=\"mute-words\"\n :title=\"muteWordHits.join(', ')\"\n >\n {{ muteWordHits.join(', ') }}\n </small>\n <button\n class=\"unmute button-unstyled\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n icon=\"eye-slash\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"showPinned\"\n class=\"pin\"\n >\n <FAIcon\n icon=\"thumbtack\"\n class=\"faint\"\n />\n <span class=\"faint\">{{ $t('status.pinned') }}</span>\n </div>\n <div\n v-if=\"retweet && !noHeading && !inConversation\"\n :class=\"[repeaterClass, { highlighted: repeaterStyle }]\"\n :style=\"[repeaterStyle]\"\n class=\"status-container repeat-info\"\n >\n <UserAvatar\n v-if=\"retweet\"\n class=\"left-side repeater-avatar\"\n :bot=\"rtBotIndicator\"\n :better-shadow=\"betterShadow\"\n :user=\"statusoid.user\"\n />\n <div class=\"right-side faint\">\n <bdi\n class=\"status-username repeater-name\"\n :title=\"retweeter\"\n >\n <router-link\n v-if=\"retweeterHtml\"\n :to=\"retweeterProfileLink\"\n >\n <RichContent\n :html=\"retweeterHtml\"\n :emoji=\"retweeterUser.emoji\"\n />\n </router-link>\n <router-link\n v-else\n :to=\"retweeterProfileLink\"\n >{{ retweeter }}</router-link>\n </bdi>\n {{ ' ' }}\n <FAIcon\n icon=\"retweet\"\n class=\"repeat-icon\"\n :title=\"$t('tool_tip.repeat')\"\n />\n {{ $t('timeline.repeated') }}\n </div>\n </div>\n\n <div\n v-if=\"!deleted\"\n :class=\"[userClass, { highlighted: userStyle, '-repeat': retweet && !inConversation }]\"\n :style=\"[ userStyle ]\"\n class=\"status-container\"\n :data-tags=\"tags\"\n >\n <div\n v-if=\"!noHeading\"\n class=\"left-side\"\n >\n <a\n :href=\"$router.resolve(userProfileLink).href\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"status.user.id\"\n :overlay-centers=\"true\"\n >\n <UserAvatar\n class=\"post-avatar\"\n :bot=\"botIndicator\"\n :compact=\"compact\"\n :better-shadow=\"betterShadow\"\n :user=\"status.user\"\n />\n </UserPopover>\n </a>\n </div>\n <div class=\"right-side\">\n <div\n v-if=\"!noHeading\"\n class=\"status-heading\"\n >\n <div class=\"heading-name-row\">\n <div class=\"heading-left\">\n <h4\n v-if=\"status.user.name_html\"\n class=\"status-username\"\n :title=\"status.user.name\"\n >\n <RichContent\n :html=\"status.user.name\"\n :emoji=\"status.user.emoji\"\n />\n </h4>\n <h4\n v-else\n class=\"status-username\"\n :title=\"status.user.name\"\n >\n {{ status.user.name }}\n </h4>\n <user-link\n class=\"account-name\"\n :title=\"status.user.screen_name_ui\"\n :user=\"status.user\"\n :at=\"false\"\n />\n <img\n v-if=\"!!(status.user && status.user.favicon)\"\n class=\"status-favicon\"\n :src=\"status.user.favicon\"\n >\n </div>\n\n <span class=\"heading-right\">\n <router-link\n class=\"timeago faint-link\"\n :to=\"{ name: 'conversation', params: { id: status.id } }\"\n >\n <Timeago\n :time=\"status.created_at\"\n :auto-update=\"60\"\n />\n </router-link>\n <span\n v-if=\"status.visibility\"\n class=\"visibility-icon\"\n :title=\"visibilityLocalized\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"visibilityIcon(status.visibility)\"\n />\n </span>\n <button\n v-if=\"expandable && !isPreview\"\n class=\"button-unstyled\"\n :title=\"$t('status.expand')\"\n @click.prevent=\"toggleExpanded\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n icon=\"plus-square\"\n />\n </button>\n <button\n v-if=\"unmuted\"\n class=\"button-unstyled\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n class=\"fa-scale-110\"\n />\n </button>\n <button\n v-if=\"inThreadForest && replies && replies.length && !simpleTree\"\n class=\"button-unstyled\"\n :title=\"threadShowing ? $t('status.thread_hide') : $t('status.thread_show')\"\n :aria-expanded=\"threadShowing ? 'true' : 'false'\"\n @click.prevent=\"toggleThreadDisplay\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"threadShowing ? 'chevron-up' : 'chevron-down'\"\n />\n </button>\n <button\n v-if=\"dive && !simpleTree\"\n class=\"button-unstyled\"\n :title=\"$t('status.show_only_conversation_under_this')\"\n @click.prevent=\"dive\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"'angle-double-right'\"\n />\n </button>\n </span>\n </div>\n <div\n v-if=\"isReply || hasMentionsLine\"\n class=\"heading-reply-row\"\n >\n <span\n v-if=\"isReply\"\n class=\"glued-label reply-glued-label\"\n >\n <StatusPopover\n v-if=\"!isPreview\"\n :status-id=\"status.parent_visible && status.in_reply_to_status_id\"\n class=\"reply-to-popover\"\n style=\"min-width: 0;\"\n :class=\"{ '-strikethrough': !status.parent_visible }\"\n >\n <button\n class=\"button-unstyled reply-to\"\n :aria-label=\"$t('tool_tip.reply')\"\n @click.prevent=\"gotoOriginal(status.in_reply_to_status_id)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"reply\"\n flip=\"horizontal\"\n />\n {{ ' ' }}\n <span\n class=\"reply-to-text\"\n >\n {{ $t('status.reply_to') }}\n </span>\n </button>\n </StatusPopover>\n\n <span\n v-else\n class=\"reply-to-no-popover\"\n >\n <span class=\"reply-to-text\">{{ $t('status.reply_to') }}</span>\n </span>\n <MentionLink\n :content=\"replyToName\"\n :url=\"replyProfileLink\"\n :user-id=\"status.in_reply_to_user_id\"\n :user-screen-name=\"status.in_reply_to_screen_name\"\n />\n </span>\n\n <!-- This little wrapper is made for sole purpose of \"gluing\" -->\n <!-- \"Mentions\" label to the first mention -->\n <span\n v-if=\"hasMentionsLine\"\n class=\"glued-label\"\n >\n <span\n class=\"mentions\"\n :aria-label=\"$t('tool_tip.mentions')\"\n @click.prevent=\"gotoOriginal(status.in_reply_to_status_id)\"\n >\n <span\n class=\"mentions-text\"\n >\n {{ $t('status.mentions') }}\n </span>\n </span>\n <MentionsLine\n v-if=\"hasMentionsLine\"\n :mentions=\"mentionsLine.slice(0, 1)\"\n class=\"mentions-line-first\"\n />\n </span>\n {{ ' ' }}\n <MentionsLine\n v-if=\"hasMentionsLine\"\n :mentions=\"mentionsLine.slice(1)\"\n class=\"mentions-line\"\n />\n </div>\n <div\n v-if=\"isEdited && editingAvailable && !isPreview\"\n class=\"heading-edited-row\"\n >\n <i18n-t\n keypath=\"status.edited_at\"\n tag=\"span\"\n >\n <template #time>\n <Timeago\n template-key=\"time.in_past\"\n :time=\"status.edited_at\"\n :auto-update=\"60\"\n :long-format=\"true\"\n />\n </template>\n </i18n-t>\n </div>\n </div>\n\n <StatusContent\n ref=\"content\"\n :status=\"status\"\n :no-heading=\"noHeading\"\n :highlight=\"highlight\"\n :focused=\"isFocused\"\n :controlled-showing-tall=\"controlledShowingTall\"\n :controlled-expanding-subject=\"controlledExpandingSubject\"\n :controlled-showing-long-subject=\"controlledShowingLongSubject\"\n :controlled-toggle-showing-tall=\"controlledToggleShowingTall\"\n :controlled-toggle-expanding-subject=\"controlledToggleExpandingSubject\"\n :controlled-toggle-showing-long-subject=\"controlledToggleShowingLongSubject\"\n @mediaplay=\"addMediaPlaying($event)\"\n @mediapause=\"removeMediaPlaying($event)\"\n @parseReady=\"setHeadTailLinks\"\n />\n\n <article\n v-if=\"hasVisibleQuote\"\n class=\"quoted-status\"\n >\n <button\n class=\"button-unstyled -link display-quoted-status-button\"\n :aria-expanded=\"shouldDisplayQuote\"\n @click=\"toggleDisplayQuote\"\n >\n {{ shouldDisplayQuote ? $t('status.hide_quote') : $t('status.display_quote') }}\n <FAIcon\n class=\"display-quoted-status-button-icon\"\n :icon=\"shouldDisplayQuote ? 'chevron-up' : 'chevron-down'\"\n />\n </button>\n <Status\n v-if=\"shouldDisplayQuote\"\n :statusoid=\"quotedStatus\"\n :in-quote=\"true\"\n />\n </article>\n <p\n v-else-if=\"hasInvisibleQuote\"\n class=\"quoted-status -unavailable-prompt\"\n >\n <i18n-t keypath=\"status.invisible_quote\">\n <template #link>\n <bdi>\n <a\n :href=\"status.quote_url\"\n target=\"_blank\"\n >\n {{ status.quote_url }}\n </a>\n </bdi>\n </template>\n </i18n-t>\n </p>\n\n <div\n v-if=\"inConversation && !isPreview && replies && replies.length\"\n class=\"replies\"\n >\n <button\n v-if=\"showOtherRepliesAsButton && replies.length > 1\"\n class=\"button-unstyled -link faint\"\n :title=\"$tc('status.ancestor_follow', replies.length - 1, { numReplies: replies.length - 1 })\"\n @click.prevent=\"dive\"\n >\n {{ $tc('status.replies_list_with_others', replies.length - 1, { numReplies: replies.length - 1 }) }}\n </button>\n <span\n v-else\n class=\"faint\"\n >\n {{ $t('status.replies_list') }}\n </span>\n <StatusPopover\n v-for=\"reply in replies\"\n :key=\"reply.id\"\n :status-id=\"reply.id\"\n >\n <button\n class=\"button-unstyled -link reply-link\"\n @click.prevent=\"gotoOriginal(reply.id)\"\n >\n {{ reply.name }}\n </button>\n </StatusPopover>\n </div>\n\n <transition name=\"fade\">\n <div\n v-if=\"!hidePostStats && isFocused && combinedFavsAndRepeatsUsers.length > 0\"\n class=\"favs-repeated-users\"\n >\n <div class=\"stats\">\n <UserListPopover\n v-if=\"statusFromGlobalRepository.rebloggedBy && statusFromGlobalRepository.rebloggedBy.length > 0\"\n :users=\"statusFromGlobalRepository.rebloggedBy\"\n >\n <div class=\"stat-count\">\n <a class=\"stat-title\">{{ $t('status.repeats') }}</a>\n <div class=\"stat-number\">\n {{ statusFromGlobalRepository.rebloggedBy.length }}\n </div>\n </div>\n </UserListPopover>\n <UserListPopover\n v-if=\"statusFromGlobalRepository.favoritedBy && statusFromGlobalRepository.favoritedBy.length > 0\"\n :users=\"statusFromGlobalRepository.favoritedBy\"\n >\n <div\n class=\"stat-count\"\n >\n <a class=\"stat-title\">{{ $t('status.favorites') }}</a>\n <div class=\"stat-number\">\n {{ statusFromGlobalRepository.favoritedBy.length }}\n </div>\n </div>\n </UserListPopover>\n <div class=\"avatar-row\">\n <AvatarList :users=\"combinedFavsAndRepeatsUsers\" />\n </div>\n </div>\n </div>\n </transition>\n\n <EmojiReactions\n v-if=\"(mergedConfig.emojiReactionsOnTimeline || isFocused) && (!noHeading && !isPreview)\"\n :status=\"status\"\n />\n\n <div\n v-if=\"!noHeading && !isPreview\"\n class=\"status-actions\"\n >\n <reply-button\n :replying=\"replying\"\n :status=\"status\"\n @toggle=\"toggleReplying\"\n />\n <retweet-button\n :visibility=\"status.visibility\"\n :logged-in=\"loggedIn\"\n :status=\"status\"\n />\n <favorite-button\n :logged-in=\"loggedIn\"\n :status=\"status\"\n />\n <ReactButton\n v-if=\"loggedIn\"\n :status=\"status\"\n />\n <extra-buttons\n :status=\"status\"\n @onError=\"showError\"\n @onSuccess=\"clearError\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"gravestone\"\n >\n <div class=\"left-side\">\n <UserAvatar\n class=\"post-avatar\"\n :compact=\"compact\"\n :bot=\"botIndicator\"\n />\n </div>\n <div class=\"right-side\">\n <div class=\"deleted-text\">\n {{ $t('status.status_deleted') }}\n </div>\n <reply-button\n v-if=\"replying\"\n :replying=\"replying\"\n :status=\"status\"\n @toggle=\"toggleReplying\"\n />\n </div>\n </div>\n <div\n v-if=\"replying\"\n class=\"status-container reply-form\"\n >\n <PostStatusForm\n class=\"reply-body\"\n :reply-to=\"status.id\"\n :attentions=\"status.attentions\"\n :replied-user=\"status.user\"\n :copy-message-scope=\"status.visibility\"\n :subject=\"replySubject\"\n @posted=\"toggleReplying\"\n />\n </div>\n </template>\n </div>\n</template>\n\n<script src=\"./status.js\"></script>\n\n<style src=\"./status.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"ReplyButton\">\n <button\n v-if=\"loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"{'-active': replying}\"\n :title=\"$t('tool_tip.reply')\"\n @click.prevent=\"$emit('toggle')\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"reply\"\n />\n <FAIcon\n v-if=\"!replying\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-11\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-11\"\n icon=\"times\"\n />\n </FALayers>\n </button>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :href=\"remoteInteractionLink\"\n :title=\"$t('tool_tip.reply')\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"reply\"\n />\n <FAIcon\n v-if=\"!replying\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"status.replies_count > 0\"\n class=\"action-counter\"\n >\n {{ status.replies_count }}\n </span>\n </div>\n</template>\n\n<script src=\"./reply_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReplyButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n &:hover .svg-inline--fa,\n &.-active .svg-inline--fa {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faReply,\n faPlus,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faReply,\n faPlus,\n faTimes\n)\n\nconst ReplyButton = {\n name: 'ReplyButton',\n props: ['status', 'replying'],\n computed: {\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n }\n}\n\nexport default ReplyButton\n","import { render } from \"./reply_button.vue?vue&type=template&id=a7dc5ddc\"\nimport script from \"./reply_button.js?vue&type=script&lang=js\"\nexport * from \"./reply_button.js?vue&type=script&lang=js\"\n\nimport \"./reply_button.vue?vue&type=style&index=0&id=a7dc5ddc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"FavoriteButton\">\n <button\n v-if=\"loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"status.favorited && '-favorited'\"\n :title=\"$t('tool_tip.favorite')\"\n @click.prevent=\"favorite()\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n :icon=\"[status.favorited ? 'fas' : 'far', 'star']\"\n :spin=\"animated\"\n />\n <FAIcon\n v-if=\"status.favorited\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!status.favorited\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"minus\"\n />\n </FALayers>\n </button>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :title=\"$t('tool_tip.favorite')\"\n :href=\"remoteInteractionLink\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n :icon=\"['far', 'star']\"\n />\n <FAIcon\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"!mergedConfig.hidePostStats && status.fave_num > 0\"\n class=\"action-counter\"\n >\n {{ status.fave_num }}\n </span>\n </div>\n</template>\n\n<script src=\"./favorite_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.FavoriteButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-favorited .svg-inline--fa {\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n</style>\n","import { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faStar,\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faStar as faStarRegular\n} from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faStar,\n faStarRegular,\n faPlus,\n faMinus,\n faCheck\n)\n\nconst FavoriteButton = {\n props: ['status', 'loggedIn'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n favorite () {\n if (!this.status.favorited) {\n this.$store.dispatch('favorite', { id: this.status.id })\n } else {\n this.$store.dispatch('unfavorite', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n }\n}\n\nexport default FavoriteButton\n","import { render } from \"./favorite_button.vue?vue&type=template&id=195db34e\"\nimport script from \"./favorite_button.js?vue&type=script&lang=js\"\nexport * from \"./favorite_button.js?vue&type=script&lang=js\"\n\nimport \"./favorite_button.vue?vue&type=style&index=0&id=195db34e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span class=\"ReactButton\">\n <EmojiPicker\n ref=\"picker\"\n :enable-sticker-picker=\"enableStickerPicker\"\n :hide-custom-emoji=\"hideCustomEmoji\"\n class=\"emoji-picker-panel\"\n @emoji=\"addReaction\"\n @show=\"onShow\"\n @close=\"onClose\"\n />\n <span\n class=\"button-unstyled popover-trigger\"\n :title=\"$t('tool_tip.add_reaction')\"\n @click.stop.prevent=\"show\"\n >\n <FALayers>\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n :icon=\"['far', 'smile-beam']\"\n />\n <FAIcon\n v-show=\"!expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-17\"\n icon=\"plus\"\n />\n <FAIcon\n v-show=\"expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-17\"\n icon=\"times\"\n />\n </FALayers>\n </span>\n </span>\n</template>\n\n<script src=\"./react_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReactButton {\n .reaction-picker-filter {\n padding: 0.5em;\n display: flex;\n\n input {\n flex: 1;\n }\n }\n\n .reaction-picker-divider {\n height: 1px;\n width: 100%;\n margin: 0.5em;\n background-color: var(--border, $fallback--border);\n }\n\n .reaction-picker {\n width: 10em;\n height: 9em;\n font-size: 1.5em;\n overflow-y: scroll;\n display: flex;\n flex-wrap: wrap;\n padding: 0.5em;\n text-align: center;\n align-content: flex-start;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n\n .emoji-button {\n cursor: pointer;\n flex-basis: 20%;\n line-height: 1.5;\n align-content: center;\n\n &:hover {\n transform: scale(1.25);\n }\n }\n }\n\n .popover-trigger {\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n\n</style>\n","import Popover from '../popover/popover.vue'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faPlus, faTimes } from '@fortawesome/free-solid-svg-icons'\nimport { faSmileBeam } from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faPlus,\n faTimes,\n faSmileBeam\n)\n\nconst ReactButton = {\n props: ['status'],\n data () {\n return {\n filterWord: '',\n expanded: false\n }\n },\n components: {\n Popover,\n EmojiPicker\n },\n methods: {\n addReaction (event) {\n const emoji = event.insertion\n const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)\n if (existingReaction && existingReaction.me) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n } else {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n }\n },\n show () {\n if (!this.expanded) {\n this.$refs.picker.showPicker()\n }\n },\n onShow () {\n this.expanded = true\n },\n onClose () {\n this.expanded = false\n }\n },\n computed: {\n hideCustomEmoji () {\n return !this.$store.state.instance.pleromaCustomEmojiReactionsAvailable\n }\n }\n}\n\nexport default ReactButton\n","import { render } from \"./react_button.vue?vue&type=template&id=7d5cd4d4\"\nimport script from \"./react_button.js?vue&type=script&lang=js\"\nexport * from \"./react_button.js?vue&type=script&lang=js\"\n\nimport \"./react_button.vue?vue&type=style&index=0&id=7d5cd4d4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"RetweetButton\">\n <button\n v-if=\"visibility !== 'private' && visibility !== 'direct' && loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"status.repeated && '-repeated'\"\n :title=\"$t('tool_tip.repeat')\"\n @click.prevent=\"retweet()\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"retweet\"\n :spin=\"animated\"\n />\n <FAIcon\n v-if=\"status.repeated\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!status.repeated\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"minus\"\n />\n </FALayers>\n </button>\n <span v-else-if=\"loggedIn\">\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"lock\"\n :title=\"$t('timeline.no_retweet_hint')\"\n />\n </span>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :title=\"$t('tool_tip.repeat')\"\n :href=\"remoteInteractionLink\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"retweet\"\n />\n <FAIcon\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"!mergedConfig.hidePostStats && status.repeat_num > 0\"\n class=\"no-event\"\n >\n {{ status.repeat_num }}\n </span>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmDialog\"\n :title=\"$t('status.repeat_confirm_title')\"\n :confirm-text=\"$t('status.repeat_confirm_accept_button')\"\n :cancel-text=\"$t('status.repeat_confirm_cancel_button')\"\n @accepted=\"doRetweet\"\n @cancelled=\"hideConfirmDialog\"\n >\n {{ $t('status.repeat_confirm') }}\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./retweet_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.RetweetButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-repeated .svg-inline--fa {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n</style>\n","import ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faRetweet,\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRetweet,\n faPlus,\n faMinus,\n faCheck\n)\n\nconst RetweetButton = {\n props: ['status', 'loggedIn', 'visibility'],\n components: {\n ConfirmModal\n },\n data () {\n return {\n animated: false,\n showingConfirmDialog: false\n }\n },\n methods: {\n retweet () {\n if (!this.status.repeated && this.shouldConfirmRepeat) {\n this.showConfirmDialog()\n } else {\n this.doRetweet()\n }\n },\n doRetweet () {\n if (!this.status.repeated) {\n this.$store.dispatch('retweet', { id: this.status.id })\n } else {\n this.$store.dispatch('unretweet', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n this.hideConfirmDialog()\n },\n showConfirmDialog () {\n this.showingConfirmDialog = true\n },\n hideConfirmDialog () {\n this.showingConfirmDialog = false\n }\n },\n computed: {\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n },\n shouldConfirmRepeat () {\n return this.mergedConfig.modalOnRepeat\n }\n }\n}\n\nexport default RetweetButton\n","import { render } from \"./retweet_button.vue?vue&type=template&id=3a6122b4\"\nimport script from \"./retweet_button.js?vue&type=script&lang=js\"\nexport * from \"./retweet_button.js?vue&type=script&lang=js\"\n\nimport \"./retweet_button.vue?vue&type=style&index=0&id=3a6122b4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n class=\"ExtraButtons\"\n trigger=\"click\"\n placement=\"top\"\n :offset=\"{ y: 5 }\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n @show=\"onShow\"\n @close=\"onClose\"\n >\n <template #content=\"{close}\">\n <div class=\"dropdown-menu\">\n <button\n v-if=\"canMute && !status.thread_muted\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"muteConversation\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n /><span>{{ $t(\"status.mute_conversation\") }}</span>\n </button>\n <button\n v-if=\"canMute && status.thread_muted\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"unmuteConversation\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n /><span>{{ $t(\"status.unmute_conversation\") }}</span>\n </button>\n <button\n v-if=\"!status.pinned && canPin\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"pinStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"thumbtack\"\n /><span>{{ $t(\"status.pin\") }}</span>\n </button>\n <button\n v-if=\"status.pinned && canPin\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"unpinStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"thumbtack\"\n /><span>{{ $t(\"status.unpin\") }}</span>\n </button>\n <template v-if=\"canBookmark\">\n <button\n v-if=\"!status.bookmarked\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"bookmarkStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n :icon=\"['far', 'bookmark']\"\n /><span>{{ $t(\"status.bookmark\") }}</span>\n </button>\n <button\n v-if=\"status.bookmarked\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"unbookmarkStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"bookmark\"\n /><span>{{ $t(\"status.unbookmark\") }}</span>\n </button>\n </template>\n <button\n v-if=\"ownStatus && editingAvailable\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"editStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"pen\"\n /><span>{{ $t(\"status.edit\") }}</span>\n </button>\n <button\n v-if=\"isEdited && editingAvailable\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"showStatusHistory\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"history\"\n /><span>{{ $t(\"status.status_history\") }}</span>\n </button>\n <button\n v-if=\"canDelete\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"deleteStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"times\"\n /><span>{{ $t(\"status.delete\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"copyLink\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"share-alt\"\n /><span>{{ $t(\"status.copy_link\") }}</span>\n </button>\n <a\n v-if=\"!status.is_local\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n title=\"Source\"\n :href=\"status.external_url\"\n target=\"_blank\"\n >\n <FAIcon\n fixed-width\n icon=\"external-link-alt\"\n /><span>{{ $t(\"status.external_source\") }}</span>\n </a>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click.prevent=\"reportStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n :icon=\"['far', 'flag']\"\n /><span>{{ $t(\"user_card.report\") }}</span>\n </button>\n </div>\n </template>\n <template #trigger>\n <span class=\"button-unstyled popover-trigger\">\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110 \"\n icon=\"ellipsis-h\"\n />\n <FAIcon\n v-show=\"!expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"plus\"\n />\n <FAIcon\n v-show=\"expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"times\"\n />\n </FALayers>\n </span>\n <teleport to=\"#modal\">\n <ConfirmModal\n v-if=\"showingDeleteDialog\"\n :title=\"$t('status.delete_confirm_title')\"\n :cancel-text=\"$t('status.delete_confirm_cancel_button')\"\n :confirm-text=\"$t('status.delete_confirm_accept_button')\"\n @cancelled=\"hideDeleteStatusConfirmDialog\"\n @accepted=\"doDeleteStatus\"\n >\n {{ $t('status.delete_confirm') }}\n </ConfirmModal>\n </teleport>\n </template>\n </Popover>\n</template>\n\n<script src=\"./extra_buttons.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ExtraButtons {\n .popover-trigger {\n position: static;\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover-trigger-button {\n /* override of popover internal stuff */\n width: auto;\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n</style>\n","import Popover from '../popover/popover.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisH,\n faBookmark,\n faEyeSlash,\n faThumbtack,\n faShareAlt,\n faExternalLinkAlt,\n faHistory,\n faPlus,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faBookmark as faBookmarkReg,\n faFlag\n} from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faEllipsisH,\n faBookmark,\n faBookmarkReg,\n faEyeSlash,\n faThumbtack,\n faShareAlt,\n faExternalLinkAlt,\n faFlag,\n faHistory,\n faPlus,\n faTimes\n)\n\nconst ExtraButtons = {\n props: ['status'],\n components: {\n Popover,\n ConfirmModal\n },\n data () {\n return {\n expanded: false,\n showingDeleteDialog: false\n }\n },\n methods: {\n onShow () {\n this.expanded = true\n },\n onClose () {\n this.expanded = false\n },\n deleteStatus () {\n if (this.shouldConfirmDelete) {\n this.showDeleteStatusConfirmDialog()\n } else {\n this.doDeleteStatus()\n }\n },\n doDeleteStatus () {\n this.$store.dispatch('deleteStatus', { id: this.status.id })\n this.hideDeleteStatusConfirmDialog()\n },\n showDeleteStatusConfirmDialog () {\n this.showingDeleteDialog = true\n },\n hideDeleteStatusConfirmDialog () {\n this.showingDeleteDialog = false\n },\n pinStatus () {\n this.$store.dispatch('pinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unpinStatus () {\n this.$store.dispatch('unpinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n muteConversation () {\n this.$store.dispatch('muteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unmuteConversation () {\n this.$store.dispatch('unmuteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n copyLink () {\n navigator.clipboard.writeText(this.statusLink)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n bookmarkStatus () {\n this.$store.dispatch('bookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unbookmarkStatus () {\n this.$store.dispatch('unbookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n reportStatus () {\n this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] })\n },\n editStatus () {\n this.$store.dispatch('fetchStatusSource', { id: this.status.id })\n .then(data => this.$store.dispatch('openEditStatusModal', {\n statusId: this.status.id,\n subject: data.spoiler_text,\n statusText: data.text,\n statusIsSensitive: this.status.nsfw,\n statusPoll: this.status.poll,\n statusFiles: [...this.status.attachments],\n visibility: this.status.visibility,\n statusContentType: data.content_type\n }))\n },\n showStatusHistory () {\n const originalStatus = { ...this.status }\n const stripFieldsList = ['attachments', 'created_at', 'emojis', 'text', 'raw_html', 'nsfw', 'poll', 'summary', 'summary_raw_html']\n stripFieldsList.forEach(p => delete originalStatus[p])\n this.$store.dispatch('openStatusHistoryModal', originalStatus)\n }\n },\n computed: {\n currentUser () { return this.$store.state.users.currentUser },\n canDelete () {\n if (!this.currentUser) { return }\n return this.currentUser.privileges.includes('messages_delete') || this.status.user.id === this.currentUser.id\n },\n ownStatus () {\n return this.status.user.id === this.currentUser.id\n },\n canPin () {\n return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted')\n },\n canMute () {\n return !!this.currentUser\n },\n canBookmark () {\n return !!this.currentUser\n },\n statusLink () {\n return `${this.$store.state.instance.server}${this.$router.resolve({ name: 'conversation', params: { id: this.status.id } }).href}`\n },\n isEdited () {\n return this.status.edited_at !== null\n },\n editingAvailable () { return this.$store.state.instance.editingAvailable },\n shouldConfirmDelete () {\n return this.$store.getters.mergedConfig.modalOnDelete\n }\n }\n}\n\nexport default ExtraButtons\n","import { render } from \"./extra_buttons.vue?vue&type=template&id=6fcf5bb3\"\nimport script from \"./extra_buttons.js?vue&type=script&lang=js\"\nexport * from \"./extra_buttons.js?vue&type=script&lang=js\"\n\nimport \"./extra_buttons.vue?vue&type=style&index=0&id=6fcf5bb3&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n ref=\"popover\"\n trigger=\"hover\"\n :stay-on-click=\"true\"\n popover-class=\"popover-default status-popover\"\n :bound-to=\"{ x: 'container' }\"\n @show=\"enter\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content>\n <Status\n v-if=\"status\"\n :is-preview=\"true\"\n :statusoid=\"status\"\n :compact=\"true\"\n />\n <div\n v-else-if=\"error\"\n class=\"status-preview-no-content faint\"\n >\n {{ $t('status.status_unavailable') }}\n </div>\n <div\n v-else\n class=\"status-preview-no-content\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"2x\"\n />\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./status_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n.status-popover.popover {\n font-size: 1rem;\n min-width: 15em;\n max-width: 95%;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n /* TODO cleanup this */\n .Status.Status {\n border: none;\n }\n\n .status-preview-no-content {\n padding: 1em;\n text-align: center;\n\n i {\n font-size: 2em;\n }\n }\n}\n\n</style>\n","import { find } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\nimport { defineAsyncComponent } from 'vue'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst StatusPopover = {\n name: 'StatusPopover',\n props: [\n 'statusId'\n ],\n data () {\n return {\n error: false\n }\n },\n computed: {\n status () {\n return find(this.$store.state.statuses.allStatuses, { id: this.statusId })\n }\n },\n components: {\n Status: defineAsyncComponent(() => import('../status/status.vue')),\n Popover: defineAsyncComponent(() => import('../popover/popover.vue'))\n },\n methods: {\n enter () {\n if (!this.status) {\n if (!this.statusId) {\n this.error = true\n return\n }\n this.$store.dispatch('fetchStatus', this.statusId)\n .then(data => (this.error = false))\n .catch(e => (this.error = true))\n }\n }\n },\n watch: {\n status (newStatus, oldStatus) {\n if (newStatus !== oldStatus) {\n this.$nextTick(() => this.$refs.popover.updateStyles())\n }\n }\n }\n}\n\nexport default StatusPopover\n","import { render } from \"./status_popover.vue?vue&type=template&id=0c237860\"\nimport script from \"./status_popover.js?vue&type=script&lang=js\"\nexport * from \"./status_popover.js?vue&type=script&lang=js\"\n\nimport \"./status_popover.vue?vue&type=style&index=0&id=0c237860&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"hover\"\n placement=\"top\"\n :offset=\"{ y: 5 }\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content>\n <div class=\"user-list-popover\">\n <template v-if=\"users.length\">\n <div\n v-for=\"(user) in usersCapped\"\n :key=\"user.id\"\n class=\"user-list-row\"\n >\n <UserAvatar\n :user=\"user\"\n class=\"avatar-small\"\n :compact=\"true\"\n />\n <div class=\"user-list-names\">\n <!-- eslint-disable vue/no-v-html -->\n <RichContent\n class=\"username\"\n :title=\"'@'+user.screen_name_ui\"\n :html=\"user.name_html\"\n :emoji=\"user.emoji\"\n />\n <!-- eslint-enable vue/no-v-html -->\n <span class=\"user-list-screen-name\">{{ user.screen_name_ui }}</span><UnicodeDomainIndicator :user=\"user\" />\n </div>\n </div>\n </template>\n <template v-else>\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"3x\"\n />\n </template>\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./user_list_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-list-popover {\n padding: 0.5em;\n\n --emoji-size: 16px;\n\n .user-list-row {\n padding: 0.25em;\n display: flex;\n flex-direction: row;\n\n .user-list-names {\n display: flex;\n flex-direction: column;\n margin-left: 0.5em;\n min-width: 5em;\n\n img {\n width: 1em;\n height: 1em;\n }\n }\n\n .user-list-screen-name {\n font-size: 0.65em;\n }\n }\n}\n\n</style>\n","import { defineAsyncComponent } from 'vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst UserListPopover = {\n name: 'UserListPopover',\n props: [\n 'users'\n ],\n components: {\n RichContent,\n UnicodeDomainIndicator,\n Popover: defineAsyncComponent(() => import('../popover/popover.vue')),\n UserAvatar: defineAsyncComponent(() => import('../user_avatar/user_avatar.vue'))\n },\n computed: {\n usersCapped () {\n return this.users.slice(0, 16)\n }\n }\n}\n\nexport default UserListPopover\n","import { render } from \"./user_list_popover.vue?vue&type=template&id=6fc1c392\"\nimport script from \"./user_list_popover.js?vue&type=script&lang=js\"\nexport * from \"./user_list_popover.js?vue&type=script&lang=js\"\n\nimport \"./user_list_popover.vue?vue&type=style&index=0&id=6fc1c392&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"EmojiReactions\">\n <span\n v-for=\"(reaction) in emojiReactions\"\n :key=\"reaction.url || reaction.name\"\n class=\"emoji-reaction-container btn-group\"\n >\n <component\n :is=\"loggedIn ? 'button' : 'a'\"\n v-bind=\"!loggedIn ? { href: remoteInteractionLink } : {}\"\n role=\"button\"\n class=\"emoji-reaction btn button-default\"\n :class=\"{ '-picked-reaction': reactedWith(reaction.name) }\"\n :title=\"reaction.url ? reaction.name : undefined\"\n :aria-pressed=\"reactedWith(reaction.name)\"\n @click=\"emojiOnClick(reaction.name, $event)\"\n >\n <span\n class=\"reaction-emoji\"\n >\n <img\n v-if=\"reaction.url\"\n :src=\"reaction.url\"\n class=\"reaction-emoji-content\"\n width=\"1em\"\n >\n <span\n v-else\n class=\"reaction-emoji reaction-emoji-content\"\n >{{ reaction.name }}</span>\n </span>\n <FALayers>\n <FAIcon\n v-if=\"reactedWith(reaction.name)\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!reactedWith(reaction.name)\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"minus\"\n />\n </FALayers>\n </component>\n <UserListPopover\n :users=\"accountsForEmoji[reaction.name]\"\n class=\"emoji-reaction-popover\"\n :trigger-attrs=\"counterTriggerAttrs(reaction)\"\n @show=\"fetchEmojiReactionsByIfMissing()\"\n >\n <span class=\"emoji-reaction-counts\">{{ reaction.count }}</span>\n </UserListPopover>\n </span>\n <a\n v-if=\"tooManyReactions\"\n class=\"emoji-reaction-expand faint\"\n href=\"javascript:void(0)\"\n @click=\"toggleShowAll\"\n >\n {{ showAll ? $t('general.show_less') : showMoreString }}\n </a>\n </div>\n</template>\n\n<script src=\"./emoji_reactions.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.EmojiReactions {\n display: flex;\n margin-top: 0.25em;\n flex-wrap: wrap;\n\n --emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));\n\n .emoji-reaction-container {\n display: flex;\n align-items: stretch;\n margin-top: 0.5em;\n margin-right: 0.5em;\n\n .emoji-reaction-popover {\n padding: 0;\n\n .emoji-reaction-count-button {\n background-color: var(--btn);\n margin: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-sizing: border-box;\n min-width: 2em;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-right: -1px;\n }\n }\n }\n }\n\n .emoji-reaction {\n padding-left: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n\n .reaction-emoji {\n width: var(--emoji-size);\n height: var(--emoji-size);\n margin-right: 0.25em;\n line-height: var(--emoji-size);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .reaction-emoji-content {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n line-height: inherit;\n overflow: hidden;\n font-size: calc(var(--emoji-size) * 0.8);\n margin: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-left: -1px; // offset the border, can't use inset shadows either\n margin-right: -1px;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n\n .emoji-reaction-expand {\n padding: 0 0.5em;\n margin-right: 0.5em;\n margin-top: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n</style>\n","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faPlus,\n faMinus,\n faCheck\n)\n\nconst EMOJI_REACTION_COUNT_CUTOFF = 12\n\nconst EmojiReactions = {\n name: 'EmojiReactions',\n components: {\n UserAvatar,\n UserListPopover\n },\n props: ['status'],\n data: () => ({\n showAll: false\n }),\n computed: {\n tooManyReactions () {\n return this.status.emoji_reactions.length > EMOJI_REACTION_COUNT_CUTOFF\n },\n emojiReactions () {\n return this.showAll\n ? this.status.emoji_reactions\n : this.status.emoji_reactions.slice(0, EMOJI_REACTION_COUNT_CUTOFF)\n },\n showMoreString () {\n return `+${this.status.emoji_reactions.length - EMOJI_REACTION_COUNT_CUTOFF}`\n },\n accountsForEmoji () {\n return this.status.emoji_reactions.reduce((acc, reaction) => {\n acc[reaction.name] = reaction.accounts || []\n return acc\n }, {})\n },\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n },\n methods: {\n toggleShowAll () {\n this.showAll = !this.showAll\n },\n reactedWith (emoji) {\n return this.status.emoji_reactions.find(r => r.name === emoji).me\n },\n async fetchEmojiReactionsByIfMissing () {\n const hasNoAccounts = this.status.emoji_reactions.find(r => !r.accounts)\n if (hasNoAccounts) {\n return await this.$store.dispatch('fetchEmojiReactionsBy', this.status.id)\n }\n },\n reactWith (emoji) {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n },\n unreact (emoji) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n },\n async emojiOnClick (emoji, event) {\n if (!this.loggedIn) return\n\n await this.fetchEmojiReactionsByIfMissing()\n if (this.reactedWith(emoji)) {\n this.unreact(emoji)\n } else {\n this.reactWith(emoji)\n }\n },\n counterTriggerAttrs (reaction) {\n return {\n class: [\n 'btn',\n 'button-default',\n 'emoji-reaction-count-button',\n { '-picked-reaction': this.reactedWith(reaction.name) }\n ],\n 'aria-label': this.$tc('status.reaction_count_label', reaction.count, { num: reaction.count })\n }\n }\n }\n}\n\nexport default EmojiReactions\n","import { render } from \"./emoji_reactions.vue?vue&type=template&id=4be841f8\"\nimport script from \"./emoji_reactions.js?vue&type=script&lang=js\"\nexport * from \"./emoji_reactions.js?vue&type=script&lang=js\"\n\nimport \"./emoji_reactions.vue?vue&type=style&index=0&id=4be841f8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import ReplyButton from '../reply_button/reply_button.vue'\nimport FavoriteButton from '../favorite_button/favorite_button.vue'\nimport ReactButton from '../react_button/react_button.vue'\nimport RetweetButton from '../retweet_button/retweet_button.vue'\nimport ExtraButtons from '../extra_buttons/extra_buttons.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport StatusPopover from '../status_popover/status_popover.vue'\nimport UserPopover from '../user_popover/user_popover.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\nimport EmojiReactions from '../emoji_reactions/emoji_reactions.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport MentionsLine from 'src/components/mentions_line/mentions_line.vue'\nimport MentionLink from 'src/components/mention_link/mention_link.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport { muteWordHits } from '../../services/status_parser/status_parser.js'\nimport { unescape, uniqBy } from 'lodash'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEnvelope,\n faLock,\n faLockOpen,\n faGlobe,\n faTimes,\n faRetweet,\n faReply,\n faPlusSquare,\n faSmileBeam,\n faEllipsisH,\n faStar,\n faEyeSlash,\n faEye,\n faThumbtack,\n faChevronUp,\n faChevronDown,\n faAngleDoubleRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEnvelope,\n faGlobe,\n faLock,\n faLockOpen,\n faTimes,\n faRetweet,\n faReply,\n faPlusSquare,\n faStar,\n faSmileBeam,\n faEllipsisH,\n faEyeSlash,\n faEye,\n faThumbtack,\n faChevronUp,\n faChevronDown,\n faAngleDoubleRight\n)\n\nconst camelCase = name => name.charAt(0).toUpperCase() + name.slice(1)\n\nconst controlledOrUncontrolledGetters = list => list.reduce((res, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const controlledName = `controlled${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n res[name] = function () {\n return ((this.$data[toggle] !== undefined || this.$props[toggle] !== undefined) && this[toggle]) ? this[controlledName] : this[uncontrolledName]\n }\n return res\n}, {})\n\nconst controlledOrUncontrolledToggle = (obj, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[toggle]) {\n obj[toggle]()\n } else {\n obj[uncontrolledName] = !obj[uncontrolledName]\n }\n}\n\nconst controlledOrUncontrolledSet = (obj, name, val) => {\n const camelized = camelCase(name)\n const set = `controlledSet${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[set]) {\n obj[set](val)\n } else {\n obj[uncontrolledName] = val\n }\n}\n\nconst Status = {\n name: 'Status',\n components: {\n ReplyButton,\n FavoriteButton,\n ReactButton,\n RetweetButton,\n ExtraButtons,\n PostStatusForm,\n UserAvatar,\n AvatarList,\n Timeago,\n StatusPopover,\n UserListPopover,\n EmojiReactions,\n StatusContent,\n RichContent,\n MentionLink,\n MentionsLine,\n UserPopover,\n UserLink\n },\n props: [\n 'statusoid',\n 'expandable',\n 'inConversation',\n 'focused',\n 'highlight',\n 'compact',\n 'replies',\n 'isPreview',\n 'noHeading',\n 'inlineExpanded',\n 'showPinned',\n 'inProfile',\n 'profileUserId',\n 'inQuote',\n\n 'simpleTree',\n 'controlledThreadDisplayStatus',\n 'controlledToggleThreadDisplay',\n 'showOtherRepliesAsButton',\n\n 'controlledShowingTall',\n 'controlledToggleShowingTall',\n 'controlledExpandingSubject',\n 'controlledToggleExpandingSubject',\n 'controlledShowingLongSubject',\n 'controlledToggleShowingLongSubject',\n 'controlledReplying',\n 'controlledToggleReplying',\n 'controlledMediaPlaying',\n 'controlledSetMediaPlaying',\n 'dive'\n ],\n data () {\n return {\n uncontrolledReplying: false,\n unmuted: false,\n userExpanded: false,\n uncontrolledMediaPlaying: [],\n suspendable: true,\n error: null,\n headTailLinks: null,\n displayQuote: !this.inQuote\n }\n },\n computed: {\n ...controlledOrUncontrolledGetters(['replying', 'mediaPlaying']),\n muteWords () {\n return this.mergedConfig.muteWords\n },\n showReasonMutedThread () {\n return (\n this.status.thread_muted ||\n (this.status.reblog && this.status.reblog.thread_muted)\n ) && !this.inConversation\n },\n repeaterClass () {\n const user = this.statusoid.user\n return highlightClass(user)\n },\n userClass () {\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n return highlightClass(user)\n },\n deleted () {\n return this.statusoid.deleted\n },\n repeaterStyle () {\n const user = this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userStyle () {\n if (this.noHeading) return\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.status.user.id, this.status.user.screen_name)\n },\n replyProfileLink () {\n if (this.isReply) {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n // FIXME Why user not found sometimes???\n return user ? user.statusnet_profile_url : 'NOT_FOUND'\n }\n },\n retweet () { return !!this.statusoid.retweeted_status },\n retweeterUser () { return this.statusoid.user },\n retweeter () { return this.statusoid.user.name || this.statusoid.user.screen_name_ui },\n retweeterHtml () { return this.statusoid.user.name },\n retweeterProfileLink () { return this.generateUserProfileLink(this.statusoid.user.id, this.statusoid.user.screen_name) },\n status () {\n if (this.retweet) {\n return this.statusoid.retweeted_status\n } else {\n return this.statusoid\n }\n },\n statusFromGlobalRepository () {\n // NOTE: Consider to replace status with statusFromGlobalRepository\n return this.$store.state.statuses.allStatusesObject[this.status.id]\n },\n loggedIn () {\n return !!this.currentUser\n },\n muteWordHits () {\n return muteWordHits(this.status, this.muteWords)\n },\n rtBotStatus () {\n return this.statusoid.user.bot\n },\n botStatus () {\n return this.status.user.bot\n },\n botIndicator () {\n return this.botStatus && !this.hideBotIndication\n },\n rtBotIndicator () {\n return this.rtBotStatus && !this.hideBotIndication\n },\n mentionsLine () {\n if (!this.headTailLinks) return []\n const writtenSet = new Set(this.headTailLinks.writtenMentions.map(_ => _.url))\n return this.status.attentions.filter(attn => {\n // no reply user\n return attn.id !== this.status.in_reply_to_user_id &&\n // no self-replies\n attn.statusnet_profile_url !== this.status.user.statusnet_profile_url &&\n // don't include if mentions is written\n !writtenSet.has(attn.statusnet_profile_url)\n }).map(attn => ({\n url: attn.statusnet_profile_url,\n content: attn.screen_name,\n userId: attn.id\n }))\n },\n hasMentionsLine () {\n return this.mentionsLine.length > 0\n },\n muted () {\n if (this.statusoid.user.id === this.currentUser.id) return false\n const reasonsToMute = this.userIsMuted ||\n // Thread is muted\n status.thread_muted ||\n // Wordfiltered\n this.muteWordHits.length > 0 ||\n // bot status\n (this.muteBotStatuses && this.botStatus && !this.compact)\n return !this.unmuted && !this.shouldNotMute && reasonsToMute\n },\n userIsMuted () {\n if (this.statusoid.user.id === this.currentUser.id) return false\n const { status } = this\n const { reblog } = status\n const relationship = this.$store.getters.relationship(status.user.id)\n const relationshipReblog = reblog && this.$store.getters.relationship(reblog.user.id)\n return status.muted ||\n // Reprööt of a muted post according to BE\n (reblog && reblog.muted) ||\n // Muted user\n relationship.muting ||\n // Muted user of a reprööt\n (relationshipReblog && relationshipReblog.muting)\n },\n shouldNotMute () {\n const { status } = this\n const { reblog } = status\n return (\n (\n this.inProfile && (\n // Don't mute user's posts on user timeline (except reblogs)\n (!reblog && status.user.id === this.profileUserId) ||\n // Same as above but also allow self-reblogs\n (reblog && reblog.user.id === this.profileUserId)\n )\n ) ||\n // Don't mute statuses in muted conversation when said conversation is opened\n (this.inConversation && status.thread_muted)\n // No excuses if post has muted words\n ) && !this.muteWordHits.length > 0\n },\n hideMutedUsers () {\n return this.mergedConfig.hideMutedPosts\n },\n hideMutedThreads () {\n return this.mergedConfig.hideMutedThreads\n },\n hideFilteredStatuses () {\n return this.mergedConfig.hideFilteredStatuses\n },\n hideWordFilteredPosts () {\n return this.mergedConfig.hideWordFilteredPosts\n },\n hideStatus () {\n return (!this.shouldNotMute) && (\n (this.muted && this.hideFilteredStatuses) ||\n (this.userIsMuted && this.hideMutedUsers) ||\n (this.status.thread_muted && this.hideMutedThreads) ||\n (this.muteWordHits.length > 0 && this.hideWordFilteredPosts)\n )\n },\n isFocused () {\n // retweet or root of an expanded conversation\n if (this.focused) {\n return true\n } else if (!this.inConversation) {\n return false\n }\n // use conversation highlight only when in conversation\n return this.status.id === this.highlight\n },\n isReply () {\n return !!(this.status.in_reply_to_status_id && this.status.in_reply_to_user_id)\n },\n replyToName () {\n if (this.status.in_reply_to_screen_name) {\n return this.status.in_reply_to_screen_name\n } else {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n return user && user.screen_name_ui\n }\n },\n replySubject () {\n if (!this.status.summary) return ''\n const decodedSummary = unescape(this.status.summary)\n const behavior = this.mergedConfig.subjectLineBehavior\n const startsWithRe = decodedSummary.match(/^re[: ]/i)\n if ((behavior !== 'noop' && startsWithRe) || behavior === 'masto') {\n return decodedSummary\n } else if (behavior === 'email') {\n return 're: '.concat(decodedSummary)\n } else if (behavior === 'noop') {\n return ''\n }\n },\n combinedFavsAndRepeatsUsers () {\n // Use the status from the global status repository since favs and repeats are saved in it\n const combinedUsers = [].concat(\n this.statusFromGlobalRepository.favoritedBy,\n this.statusFromGlobalRepository.rebloggedBy\n )\n return uniqBy(combinedUsers, 'id')\n },\n tags () {\n // eslint-disable-next-line no-prototype-builtins\n return this.status.tags.filter(tagObj => tagObj.hasOwnProperty('name')).map(tagObj => tagObj.name).join(' ')\n },\n hidePostStats () {\n return this.mergedConfig.hidePostStats\n },\n muteBotStatuses () {\n return this.mergedConfig.muteBotStatuses\n },\n hideBotIndication () {\n return this.mergedConfig.hideBotIndication\n },\n currentUser () {\n return this.$store.state.users.currentUser\n },\n betterShadow () {\n return this.$store.state.interface.browserSupport.cssFilter\n },\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n isSuspendable () {\n return !this.replying && this.mediaPlaying.length === 0\n },\n inThreadForest () {\n return !!this.controlledThreadDisplayStatus\n },\n threadShowing () {\n return this.controlledThreadDisplayStatus === 'showing'\n },\n visibilityLocalized () {\n return this.$i18n.t('general.scope_in_timeline.' + this.status.visibility)\n },\n isEdited () {\n return this.status.edited_at !== null\n },\n editingAvailable () {\n return this.$store.state.instance.editingAvailable\n },\n hasVisibleQuote () {\n return this.status.quote_url && this.status.quote_visible\n },\n hasInvisibleQuote () {\n return this.status.quote_url && !this.status.quote_visible\n },\n quotedStatus () {\n return this.status.quote_id ? this.$store.state.statuses.allStatusesObject[this.status.quote_id] : undefined\n },\n shouldDisplayQuote () {\n return this.quotedStatus && this.displayQuote\n }\n },\n methods: {\n visibilityIcon (visibility) {\n switch (visibility) {\n case 'private':\n return 'lock'\n case 'unlisted':\n return 'lock-open'\n case 'direct':\n return 'envelope'\n default:\n return 'globe'\n }\n },\n showError (error) {\n this.error = error\n },\n clearError () {\n this.error = undefined\n },\n toggleReplying () {\n controlledOrUncontrolledToggle(this, 'replying')\n },\n gotoOriginal (id) {\n if (this.inConversation) {\n this.$emit('goto', id)\n }\n },\n toggleExpanded () {\n this.$emit('toggleExpanded')\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n toggleUserExpanded () {\n this.userExpanded = !this.userExpanded\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n },\n addMediaPlaying (id) {\n controlledOrUncontrolledSet(this, 'mediaPlaying', this.mediaPlaying.concat(id))\n },\n removeMediaPlaying (id) {\n controlledOrUncontrolledSet(this, 'mediaPlaying', this.mediaPlaying.filter(mediaId => mediaId !== id))\n },\n setHeadTailLinks (headTailLinks) {\n this.headTailLinks = headTailLinks\n },\n toggleThreadDisplay () {\n this.controlledToggleThreadDisplay()\n },\n scrollIfHighlighted (highlightId) {\n const id = highlightId\n if (this.status.id === id) {\n const rect = this.$el.getBoundingClientRect()\n if (rect.top < 100) {\n // Post is above screen, match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.height >= (window.innerHeight - 50)) {\n // Post we want to see is taller than screen so match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.bottom > window.innerHeight - 50) {\n // Post is below screen, match its bottom to screen bottom\n window.scrollBy(0, rect.bottom - window.innerHeight + 50)\n }\n }\n },\n toggleDisplayQuote () {\n if (this.shouldDisplayQuote) {\n this.displayQuote = false\n } else if (!this.quotedStatus) {\n this.$store.dispatch('fetchStatus', this.status.quote_id)\n .then(() => {\n this.displayQuote = true\n })\n } else {\n this.displayQuote = true\n }\n }\n },\n watch: {\n highlight: function (id) {\n this.scrollIfHighlighted(id)\n },\n 'status.repeat_num': function (num) {\n // refetch repeats when repeat_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.rebloggedBy && this.statusFromGlobalRepository.rebloggedBy.length !== num) {\n this.$store.dispatch('fetchRepeats', this.status.id)\n }\n },\n 'status.fave_num': function (num) {\n // refetch favs when fave_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.favoritedBy && this.statusFromGlobalRepository.favoritedBy.length !== num) {\n this.$store.dispatch('fetchFavs', this.status.id)\n }\n },\n isSuspendable: function (val) {\n this.suspendable = val\n }\n }\n}\n\nexport default Status\n","import { render } from \"./status.vue?vue&type=template&id=0f15101e\"\nimport script from \"./status.js?vue&type=script&lang=js\"\nexport * from \"./status.js?vue&type=script&lang=js\"\n\nimport \"./status.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"StatusContent\"\n :class=\"{ '-compact': compact }\"\n >\n <slot name=\"header\" />\n <StatusBody\n :status=\"status\"\n :compact=\"compact\"\n :single-line=\"singleLine\"\n :showing-tall=\"showingTall\"\n :expanding-subject=\"expandingSubject\"\n :showing-long-subject=\"showingLongSubject\"\n :toggle-showing-tall=\"toggleShowingTall\"\n :toggle-expanding-subject=\"toggleExpandingSubject\"\n :toggle-showing-long-subject=\"toggleShowingLongSubject\"\n @parseReady=\"$emit('parseReady', $event)\"\n >\n <div v-if=\"status.poll && status.poll.options && !compact\">\n <Poll\n :base-poll=\"status.poll\"\n :emoji=\"status.emojis\"\n />\n </div>\n\n <div v-else-if=\"status.poll && status.poll.options && compact\">\n <FAIcon\n icon=\"poll-h\"\n size=\"2x\"\n />\n </div>\n\n <gallery\n v-if=\"status.attachments.length !== 0\"\n class=\"attachments media-body\"\n :compact=\"compact\"\n :nsfw=\"nsfwClickthrough\"\n :attachments=\"status.attachments\"\n :limit=\"compact ? 1 : 0\"\n :size=\"attachmentSize\"\n @play=\"$emit('mediaplay', attachment.id)\"\n @pause=\"$emit('mediapause', attachment.id)\"\n />\n\n <div\n v-if=\"statusCard && !noHeading && !compact\"\n class=\"link-preview media-body\"\n >\n <link-preview\n :card=\"status.card\"\n :size=\"attachmentSize\"\n :nsfw=\"nsfwClickthrough\"\n />\n </div>\n </StatusBody>\n <slot name=\"footer\" />\n </div>\n</template>\n\n<script src=\"./status_content.js\"></script>\n<style lang=\"scss\">\n.StatusContent {\n flex: 1;\n min-width: 0;\n}\n</style>\n","<template>\n <div\n class=\"poll\"\n :class=\"containerClass\"\n >\n <div\n :role=\"showResults ? 'section' : (poll.multiple ? 'group' : 'radiogroup')\"\n >\n <div\n v-for=\"(option, index) in options\"\n :key=\"index\"\n class=\"poll-option\"\n >\n <div\n v-if=\"showResults\"\n :title=\"resultTitle(option)\"\n class=\"option-result\"\n >\n <div class=\"option-result-label\">\n <span class=\"result-percentage\">\n {{ percentageForOption(option.votes_count) }}%\n </span>\n <RichContent\n :html=\"option.title_html\"\n :handle-links=\"false\"\n :emoji=\"emoji\"\n />\n </div>\n <div\n class=\"result-fill\"\n :style=\"{ 'width': `${percentageForOption(option.votes_count)}%` }\"\n />\n </div>\n <div\n v-else\n tabindex=\"0\"\n :role=\"poll.multiple ? 'checkbox' : 'radio'\"\n :aria-labelledby=\"`option-vote-${randomSeed}-${index}`\"\n :aria-checked=\"choices[index]\"\n @click=\"activateOption(index)\"\n >\n <input\n v-if=\"poll.multiple\"\n type=\"checkbox\"\n class=\"poll-checkbox\"\n :disabled=\"loading\"\n :value=\"index\"\n >\n <input\n v-else\n type=\"radio\"\n :disabled=\"loading\"\n :value=\"index\"\n >\n <label class=\"option-vote\">\n <RichContent\n :id=\"`option-vote-${randomSeed}-${index}`\"\n :html=\"option.title_html\"\n :handle-links=\"false\"\n :emoji=\"emoji\"\n />\n </label>\n </div>\n </div>\n </div>\n <div class=\"footer faint\">\n <button\n v-if=\"!showResults\"\n class=\"btn button-default poll-vote-button\"\n type=\"button\"\n :disabled=\"isDisabled\"\n @click=\"vote\"\n >\n {{ $t('polls.vote') }}\n </button>\n <div class=\"total\">\n <template v-if=\"typeof poll.voters_count === 'number'\">\n {{ $tc(\"polls.people_voted_count\", poll.voters_count, { count: poll.voters_count }) }}&nbsp;·&nbsp;\n </template>\n <template v-else>\n {{ $tc(\"polls.votes_count\", poll.votes_count, { count: poll.votes_count }) }}&nbsp;·&nbsp;\n </template>\n </div>\n <span>\n <i18n-t\n scope=\"global\"\n :keypath=\"expired ? 'polls.expired' : 'polls.expires_in'\"\n >\n <Timeago\n :time=\"expiresAt\"\n :auto-update=\"60\"\n :now-threshold=\"0\"\n />\n </i18n-t>\n </span>\n </div>\n </div>\n</template>\n\n<script src=\"./poll.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.poll {\n .votes {\n display: flex;\n flex-direction: column;\n margin: 0 0 0.5em;\n }\n\n .poll-option {\n margin: 0.75em 0.5em;\n }\n\n .option-result {\n height: 100%;\n display: flex;\n flex-direction: row;\n position: relative;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n\n .option-result-label {\n display: flex;\n align-items: center;\n padding: 0.1em 0.25em;\n z-index: 1;\n word-break: break-word;\n }\n\n .result-percentage {\n width: 3.5em;\n flex-shrink: 0;\n }\n\n .result-fill {\n height: 100%;\n position: absolute;\n color: $fallback--text;\n color: var(--pollText, $fallback--text);\n background-color: $fallback--lightBg;\n background-color: var(--poll, $fallback--lightBg);\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n top: 0;\n left: 0;\n transition: width 0.5s;\n }\n\n .option-vote {\n display: flex;\n align-items: center;\n }\n\n input {\n width: 3.5em;\n }\n\n .footer {\n display: flex;\n align-items: center;\n }\n\n &.loading * {\n cursor: progress;\n }\n\n .poll-vote-button {\n padding: 0 0.5em;\n margin-right: 0.5em;\n }\n\n .poll-checkbox {\n display: none;\n }\n}\n</style>\n","import Timeago from 'components/timeago/timeago.vue'\nimport RichContent from 'components/rich_content/rich_content.jsx'\nimport { forEach, map } from 'lodash'\n\nexport default {\n name: 'Poll',\n props: ['basePoll', 'emoji'],\n components: {\n Timeago,\n RichContent\n },\n data () {\n return {\n loading: false,\n choices: [],\n randomSeed: `${Math.random()}`.replace('.', '-')\n }\n },\n created () {\n if (!this.$store.state.polls.pollsObject[this.pollId]) {\n this.$store.dispatch('mergeOrAddPoll', this.basePoll)\n }\n this.$store.dispatch('trackPoll', this.pollId)\n },\n unmounted () {\n this.$store.dispatch('untrackPoll', this.pollId)\n },\n computed: {\n pollId () {\n return this.basePoll.id\n },\n poll () {\n const storePoll = this.$store.state.polls.pollsObject[this.pollId]\n return storePoll || {}\n },\n options () {\n return (this.poll && this.poll.options) || []\n },\n expiresAt () {\n return (this.poll && this.poll.expires_at) || 0\n },\n expired () {\n return (this.poll && this.poll.expired) || false\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n showResults () {\n return this.poll.voted || this.expired || !this.loggedIn\n },\n totalVotesCount () {\n return this.poll.votes_count\n },\n containerClass () {\n return {\n loading: this.loading\n }\n },\n choiceIndices () {\n // Convert array of booleans into an array of indices of the\n // items that were 'true', so [true, false, false, true] becomes\n // [0, 3].\n return this.choices\n .map((entry, index) => entry && index)\n .filter(value => typeof value === 'number')\n },\n isDisabled () {\n const noChoice = this.choiceIndices.length === 0\n return this.loading || noChoice\n }\n },\n methods: {\n percentageForOption (count) {\n return this.totalVotesCount === 0 ? 0 : Math.round(count / this.totalVotesCount * 100)\n },\n resultTitle (option) {\n return `${option.votes_count}/${this.totalVotesCount} ${this.$t('polls.votes')}`\n },\n fetchPoll () {\n this.$store.dispatch('refreshPoll', { id: this.statusId, pollId: this.poll.id })\n },\n activateOption (index) {\n // forgive me father: doing checking the radio/checkboxes\n // in code because of customized input elements need either\n // a) an extra element for the actual graphic, or b) use a\n // pseudo element for the label. We use b) which mandates\n // using \"for\" and \"id\" matching which isn't nice when the\n // same poll appears multiple times on the site (notifs and\n // timeline for example). With code we can make sure it just\n // works without altering the pseudo element implementation.\n const allElements = this.$el.querySelectorAll('input')\n const clickedElement = this.$el.querySelector(`input[value=\"${index}\"]`)\n if (this.poll.multiple) {\n // Checkboxes, toggle only the clicked one\n clickedElement.checked = !clickedElement.checked\n } else {\n // Radio button, uncheck everything and check the clicked one\n forEach(allElements, element => { element.checked = false })\n clickedElement.checked = true\n }\n this.choices = map(allElements, e => e.checked)\n },\n optionId (index) {\n return `poll${this.poll.id}-${index}`\n },\n vote () {\n if (this.choiceIndices.length === 0) return\n this.loading = true\n this.$store.dispatch(\n 'votePoll',\n { id: this.statusId, pollId: this.poll.id, choices: this.choiceIndices }\n ).then(poll => {\n this.loading = false\n })\n }\n }\n}\n","import { render } from \"./poll.vue?vue&type=template&id=02c7de4c\"\nimport script from \"./poll.js?vue&type=script&lang=js\"\nexport * from \"./poll.js?vue&type=script&lang=js\"\n\nimport \"./poll.vue?vue&type=style&index=0&id=02c7de4c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"StatusBody\"\n :class=\"{ '-compact': compact }\"\n >\n <div class=\"body\">\n <div\n v-if=\"status.summary_raw_html\"\n class=\"summary-wrapper\"\n :class=\"{ '-tall': (longSubject && !showingLongSubject) }\"\n >\n <RichContent\n class=\"media-body summary\"\n :html=\"status.summary_raw_html\"\n :emoji=\"status.emojis\"\n />\n <button\n v-show=\"longSubject && showingLongSubject\"\n class=\"button-unstyled -link tall-subject-hider\"\n @click.prevent=\"toggleShowingLongSubject\"\n >\n {{ $t(\"status.hide_full_subject\") }}\n </button>\n <button\n v-show=\"longSubject && !showingLongSubject\"\n class=\"button-unstyled -link tall-subject-hider\"\n @click.prevent=\"toggleShowingLongSubject\"\n >\n {{ $t(\"status.show_full_subject\") }}\n </button>\n </div>\n <div\n :class=\"{'-tall-status': hideTallStatus}\"\n class=\"text-wrapper\"\n >\n <button\n v-show=\"hideTallStatus\"\n class=\"button-unstyled -link tall-status-hider\"\n :class=\"{ '-focused': focused }\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ $t(\"general.show_more\") }}\n </button>\n <RichContent\n v-if=\"!hideSubjectStatus && !(singleLine && status.summary_raw_html)\"\n :class=\"{ '-single-line': singleLine }\"\n class=\"text media-body\"\n :html=\"status.raw_html\"\n :emoji=\"status.emojis\"\n :handle-links=\"true\"\n :greentext=\"mergedConfig.greentext\"\n :attentions=\"status.attentions\"\n @parseReady=\"onParseReady\"\n />\n\n <button\n v-show=\"hideSubjectStatus\"\n class=\"button-unstyled -link cw-status-hider\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ $t(\"status.show_content\") }}\n <FAIcon\n v-if=\"attachmentTypes.includes('image')\"\n icon=\"image\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('video')\"\n icon=\"video\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('audio')\"\n icon=\"music\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('unknown')\"\n icon=\"file\"\n />\n <FAIcon\n v-if=\"status.poll && status.poll.options\"\n icon=\"poll-h\"\n />\n <FAIcon\n v-if=\"status.card\"\n icon=\"link\"\n />\n </button>\n <button\n v-show=\"showingMore && !fullContent\"\n class=\"button-unstyled -link status-unhider\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ tallStatus ? $t(\"general.show_less\") : $t(\"status.hide_content\") }}\n </button>\n </div>\n </div>\n <slot v-if=\"!hideSubjectStatus\" />\n </div>\n</template>\n<script src=\"./status_body.js\"></script>\n<style lang=\"scss\" src=\"./status_body.scss\" />\n","import fileType from 'src/services/file_type/file_type.service'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n)\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'compact',\n 'status',\n 'focused',\n 'noHeading',\n 'fullContent',\n 'singleLine',\n 'showingTall',\n 'expandingSubject',\n 'showingLongSubject',\n 'toggleShowingTall',\n 'toggleExpandingSubject',\n 'toggleShowingLongSubject'\n ],\n data () {\n return {\n postLength: this.status.text.length,\n parseReadyDone: false\n }\n },\n computed: {\n localCollapseSubjectDefault () {\n return this.mergedConfig.collapseMessageWithSubject\n },\n // This is a bit hacky, but we want to approximate post height before rendering\n // so we count newlines (masto uses <p> for paragraphs, GS uses <br> between them)\n // as well as approximate line count by counting characters and approximating ~80\n // per line.\n //\n // Using max-height + overflow: auto for status components resulted in false positives\n // very often with japanese characters, and it was very annoying.\n tallStatus () {\n if (this.singleLine || this.compact) return false\n const lengthScore = this.status.raw_html.split(/<p|<br/).length + this.postLength / 80\n return lengthScore > 20\n },\n longSubject () {\n return this.status.summary.length > 240\n },\n // When a status has a subject and is also tall, we should only have one show more/less button. If the default is to collapse statuses with subjects, we just treat it like a status with a subject; otherwise, we just treat it like a tall status.\n mightHideBecauseSubject () {\n return !!this.status.summary && this.localCollapseSubjectDefault\n },\n mightHideBecauseTall () {\n return this.tallStatus && !(this.status.summary && this.localCollapseSubjectDefault)\n },\n hideSubjectStatus () {\n return this.mightHideBecauseSubject && !this.expandingSubject\n },\n hideTallStatus () {\n return this.mightHideBecauseTall && !this.showingTall\n },\n showingMore () {\n return (this.mightHideBecauseTall && this.showingTall) || (this.mightHideBecauseSubject && this.expandingSubject)\n },\n attachmentTypes () {\n return this.status.attachments.map(file => fileType.fileType(file.mimetype))\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n RichContent\n },\n mounted () {\n this.status.attentions && this.status.attentions.forEach(attn => {\n const { id } = attn\n this.$store.dispatch('fetchUserIfMissing', id)\n })\n },\n methods: {\n onParseReady (event) {\n if (this.parseReadyDone) return\n this.parseReadyDone = true\n this.$emit('parseReady', event)\n const { writtenMentions, invisibleMentions } = event\n writtenMentions\n .filter(mention => !mention.notifying)\n .forEach(mention => {\n const { content, url } = mention\n const cleanedString = content.replace(/<[^>]+?>/gi, '') // remove all tags\n if (!cleanedString.startsWith('@')) return\n const handle = cleanedString.slice(1)\n const host = url.replace(/^https?:\\/\\//, '').replace(/\\/.+?$/, '')\n this.$store.dispatch('fetchUserIfMissing', `${handle}@${host}`)\n })\n /* This is a bit of a hack to make current tall status detector work\n * with rich mentions. Invisible mentions are detected at RichContent level\n * and also we generate plaintext version of mentions by stripping tags\n * so here we subtract from post length by each mention that became invisible\n * via MentionsLine\n */\n this.postLength = invisibleMentions.reduce((acc, mention) => {\n return acc - mention.textContent.length - 1\n }, this.postLength)\n },\n toggleShowMore () {\n if (this.mightHideBecauseTall) {\n this.toggleShowingTall()\n } else if (this.mightHideBecauseSubject) {\n this.toggleExpandingSubject()\n }\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n }\n }\n}\n\nexport default StatusContent\n","import { render } from \"./status_body.vue?vue&type=template&id=7a590a2c\"\nimport script from \"./status_body.js?vue&type=script&lang=js\"\nexport * from \"./status_body.js?vue&type=script&lang=js\"\n\nimport \"./status_body.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Attachment from '../attachment/attachment.vue'\nimport Poll from '../poll/poll.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport StatusBody from 'src/components/status_body/status_body.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport { mapGetters, mapState } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n)\n\nconst camelCase = name => name.charAt(0).toUpperCase() + name.slice(1)\n\nconst controlledOrUncontrolledGetters = list => list.reduce((res, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const controlledName = `controlled${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n res[name] = function () {\n return ((this.$data[toggle] !== undefined || this.$props[toggle] !== undefined) && this[toggle]) ? this[controlledName] : this[uncontrolledName]\n }\n return res\n}, {})\n\nconst controlledOrUncontrolledToggle = (obj, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[toggle]) {\n obj[toggle]()\n } else {\n obj[uncontrolledName] = !obj[uncontrolledName]\n }\n}\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'status',\n 'compact',\n 'focused',\n 'noHeading',\n 'fullContent',\n 'singleLine',\n 'controlledShowingTall',\n 'controlledExpandingSubject',\n 'controlledToggleShowingTall',\n 'controlledToggleExpandingSubject',\n 'controlledShowingLongSubject',\n 'controlledToggleShowingLongSubject'\n ],\n data () {\n return {\n uncontrolledShowingTall: this.fullContent || (this.inConversation && this.focused),\n uncontrolledShowingLongSubject: false,\n // not as computed because it sets the initial state which will be changed later\n uncontrolledExpandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject\n }\n },\n computed: {\n ...controlledOrUncontrolledGetters(['showingTall', 'expandingSubject', 'showingLongSubject']),\n statusCard () {\n if (!this.status.card) return null\n return this.status.card.url === this.status.quote_url ? null : this.status.card\n },\n hideAttachments () {\n return (this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation)\n },\n nsfwClickthrough () {\n if (!this.status.nsfw) {\n return false\n }\n if (this.status.summary && this.localCollapseSubjectDefault) {\n return false\n }\n return true\n },\n attachmentSize () {\n if (this.compact) {\n return 'small'\n } else if ((this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation) ||\n (this.status.attachments.length > this.maxThumbnails)) {\n return 'hide'\n }\n return 'normal'\n },\n maxThumbnails () {\n return this.mergedConfig.maxThumbnails\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n },\n components: {\n Attachment,\n Poll,\n Gallery,\n LinkPreview,\n StatusBody\n },\n methods: {\n toggleShowingTall () {\n controlledOrUncontrolledToggle(this, 'showingTall')\n },\n toggleExpandingSubject () {\n controlledOrUncontrolledToggle(this, 'expandingSubject')\n },\n toggleShowingLongSubject () {\n controlledOrUncontrolledToggle(this, 'showingLongSubject')\n },\n setMedia () {\n const attachments = this.attachmentSize === 'hide' ? this.status.attachments : this.galleryAttachments\n return () => this.$store.dispatch('setMedia', attachments)\n }\n }\n}\n\nexport default StatusContent\n","import { render } from \"./status_content.vue?vue&type=template&id=79c8e5d6\"\nimport script from \"./status_content.js?vue&type=script&lang=js\"\nexport * from \"./status_content.js?vue&type=script&lang=js\"\n\nimport \"./status_content.vue?vue&type=style&index=0&id=79c8e5d6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"still-image\"\n :class=\"{ animated: animated }\"\n :style=\"style\"\n >\n <canvas\n v-if=\"animated\"\n ref=\"canvas\"\n />\n <!-- NOTE: key is required to force to re-render img tag when src is changed -->\n <img\n ref=\"src\"\n :key=\"realSrc\"\n :alt=\"alt\"\n :title=\"alt\"\n :data-src=\"dataSrc\"\n :src=\"realSrc\"\n :referrerpolicy=\"referrerpolicy\"\n :loading=\"loading\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <slot />\n </div>\n</template>\n\n<script src=\"./still-image.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.still-image {\n position: relative;\n line-height: 0;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n\n canvas {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n visibility: var(--_still-image-canvas-visibility, visible);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n &.animated {\n &::before {\n zoom: var(--_still_image-label-scale, 1);\n content: \"gif\";\n position: absolute;\n line-height: 1;\n font-size: 0.7em;\n top: 0.5em;\n left: 0.5em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n display: block;\n padding: 2px 4px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n z-index: 2;\n visibility: var(--_still-image-label-visibility, visible);\n }\n\n &:hover canvas {\n display: none;\n }\n\n &:hover::before {\n visibility: var(--_still-image-label-visibility, hidden);\n }\n\n img {\n visibility: var(--_still-image-img-visibility, hidden);\n }\n\n &:hover img {\n visibility: visible;\n }\n }\n}\n</style>\n","const StillImage = {\n props: [\n 'src',\n 'referrerpolicy',\n 'mimetype',\n 'imageLoadError',\n 'imageLoadHandler',\n 'alt',\n 'height',\n 'width',\n 'dataSrc',\n 'loading'\n ],\n data () {\n return {\n // for lazy loading, see loadLazy()\n realSrc: this.src,\n stopGifs: this.$store.getters.mergedConfig.stopGifs\n }\n },\n computed: {\n animated () {\n if (!this.realSrc) {\n return false\n }\n\n return this.stopGifs && (this.mimetype === 'image/gif' || this.realSrc.endsWith('.gif'))\n },\n style () {\n const appendPx = (str) => /\\d$/.test(str) ? str + 'px' : str\n return {\n height: this.height ? appendPx(this.height) : null,\n width: this.width ? appendPx(this.width) : null\n }\n }\n },\n methods: {\n loadLazy () {\n if (this.dataSrc) {\n this.realSrc = this.dataSrc\n }\n },\n onLoad () {\n if (!this.realSrc) {\n return\n }\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 watch: {\n src () {\n this.realSrc = this.src\n },\n dataSrc () {\n this.$el.removeAttribute('data-loaded')\n }\n }\n}\n\nexport default StillImage\n","import { render } from \"./still-image.vue?vue&type=template&id=75385b10\"\nimport script from \"./still-image.js?vue&type=script&lang=js\"\nexport * from \"./still-image.js?vue&type=script&lang=js\"\n\nimport \"./still-image.vue?vue&type=style&index=0&id=75385b10&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <time\n :datetime=\"time\"\n :title=\"localeDateString\"\n >\n {{ relativeTimeString }}\n </time>\n</template>\n\n<script>\nimport * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport localeService from 'src/services/locale/locale.service.js'\n\nexport default {\n name: 'Timeago',\n props: ['time', 'autoUpdate', 'longFormat', 'nowThreshold', 'templateKey'],\n data () {\n return {\n relativeTime: { key: 'time.now', num: 0 },\n interval: null\n }\n },\n computed: {\n localeDateString () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return typeof this.time === 'string'\n ? new Date(Date.parse(this.time)).toLocaleString(browserLocale)\n : this.time.toLocaleString(browserLocale)\n },\n relativeTimeString () {\n const timeString = this.$i18n.tc(this.relativeTime.key, this.relativeTime.num, [this.relativeTime.num])\n\n if (typeof this.templateKey === 'string' && this.relativeTime.key !== 'time.now') {\n return this.$i18n.t(this.templateKey, [timeString])\n }\n\n return timeString\n }\n },\n watch: {\n time (newVal, oldVal) {\n if (oldVal !== newVal) {\n clearTimeout(this.interval)\n this.refreshRelativeTimeObject()\n }\n }\n },\n created () {\n this.refreshRelativeTimeObject()\n },\n unmounted () {\n clearTimeout(this.interval)\n },\n methods: {\n refreshRelativeTimeObject () {\n const nowThreshold = typeof this.nowThreshold === 'number' ? this.nowThreshold : 1\n this.relativeTime = this.longFormat\n ? DateUtils.relativeTime(this.time, nowThreshold)\n : DateUtils.relativeTimeShort(this.time, nowThreshold)\n\n if (this.autoUpdate) {\n this.interval = setTimeout(\n this.refreshRelativeTimeObject,\n 1000 * this.autoUpdate\n )\n }\n }\n }\n}\n</script>\n","import { render } from \"./timeago.vue?vue&type=template&id=3269671b\"\nimport script from \"./timeago.vue?vue&type=script&lang=js\"\nexport * from \"./timeago.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <FAIcon\n v-if=\"user && user.screen_name_ui_contains_non_ascii\"\n icon=\"code\"\n :title=\"$t('unicode_domain_indicator.tooltip')\"\n />\n</template>\n\n<script>\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCode\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCode\n)\n\nconst UnicodeDomainIndicator = {\n props: {\n user: Object\n }\n}\n\nexport default UnicodeDomainIndicator\n</script>\n","import { render } from \"./unicode_domain_indicator.vue?vue&type=template&id=3e044e46\"\nimport script from \"./unicode_domain_indicator.vue?vue&type=script&lang=js\"\nexport * from \"./unicode_domain_indicator.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import StillImage from '../still-image/still-image.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\n\nimport {\n faRobot\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRobot\n)\n\nconst UserAvatar = {\n props: [\n 'user',\n 'betterShadow',\n 'compact',\n 'bot'\n ],\n data () {\n return {\n showPlaceholder: false,\n defaultAvatar: `${this.$store.state.instance.server + this.$store.state.instance.defaultAvatar}`\n }\n },\n components: {\n StillImage\n },\n methods: {\n imgSrc (src) {\n return (!src || this.showPlaceholder) ? this.defaultAvatar : src\n },\n imageLoadError () {\n this.showPlaceholder = true\n }\n }\n}\n\nexport default UserAvatar\n","import { render } from \"./user_avatar.vue?vue&type=template&id=9c4bf79e\"\nimport script from \"./user_avatar.js?vue&type=script&lang=js\"\nexport * from \"./user_avatar.js?vue&type=script&lang=js\"\n\nimport \"./user_avatar.vue?vue&type=style&index=0&id=9c4bf79e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n class=\"Avatar\"\n :class=\"{ '-compact': compact }\"\n >\n <StillImage\n v-if=\"user\"\n class=\"avatar\"\n :alt=\"user.screen_name_ui\"\n :title=\"user.screen_name_ui\"\n :src=\"imgSrc(user.profile_image_url_original)\"\n :image-load-error=\"imageLoadError\"\n :class=\"{ '-compact': compact, '-better-shadow': betterShadow }\"\n />\n <div\n v-else\n class=\"avatar -placeholder\"\n :class=\"{ '-compact': compact }\"\n />\n <FAIcon\n v-if=\"bot\"\n icon=\"robot\"\n class=\"bot-indicator\"\n />\n </span>\n</template>\n\n<script src=\"./user_avatar.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Avatar {\n --_avatarShadowBox: var(--avatarStatusShadow);\n --_avatarShadowFilter: var(--avatarStatusShadowFilter);\n --_avatarShadowInset: var(--avatarStatusShadowInset);\n --_still-image-label-visibility: hidden;\n\n display: inline-block;\n position: relative;\n width: 48px;\n height: 48px;\n\n &.-compact {\n width: 32px;\n height: 32px;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .avatar {\n width: 100%;\n height: 100%;\n box-shadow: var(--_avatarShadowBox);\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n\n &.-better-shadow {\n box-shadow: var(--_avatarShadowInset);\n filter: var(--_avatarShadowFilter);\n }\n\n &.-animated::before {\n display: none;\n }\n\n &.-compact {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n &.-placeholder {\n background-color: $fallback--fg;\n background-color: var(--fg, $fallback--fg);\n }\n }\n\n img {\n width: 100%;\n height: 100%;\n }\n\n .bot-indicator {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: -0.2em;\n padding: 0.2em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n border-radius: var(--tooltipRadius);\n }\n}\n</style>\n","<template>\n <div\n class=\"user-card\"\n :class=\"classes\"\n >\n <div\n :class=\"{ 'hide-bio': hideBio }\"\n :style=\"style\"\n class=\"background-image\"\n />\n <div :class=\"onClose ? '' : panel-heading -flexible-height\">\n <div class=\"user-info\">\n <div class=\"container\">\n <a\n v-if=\"avatarAction === 'zoom'\"\n class=\"user-info-avatar -link\"\n @click=\"zoomAvatar\"\n >\n <UserAvatar\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n />\n <div class=\"user-info-avatar -link -overlay\">\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search-plus\"\n />\n </div>\n </a>\n <UserAvatar\n v-else-if=\"typeof avatarAction === 'function'\"\n class=\"user-info-avatar\"\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n @click=\"avatarAction\"\n />\n <router-link\n v-else\n :to=\"userProfileLink(user)\"\n >\n <UserAvatar\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n />\n </router-link>\n <div class=\"user-summary\">\n <div class=\"top-line\">\n <router-link\n :to=\"userProfileLink(user)\"\n class=\"user-name\"\n >\n <RichContent\n :title=\"user.name\"\n :html=\"user.name\"\n :emoji=\"user.emoji\"\n />\n </router-link>\n <button\n v-if=\"!isOtherUser && user.is_local\"\n class=\"button-unstyled edit-profile-button\"\n @click.stop=\"openProfileTab\"\n >\n <FAIcon\n fixed-width\n class=\"icon\"\n icon=\"edit\"\n :title=\"$t('user_card.edit_profile')\"\n />\n </button>\n <a\n v-if=\"isOtherUser && !user.is_local\"\n :href=\"user.statusnet_profile_url\"\n target=\"_blank\"\n class=\"button-unstyled external-link-button\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"external-link-alt\"\n />\n </a>\n <AccountActions\n v-if=\"isOtherUser && loggedIn\"\n :user=\"user\"\n :relationship=\"relationship\"\n />\n <router-link\n v-if=\"onClose\"\n :to=\"userProfileLink(user)\"\n class=\"button-unstyled external-link-button\"\n @click=\"onClose\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"expand-alt\"\n />\n </router-link>\n <button\n v-if=\"onClose\"\n class=\"button-unstyled external-link-button\"\n @click=\"onClose\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"times\"\n />\n </button>\n </div>\n <div class=\"bottom-line\">\n <user-link\n class=\"user-screen-name\"\n :user=\"user\"\n />\n <template v-if=\"!hideBio\">\n <span\n v-if=\"user.deactivated\"\n class=\"alert user-role\"\n >\n {{ $t('user_card.deactivated') }}\n </span>\n <span\n v-if=\"!!visibleRole\"\n class=\"alert user-role\"\n >\n {{ $t(`general.role.${visibleRole}`) }}\n </span>\n <span\n v-if=\"user.bot\"\n class=\"alert user-role\"\n >\n {{ $t('user_card.bot') }}\n </span>\n </template>\n <span v-if=\"user.locked\">\n <FAIcon\n class=\"lock-icon\"\n icon=\"lock\"\n size=\"sm\"\n />\n </span>\n <span\n v-if=\"!mergedConfig.hideUserStats && !hideBio\"\n class=\"dailyAvg\"\n >{{ dailyAvg }} {{ $t('user_card.per_day') }}</span>\n </div>\n </div>\n </div>\n <div class=\"user-meta\">\n <div\n v-if=\"relationship.followed_by && loggedIn && isOtherUser\"\n class=\"following\"\n >\n {{ $t('user_card.follows_you') }}\n </div>\n <div\n v-if=\"isOtherUser && (loggedIn || !switcher)\"\n class=\"highlighter\"\n >\n <!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to -->\n <input\n v-if=\"userHighlightType !== 'disabled'\"\n :id=\"'userHighlightColorTx'+user.id\"\n v-model=\"userHighlightColor\"\n class=\"userHighlightText\"\n type=\"text\"\n >\n <input\n v-if=\"userHighlightType !== 'disabled'\"\n :id=\"'userHighlightColor'+user.id\"\n v-model=\"userHighlightColor\"\n class=\"userHighlightCl\"\n type=\"color\"\n >\n {{ ' ' }}\n <Select\n :id=\"'userHighlightSel'+user.id\"\n v-model=\"userHighlightType\"\n class=\"userHighlightSel\"\n >\n <option value=\"disabled\">\n {{ $t('user_card.highlight.disabled') }}\n </option>\n <option value=\"solid\">\n {{ $t('user_card.highlight.solid') }}\n </option>\n <option value=\"striped\">\n {{ $t('user_card.highlight.striped') }}\n </option>\n <option value=\"side\">\n {{ $t('user_card.highlight.side') }}\n </option>\n </Select>\n </div>\n </div>\n <div\n v-if=\"loggedIn && isOtherUser\"\n class=\"user-interactions\"\n >\n <div class=\"btn-group\">\n <FollowButton\n :relationship=\"relationship\"\n :user=\"user\"\n />\n <template v-if=\"relationship.following\">\n <ProgressButton\n v-if=\"!relationship.subscribing\"\n class=\"btn button-default\"\n :click=\"subscribeUser\"\n :title=\"$t('user_card.subscribe')\"\n >\n <FAIcon icon=\"bell\" />\n </ProgressButton>\n <ProgressButton\n v-else\n class=\"btn button-default toggled\"\n :click=\"unsubscribeUser\"\n :title=\"$t('user_card.unsubscribe')\"\n >\n <FALayers>\n <FAIcon\n icon=\"rss\"\n transform=\"left-5 shrink-6 up-3 rotate-20\"\n flip=\"horizontal\"\n />\n <FAIcon\n icon=\"rss\"\n transform=\"right-5 shrink-6 up-3 rotate-20\"\n />\n <FAIcon icon=\"bell\" />\n </FALayers>\n </ProgressButton>\n </template>\n </div>\n <div>\n <button\n v-if=\"relationship.muting\"\n class=\"btn button-default btn-block toggled\"\n :disabled=\"user.deactivated\"\n @click=\"unmuteUser\"\n >\n {{ $t('user_card.muted') }}\n </button>\n <button\n v-else\n class=\"btn button-default btn-block\"\n :disabled=\"user.deactivated\"\n @click=\"muteUser\"\n >\n {{ $t('user_card.mute') }}\n </button>\n </div>\n <div>\n <button\n class=\"btn button-default btn-block\"\n :disabled=\"user.deactivated\"\n @click=\"mentionUser\"\n >\n {{ $t('user_card.mention') }}\n </button>\n </div>\n <ModerationTools\n v-if=\"showModerationMenu\"\n :user=\"user\"\n />\n </div>\n <div\n v-if=\"!loggedIn && user.is_local\"\n class=\"user-interactions\"\n >\n <RemoteFollow :user=\"user\" />\n </div>\n <UserNote\n v-if=\"loggedIn && isOtherUser && (hasNote || (hasNoteEditor && supportsNote))\"\n :user=\"user\"\n :relationship=\"relationship\"\n :editable=\"hasNoteEditor\"\n />\n </div>\n </div>\n <div\n v-if=\"!hideBio\"\n class=\"panel-body\"\n >\n <div\n v-if=\"!mergedConfig.hideUserStats && switcher\"\n class=\"user-counts\"\n >\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('statuses')\"\n >\n <h5>{{ $t('user_card.statuses') }}</h5>\n <span>{{ user.statuses_count }} <br></span>\n </div>\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('friends')\"\n >\n <h5>{{ $t('user_card.followees') }}</h5>\n <span>{{ hideFollowsCount ? $t('user_card.hidden') : user.friends_count }}</span>\n </div>\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('followers')\"\n >\n <h5>{{ $t('user_card.followers') }}</h5>\n <span>{{ hideFollowersCount ? $t('user_card.hidden') : user.followers_count }}</span>\n </div>\n </div>\n <RichContent\n v-if=\"!hideBio\"\n class=\"user-card-bio\"\n :html=\"user.description_html\"\n :emoji=\"user.emoji\"\n :handle-links=\"true\"\n />\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmMute\"\n :title=\"$t('user_card.mute_confirm_title')\"\n :confirm-text=\"$t('user_card.mute_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.mute_confirm_cancel_button')\"\n @accepted=\"doMuteUser\"\n @cancelled=\"hideConfirmMute\"\n >\n <i18n-t\n keypath=\"user_card.mute_confirm\"\n tag=\"div\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n <div\n class=\"mute-expiry\"\n >\n <label>\n {{ $t('user_card.mute_duration_prompt') }}\n </label>\n <input\n v-model=\"muteExpiryAmount\"\n type=\"number\"\n class=\"expiry-amount hide-number-spinner\"\n :min=\"0\"\n >\n <Select\n v-model=\"muteExpiryUnit\"\n unstyled=\"true\"\n class=\"expiry-unit\"\n >\n <option\n v-for=\"unit in muteExpiryUnits\"\n :key=\"unit\"\n :value=\"unit\"\n >\n {{ $t(`time.${unit}_short`, ['']) }}\n </option>\n </Select>\n </div>\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./user_card.js\"></script>\n\n<style lang=\"scss\" src=\"./user_card.scss\" />\n","<template>\n <div>\n <Popover\n trigger=\"click\"\n class=\"moderation-tools-popover\"\n placement=\"bottom\"\n :offset=\"{ y: 5 }\"\n @show=\"setToggled(true)\"\n @close=\"setToggled(false)\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <span v-if=\"canGrantRole\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleRight(&quot;admin&quot;)\"\n >\n {{ $t(!!user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleRight(&quot;moderator&quot;)\"\n >\n {{ $t(!!user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator') }}\n </button>\n <div\n v-if=\"canChangeActivationState || canDeleteAccount\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </span>\n <button\n v-if=\"canChangeActivationState\"\n class=\"button-default dropdown-item\"\n @click=\"toggleActivationStatus()\"\n >\n {{ $t(!!user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account') }}\n </button>\n <button\n v-if=\"canDeleteAccount\"\n class=\"button-default dropdown-item\"\n @click=\"deleteUserDialog(true)\"\n >\n {{ $t('user_card.admin_menu.delete_account') }}\n </button>\n <div\n v-if=\"canUseTagPolicy\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n <span v-if=\"canUseTagPolicy\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.FORCE_NSFW)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }\"\n />\n {{ $t('user_card.admin_menu.force_nsfw') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.STRIP_MEDIA)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.STRIP_MEDIA) }\"\n />\n {{ $t('user_card.admin_menu.strip_media') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.FORCE_UNLISTED)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.FORCE_UNLISTED) }\"\n />\n {{ $t('user_card.admin_menu.force_unlisted') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.SANDBOX)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.SANDBOX) }\"\n />\n {{ $t('user_card.admin_menu.sandbox') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.DISABLE_REMOTE_SUBSCRIPTION)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.DISABLE_REMOTE_SUBSCRIPTION) }\"\n />\n {{ $t('user_card.admin_menu.disable_remote_subscription') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.DISABLE_ANY_SUBSCRIPTION)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.DISABLE_ANY_SUBSCRIPTION) }\"\n />\n {{ $t('user_card.admin_menu.disable_any_subscription') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.QUARANTINE)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.QUARANTINE) }\"\n />\n {{ $t('user_card.admin_menu.quarantine') }}\n </button>\n </span>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"btn button-default btn-block moderation-tools-button\"\n :class=\"{ toggled }\"\n >\n {{ $t('user_card.admin_menu.moderation') }}\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n <teleport to=\"#modal\">\n <DialogModal\n v-if=\"showDeleteUserDialog\"\n :on-cancel=\"deleteUserDialog.bind(this, false)\"\n >\n <template #header>\n {{ $t('user_card.admin_menu.delete_user') }}\n </template>\n <p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>\n <template #footer>\n <button\n class=\"btn button-default\"\n @click=\"deleteUserDialog(false)\"\n >\n {{ $t('general.cancel') }}\n </button>\n <button\n class=\"btn button-default danger\"\n @click=\"deleteUser()\"\n >\n {{ $t('user_card.admin_menu.delete_user') }}\n </button>\n </template>\n </DialogModal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./moderation_tools.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.moderation-tools-popover {\n height: 100%;\n\n .trigger {\n /* stylelint-disable-next-line declaration-no-important */\n display: flex !important;\n height: 100%;\n }\n}\n\n.moderation-tools-button {\n svg,\n i {\n font-size: 0.8em;\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons'\n\nimport DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nlibrary.add(faChevronDown)\n\nconst FORCE_NSFW = 'mrf_tag:media-force-nsfw'\nconst STRIP_MEDIA = 'mrf_tag:media-strip'\nconst FORCE_UNLISTED = 'mrf_tag:force-unlisted'\nconst DISABLE_REMOTE_SUBSCRIPTION = 'mrf_tag:disable-remote-subscription'\nconst DISABLE_ANY_SUBSCRIPTION = 'mrf_tag:disable-any-subscription'\nconst SANDBOX = 'mrf_tag:sandbox'\nconst QUARANTINE = 'mrf_tag:quarantine'\n\nconst ModerationTools = {\n props: [\n 'user'\n ],\n data () {\n return {\n tags: {\n FORCE_NSFW,\n STRIP_MEDIA,\n FORCE_UNLISTED,\n DISABLE_REMOTE_SUBSCRIPTION,\n DISABLE_ANY_SUBSCRIPTION,\n SANDBOX,\n QUARANTINE\n },\n showDeleteUserDialog: false,\n toggled: false\n }\n },\n components: {\n DialogModal,\n Popover\n },\n computed: {\n tagsSet () {\n return new Set(this.user.tags)\n },\n canGrantRole () {\n return this.user.is_local && !this.user.deactivated && this.$store.state.users.currentUser.role === 'admin'\n },\n canChangeActivationState () {\n return this.privileged('users_manage_activation_state')\n },\n canDeleteAccount () {\n return this.privileged('users_delete')\n },\n canUseTagPolicy () {\n return this.$store.state.instance.tagPolicyAvailable && this.privileged('users_manage_tags')\n }\n },\n methods: {\n hasTag (tagName) {\n return this.tagsSet.has(tagName)\n },\n privileged (privilege) {\n return this.$store.state.users.currentUser.privileges.includes(privilege)\n },\n toggleTag (tag) {\n const store = this.$store\n if (this.tagsSet.has(tag)) {\n store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('untagUser', { user: this.user, tag })\n })\n } else {\n store.state.api.backendInteractor.tagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('tagUser', { user: this.user, tag })\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default ModerationTools\n","import { render } from \"./moderation_tools.vue?vue&type=template&id=352f537c\"\nimport script from \"./moderation_tools.js?vue&type=script&lang=js\"\nexport * from \"./moderation_tools.js?vue&type=script&lang=js\"\n\nimport \"./moderation_tools.vue?vue&type=style&index=0&id=352f537c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"AccountActions\">\n <Popover\n trigger=\"click\"\n placement=\"bottom\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <template v-if=\"relationship.following\">\n <button\n v-if=\"relationship.showing_reblogs\"\n class=\"btn button-default dropdown-item\"\n @click=\"hideRepeats\"\n >\n {{ $t('user_card.hide_repeats') }}\n </button>\n <button\n v-if=\"!relationship.showing_reblogs\"\n class=\"btn button-default dropdown-item\"\n @click=\"showRepeats\"\n >\n {{ $t('user_card.show_repeats') }}\n </button>\n <div\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </template>\n <UserListMenu :user=\"user\" />\n <button\n v-if=\"relationship.followed_by\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"removeUserFromFollowers\"\n >\n {{ $t('user_card.remove_follower') }}\n </button>\n <button\n v-if=\"relationship.blocking\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"unblockUser\"\n >\n {{ $t('user_card.unblock') }}\n </button>\n <button\n v-else\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"blockUser\"\n >\n {{ $t('user_card.block') }}\n </button>\n <button\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"reportUser\"\n >\n {{ $t('user_card.report') }}\n </button>\n <button\n v-if=\"pleromaChatMessagesAvailable\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"openChat\"\n >\n {{ $t('user_card.message') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"button-unstyled ellipsis-button\">\n <FAIcon\n class=\"icon\"\n icon=\"ellipsis-v\"\n />\n </button>\n </template>\n </Popover>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmBlock\"\n :title=\"$t('user_card.block_confirm_title')\"\n :confirm-text=\"$t('user_card.block_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.block_confirm_cancel_button')\"\n @accepted=\"doBlockUser\"\n @cancelled=\"hideConfirmBlock\"\n >\n <i18n-t\n keypath=\"user_card.block_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmRemoveFollower\"\n :title=\"$t('user_card.remove_follower_confirm_title')\"\n :confirm-text=\"$t('user_card.remove_follower_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.remove_follower_confirm_cancel_button')\"\n @accepted=\"doRemoveUserFromFollowers\"\n @cancelled=\"hideConfirmRemoveUserFromFollowers\"\n >\n <i18n-t\n keypath=\"user_card.remove_follower_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./account_actions.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.AccountActions {\n .ellipsis-button {\n width: 2.5em;\n margin: -0.5em 0;\n padding: 0.5em 0;\n text-align: center;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n</style>\n","<template>\n <div class=\"UserListMenu\">\n <Popover\n trigger=\"hover\"\n placement=\"left\"\n remove-padding\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n v-for=\"list in lists\"\n :key=\"list.id\"\n class=\"button-default dropdown-item\"\n @click=\"toggleList(list.id)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': list.inList }\"\n />\n {{ list.title }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"btn button-default dropdown-item -has-submenu\">\n {{ $t('lists.manage_lists') }}\n <FAIcon\n class=\"chevron-icon\"\n size=\"lg\"\n icon=\"chevron-right\"\n />\n </button>\n </template>\n </Popover>\n </div>\n</template>\n\n<script src=\"./user_list_menu.js\"></script>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport { mapState } from 'vuex'\n\nimport DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nlibrary.add(faChevronRight)\n\nconst UserListMenu = {\n props: [\n 'user'\n ],\n data () {\n return {}\n },\n components: {\n DialogModal,\n Popover\n },\n created () {\n this.$store.dispatch('fetchUserInLists', this.user.id)\n },\n computed: {\n ...mapState({\n allLists: state => state.lists.allLists\n }),\n inListsSet () {\n return new Set(this.user.inLists.map(x => x.id))\n },\n lists () {\n if (!this.user.inLists) return []\n return this.allLists.map(list => ({\n ...list,\n inList: this.inListsSet.has(list.id)\n }))\n }\n },\n methods: {\n toggleList (listId) {\n if (this.inListsSet.has(listId)) {\n this.$store.dispatch('removeListAccount', { accountId: this.user.id, listId }).then((response) => {\n if (!response.ok) { return }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n } else {\n this.$store.dispatch('addListAccount', { accountId: this.user.id, listId }).then((response) => {\n if (!response.ok) { return }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default UserListMenu\n","import { render } from \"./user_list_menu.vue?vue&type=template&id=aeea2640\"\nimport script from \"./user_list_menu.js?vue&type=script&lang=js\"\nexport * from \"./user_list_menu.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport Popover from '../popover/popover.vue'\nimport UserListMenu from 'src/components/user_list_menu/user_list_menu.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisV\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEllipsisV\n)\n\nconst AccountActions = {\n props: [\n 'user', 'relationship'\n ],\n data () {\n return {\n showingConfirmBlock: false,\n showingConfirmRemoveFollower: false\n }\n },\n components: {\n ProgressButton,\n Popover,\n UserListMenu,\n ConfirmModal\n },\n methods: {\n showConfirmBlock () {\n this.showingConfirmBlock = true\n },\n hideConfirmBlock () {\n this.showingConfirmBlock = false\n },\n showConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = true\n },\n hideConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = false\n },\n showRepeats () {\n this.$store.dispatch('showReblogs', this.user.id)\n },\n hideRepeats () {\n this.$store.dispatch('hideReblogs', this.user.id)\n },\n blockUser () {\n if (!this.shouldConfirmBlock) {\n this.doBlockUser()\n } else {\n this.showConfirmBlock()\n }\n },\n doBlockUser () {\n this.$store.dispatch('blockUser', this.user.id)\n this.hideConfirmBlock()\n },\n unblockUser () {\n this.$store.dispatch('unblockUser', this.user.id)\n },\n removeUserFromFollowers () {\n if (!this.shouldConfirmRemoveUserFromFollowers) {\n this.doRemoveUserFromFollowers()\n } else {\n this.showConfirmRemoveUserFromFollowers()\n }\n },\n doRemoveUserFromFollowers () {\n this.$store.dispatch('removeUserFromFollowers', this.user.id)\n this.hideConfirmRemoveUserFromFollowers()\n },\n reportUser () {\n this.$store.dispatch('openUserReportingModal', { userId: this.user.id })\n },\n openChat () {\n this.$router.push({\n name: 'chat',\n params: { username: this.$store.state.users.currentUser.screen_name, recipient_id: this.user.id }\n })\n }\n },\n computed: {\n shouldConfirmBlock () {\n return this.$store.getters.mergedConfig.modalOnBlock\n },\n shouldConfirmRemoveUserFromFollowers () {\n return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers\n },\n ...mapState({\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable\n })\n }\n}\n\nexport default AccountActions\n","import { render } from \"./account_actions.vue?vue&type=template&id=2d1f537d\"\nimport script from \"./account_actions.js?vue&type=script&lang=js\"\nexport * from \"./account_actions.js?vue&type=script&lang=js\"\n\nimport \"./account_actions.vue?vue&type=style&index=0&id=2d1f537d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"user-note\"\n >\n <div class=\"heading\">\n <span>{{ $t('user_card.note') }}</span>\n <div class=\"buttons\">\n <button\n v-show=\"!editing && editable\"\n class=\"button-default btn\"\n @click=\"startEditing\"\n >\n {{ $t('user_card.edit_note') }}\n </button>\n <button\n v-show=\"editing\"\n class=\"button-default btn\"\n :disabled=\"frozen\"\n @click=\"finalizeEditing\"\n >\n {{ $t('user_card.edit_note_apply') }}\n </button>\n <button\n v-show=\"editing\"\n class=\"button-default btn\"\n :disabled=\"frozen\"\n @click=\"cancelEditing\"\n >\n {{ $t('user_card.edit_note_cancel') }}\n </button>\n </div>\n </div>\n <textarea\n v-show=\"editing\"\n v-model=\"localNote\"\n class=\"note-text\"\n />\n <span\n v-show=\"!editing\"\n class=\"note-text\"\n :class=\"{ '-blank': !relationship.note }\"\n >\n {{ relationship.note || $t('user_card.note_blank') }}\n </span>\n </div>\n</template>\n\n<script src=\"./user_note.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-note {\n display: flex;\n flex-direction: column;\n\n .heading {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75em;\n\n .btn {\n min-width: 95px;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n\n .btn {\n margin-left: 0.5em;\n }\n }\n }\n\n .note-text {\n align-self: stretch;\n }\n\n .note-text.-blank {\n font-style: italic;\n color: var(--faint, $fallback--faint);\n }\n}\n</style>\n","const UserNote = {\n props: {\n user: Object,\n relationship: Object,\n editable: Boolean\n },\n data () {\n return {\n localNote: '',\n editing: false,\n frozen: false\n }\n },\n computed: {\n shouldShow () {\n return this.relationship.note || this.editing\n }\n },\n methods: {\n startEditing () {\n this.localNote = this.relationship.note\n this.editing = true\n },\n cancelEditing () {\n this.editing = false\n },\n finalizeEditing () {\n this.frozen = true\n\n this.$store.dispatch('editUserNote', {\n id: this.user.id,\n comment: this.localNote\n })\n .then(() => {\n this.frozen = false\n this.editing = false\n })\n .catch(() => {\n this.frozen = false\n })\n }\n }\n}\n\nexport default UserNote\n","import { render } from \"./user_note.vue?vue&type=template&id=3c543a1e\"\nimport script from \"./user_note.js?vue&type=script&lang=js\"\nexport * from \"./user_note.js?vue&type=script&lang=js\"\n\nimport \"./user_note.vue?vue&type=style&index=0&id=3c543a1e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { unitToSeconds } from 'src/services/date_utils/date_utils.js'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport ModerationTools from '../moderation_tools/moderation_tools.vue'\nimport AccountActions from '../account_actions/account_actions.vue'\nimport UserNote from '../user_note/user_note.vue'\nimport Select from '../select/select.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBell,\n faRss,\n faSearchPlus,\n faExternalLinkAlt,\n faEdit,\n faTimes,\n faExpandAlt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRss,\n faBell,\n faSearchPlus,\n faExternalLinkAlt,\n faEdit,\n faTimes,\n faExpandAlt\n)\n\nexport default {\n props: [\n 'userId',\n 'switcher',\n 'selected',\n 'hideBio',\n 'rounded',\n 'bordered',\n 'avatarAction', // default - open profile, 'zoom' - zoom, function - call function\n 'onClose',\n 'hasNoteEditor'\n ],\n data () {\n return {\n followRequestInProgress: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter,\n showingConfirmMute: false,\n muteExpiryAmount: 0,\n muteExpiryUnit: 'minutes'\n }\n },\n created () {\n this.$store.dispatch('fetchUserRelationship', this.user.id)\n },\n computed: {\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n relationship () {\n return this.$store.getters.relationship(this.userId)\n },\n classes () {\n return [{\n '-rounded-t': this.rounded === 'top', // set border-top-left-radius and border-top-right-radius\n '-rounded': this.rounded === true, // set border-radius for all sides\n '-bordered': this.bordered === true, // set border for all sides\n '-popover': !!this.onClose // set popover rounding\n }]\n },\n style () {\n return {\n backgroundImage: [\n 'linear-gradient(to bottom, var(--profileTint), var(--profileTint))',\n `url(${this.user.cover_photo})`\n ].join(', ')\n }\n },\n isOtherUser () {\n return this.user.id !== this.$store.state.users.currentUser.id\n },\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 loggedIn () {\n return this.$store.state.users.currentUser\n },\n dailyAvg () {\n const days = Math.ceil((new Date() - new Date(this.user.created_at)) / (60 * 60 * 24 * 1000))\n return Math.round(this.user.statuses_count / days)\n },\n userHighlightType: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return (data && data.type) || 'disabled'\n },\n set (type) {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n if (type !== 'disabled') {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: (data && data.color) || '#FFFFFF', type })\n } else {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: undefined })\n }\n },\n ...mapGetters(['mergedConfig'])\n },\n userHighlightColor: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return data && data.color\n },\n set (color) {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color })\n }\n },\n visibleRole () {\n const rights = this.user.rights\n if (!rights) { return }\n const validRole = rights.admin || rights.moderator\n const roleTitle = rights.admin ? 'admin' : 'moderator'\n return validRole && roleTitle\n },\n hideFollowsCount () {\n return this.isOtherUser && this.user.hide_follows_count\n },\n hideFollowersCount () {\n return this.isOtherUser && this.user.hide_followers_count\n },\n showModerationMenu () {\n const privileges = this.loggedIn.privileges\n return this.loggedIn.role === 'admin' || privileges.includes('users_manage_activation_state') || privileges.includes('users_delete') || privileges.includes('users_manage_tags')\n },\n hasNote () {\n return this.relationship.note\n },\n supportsNote () {\n return 'note' in this.relationship\n },\n shouldConfirmMute () {\n return this.mergedConfig.modalOnMute\n },\n muteExpiryUnits () {\n return ['minutes', 'hours', 'days']\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n UserAvatar,\n RemoteFollow,\n ModerationTools,\n AccountActions,\n ProgressButton,\n FollowButton,\n Select,\n RichContent,\n UserLink,\n UserNote,\n ConfirmModal\n },\n methods: {\n showConfirmMute () {\n this.showingConfirmMute = true\n },\n hideConfirmMute () {\n this.showingConfirmMute = false\n },\n muteUser () {\n if (!this.shouldConfirmMute) {\n this.doMuteUser()\n } else {\n this.showConfirmMute()\n }\n },\n doMuteUser () {\n this.$store.dispatch('muteUser', {\n id: this.user.id,\n expiresIn: this.shouldConfirmMute ? unitToSeconds(this.muteExpiryUnit, this.muteExpiryAmount) : 0\n })\n this.hideConfirmMute()\n },\n unmuteUser () {\n this.$store.dispatch('unmuteUser', this.user.id)\n },\n subscribeUser () {\n return this.$store.dispatch('subscribeUser', this.user.id)\n },\n unsubscribeUser () {\n return this.$store.dispatch('unsubscribeUser', this.user.id)\n },\n setProfileView (v) {\n if (this.switcher) {\n const store = this.$store\n store.commit('setProfileView', { v })\n }\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n },\n openProfileTab () {\n this.$store.dispatch('openSettingsModalTab', 'profile')\n },\n zoomAvatar () {\n const attachment = {\n url: this.user.profile_image_url_original,\n mimetype: 'image'\n }\n this.$store.dispatch('setMedia', [attachment])\n this.$store.dispatch('setCurrentMedia', attachment)\n },\n mentionUser () {\n this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user })\n },\n onAvatarClickHandler (e) {\n if (this.onAvatarClick) {\n e.preventDefault()\n this.onAvatarClick()\n }\n }\n }\n}\n","import { render } from \"./user_card.vue?vue&type=template&id=bc098958\"\nimport script from \"./user_card.js?vue&type=script&lang=js\"\nexport * from \"./user_card.js?vue&type=script&lang=js\"\n\nimport \"./user_card.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <router-link\n :title=\"user.screen_name_ui\"\n :to=\"userProfileLink(user)\"\n >\n {{ at ? '@' : '' }}{{ user.screen_name_ui }}<UnicodeDomainIndicator\n :user=\"user\"\n />\n </router-link>\n</template>\n\n<script>\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst UserLink = {\n props: {\n user: Object,\n at: {\n type: Boolean,\n default: true\n }\n },\n components: {\n UnicodeDomainIndicator\n },\n methods: {\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n }\n }\n}\n\nexport default UserLink\n</script>\n","import { render } from \"./user_link.vue?vue&type=template&id=2cae9070\"\nimport script from \"./user_link.vue?vue&type=script&lang=js\"\nexport * from \"./user_link.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import UserCard from '../user_card/user_card.vue'\nimport { defineAsyncComponent } from 'vue'\n\nconst UserPopover = {\n name: 'UserPopover',\n props: [\n 'userId', 'overlayCenters', 'disabled', 'overlayCentersSelector'\n ],\n components: {\n UserCard,\n Popover: defineAsyncComponent(() => import('../popover/popover.vue'))\n },\n computed: {\n userPopoverAvatarAction () {\n return this.$store.getters.mergedConfig.userPopoverAvatarAction\n },\n userPopoverOverlay () {\n return this.$store.getters.mergedConfig.userPopoverOverlay\n }\n }\n}\n\nexport default UserPopover\n","import { render } from \"./user_popover.vue?vue&type=template&id=6d5beeb8\"\nimport script from \"./user_popover.js?vue&type=script&lang=js\"\nexport * from \"./user_popover.js?vue&type=script&lang=js\"\n\nimport \"./user_popover.vue?vue&type=style&index=0&id=6d5beeb8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n popover-class=\"popover-default user-popover\"\n :overlay-centers-selector=\"overlayCentersSelector || '.user-info .Avatar'\"\n :overlay-centers=\"overlayCenters && userPopoverOverlay\"\n :disabled=\"disabled\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content=\"{close}\">\n <UserCard\n class=\"user-popover\"\n :user-id=\"userId\"\n :hide-bio=\"true\"\n :avatar-action=\"userPopoverAvatarAction == 'close' ? close : userPopoverAvatarAction\"\n :on-close=\"close\"\n />\n </template>\n </Popover>\n</template>\n\n<script src=\"./user_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n/* stylelint-disable block-no-empty */\n.user-popover.popover {\n}\n/* stylelint-enable block-no-empty */\n\n</style>\n","\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","import { render } from \"./video_attachment.vue?vue&type=template&id=dda2841a\"\nimport script from \"./video_attachment.js?vue&type=script&lang=js\"\nexport * from \"./video_attachment.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <video\n class=\"video\"\n preload=\"metadata\"\n :src=\"attachment.url\"\n :loop=\"loopVideo\"\n :controls=\"controls\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n playsinline\n @playing=\"onPlaying\"\n @pause=\"onPaused\"\n />\n</template>\n\n<script src=\"./video_attachment.js\"></script>\n","var map = {\n\t\"./ar.json\": [\n\t\t36224,\n\t\t7808\n\t],\n\t\"./ca.json\": [\n\t\t49394,\n\t\t6234\n\t],\n\t\"./cs.json\": [\n\t\t87436,\n\t\t7433\n\t],\n\t\"./de.json\": [\n\t\t25195,\n\t\t9459\n\t],\n\t\"./en.json\": [\n\t\t88797\n\t],\n\t\"./eo.json\": [\n\t\t97898,\n\t\t4646\n\t],\n\t\"./es.json\": [\n\t\t98559,\n\t\t3968\n\t],\n\t\"./et.json\": [\n\t\t13230,\n\t\t4451\n\t],\n\t\"./eu.json\": [\n\t\t84826,\n\t\t4542\n\t],\n\t\"./fa.json\": [\n\t\t52006,\n\t\t2953\n\t],\n\t\"./fi.json\": [\n\t\t70823,\n\t\t9738\n\t],\n\t\"./fr.json\": [\n\t\t61341,\n\t\t3746\n\t],\n\t\"./ga.json\": [\n\t\t41647,\n\t\t830\n\t],\n\t\"./he.json\": [\n\t\t92215,\n\t\t379\n\t],\n\t\"./hu.json\": [\n\t\t95028,\n\t\t5494\n\t],\n\t\"./id.json\": [\n\t\t62263,\n\t\t2513\n\t],\n\t\"./it.json\": [\n\t\t2533,\n\t\t1159\n\t],\n\t\"./ja_easy.json\": [\n\t\t8439,\n\t\t8714\n\t],\n\t\"./ja_pedantic.json\": [\n\t\t22838,\n\t\t325\n\t],\n\t\"./ko.json\": [\n\t\t10707,\n\t\t9670\n\t],\n\t\"./nan-TW.json\": [\n\t\t42101,\n\t\t9862\n\t],\n\t\"./nb.json\": [\n\t\t72358,\n\t\t7845\n\t],\n\t\"./nl.json\": [\n\t\t49922,\n\t\t6256\n\t],\n\t\"./oc.json\": [\n\t\t47297,\n\t\t617\n\t],\n\t\"./pl.json\": [\n\t\t82098,\n\t\t5571\n\t],\n\t\"./pt.json\": [\n\t\t94465,\n\t\t4047\n\t],\n\t\"./ro.json\": [\n\t\t64367,\n\t\t6342\n\t],\n\t\"./ru.json\": [\n\t\t73289,\n\t\t5964\n\t],\n\t\"./sk.json\": [\n\t\t31478,\n\t\t1547\n\t],\n\t\"./te.json\": [\n\t\t32781,\n\t\t2044\n\t],\n\t\"./uk.json\": [\n\t\t8411,\n\t\t5253\n\t],\n\t\"./vi.json\": [\n\t\t6294,\n\t\t4975\n\t],\n\t\"./zh.json\": [\n\t\t4425,\n\t\t5929\n\t],\n\t\"./zh_Hant.json\": [\n\t\t37644,\n\t\t6544\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 27650;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"50\":\"emoji-annotations/en_GB-json\",\"227\":\"emoji-annotations/ha-json\",\"278\":\"emoji-annotations/kn-json\",\"313\":\"emoji-annotations/tg-json\",\"325\":\"i18n/ja_pedantic-json\",\"346\":\"emoji-annotations/rw-json\",\"379\":\"i18n/he-json\",\"420\":\"emoji-annotations/fi-json\",\"457\":\"emoji-annotations/zh-json\",\"577\":\"emoji-annotations/en_001-json\",\"617\":\"i18n/oc-json\",\"625\":\"emoji-annotations/so-json\",\"678\":\"emoji-annotations/ps-json\",\"786\":\"emoji-annotations/xh-json\",\"830\":\"i18n/ga-json\",\"1012\":\"emoji-annotations/or-json\",\"1044\":\"emoji-annotations/zh_Hant_HK-json\",\"1056\":\"emoji-annotations/uz-json\",\"1095\":\"emoji-annotations/pl-json\",\"1159\":\"i18n/it-json\",\"1162\":\"emoji-annotations/ccp-json\",\"1236\":\"emoji-annotations/fil-json\",\"1290\":\"emoji-annotations/ja-json\",\"1404\":\"emoji-annotations/km-json\",\"1452\":\"emoji-annotations/yue-json\",\"1546\":\"emoji-annotations/pt_PT-json\",\"1547\":\"i18n/sk-json\",\"1553\":\"emoji-annotations/sl-json\",\"1584\":\"emoji-annotations/to-json\",\"1596\":\"emoji-annotations/da-json\",\"1613\":\"emoji-annotations/mai-json\",\"1780\":\"emoji-annotations/tk-json\",\"1790\":\"emoji-annotations/dsb-json\",\"1821\":\"emoji-annotations/fr_CA-json\",\"1911\":\"emoji-annotations/mr-json\",\"1959\":\"emoji-annotations/su-json\",\"2044\":\"i18n/te-json\",\"2223\":\"emoji-annotations/fr-json\",\"2243\":\"emoji-annotations/sa-json\",\"2342\":\"emoji-annotations/az-json\",\"2350\":\"emoji-annotations/sk-json\",\"2397\":\"emoji-annotations/kl-json\",\"2479\":\"emoji-annotations/jv-json\",\"2513\":\"i18n/id-json\",\"2569\":\"emoji-annotations/tt-json\",\"2599\":\"emoji-annotations/kok-json\",\"2656\":\"emoji-annotations/ckb-json\",\"2685\":\"emoji-annotations/ml-json\",\"2699\":\"emoji-annotations/es_MX-json\",\"2767\":\"emoji-annotations/zh_Hant-json\",\"2861\":\"emoji-annotations/hr-json\",\"2873\":\"emoji-annotations/kk-json\",\"2874\":\"emoji-annotations/sc-json\",\"2883\":\"emoji-annotations/ku-json\",\"2953\":\"i18n/fa-json\",\"2966\":\"emoji-annotations/ko-json\",\"2992\":\"emoji-annotations/eu-json\",\"3056\":\"emoji-annotations/hi_Latn-json\",\"3241\":\"emoji-annotations/sv-json\",\"3276\":\"emoji-annotations/et-json\",\"3313\":\"emoji-annotations/es_US-json\",\"3377\":\"emoji-annotations/as-json\",\"3568\":\"emoji-annotations/ti-json\",\"3687\":\"emoji\",\"3746\":\"i18n/fr-json\",\"3887\":\"emoji-annotations/sr-json\",\"3951\":\"emoji-annotations/th-json\",\"3968\":\"i18n/es-json\",\"3974\":\"emoji-annotations/bg-json\",\"3994\":\"emoji-annotations/sw_KE-json\",\"4047\":\"i18n/pt-json\",\"4209\":\"emoji-annotations/doi-json\",\"4354\":\"emoji-annotations/si-json\",\"4368\":\"emoji-annotations/sq-json\",\"4424\":\"emoji-annotations/yue_Hans-json\",\"4451\":\"i18n/et-json\",\"4542\":\"i18n/eu-json\",\"4571\":\"emoji-annotations/ga-json\",\"4646\":\"i18n/eo-json\",\"4691\":\"emoji-annotations/ca-json\",\"4710\":\"emoji-annotations/cs-json\",\"4718\":\"emoji-annotations/mn-json\",\"4770\":\"emoji-annotations/lb-json\",\"4785\":\"emoji-annotations/ky-json\",\"4786\":\"emoji-annotations/te-json\",\"4879\":\"emoji-annotations/en_CA-json\",\"4902\":\"emoji-annotations/hu-json\",\"4975\":\"i18n/vi-json\",\"5041\":\"emoji-annotations/pt-json\",\"5104\":\"emoji-annotations/pcm-json\",\"5115\":\"emoji-annotations/sr_Latn_BA-json\",\"5119\":\"emoji-annotations/am-json\",\"5224\":\"emoji-annotations/vi-json\",\"5253\":\"i18n/uk-json\",\"5304\":\"emoji-annotations/ha_NE-json\",\"5401\":\"emoji-annotations/mni-json\",\"5494\":\"i18n/hu-json\",\"5521\":\"emoji-annotations/fa-json\",\"5548\":\"emoji-annotations/he-json\",\"5571\":\"i18n/pl-json\",\"5728\":\"emoji-annotations/en-json\",\"5887\":\"emoji-annotations/rm-json\",\"5929\":\"i18n/zh-json\",\"5964\":\"i18n/ru-json\",\"5968\":\"emoji-annotations/hi-json\",\"6060\":\"emoji-annotations/sr_Cyrl_BA-json\",\"6068\":\"emoji-annotations/ka-json\",\"6116\":\"emoji-annotations/gd-json\",\"6126\":\"emoji-annotations/gl-json\",\"6148\":\"emoji-annotations/br-json\",\"6226\":\"emoji-annotations/de-json\",\"6234\":\"i18n/ca-json\",\"6256\":\"i18n/nl-json\",\"6272\":\"emoji-annotations/cy-json\",\"6342\":\"i18n/ro-json\",\"6344\":\"emoji-annotations/hy-json\",\"6355\":\"emoji-annotations/af-json\",\"6544\":\"i18n/zh_Hant-json\",\"6701\":\"emoji-annotations/mi-json\",\"6773\":\"emoji-annotations/nl-json\",\"6790\":\"emoji-annotations/my-json\",\"6797\":\"emoji-annotations/ur-json\",\"6826\":\"emoji-annotations/sd-json\",\"6831\":\"emoji-annotations/es-json\",\"6869\":\"emoji-annotations/chr-json\",\"6936\":\"emoji-annotations/ia-json\",\"6946\":\"emoji-annotations/pa-json\",\"7164\":\"emoji-annotations/de_CH-json\",\"7169\":\"emoji-annotations/lt-json\",\"7261\":\"emoji-annotations/gu-json\",\"7300\":\"emoji-annotations/is-json\",\"7303\":\"emoji-annotations/wo-json\",\"7304\":\"emoji-annotations/be-json\",\"7360\":\"emoji-annotations/ar_SA-json\",\"7433\":\"i18n/cs-json\",\"7464\":\"emoji-annotations/lo-json\",\"7569\":\"emoji-annotations/ast-json\",\"7585\":\"emoji-annotations/sw-json\",\"7808\":\"i18n/ar-json\",\"7845\":\"i18n/nb-json\",\"7855\":\"emoji-annotations/sat-json\",\"7879\":\"emoji-annotations/el-json\",\"7897\":\"emoji-annotations/ta-json\",\"8015\":\"emoji-annotations/hsb-json\",\"8031\":\"emoji-annotations/qu-json\",\"8134\":\"emoji-annotations/bs-json\",\"8395\":\"emoji-annotations/ru-json\",\"8681\":\"emoji-annotations/sr_Latn-json\",\"8714\":\"i18n/ja_easy-json\",\"8732\":\"emoji-annotations/yo-json\",\"8873\":\"emoji-annotations/es_419-json\",\"8898\":\"emoji-annotations/lv-json\",\"8970\":\"emoji-annotations/it-json\",\"8988\":\"emoji-annotations/en_IN-json\",\"8995\":\"emoji-annotations/fo-json\",\"9064\":\"emoji-annotations/bn-json\",\"9319\":\"emoji-annotations/zu-json\",\"9360\":\"emoji-annotations/en_AU-json\",\"9377\":\"emoji-annotations/ne-json\",\"9399\":\"emoji-annotations/mt-json\",\"9414\":\"emoji-annotations/nn-json\",\"9459\":\"i18n/de-json\",\"9465\":\"emoji-annotations/id-json\",\"9670\":\"i18n/ko-json\",\"9738\":\"i18n/fi-json\",\"9757\":\"emoji-annotations/ug-json\",\"9780\":\"emoji-annotations/kab-json\",\"9790\":\"emoji-annotations/ceb-json\",\"9862\":\"i18n/nan-TW-json\",\"9864\":\"emoji-annotations/ro-json\",\"9871\":\"emoji-annotations/uk-json\",\"9873\":\"emoji-annotations/ar-json\",\"9895\":\"emoji-annotations/ig-json\",\"9921\":\"emoji-annotations/mk-json\",\"9924\":\"emoji-annotations/ms-json\",\"9926\":\"emoji-annotations/yo_BJ-json\",\"9978\":\"emoji-annotations/tr-json\",\"9979\":\"emoji-annotations/no-json\",\"9994\":\"emoji-annotations/pa_Arab-json\"}[chunkId] || chunkId) + \".\" + {\"48\":\"b5ecdbc517423af07ca4\",\"50\":\"bd687f904492facc81d1\",\"159\":\"903e90c9de8ef6c67077\",\"227\":\"2a08912b38925c10f970\",\"278\":\"efdac8ac0cb00991ba1e\",\"313\":\"9647f559a4477d7d8e96\",\"325\":\"b52fa70f0bf89ae01cfb\",\"346\":\"031838c5374676191131\",\"379\":\"03c5d271a4034de06e6f\",\"420\":\"0f254bb4b0faaba4abcc\",\"457\":\"e42a28127d5c1aff6c85\",\"577\":\"72d8c47269350f59aa9f\",\"617\":\"4f52bf1b6e3213acc33c\",\"625\":\"f75abd16637c8924c075\",\"678\":\"a0d9eea5b81bcad11e64\",\"786\":\"21e88c05ad3113dfc7f2\",\"830\":\"3f1981817977a16f1d7e\",\"1012\":\"b007c2f6f92dcc95efac\",\"1044\":\"7eee03c705347a21c612\",\"1056\":\"ac43f4c54d4587324a20\",\"1095\":\"e9e8f1ed84dc6c169516\",\"1159\":\"99a21d5c98376af17141\",\"1162\":\"02836537ffe2b02291cb\",\"1236\":\"4fca833f178d1b889b69\",\"1290\":\"0bd51f8c40c106355b0e\",\"1404\":\"9bc922b2e0faa64b4c53\",\"1452\":\"15102c0ddfdf19bdfb4c\",\"1546\":\"c381b13e323f91b0e6b3\",\"1547\":\"d8d0eba80f94e6f55145\",\"1553\":\"a40c5548da34fce6f1d0\",\"1584\":\"50ac37d101caaf592c94\",\"1596\":\"8d074e27df71edafc543\",\"1613\":\"302386b3358f4d34f9c8\",\"1780\":\"23a9a6229829921704ad\",\"1790\":\"7635686ffd8d62264466\",\"1821\":\"59ed6b59e2ca68707292\",\"1911\":\"cb0a87d9aabf8a52161d\",\"1959\":\"daff15251020cbecea7d\",\"2044\":\"ce6db28261b2f824064f\",\"2223\":\"da49ed0d1a6622fe1c67\",\"2243\":\"21b06234a08c7469ccb4\",\"2342\":\"9a32f2941d9c4d1f834c\",\"2350\":\"5d96bdb4da82655d0314\",\"2397\":\"87ab8661b4bdecd09faf\",\"2479\":\"1c8d5ffcff22b46b6214\",\"2513\":\"e5c9ee768155f88128b9\",\"2569\":\"4c089389ba9983ec8ef7\",\"2599\":\"116e4f72db3bfb846233\",\"2656\":\"13dc83db1e15aa76051a\",\"2685\":\"3f2902a84240faff1b48\",\"2699\":\"ee359d4b611fdb1aeb33\",\"2767\":\"9cbb765c181d443828a9\",\"2861\":\"fe847ade1f18a60e513c\",\"2873\":\"a20b59d47bdfe99786ad\",\"2874\":\"c84c9c47d2e104c43e4c\",\"2883\":\"2173ed87f8d7372ee209\",\"2953\":\"a19100f6a5a9431e2adb\",\"2966\":\"d175900fe48f48ce87c8\",\"2992\":\"931b429f5fcc141549a5\",\"3056\":\"3cb73c456f31261f1908\",\"3241\":\"8b0374cbca3a77519876\",\"3276\":\"c42e3f186a55ecb061cd\",\"3313\":\"280bdb036dfd651d079a\",\"3377\":\"34cf67edc1cecd195738\",\"3568\":\"5b173bd33bb960be805b\",\"3687\":\"33eab91b64f59431137d\",\"3746\":\"36ef21ccb1203d3e65ae\",\"3887\":\"e29a20e59a708df0c6a8\",\"3951\":\"34709bae223bb9d2587c\",\"3968\":\"4a302899a65e1f67d8a2\",\"3974\":\"7c69c52572a7bf87e1db\",\"3994\":\"f3563cbeac1c158563d5\",\"4047\":\"3fc5593e030268bcd291\",\"4209\":\"7841c3f3ceb4e3da0bd1\",\"4354\":\"841b356da03623c10dbf\",\"4368\":\"bcf154ed8a6138aa089c\",\"4424\":\"cc60bb10d32fab3d8207\",\"4451\":\"580b101d6bb83a8aee75\",\"4542\":\"d2eab39b0427995fc314\",\"4571\":\"cb3f9e613a8c445aea23\",\"4646\":\"6c62eef99e850912498b\",\"4691\":\"ce029e860b10b242c6a5\",\"4710\":\"48d8bba230dc9fe6b3dc\",\"4718\":\"764169f1168d0432640f\",\"4770\":\"499c526f3a653618ea9b\",\"4785\":\"310bda579c819eda9472\",\"4786\":\"8a69a10f62cdf626244e\",\"4879\":\"5de965778a6b8a5a4bb4\",\"4902\":\"1faf52040deda872b416\",\"4975\":\"703c1e731be6e857bbf3\",\"5041\":\"2b2512ee44291bdb2ae7\",\"5104\":\"eac3a5ad0b4b5b33289d\",\"5115\":\"72933405032b81344754\",\"5119\":\"94388548f7c18233fec3\",\"5224\":\"f6a364b2add7f8c8bc67\",\"5253\":\"003908af9b15becdd382\",\"5304\":\"e4855d92aaccfdd6ba57\",\"5401\":\"7db7f76ab1ce34e3683d\",\"5494\":\"0487899ca7a7a8505ed8\",\"5521\":\"819c7f263c8594ccf4fa\",\"5548\":\"a3d7631f32182b0955a2\",\"5571\":\"c963247822381b05579b\",\"5728\":\"6c3947f7c49c3952084d\",\"5887\":\"985d4934f386fd05a75c\",\"5929\":\"5831b903c3e6d281f122\",\"5964\":\"b913eb7f7e9f0c642438\",\"5968\":\"04bc5f73dc2169def97e\",\"6060\":\"83c7c64b9696ae2339f2\",\"6068\":\"567e7b051d90a37003f3\",\"6116\":\"e3d0aea3725be774ad81\",\"6126\":\"ce89036f0ae72224c994\",\"6148\":\"c7175423d8965ed10bae\",\"6226\":\"e1443c01a191af1665e1\",\"6234\":\"1eb24bc001efa3c0627f\",\"6256\":\"3fb9758b10c29434b613\",\"6272\":\"e09dd13da5ad56530ead\",\"6342\":\"3fd9977ed1c1413059ae\",\"6344\":\"2d819f7faabfeba8457f\",\"6355\":\"96c988285a6a2cce6246\",\"6464\":\"eb9c90a1c948cde554e9\",\"6544\":\"f7e1d0f4b873c60d6396\",\"6701\":\"9efe6f146ecd8987f80a\",\"6773\":\"52f4b93b8fa5e22cb585\",\"6790\":\"8e7dd1485813d15bba7e\",\"6797\":\"983c02109444c883a18f\",\"6826\":\"8f2a6a06dc3cf185f79d\",\"6831\":\"f593b0dc2367a9d7fb30\",\"6869\":\"e7e542ab5a74167dec10\",\"6936\":\"8e8365e2bf41779e2beb\",\"6946\":\"7d60d69762a108270669\",\"7164\":\"b4a5891ea2f38d616ec0\",\"7169\":\"ced4d5e70edc60127df6\",\"7261\":\"8a899f364cf260376905\",\"7300\":\"62e220c65215b034533d\",\"7303\":\"e0d689e22cda0dd77e9a\",\"7304\":\"f92f80669873a4100c69\",\"7360\":\"4a6f4402931a867070f0\",\"7433\":\"5eedbe9f7084c349fbe8\",\"7464\":\"ecb06d61465a355b8157\",\"7569\":\"7e4da8cb7e539c19a9b9\",\"7585\":\"d5f350641b9cbcc0e126\",\"7586\":\"981b2305a0019f6042a5\",\"7808\":\"4916f840147303aa65fe\",\"7845\":\"a54af3b1f47d576ad4aa\",\"7855\":\"71e92700b2aaca8e021c\",\"7879\":\"b36610f2ea16d56c2314\",\"7897\":\"675cc6c7607449d4a91b\",\"7962\":\"e25d40b042f8ee7389c3\",\"8015\":\"438721731b4171bc6fc3\",\"8031\":\"55f4df57e71076dbad9f\",\"8134\":\"48ef42da1c7976cf083c\",\"8395\":\"a81d0df34460837ccacc\",\"8681\":\"ff27d1f455bf2afb8d70\",\"8714\":\"1d5ea7e755b066ac2cdd\",\"8732\":\"ea1150d6bc360dd86f2e\",\"8873\":\"d81991295392b6ed83bb\",\"8898\":\"5600c2eb6d59fa0aa2e2\",\"8970\":\"9c1758f4fd3391f7f61a\",\"8988\":\"002faa48c09121928fca\",\"8995\":\"9b060e8009b3a8be4597\",\"9060\":\"24271e167e0471a1a732\",\"9064\":\"657aac057f36ad06c58d\",\"9319\":\"e0cb7cd3890583fd0f6d\",\"9360\":\"33aac9bbd887273a34b1\",\"9377\":\"a0118dca2096a101b8e8\",\"9399\":\"3ddf7dbc114adf90c500\",\"9414\":\"7293cd5d7205681cf48c\",\"9459\":\"bfa48615ac92f87ff37a\",\"9465\":\"55f83c46d753b0b69330\",\"9670\":\"9029d09084bb22d8b705\",\"9738\":\"d1934c18f12d80493ab1\",\"9757\":\"bf768bd32e9ff02b0a8a\",\"9780\":\"1a2de4774f4ddc2b51dd\",\"9790\":\"9db0336f168aa77ee395\",\"9801\":\"99ace6b5dc657bf1a65b\",\"9862\":\"7f2789d8a461e86d1734\",\"9864\":\"cb62f86ce78c94d1e813\",\"9871\":\"af110c8eef232638fc4d\",\"9873\":\"5527466d349f2954d49b\",\"9895\":\"f19fa5fe3582463ba73c\",\"9921\":\"a254cabb8570419cc426\",\"9924\":\"272ee4735aabc37015dd\",\"9926\":\"650318c25fe4da92bad8\",\"9978\":\"6462e8cfd5006cf5b6cf\",\"9979\":\"22bdbbc77cc3c14ada58\",\"9994\":\"5ae021308b1c5f6dd8a7\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"159\":\"1d523a00378ebd68c5b3\",\"6464\":\"169260b661120cc50815\",\"7586\":\"0d43f70bc6240422f179\",\"7962\":\"76663e78ad5ea0bb0b90\",\"9801\":\"cfe503d4c949ae0c3813\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"159\":1,\"6464\":1,\"7586\":1,\"7962\":1,\"9801\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpleroma_fe\"] = self[\"webpackChunkpleroma_fe\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [3733], () => (__webpack_require__(2514)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","ctx","normalize","_normalize","interpolate","_interpolate","named","_named","list","_list","plural","_plural","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","t","keys","Object","module","exports","data","emojiCurry","suggestEmoji","emoji","usersCurry","store","suggestUsers","input","nameKeywordLocalizer","firstChar","emojis","noPrefix","toLowerCase","substr","_objectSpread","filter","names","concat","keywords","kw","match","length","k","score","Math","max","apply","_toConsumableArray","name","imageUrl","startsWith","displayText","sort","a","b","alphabetically","_ref","dispatch","state","suggestions","previousQuery","timeout","cancelUserSearch","debounceUserSearch","query","reject","setTimeout","userSearch","clearTimeout","_ref2","_asyncToGenerator","_regeneratorRuntime","_callee","newSuggestions","_context","prev","next","abrupt","includes","users","user","screen_name","slice","aScore","bScore","screen_name_ui","detailText","profile_image_url_original","replacement","stop","_x","arguments","getTagName","tag","result","exec","getAttrs","innertag","substring","replace","RegExp","trim","attrs","Array","from","matchAll","_slicedToArray","_ref3","_ref4","v","fromEntries","_ref5","_ref6","attrKey","processTextForEmoji","text","processor","buffer","textBuffer","i","char","_step","found","_iterator","_createForOfIteratorHelper","s","n","done","value","shortcode","err","f","push","class","props","url","required","type","String","content","default","methods","onClick","decoded","this","decodeURI","link","generateTagLink","$router","window","open","_createElementBlock","_hoisted_1","_createElementVNode","href","_ctx","target","_cache","_withModifiers","innerHTML","MAYBE_LINE_BREAKING_ELEMENTS","components","MentionsLine","HashtagLink","html","attentions","handleLinks","Boolean","greentext","render","_this","preProcessPerLine","newHtml","currentMentions","lastSpacing","lastTags","writtenMentions","invisibleMentions","writtenTags","mentionIndex","tagsIndex","encounteredTextReverse","pass1","undefined","emptyElements","Set","levels","tagBuffer","getCurrentBuffer","flushText","handleSelfClosing","handleOpen","curBuf","newLevel","_unescape","handleClose","currentTag","pop","tagFull","tagName","has","convertHtmlToTree","processItem","item","index","array","what","emptyText","_createVNode","StillImage","isArray","_item","_item2","opener","children","closer","Tag","fullAttrs","mentionsLinePadding","_mergeProps","linkData","getLinkData","notifying","some","statusnet_profile_url","MENTIONS_LIMIT","renderMention","pass2","reverse","processItemReverse","_item3","rel","_getLinkData","_objectWithoutProperties","_excluded","renderHashtag","newChildren","prototype","toString","call","_isVNode","event","$emit","textContent","stripTags","join","_flattenDeep","greentextHandle","lines","blockElements","linebreakElements","visualLineElements","values","nonEmptyElements","elem","allElements","level","flush","handleBr","unshift","shift","convertHtmlToLines","string","every","l","cleanedString","findFirstUsable","slots","findIndex","_","renderOnlyFocused","onSwitch","Function","activeTab","scrollableTabs","sideTabBar","bodyScrollLock","active","computed","activeIndex","slot","key","isActive","_this2","tabName","$slots","beforeUpdate","clickTab","_this3","preventDefault","setTab","Fragment","$refs","contents","scrollTop","_this4","tabs","classesTab","classesWrapper","image","disabled","label","icon","FAIcon","classes","fullHeight","renderSlot","_withDirectives","_resolveDirective","library","faCircleNotch","fetch","select","unmounted","_ref$childPropName","childPropName","_ref$additionalPropNa","additionalPropNames","WrappedComponent","getComponentProps","loading","bottomedOut","error","entries","created","addEventListener","scrollLoad","fetchEntries","removeEventListener","$props","$store","updateEntries","newEntries","isEmpty","bodyBRect","document","body","getBoundingClientRect","height","y","$el","offsetHeight","innerHeight","pageYOffset","_defineProperty","$t","specialJsonName","ja","languages","langCodeToJsonName","langCodeToCldrName","ensureFinalFallback","codes","codeList","allowArrayLike","it","Symbol","iterator","minLen","_arrayLikeToArray","constructor","test","_unsupportedIterableToArray","F","_e","TypeError","normalCompletion","didErr","step","_e2","arr","len","arr2","_setLanguage","loadLanguageFile","en","require","setLanguage","i18n","language","_languages","first","rest","lang","_messages","_toArray","locale","_isEqual","fallbackLocale","messages","sent","setLocaleMessage","t0","finish","_x2","EventTarget","EventTargetPolyfill","settingsModalState","settingsModalLoadedUser","settingsModalLoadedAdmin","settingsModalTargetTab","settingsModalMode","settings","currentSaveStateNotice","noticeClearTimeout","notificationPermission","browserSupport","cssFilter","CSS","supports","layoutType","globalNotices","layoutHeight","lastTimeline","mutations","settingsSaved","success","errorData","setNotificationPermission","permission","setLayoutType","closeSettingsModal","togglePeekSettingsModal","openSettingsModal","setSettingsModalTargetTab","pushGlobalNotice","notice","removeGlobalNotice","setLayoutHeight","setLayoutWidth","layoutWidth","setLastTimeline","actions","setPageTitle","rootState","option","title","instance","commit","_ref7","_ref8","clearSettingsModalTargetTab","_ref9","openSettingsModalTab","_ref10","_ref11","_ref12","messageKey","_ref12$messageArgs","messageArgs","_ref12$level","_ref12$timeout","newNotice","_ref13","_ref14","_ref15","rootGetters","width","normalOrMobile","mergedConfig","thirdColumnMode","currentUser","_ref16","SORTED_EMOJI_GROUP_IDS","REGIONAL_INDICATORS","start","A","codePointAt","res","end","letter","fromCodePoint","displayTextI18n","args","loadAnnotations","injectAnnotations","annotations","availableLangs","reduce","acc","cur","registrationOpen","server","textlimit","themeData","vapidPublicKey","alwaysShowSubjectInput","defaultAvatar","defaultBanner","background","collapseMessageWithSubject","useAtIcon","mentionLinkDisplay","mentionLinkShowTooltip","mentionLinkShowAvatar","mentionLinkFadeDomain","mentionLinkShowYous","mentionLinkBoldenYou","hideFilteredStatuses","hideMutedPosts","hideMutedThreads","hideWordFilteredPosts","hidePostStats","hideBotIndication","hideSitename","hideUserStats","muteBotStatuses","modalOnRepeat","modalOnUnfollow","modalOnBlock","modalOnMute","modalOnDelete","modalOnLogout","modalOnApproveFollow","modalOnDenyFollow","modalOnRemoveUserFromFollowers","loginMethod","logo","logoMargin","logoMask","logoLeft","disableUpdateNotification","minimalScopesMode","nsfwCensorImage","postContentType","redirectRootLogin","redirectRootNoLogin","scopeCopy","showFeaturesPanel","showInstanceSpecificPanel","sidebarRight","subjectLineBehavior","theme","virtualScrolling","sensitiveByDefault","conversationDisplay","conversationTreeAdvanced","conversationOtherRepliesButton","conversationTreeFadeAncestors","maxDepthInThread","autocompleteSelect","customEmoji","customEmojiFetched","emojiFetched","unicodeEmojiAnnotations","pleromaBackend","postFormats","restrictedNicknames","safeDM","knownDomains","birthdayRequired","birthdayMinAge","shoutAvailable","pleromaChatMessagesAvailable","pleromaCustomEmojiReactionsAvailable","gopherAvailable","mediaProxyAvailable","suggestionsEnabled","suggestionsWeb","quotingAvailable","instanceSpecificPanelContent","tos","backendVersion","frontendVersion","pollsAvailable","pollLimits","max_options","max_option_chars","min_expiration","max_expiration","setInstanceOption","setKnownDomains","domains","setUnicodeEmojiAnnotations","getters","instanceDefaultConfig","instanceDefaultProperties","groupedCustomEmojis","packs","tags","packName","packsOf","forEach","packId","standardEmojiList","groupId","standardEmojiGroupList","instanceDomain","URL","hostname","remoteInteractionLink","endsWith","statusId","nickname","getStaticEmoji","slug","groups","_groups$symbols","symbols","console","warn","loadUnicodeEmojiData","langList","all","_callee2","_context2","getCustomEmoji","_callee3","caseInsensitiveStrCmp","noPackLast","byPackThenByName","_context3","ok","json","assign","la","lb","aNull","bNull","packOf","packOfA","packOfB","image_url","setTheme","themeName","getPreset","config","customTheme","themeSource","source","themeEngineVersion","CURRENT_VERSION","applyTheme","fetchEmoji","getKnownDomains","_ref17","_callee4","_context4","apiService","credentials","emptyTl","userId","statuses","statusesObject","faves","visibleStatuses","visibleStatusesObject","newStatusCount","maxId","minId","minVisibleId","followers","friends","flushMarker","emptyNotifications","desktopNotificationSilence","Number","POSITIVE_INFINITY","idStore","defaultState","allStatuses","allStatusesObject","conversationsObject","notifications","favorites","timelines","mentions","public","media","publicAndExternal","dms","bookmarks","mergeOrAdd","obj","oldItem","_merge","_omitBy","attachments","splice","new","status","deleted","prepareStatus","sortById","seqA","seqB","isSeqA","isNaN","isSeqB","sortTimeline","timeline","_last","addStatusToGlobalStorage","conversationId","statusnet_conversation_id","updateNotificationsMinMaxId","notification","addNewStatuses","_ref2$showImmediately","showImmediately","_ref2$user","_ref2$noIdUpdate","noIdUpdate","_ref2$pagination","pagination","_isArray","timelineObject","minNew","_minBy","maxNew","_maxBy","newer","older","addStatus","resultForCurrentTimeline","addToTimeline","_find","visibility","quote","processors","edit","retweet","retweetedStatus","retweeted_status","favorite","add","counter","in_reply_to_status_id","favorited","fave_num","favoriteStatus","deletion","uri","_remove","action","removeStatusFromGlobalStorage","follow","unknown","log","_each","addNewNotifications","newNotificationSideEffects","visibleNotificationTypes","isValidNotification","isStatusNotification","report","hasOwnProperty","seen","removeStatus","_first","showNewStatuses","oldTimeline","_slice","resetStatuses","emptyState","clearTimeline","_ref8$excludeUserId","excludeUserId","clearNotifications","setFavorited","newStatus","setFavoritedConfirm","_findIndex","favoritedBy","setMutedStatus","thread_muted","setRetweeted","repeated","repeat_num","setRetweetedConfirm","rebloggedBy","setBookmarked","bookmarked","setBookmarkedConfirm","setDeleted","setManyDeleted","condition","setLoading","setNsfw","nsfw","setNotificationsLoading","_ref18","setNotificationsSilence","_ref19","markNotificationsAsSeen","markSingleNotificationAsSeen","_ref20","dismissNotification","_ref21","dismissNotifications","_ref22","finder","updateNotification","_ref23","updater","queueFlush","_ref24","queueFlushAll","addRepeats","_ref25","rebloggedByUsers","find","_ref26","addFavs","_ref27","favoritedByUsers","_ref28","addEmojiReactionsBy","_ref29","emojiReactions","emoji_reactions","addOwnReaction","_ref30","reactionIndex","reaction","count","accounts","newReaction","me","removeOwnReaction","_ref31","r","updateStatusWithPoll","_ref32","poll","setVirtualHeight","_ref33","virtualHeight","_ref34","_ref35","_ref35$showImmediatel","_ref35$timeline","_ref35$noIdUpdate","_ref36","maybeShowNotification","_ref37","_ref38","_ref39","_ref40","fetchStatus","_ref41","api","backendInteractor","fetchStatusSource","_ref42","fetchStatusHistory","_ref43","deleteStatus","_ref44","message","deleteStatusById","_ref45","markStatusesAsDeleted","_ref46","_ref47","unfavorite","_ref48","fetchPinnedStatuses","_ref49","pinStatus","_ref50","pinOwnStatus","unpinStatus","_ref51","unpinOwnStatus","muteConversation","_ref52","unmuteConversation","_ref53","_ref54","unretweet","_ref55","bookmark","_ref56","bookmarkStatus","unbookmark","_ref57","unbookmarkStatus","_ref58","_ref59","_ref60","_ref61","_ref62","_ref63","single","dismissNotificationLocal","_ref64","_ref65","_ref66","_ref67","_ref68","_ref69","fetchFavsAndRepeats","_ref70","fetchFavoritedByUsers","fetchRebloggedByUsers","_ref71","_ref72","reactWithEmoji","_ref73","_ref74","unreactWithEmoji","_ref75","_ref76","fetchEmojiReactionsBy","_ref77","fetchEmojiReactions","fetchFavs","_ref78","fetchRepeats","_ref79","search","_ref80","q","limit","offset","following","search2","u","_ref81","_ref82","setLists","allLists","setList","listId","allListsObject","accountIds","entry","setListAccounts","addListAccount","accountId","removeListAccount","set","deleteList","lists","createList","fetchList","getList","fetchListAccounts","getListAccounts","updateList","saved","added","removed","addAccountsToList","removeAccountsFromList","findListTitle","findListAccounts","fetchAndUpdate","_ref2$timeline","_ref2$older","_ref2$userId","_ref2$listId","_ref2$tag","until","since","timelineData","_camelCase","_getters$mergedConfig","replyVisibility","loggedIn","withMuted","numStatusesBeforeFetch","response","errors","statusText","ccTimeline","update","timelineFetcher","startFetching","_ref3$timeline","_ref3$userId","_ref3$listId","_ref3$tag","promiseInterval","boundFetchAndUpdate","requests","listsFetcher","startFetchingTimeline","_ref$userId","_ref$listId","fetchTimeline","startFetchingNotifications","notificationsFetcher","fetchNotifications","startFetchingFollowRequests","followRequestFetcher","startFetchingLists","startUserSocket","getMastodonSocketURI","stream","ProcessedWS","func","verifyCredentials","windowWidth","innerWidth","documentElement","clientWidth","windowHeight","clientHeight","REDIRECT_URI","location","origin","getOrCreateApp","clientId","clientSecret","form","FormData","append","___pleromafe_commit_hash","Date","toISOString","method","app","client_id","client_secret","getClientToken","oauth","login","response_type","redirect_uri","scope","dataString","_reduce","encoded","encodeURIComponent","getToken","getTokenWithCredentials","username","password","verifyOTPCode","mfaToken","verifyRecoveryCode","revokeToken","token","isPushSupported","navigator","getOrCreateServiceWorker","runtime","deleteSubscriptionFromBackEnd","headers","Authorization","mergeArrayLength","oldValue","newValue","_mergeWith","blockUser","relationship","unblockUser","muteUser","_typeof","expiresIn","predictedRelationship","relationships","muting","unmuteUser","muteDomain","domain","unmuteDomain","tagUser","usersObject","newTags","untagUser","updateRight","right","newRights","rights","updateActivationStatus","deactivated","setCurrentUser","lastLoginName","clearCurrentUser","beginLogin","loggingIn","endLogin","saveFriendIds","friendIds","_uniq","_concat","saveFollowerIds","followerIds","clearFriends","clearFollowers","addNewUsers","usersByNameObject","updateUserRelationship","updateUserInLists","inLists","saveBlockIds","blockIds","addBlockId","blockId","indexOf","setBlockIdsMaxId","blockIdsMaxId","saveMuteIds","muteIds","setMuteIdsMaxId","muteIdsMaxId","addMuteId","muteId","saveDomainMutes","domainMutes","addDomainMute","removeDomainMute","setPinnedToUser","pinnedStatusIds","pinned","setUserForStatus","setUserForNotification","from_profile","setColor","highlighted","highlight","signUpPending","signUpErrors","signUpSuccess","signUpFailure","findUser","findUserByName","findUserByUrl","fetchUserIfMissing","fetchUser","fetchUserByName","fetchUserRelationship","fetchUserInLists","fetchBlocks","reset","blocks","_map","removeUserFromFollowers","blockUsers","unblockUsers","editUserNote","comment","fetchMutes","mutes","hideReblogs","followUser","reblogs","showReblogs","muteUsers","unmuteUsers","fetchDomainMutes","muteDomains","unmuteDomains","fetchFriends","fetchFollowers","subscribeUser","unsubscribeUser","toggleActivationStatus","activateUser","deactivateUser","is_active","registerPushNotifications","isEnabled","notificationVisibility","registration","base64String","base64","rawData","subscribeOptions","userVisibleOnly","applicationServerKey","repeat","atob","Uint8Array","charCodeAt","pushManager","subscribe","subscribePush","subscription","JSON","stringify","alerts","follows","favourite","likes","mention","reblog","repeats","move","moves","responseData","sendSubscriptionToBackEnd","webPushNotifications","unregisterPushNotifications","getSubscription","subscribtion","unsubscribe","unsubscribePush","unregister","retweetedUsers","_compact","targetUsers","notificationIds","notificationsObject","relevantNotifications","searchUsers","signUp","userInfo","register","params","access_token","getCaptcha","logout","_store$rootState","oauthApi","userToken","backendInteractorService","loginUser","accessToken","Notification","requestPermission","locked","useStreamingApi","latest","maybeShowChatNotification","chat","lastMessage","chats","currentChatId","hidden","account_id","opts","account","profile_image_url","attachment","preview_url","showDesktopNotification","retryMultiplier","fetchers","socket","mastoUserSocket","mastoUserSocketStatus","followRequests","followRequestCount","setBackendInteractor","addFetcher","fetcherName","fetcher","removeFetcher","setWsToken","wsToken","setSocket","setFollowRequests","setMastoUserSocketStatus","incrementRetryMultiplier","resetRetryMultiplier","enableMastoSockets","initial","WebSocket","CLOSED","CLOSING","getState","WSConnectionStatus","disableMastoSockets","startMastoUserSocket","detail","chatId","chatUpdate","closeEvent","ignoreCodes","debug","stopMastoUserSocket","close","_ref7$timeline","_ref7$tag","_ref7$userId","_ref7$listId","stopFetchingTimeline","stopFetchingNotifications","_extends","_objectDestructuringEmpty","stopFetchingFollowRequests","removeFollowRequest","request","stopFetchingLists","initializeSocket","Socket","connect","disconnectFromSocket","disconnect","defaultApi","path","_set","updateProfile","notificationsApi","updateNotificationSettings","settingsMap","defaultScope","defaultNSFW","stripRichContent","get","acceptChatMessages","allowFollowingMove","discoverable","hideFavorites","hideFollowers","hideFollows","hideFollowersCount","hideFollowsCount","webPushHideContents","blockNotificationsFromStrangers","profileConfig","confirmProfileOption","wipeProfileOption","wipeAllProfileOptions","_value$get","_get","_original","setProfileOption","_map$set","_map$api","faTimes","Modal","NEW_USER_DATE","COMMAND_TRIM_FLAGS_AND_RESET","dirty","flagStorage","updateCounter","prefsStorage","_journal","simple","dontShowUpdateNotifs","collapseNav","collections","pinnedNavItems","raw","cache","newUserFlags","_moveItemInArray","movement","oldIndex","newIndex","newArray","_clamp","_wrapData","userName","_user","_timestamp","now","_version","_checkValidity","_verifyPrefs","_mergeJournal","_len","journals","_key","allJournals","_flatten","j","grouped","_groupBy","trimmedGrouped","journal","timestamp","remainder","lastRemoveIndex","_findLastIndex","operation","_uniqWith","_takeRight","clearServerSideStorage","userData","_cloneDeep","setServerSideStorage","live","storage","fqn","_getRecentData2","recent","stale","needUpload","cacheValid","liveValid","_getRecentData","_PLEROMA_HOTPATCH","reverseMigrations","to","_doMigrations","needsUpload","userNew","created_at","flagsTemplate","_recent","recentData","_excluded2","staleData","_excluded3","totalFlags","totalPrefs","allFlagKeys","toRaw","_getAllFlags","flag","recentFlag","staleFlag","_mergeFlags","recentJournal","staleJournal","resultOutput","totalJournal","command","newSet","_args","_mergePrefs","knownKeys","knownKeysSet","_resetFlags","min","setFlag","setPreference","addCollectionPreference","collection","removeCollectionPreference","reorderCollectionPreference","newCollection","updateCache","pushServerSideStorage","_ref16$force","force","needPush","pleroma_settings_store","frontends","loaded","needsReboot","modifiedPaths","descriptions","draft","dbConfigEnabled","adminSettingsStorage","setInstanceAdminNoDbConfig","setAvailableFrontends","refs","ref","updateAdminSettings","updateAdminDescriptions","updateAdminDraft","_path","parent","resetAdminDraft","loadFrontendsStuff","fetchAvailableFrontends","loadAdminStuff","fetchInstanceDBConfig","backendDbConfig","errorJson","fetchInstanceConfigDescriptions","backendDescriptions","setInstanceAdminSettings","configs","c","group","db","x","convert","tuple","setInstanceAdminDescriptions","description","_ref11$key","newPath","d","pushAdminDraft","changed","lv1data","eConfig","eDraft","_differenceWith","pushInstanceDBConfig","payload","pushAdminSetting","split","clone","resetAdminSetting","_path$split","_path$split2","subkey","delete","subkeys","channel","joined","setChannel","addMessage","setMessages","setJoined","initializeShout","joinPush","receive","onClose","onError","on","msg","appToken","setClientData","setAppToken","setToken","clearToken","getUserToken","PASSWORD_STRATEGY","TOKEN_STRATEGY","TOTP_STRATEGY","RECOVERY_STRATEGY","resetState","strategy","initStrategy","namespaced","requiredPassword","requiredToken","requiredTOTP","requiredRecovery","setInitialStrategy","requirePassword","requireToken","requireMFA","requireRecovery","requireTOTP","abortMFA","root","supportedTypes","mediaViewer","currentIndex","activated","setMedia","setCurrentMedia","fileTypeService","mimetype","current","closeMediaViewer","tokens","fetchTokens","fetchOAuthTokens","revokeOAuthToken","swapTokens","reports","reportModal","preTickedIds","openUserReportingModal","closeUserReportingModal","setReportState","reportsState","addReport","_ref4$statusIds","statusIds","preTickedStatuses","oldState","trackedPolls","pollsObject","mergeOrAddPoll","existingPoll","expired","parse","expires_at","trackPoll","pollId","currentValue","untrackPoll","updateTrackedPoll","fetchPoll","polls","votePoll","choices","vote","modalActivated","openPostStatusModal","closePostStatusModal","resetPostStatusModal","openEditStatusModal","closeEditStatusModal","openStatusHistoryModal","closeStatusHistoryModal","ChatService","newMessages","_ref$updateMaxId","updateMaxId","_loop","chat_id","fakeId","fakeMessage","idIndex","pending","idempotency_key","idempotencyKeyIndex","isConfirmation","lastSeenMessageId","newMessageCount","_ret","empty","getView","currentMessageChainId","_orderBy","firstMessage","previousMessage","date","setHours","getTime","afterDate","nextMessage","isTail","object","messageChainId","_uniqueId","isHead","deleteMessage","messageId","m","cullOlderMessages","maxIndex","minIndex","_sortBy","_step2","_iterator2","resetNewMessageCount","clear","failedMessageIds","handleMessageError","isRetry","lastPersistedMessage","oldId","chatList","chatListFetcher","openedChats","reactive","openedChatMessageServices","lastReadMessageId","getChatById","currentChat","currentChatMessageService","findOpenedChatByRecipientId","recipientId","sortedChatList","unreadChatCount","_sumBy","startFetchingChats","stopFetchingChats","fetchChats","addNewChats","newChatMessageSideEffects","updateChat","startFetchingCurrentChat","setCurrentChatFetcher","addOpenedChat","parseChat","addChatMessages","resetChatNewMessageCount","clearCurrentChat","readChat","lastReadId","isNewMessage","deleteChatMessage","resetChats","clearOpenedChats","setChatListFetcher","prevFetcher","_dispatch","chatService","setCurrentChatId","updatedChat","unread","updated_at","_rootGetters","deleteChat","conversation","last_status","setChatsLoading","chatMessageService","parseChatMessage","_value","announcements","supportsAnnouncements","fetchAnnouncementsTimer","setAnnouncements","setAnnouncementRead","read","setFetchAnnouncementsTimer","timer","setSupportsAnnouncements","unreadAnnouncementCount","_getters","announcement","inactive","fetchAnnouncements","isAdmin","privileges","getAnnouncements","visible","visibleObject","getWithinVisible","adminFetchAnnouncements","visibleAnnouncement","statusCode","markAnnouncementAsRead","dismissAnnouncement","startFetchingAnnouncements","interval","setInterval","stopFetchingAnnouncements","clearInterval","postAnnouncement","startsAt","endsAt","allDay","editAnnouncement","deleteAnnouncement","defaultReducer","paths","substate","saveImmedeatelyActions","defaultStorage","localforage","createPersistedState","_ref$key","_ref$paths","_ref$getState","getItem","_ref$setState","setState","setItem","_ref$reducer","reducer","_ref$storage","_ref$subscriber","subscriber","handler","savedState","usersState","replaceState","merge","mutation","webPushNotification","isUserMutation","isVapidMutation","isPermMutation","isUserConfigMutation","isVisibilityMutation","for","isPasswordAuth","isTokenAuth","mapState","mapGetters","mapMutations","mapActions","submit","submitToken","submitPassword","_this$oauth","identifier","passwordResetRequested","focusOnPasswordInput","clearError","passwordInput","focus","setSelectionRange","_hoisted_2","_toDisplayString","_hoisted_3","onSubmit","_Fragment","_hoisted_4","_hoisted_5","$event","placeholder","_hoisted_7","_hoisted_8","_hoisted_10","_component_router_link","_hoisted_11","_hoisted_12","_hoisted_13","_createBlock","_hoisted_14","_hoisted_15","_hoisted_16","_component_FAIcon","mfa","authSettings","mfa_token","mfaApi","_hoisted_6","_hoisted_9","size","h","resolveComponent","authForm","MFARecoveryForm","MFATOTPForm","LoginForm","signedIn","AuthForm","PostStatusForm","UserCard","_component_UserCard","rounded","_component_PostStatusForm","_component_auth_form","USERNAME_ROUTES","TIMELINES","home","route","criteria","anon","twkn","routeObject","tab","ROOT_ITEMS","interactions","badgeGetter","friendRequests","about","routeTo","anonRoute","custom","_renderSlot","_normalizeProps","_guardReactiveProps","faThumbtack","OptionalRouterLink","isPinned","pinnedItems","togglePin","serverSideStorage","_component_OptionalRouterLink","ass","navigate","$attrs","_resolveDynamicComponent","iconLetter","labelRaw","showPin","_normalizeClass","transform","filterNavigation","hasChats","hasAnnouncements","isFederating","isPrivate","getListEntries","ListsMenuContent","NavigationEntry","privateMode","federating","_renderList","_component_NavigationEntry","faUsers","faGlobe","faBookmark","faEnvelope","faComments","faBell","faInfoCircle","faStream","faList","getRouteTo","pinnedList","faChevronDown","faChevronUp","faBullhorn","NavigationPins","Checkbox","editMode","showTimelines","showLists","timelinesList","rootList","toggleTimelines","toggleLists","toggleEditMode","toggleCollapse","collapsed","timelinesItems","rootItems","forceExpand","_component_NavigationPins","forceEditMode","_component_ListsMenuContent","shout","pleromaChatMessages","gopher","whoToFollow","mediaProxy","uploadlimit","fileSizeFormatService","num","unit","getWhoToFollow","panel","usersToFollow","toFollow","reply","shuffled","_shuffle","img","avatar","acct","externalUser","showWhoToFollow","userProfileLink","generateProfileLink","watch","oldUser","mounted","fill","src","currentMessage","togglePanel","newVal","scrollEl","querySelector","scrollHeight","$nextTick","floating","author","rows","onKeyup","_withKeys","setTransform","scale","PinchZoom","_toHandlers","$listeners","deltaCoord","oldCoord","newCoord","touchEventCoord","touch","touches","screenX","screenY","pointerEventCoord","clientX","clientY","vectorLength","sqrt","perpendicular","dotProduct","v1","v2","project","scalar","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","swipeGesture","direction","onSwipe","threshold","perpendicularTolerance","_startPos","_swiping","beginSwipe","gesture","updateSwipe","delta","towardsDir","perpendicularDir","towardsPerpendicular","SwipeAndClickGesture","swipePreviewCallback","swipeEndCallback","swipeCancelCallback","swipelessClickCallback","_ref$threshold","_ref$perpendicularTol","_ref$disableClickThre","disableClickThreshold","_classCallCheck","nop","_reset","_createClass","_pointerId","_swiped","_preventNextClick","button","pointerId","coord","sign","isPositive","pointerType","handlePointerDown","$gesture","handlePointerMove","handlePointerUp","handlePointerCancel","cancel","handleNativeClick","click","preview","offsets","GestureService","onPointerdown","onPointermove","onPointerup","onPointercancel","faChevronLeft","faChevronRight","VideoAttachment","SwipeClick","Flash","swipeDirection","swipeThreshold","pinchZoomMinScale","pinchZoomScaleResetLimit","showing","currentMedia","canNavigate","getType","swipeDisableClickThreshold","hide","hideIfNotSwiped","comp","swipeClick","goPrev","prevIndex","newMedia","goNext","nextIndex","onImageLoaded","handleSwipePreview","pinchZoom","handleSwipeEnd","handleKeyupEvent","keyCode","handleKeydownEvent","_component_Modal","onBackdropClicked","_component_SwipeClick","onPreviewRequested","onSwipeFinished","onSwipelessClicked","_component_PinchZoom","selector","alt","onLoad","_component_VideoAttachment","controls","_component_Flash","$tc","total","spin","faSignInAlt","faSignOutAlt","faHome","faUserPlus","faSearch","faTachometerAlt","faCog","faCompass","closed","closeGesture","toggleDrawer","unseenNotifications","unseenNotificationsFromStore","unseenNotificationsCount","sitename","timelinesRoute","doLogout","touchStart","touchMove","openAdminModal","onTouchstart","onTouchmove","style","role","faPen","HIDDEN_FOR_PAGES","scrollingDown","inputActive","oldScrollPos","amountScrolled","autohideFloatingPostButton","activateFloatingPostButtonAutohide","handleOSK","deactivateFloatingPostButtonAutohide","isLoggedIn","isHidden","$route","isPersistent","alwaysShowNewPostButton","handleScrollStart","handleScrollEnd","openPostForm","smallPhone","smallPhoneKbOpen","biggerPhoneKbOpen","_debounce","scrollY","leading","trailing","faBars","faArrowUp","faMinus","SideDrawer","Notifications","ConfirmModal","notificationsCloseGesture","notificationsOpen","notificationsAtTop","showingConfirmLogout","closeMobileNotifications","isChat","chatsPinned","shouldConfirmLogout","toggleMobileSidebar","sideDrawer","openMobileNotifications","markRead","notificationsTouchStart","notificationsTouchMove","scrollToTop","scrollTo","scrollMobileNotificationsToTop","mobileNotifications","showConfirmLogout","hideConfirmLogout","onScroll","_ref$target","fetchOlderNotifications","_component_FALayers","_component_SideDrawer","_Teleport","_component_confirm_modal","onAccepted","onCancelled","searchTerm","searchInput","toggleHidden","SearchBar","searchBarHidden","supportsMask","enableMask","logoStyle","logoMaskStyle","logoBgStyle","margin","opacity","onSearchBarToggled","_normalizeStyle","_component_search_bar","onToggled","Status","List","UserLink","forward","statusIdsToReport","processing","isOpen","remoteInstance","is_local","closeModal","reportUser","isChecked","toggleStatus","checked","resize","Element","_component_i18n_t","keypath","_component_UserLink","onInput","_component_Checkbox","_component_List","items","_withCtx","_component_Status","focused","statusoid","resettingForm","editStatus","isFormVisible","oldVal","val","doEditStatus","spoilerText","sensitive","contentType","statusPosterService","onPosted","postStatus","resetAndClose","statusHistory","historyCount","history","newStatusId","resetHistory","_component_status","notices","closeNotice","UserPanel","NavPanel","defineAsyncComponent","InstanceSpecificPanel","FeaturesPanel","WhoToFollowPanel","ShoutPanel","MediaModal","MobilePostStatusButton","MobileNav","DesktopNav","SettingsModal","UpdateNotification","UserReportingModal","PostStatusModal","EditStatusModal","StatusHistoryModal","GlobalNoticeList","mobileActivePanel","interfaceLanguage","updateMobileState","reverseLayout","noSticky","newPostButtonShown","navClasses","navbarColumnStretch","userBackground","background_image","instanceBackground","hideInstanceWallpaper","bgStyle","hideISP","isChats","isListEdit","editingAvailable","shoutboxPosition","hideShoutbox","_this$$store$getters$","reverseSetting","disableStickyHeaders","showScrollbars","_component_MobileNav","_component_DesktopNav","_component_Notifications","_component_user_panel","_component_nav_panel","_component_instance_specific_panel","_component_features_panel","_component_who_to_follow_panel","_component_router_view","_component_MediaModal","_component_shout_panel","_component_MobilePostStatusButton","_component_UserReportingModal","_component_PostStatusModal","_component_EditStatusModal","_component_StatusHistoryModal","_component_SettingsModal","_component_UpdateNotification","_component_GlobalNoticeList","faAngleDoubleDown","faAngleDoubleRight","depth","inProfile","collapsable","isExpanded","pinnedStatusIdsObject","profileUserId","getReplies","setHighlight","toggleExpanded","toggleThreadDisplay","threadDisplayStatus","showThreadRecursively","totalReplyCount","totalReplyDepth","statusContentProperties","setStatusContentProperty","toggleStatusContentProperty","dive","suspendable","selfSuspendable","statusComponent","childComponent","reverseLookupTable","table","currentReplies","statusById","threadShowing","currentProp","collapseThread","showThread","showAllSubthreads","toggleCurrentProp","setCurrentProp","expandable","replies","showingTall","expandingSubject","showingLongSubject","replying","mediaPlaying","onGoto","onToggleExpanded","replyStatus","_component_thread_tree","numStatus","faFilter","faFont","faWrench","Popover","setReplyVisibility","openTab","replyVisibilitySelf","replyVisibilityFollowing","replyVisibilityAll","hideMedia","hideAttachments","hideAttachmentsInConv","_component_Popover","trigger","faFolderTree","setConversationDisplay","autoUpdate","streaming","collapseWithSubjects","showUserAvatars","faAngleDoubleLeft","idA","idB","expanded","threadDisplayStatusObject","statusContentPropertiesObject","inlineDivePosition","isPage","fetchConversation","maxDepthToShowByDefault","maxDepth","streamingEnabled","displayStyle","isTreeView","isLinearView","treeViewIsSimple","shouldFadeAncestors","otherRepliesButtonPosition","showOtherRepliesButtonBelowStatus","showOtherRepliesButtonInsideStatus","prop","hideStatus","virtualHidden","originalStatusId","getConversationId","_clone","statusIndex","_filter","sortAndFilterConversation","statusMap","threadTree","linearized","walk","forest","topLevel","processed","replyIds","sizes","subTreeSizeFor","cid","depths","subTreeDepthFor","_this5","tl","otherTopLevelCount","showingTopLevel","canDive","diveRoot","parentOf","diveDepth","diveMode","shouldShowAllConversationButton","shouldShowAncestors","ancestorsOf","irid","hiddenStyle","_this6","_this7","def","isReplying","_this8","maybeHighlight","ThreadTree","QuickFilterSettings","QuickViewSettings","newConversationId","oldConversationId","resetDisplayState","_this9","ancestors","descendants","getHighlight","setThreadDisplay","nextStatus","setThreadDisplayRecursively","_this10","leastVisibleAncestor","diveIntoStatus","preventScroll","tryScrollTo","diveToTopLevel","topLevelAncestorOrSelfId","undive","_this11","goToCurrent","parentId","parentOrSelf","_component_QuickFilterSettings","_component_QuickViewSettings","numReplies","useListsMenu","openMenu","blockOpen","stopPropagation","timelineName","i18nkey","onShow","faCirclePlus","faCheck","Timeline","showScrollTop","paused","unfocused","virtualScrollIndex","blockingClicks","Conversation","TimelineMenu","filteredVisibleStatuses","filteredPinnedStatusIds","showLoadButton","loadButtonString","mobileLoadButtonString","rootClasses","embedded","header","footer","_keyBy","statusesToDisplay","amount","statusesPerSide","ceil","nonPinnedIndex","virtualScrollingEnabled","mobileLayout","handleScroll","handleVisibilityChange","handleShortKey","determineVisibleStatuses","top","offsetTop","stopBlockingClicks","blockClicksTemporarily","fetchOlderStatuses","_throttle","cappedScrollIndex","centerOfScreen","approxIndex","floor","virtualScrollIndexY","abs","doc","clientTop","pauseOnUnfocused","_component_TimelineMenu","_component_conversation","footerSlipgate","_component_Timeline","tabModeDict","reactions","allow_following_move","filterMode","canSeeReports","onModeSwitch","TabSwitcher","_component_tab_switcher","UserAvatar","RichContent","UserPopover","htmlTitle","name_html","withAvatar","_component_UserPopover","_component_UserAvatar","_component_RichContent","AvatarList","Timeago","ChatTitle","StatusBody","attachmentInfo","types","file","fileType","messageForStatusContent","messageEmojis","isYou","messagePreview","summary","raw_html","openChat","recipient_id","_component_ChatTitle","_component_Timeago","time","_component_StatusBody","chatNew","BasicUserCard","userIds","availableUsers","goBack","goToChat","addUser","selectedUserIds","removeUser","_component_BasicUserCard","ChatListItem","ChatNew","isNew","cancelNewChat","newChat","_component_ChatNew","onCancel","_component_ChatListItem","compact","displayDate","today","toLocaleDateString","localeService","$i18n","day","month","$options","faEllipsisH","emits","Attachment","StatusContent","Gallery","LinkPreview","ChatMessageDate","createdAt","chatViewItem","toLocaleTimeString","hour","minute","hour12","isCurrentUser","isMessage","hasAttachment","betterShadow","popoverMarginStyle","left","hovered","menuOpened","onHover","bool","isHovered","confirm","hoveredMessageChain","onMouseover","onMouseleave","onMouseenter","placement","_component_StatusContent","_component_ChatMessageDate","getScrollPosition","Chat","ChatMessage","jumpToBottomButtonVisible","hoveredMessageChainId","lastScrollPosition","scrollableContainerHeight","errorLoadingChat","messageRetriers","handleResize","recipient","formPlaceholder","chatViewItems","bottomedOutBeforeUpdate","scrollDown","fetchChat","isFirstFetch","onMessageHover","onFilesDropped","forceRead","_opts$delayed","delayed","_getScrollPosition$of","diff","scrollBy","trunc","options","_options$behavior","behavior","_options$forceRead","isBottomedOut","reachedTop","cullOlderCheck","handleScrollUp","positionBeforeLoading","previousPosition","newPosition","positionAfterLoading","_ref2$isFirstFetch","_ref2$fetchLatest","fetchLatest","fetchOlderMessages","sinceId","chatMessages","positionBeforeUpdate","getOrCreateChat","doStartFetching","handleAttachmentPosting","sendMessage","_this12","idempotencyKey","mediaId","isNormalized","buildFakeMessage","doSendMessage","retriesLeft","_this13","_ref4$retriesLeft","sendChatMessage","pow","_component_ChatMessage","onResize","showingConfirmRemoveFollower","shouldConfirmRemoveUserFromFollowers","showConfirmRemoveUserFromFollowers","hideConfirmRemoveUserFromFollowers","doRemoveUserFromFollowers","toggled","RemoteFollow","FollowButton","RemoveFollowerButton","isMe","_component_basic_user_card","noFollowsYou","followed_by","_component_FollowButton","_component_RemoveFollowerButton","_component_RemoteFollow","faBirthdayCake","FollowerList","withLoadMore","destroy","FriendList","defaultTabKey","footerRef","routeParams","load","stopFetching","isUs","isExternal","followsTabVisible","hide_follows","followersTabVisible","hide_followers","formattedBirthday","browserLocale","birthday","timeZone","year","setFooterRef","el","userNameOrId","loadById","maybeId","maybeName","reason","errorMessage","switchUser","onTabSwitch","linkClicked","parentNode","FollowCard","switcher","selected","viewing","fields_html","field","fields_text","statuses_count","friends_count","_component_FriendList","_component_FollowCard","followers_count","_component_FollowerList","hashtags","currenResultTab","statusesOffset","lastStatusFetchCount","lastQuery","newQuery","searchType","blur","oldLength","_uniqBy","getActiveTab","resultCount","onResultTabSwitch","lastHistoryRecord","hashtag","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","uses","_hoisted_26","setup","v$","useVuelidate","email","fullname","captcha","InterfaceLanguageSwitcher","validations","requiredIf","accountActivationRequired","sameAs","maxValue","birthdayMin","accountApprovalRequired","setCaptcha","bioPlaceholder","replaceNewlines","reasonPlaceholder","minAge","setUTCMilliseconds","setUTCSeconds","setUTCMinutes","setUTCHours","minDate","setTime","DAY","birthdayMinAttr","toJSON","birthdayMinFormatted","isPending","serverValidationErrors","termsOfService","captcha_solution","solution","captcha_token","captcha_answer_data","answer_data","$touch","$invalid","cpt","str","$error","$model","$dirty","bio","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_32","_hoisted_33","_hoisted_34","_component_interface_language_switcher","_hoisted_35","_hoisted_36","_hoisted_38","_hoisted_39","autocomplete","autocorrect","autocapitalize","spellcheck","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_47","_hoisted_48","passwordReset","throttled","mailerEnabled","dismissError","passwordResetApi","showingApproveConfirmDialog","showingDenyConfirmDialog","findFollowRequestNotificationId","notif","notificationsFromStore","showApproveConfirmDialog","hideApproveConfirmDialog","showDenyConfirmDialog","hideDenyConfirmDialog","approveUser","shouldConfirmApprove","doApprove","notifId","denyUser","shouldConfirmDeny","doDeny","FollowRequestCard","_component_FollowRequestCard","_this$$store$state$oa","staffAccounts","groupedStaffAccounts","groupBy","admin","moderator","toInstanceReasonObject","instances","info","federationPolicy","mrfPolicies","quarantineInstances","acceptInstances","rejectInstances","ftlRemovalInstances","mediaNsfwInstances","mediaRemovalInstances","keywordsFtlRemoval","keywordsReject","keywordsReplace","hasInstanceSpecificPolicies","hasKeywordPolicies","TermsOfServicePanel","StaffPanel","MRFTransparencyPanel","policy","keyword","pattern","_component_staff_panel","_component_terms_of_service_panel","_component_MRFTransparencyPanel","redirect","ListsCard","cancelNewList","newList","_component_ListsCard","followingOnly","onChange","ListsNew","ListsUserSearch","PanelLoading","titleDraft","membersUserIds","removedUserIds","searchUserIds","addedUserIds","searchLoading","reallyDelete","membersUsers","toggleRemoveMember","toggleAddFromSearch","isRemoved","isAdded","onSearchLoading","results","onSearchLoadingDone","onSearchResults","updateListTitle","_ctx$$router","back","listTitle","_component_ListsUserSearch","onResults","onLoading","onLoadingDone","_component_PanelLoading","cols","AnnouncementEditor","editing","editedAnnouncement","editError","canEditAnnouncement","isRead","publishedAt","published_at","formatTimeOrDate","starts_at","ends_at","markAsRead","all_day","toLocaleString","enterEditMode","pleroma","raw_content","submitEdit","cancelEdit","Announcement","_component_announcement_editor","_component_rich_content","newAnnouncement","posting","canPostAnnouncement","_component_announcement","validateAuthenticatedRoute","routes","_to","component","PublicAndExternalTimeline","PublicTimeline","FriendsTimeline","beforeEnter","TagTimeline","BookmarkTimeline","ConversationPage","meta","dontScroll","RemoteUserResolver","UserProfile","Interactions","DMs","Registration","PasswordReset","FollowRequests","disableTeleport","OAuthCallback","Search","WhoToFollow","About","AnnouncementsPage","Lists","ListsTimeline","ListsEdit","ChatList","previousNavPaddingRight","previousAppBgWrapperRight","lockerEls","disableBodyScroll","scrollBarGap","reserveScrollBarGap","navEl","getElementById","getComputedStyle","getPropertyValue","paddingRight","appBgWrapperEl","classList","enableBodyScroll","remove","directive","binding","updated","Vue","staticInitialResults","decodeUTF8Base64","TextDecoder","decode","preloadFetch","requestData","getInstanceConfig","max_toot_chars","vapid_public_key","approval_required","metadata","birthday_required","birthday_min_age","getBackendProvidedConfig","pleroma_fe","_x3","getStaticConfig","setSettings","_callee5","apiConfig","staticConfig","overrides","env","copyInstanceOption","_context5","___pleromafe_dev_overrides","___pleromafe_mode","NODE_ENV","staticConfigPreference","_x4","getTOS","_callee6","_context6","_x5","getInstancePanel","_callee7","_context7","_x6","getStickers","_callee9","stickers","_context9","_callee8","resPack","_context8","pack","_x8","localeCompare","_x7","getAppSecret","_callee10","_context10","_x9","resolveStaffAccounts","nicknames","getNodeInfo","_callee11","features","uploadLimits","software","priv","federation","_context11","nodeName","openRegistrations","parseInt","general","banner","fieldsLimits","enabled","web","version","mrf_policies","_x10","setConfig","_callee12","configInfos","_context12","_x11","checkOAuthToken","_callee14","_context14","_callee13","_context13","_x13","_x14","_x12","_callee15","_store$state$config","customThemeSource","router","_context15","FaviconService","applyConfig","createRouter","createWebHistory","scrollBehavior","_from","savedPosition","matched","createApp","App","use","vClickOutside","VBodyScrollLock","VueVirtualScroller","FontAwesomeIcon","FontAwesomeLayers","unwrapInjectedRef","mount","_x15","currentLocale","createI18n","global","persistedStateOptions","storageError","plugins","persistedState","pushNotifications","createStore","modules","interface","interfaceModule","instanceModule","usersModule","statusesModule","listsModule","apiModule","configModule","profileConfigModule","serverSideStorageModule","adminSettings","adminSettingsModule","shoutModule","oauthModule","authFlow","authFlowModule","mediaViewerModule","oauthTokens","oauthTokensModule","reportsModule","pollsModule","postStatusModule","editStatusModule","statusHistoryModule","chatsModule","announcementsModule","strict","afterStoreSetup","process","COMMIT_HASH","DEV_OVERRIDES","expertLevel","colors","padEmoji","maxThumbnails","hideNsfw","preloadImage","loopVideo","loopVideoSilentOnly","emojiReactionsOnTimeline","stopGifs","followRequest","chatMention","muteWords","hideScopeNotice","playVideosInModal","useOneClickNsfw","useContainFit","userPopoverAvatarAction","userPopoverOverlay","sidebarColumnWidth","contentColumnWidth","notifsColumnWidth","emojiReactionsScale","defaultConfig","setOption","color","loadSettings","presentKeys","intersection","setPreset","Cookies","StatusCodeError","captureStackTrace","create","RegistrationError","_Error","_inherits","_super","_assertThisInitialized","errorContents","ap_id","errs","_capitalize","_wrapNativeSuper","ALIASES_URL","TAG_USER_URL","PERMISSION_GROUP_URL","screenName","MASTODON_DISMISS_NOTIFICATION_URL","MASTODON_FAVORITE_URL","MASTODON_UNFAVORITE_URL","MASTODON_RETWEET_URL","MASTODON_UNRETWEET_URL","MASTODON_DELETE_URL","MASTODON_PUBLIC_TIMELINE","MASTODON_STATUS_URL","MASTODON_USER_TIMELINE_URL","MASTODON_LIST_URL","MASTODON_LIST_TIMELINE_URL","MASTODON_LIST_ACCOUNTS_URL","MASTODON_TAG_TIMELINE_URL","MASTODON_MUTE_USER_URL","MASTODON_UNMUTE_USER_URL","MASTODON_SUBSCRIBE_USER","MASTODON_UNSUBSCRIBE_USER","MASTODON_USER_NOTE_URL","MASTODON_BOOKMARK_STATUS_URL","MASTODON_UNBOOKMARK_STATUS_URL","MASTODON_MEDIA_UPLOAD_URL","MASTODON_STATUS_FAVORITEDBY_URL","MASTODON_STATUS_REBLOGGEDBY_URL","MASTODON_PROFILE_UPDATE_URL","MASTODON_PIN_OWN_STATUS","MASTODON_UNPIN_OWN_STATUS","MASTODON_MUTE_CONVERSATION","MASTODON_UNMUTE_CONVERSATION","MASTODON_DOMAIN_BLOCKS_URL","MASTODON_ANNOUNCEMENTS_DISMISS_URL","PLEROMA_EMOJI_REACTIONS_URL","PLEROMA_EMOJI_REACT_URL","PLEROMA_EMOJI_UNREACT_URL","PLEROMA_CHAT_MESSAGES_URL","PLEROMA_CHAT_READ_URL","PLEROMA_DELETE_CHAT_MESSAGE_URL","PLEROMA_BACKUP_URL","PLEROMA_EDIT_ANNOUNCEMENT_URL","PLEROMA_DELETE_ANNOUNCEMENT_URL","PLEROMA_ADMIN_CONFIG_URL","oldfetch","fullUrl","promisedRequest","_ref$headers","Accept","authHeaders","parseUser","_ref24$limit","MASTODON_FOLLOWING_URL","announcementToPayload","_ref109","_ref113","_ref113$args","_ref114","_ref115","MASTODON_STREAMING","MASTODON_STREAMING_EVENTS","PLEROMA_STREAMING_EVENTS","_ref116","_ref116$preprocessor","preprocessor","handleMastoWS","_ref116$id","eventTarget","proxy","original","eventName","eventData","dispatchEvent","CustomEvent","wsEvent","readyState","parsedEvent","parseStatus","parseNotification","freeze","JOINED","ERROR","DISABLED","STARTING","STARTING_INITIAL","_ref50$since","_ref50$until","_ref50$userId","_ref50$listId","_ref50$tag","_ref50$withMuted","_ref50$replyVisibilit","_ref50$includeTypes","includeTypes","isNotifications","queryString","param","parseLinkHeaderPagination","flakeId","urlContext","MASTODON_STATUS_CONTEXT_URL","MASTODON_STATUS_SOURCE_URL","parseSource","originalStatus","exportFriends","more","_ref27$limit","MASTODON_FOLLOWERS_URL","MASTODON_FOLLOW_URL","unfollowUser","MASTODON_UNFOLLOW_URL","MASTODON_BLOCK_USER_URL","MASTODON_UNBLOCK_USER_URL","MASTODON_REMOVE_USER_FROM_FOLLOWERS","_ref59$mediaIds","mediaIds","inReplyToStatusId","quoteId","pollOptions","normalizedPoll","expires_in","multiple","postHeaders","_ref60$mediaIds","putHeaders","uploadMedia","formData","parseAttachment","setMediaDescription","URLSearchParams","with_relationships","_ref83","_ref84","_ref87","_ref88","deleteUser","addRight","deleteRight","agreement","resp","updateProfileImages","_ref5$avatar","_ref5$avatarName","avatarName","_ref5$banner","_ref5$background","importMutes","importBlocks","importFollows","deleteAccount","changeEmail","moveAccount","targetAccount","addAlias","alias","deleteAlias","listAliases","_cacheBooster","changePassword","newPassword","newPasswordConfirmation","settingsMFA","mfaDisableOTP","generateMfaBackupCodes","mfaSetupOTP","mfaConfirmOTP","addBackup","_ref85","listBackups","_ref86","fetchFollowRequests","fetchLists","MASTODON_LISTS_URL","account_ids","MASTODON_APPROVE_USER_URL","MASTODON_DENY_USER_URL","_ref89","_ref90","_ref90$single","_ref105","_ref91","_ref92","_ref93","_ref94","_ref95","_ref96","_ref97","_ref98","status_ids","_ref100","_ref99","fetchKnownDomains","_ref101","_ref102","_ref103","_ref104","_ref117","_ref118","_ref119","_ref119$limit","_ref120","_ref120$mediaId","media_id","_ref121","last_read_id","_ref122","_ref123","MASTODON_USER_IN_LISTS","_ref107","_ref108","_ref110","_ref111","_ref112","_ref106","_ref124","_ref125","_ref126","_ref127","installFrontend","_ref128","propsToNative","_kebabCase","rgb2hex","g","_r","_map2","relativeLuminance","srgb","_srgbToLinear","bit","c2linear","srgbToLinear","getContrastRatio","getContrastRatioLayers","layers","bedrock","alphaBlendLayers","alphaBlend","fg","fga","bg","hex2rgb","hex","mixrgb","rgba2css","rgba","getTextColor","preserve","base","invertLightness","rgb","contrastRatio","getCssColor","Component","isFunction","getComponentOptions","SECOND","MINUTE","HOUR","WEEK","MONTH","YEAR","relativeTime","nowThreshold","round","relativeTimeShort","unitToSeconds","secondsToUnit","desktopNotificationOpts","desktopNotification","bind","output","masto","mastoShort","escape","display_name","name_unescaped","note","description_html","fields","unescape","cover_photo","following_count","bot","settings_store","favicon","chat_token","hide_follows_count","hide_followers_count","is_moderator","is_admin","default_scope","privacy","no_rich_text","show_role","show_birthday","delete_others_notice","muted","blocking","statusnet_blocking","follows_you","follow_request_count","notification_settings","unread_chat_count","parts","unicodeDomain","punycode","screen_name_ui_contains_non_ascii","mime_type","large_thumb_url","spoiler_text","content_type","favourited","favourites_count","reblogged","reblogs_count","edited_at","conversation_id","local","in_reply_to_screen_name","in_reply_to_account_acct","parent_visible","quote_id","quote_url","quote_visible","in_reply_to_id","in_reply_to_user_id","in_reply_to_account_id","replies_count","summary_raw_html","external_url","title_html","is_post_verb","qvitter_delete_notice","activity_type","qvitterStatusType","isNsfw","statusnet_html","summary_html","card","media_attachments","parsedNotice","ntype","is_seen","favorited_status","emoji_url","actor","linkHeader","parsedLinkHeader","parseLinkHeader","max_id","min_id","last_message","favicons","faviconWidth","faviconHeight","isImageLoaded","clearFaviconBadge","complete","naturalHeight","initFaviconService","querySelectorAll","favcanvas","createElement","favimg","Image","crossOrigin","favcontext","getContext","clearRect","drawImage","toDataURL","drawFaviconBadge","badgeColor","fillStyle","beginPath","arc","PI","fileSizeFormat","numArg","units","exponent","toFixed","fileTypeExt","fileMatchesSomeType","specialLanguageCodes","ja_easy","zh_Hant","zh","internalToBrowserLocale","internalToBackendLocale","getLanguageName","languageName","ISO6391","charAt","toLocaleUpperCase","languagesObject","internalToBackendLocaleMulti","visibleTypes","statusNotifications","_includes","muteWordHits","isMutedNotification","notificationObject","prepareNotificationObject","filteredNotificationsFromStore","sortedNotifications","i18nString","notifObj","mastoApiNotificationTypes","readNotifsIds","findOffset","child","_ref$top","_ref$left","ignorePadding","offsetLeft","_findPadding","findPadding","topPadding","leftPadding","offsetParent","position","contains","_findPadding2","topPaddingStr","leftPaddingStr","promiseCall","stopped","promise","statusSummary","muteWord","_ref$media","_ref$inReplyToStatusI","_ref$quoteId","_ref$contentType","_ref$preview","_ref$idempotencyKey","_ref2$media","_ref2$contentType","rules","generatePreset","head","styleEl","appendChild","styleSheet","sheet","insertRule","radii","shadows","fonts","configColumns","defaultConfigColumns","columns","getCssShadow","usesDropShadow","inset","shad","spread","alpha","getCssShadowFilter","generateColors","sourceColors","colors2to3","_getColors","getColors","htmlColors","solid","generateRadii","inputRadii","btnRadius","btn","checkbox","avatarAlt","tooltip","chatMessage","generateFonts","family","post","postCode","border","shadow","buttonInsetFakeBorders","inputInsetFakeBorders","hoverGlow","DEFAULT_SHADOWS","topBar","popup","avatarStatus","panelHeader","buttonHover","buttonPressed","generateShadows","hackContextDict","cleanInputShadows","shadowDef","inputShadows","shadows2to3","shadowsAcc","slotName","shadowDefs","slotFirstWord","colorSlotName","mod","newShadow","shadowAcc","computeDynamicColor","variableSlot","composePreset","getThemes","themes","promises","statePositionAcc","_ref48$color","getOpacitySlot","isV1","cRed","cGreen","cBlue","cOrange","LAYERS","undelay","badge","profileTint","popover","selectedMenu","btnPanel","btnTopBar","inputPanel","inputTopBar","alert","alertPanel","chatBg","DEFAULT_OPACITY","faint","underlay","alertPopup","SLOT_INHERITANCE","depends","priority","wallpaper","brightness","layer","accent","faintLink","postFaintLink","profileBg","highlightLightText","textColor","highlightPostLink","highlightFaintText","highlightFaintLink","highlightPostFaintLink","highlightText","highlightLink","highlightIcon","popoverLightText","popoverPostLink","popoverFaintText","popoverFaintLink","popoverPostFaintLink","popoverText","popoverLink","popoverIcon","selectedPost","selectedPostFaintText","variant","selectedPostLightText","selectedPostPostLink","selectedPostFaintLink","selectedPostText","selectedPostLink","selectedPostIcon","selectedMenuLightText","selectedMenuFaintText","selectedMenuFaintLink","selectedMenuText","selectedMenuLink","selectedMenuIcon","selectedMenuPopover","selectedMenuPopoverLightText","selectedMenuPopoverFaintText","selectedMenuPopoverFaintLink","selectedMenuPopoverText","selectedMenuPopoverLink","selectedMenuPopoverIcon","lightText","postLink","postGreentext","postCyantext","copacity","pollText","inheritsOpacity","fgText","fgLink","panelText","panelFaint","panelLink","topBarText","topBarLink","tabText","tabActiveText","btnText","btnPanelText","btnTopBarText","btnPressed","btnPressedText","btnPressedPanel","btnPressedPanelText","btnPressedTopBar","btnPressedTopBarText","btnToggled","btnToggledText","btnToggledPanelText","btnToggledTopBarText","btnDisabled","btnDisabledText","btnDisabledPanelText","btnDisabledTopBarText","inputText","inputPanelText","inputTopbarText","alertError","alertErrorText","alertErrorPanelText","alertWarning","alertWarningText","alertWarningPanelText","alertSuccess","alertSuccessText","alertSuccessPanelText","alertNeutral","alertNeutralText","alertNeutralPanelText","alertPopupError","alertPopupErrorText","alertPopupWarning","alertPopupWarningText","alertPopupSuccess","alertPopupSuccessText","alertPopupNeutral","alertPopupNeutralText","badgeNotification","badgeNotificationText","badgeNeutral","badgeNeutralText","chatMessageIncomingBg","chatMessageIncomingText","chatMessageIncomingLink","chatMessageIncomingBorder","chatMessageOutgoingBg","chatMessageOutgoingText","chatMessageOutgoingLink","chatMessageOutgoingBorder","getLayersArray","getLayers","opacitySlot","currentLayer","getDependencies","inheritance","layerDeps","expandSlotValue","getDeps","findInheritedOpacity","visited","depSlot","dependency","getLayerSlot","findInheritedLayer","SLOT_ORDERED","allKeys","whites","grays","blacks","unprocessed","node","ai","bi","depsA","depsB","topoSort","aV","bV","OPACITIES","defaultValue","affectedSlots","sourceColor","getColor","targetColor","_sourceColor$split$ma","_sourceColor$split$ma2","variable","modifier","parseFloat","sourceOpacity","backgroundColor","deps","isTextColor","outputColor","colorFunc","dep","ownOpacitySlot","opacityOverriden","dependencySlot","dependencyColor","highlightStyle","prefs","solidColor","tintColor","tintColor2","customProps","backgroundImage","backgroundPosition","highlightClass","complicated","faFile","faMusic","faImage","faVideo","faPlayCircle","faStop","faSearchPlus","faTrashAlt","faPencilAlt","faAlignRight","localDescription","nsfwImage","hideNsfwLocal","modalOpen","showHidden","flashLoaded","showDescription","classNames","usePlaceholder","placeholderName","toUpperCase","placeholderIconClass","referrerpolicy","oembed","useModal","modalTypes","videoTag","onEdit","openModal","openModalForce","onRemove","onShiftUp","shiftUp","onShiftDn","shiftDn","stopFlash","flash","closePlayer","setFlashLoaded","toggleDescription","onload","onImageLoad","naturalWidth","hideDescription","onKeydown","_component_StillImage","onPlay","onPause","thumb_url","oembedHTML","onPlayerOpened","onPlayerClosed","slicedUsers","_component_user_link","vm","indeterminateTransitionFix","indeterminate","onTransitionEnd","modelValue","DialogModal","cancelText","confirmText","onAccept","_component_dialog_modal","darkOverlay","addPositionToWords","words","word","previous","splitByWhitespaceBoundary","currentWord","currentChar","pos","wordsWithPosition","toReplace","ariaLive","defualt","currentText","announce","_textAtCaret","faSmileBeam","suggest","enableEmojiPicker","hideEmojiButton","enableStickerPicker","newlineOnCtrlEnter","randomSeed","random","caretEl","caret","blurTimeout","temporarilyHideSuggestions","disableClickOutside","overlayStyle","pickerShown","EmojiPicker","UnicodeDomainIndicator","ScreenReaderNotice","defaultCandidateIndex","preText","postText","showSuggestions","textAtCaret","_this$wordAtCaret","wordAtCaret","Completion","maybeLocalizedEmojiNamesAndKeywords","_emoji$annotations$la","_emoji$annotations$la2","maybeLocalizedEmojiName","_emoji$annotations$la3","onInputScroll","hiddenOverlay","scrollLeft","suggestionListId","suggestionItemId","_this$$refs","hiddenOverlayCaret","suggestorPopover","setAnchorEl","picker","padding","lineHeight","fontFamily","fontSize","wordWrap","whiteSpace","onBlur","onFocus","onPaste","onKeyUp","onKeyDown","onClickInput","onTransition","showPopover","hidePopover","newWord","firstchar","matchedSuggestions","_take","screenReaderNotice","number","triggerShowPicker","showPicker","scrollIntoView","togglePicker","hidePicker","startEmojiLoad","insert","insertion","keepOpen","_ref2$surroundingSpac","surroundingSpace","before","after","isSpaceRegex","spaceBefore","spaceAfter","replaceText","suggestion","cycleBackward","cycleForward","rootRef","scrollerRef","closest","currentScroll","scrollerBottomBorder","rootBottomBorder","targetScroll","scroll","bottom","onPickerShown","onPickerClosed","setCaret","ctrlKey","shiftKey","onStickerUploaded","onStickerUploadFailed","selectionStart","updateStyles","autoCompleteItemLabel","ariaOwns","ariaAutocomplete","ariaExpanded","ariaActivedescendant","_component_screen_reader_notice","_component_EmojiPicker","onEmoji","_component_UnicodeDomainIndicator","at","faBoxOpen","faStickyNote","faSmile","faUser","faPaw","faIceCream","faBus","faBasketballBall","faLightbulb","faCode","faFlag","UNICODE_EMOJI_GROUP_ICON","activities","objects","flags","maybeLocalizedKeywords","nameLocalizer","hideCustomEmoji","inject","activeGroup","showingStickers","groupsScrolledClass","customEmojiTimeout","contentLoaded","groupRefs","emojiRefs","filteredEmojiGroups","StickerPicker","onShowing","setGroupRef","onPopoverShown","onPopoverClosed","startIndex","endIndex","visibleStartIndex","visibleEndIndex","scrolledGroup","emojiItems","headerId","parentElement","getOffset","scrollHeader","headerRef","offsetWidth","headerCont","currentScrollRight","setScroll","setShowStickers","indexInList","scrollToItem","updateScrolledClass","scrollTopMax","toggleStickers","filterByKeyword","keywordLowercase","orderedEmojiList","indices","indexOfKeyword","flat","oldContentLoaded","recalculateItemPerRow","getFilteredEmojiGroups","defaultGroup","allEmojiGroups","_trim","debouncedHandleKeywordChange","allCustomGroups","minItemSize","emojiHeight","emojiWidth","itemPerRow","activeGroupView","stickersAvailable","unpacked","unicodeEmojiGroups","stickerPickerEnabled","_chunk","isFirstRow","isInModal","popoversZLayer","_component_still_image","composing","_component_DynamicScroller","onUpdate","onVisible","_component_DynamicScrollerItem","_component_sticker_picker","onUploaded","onUploadFailed","ruffleInstance","getRuffle","RufflePlayer","polyfills","publicPath","script","onerror","onabort","oncancel","faExclamationTriangle","player","openPlayer","RuffleService","ruffle","newest","createPlayer","letterbox","container","fetchRelationship","attempt","requested","requestFollow","showingConfirmUnfollow","shouldConfirmUnfollow","isPressed","labelFollowing","showConfirmUnfollow","hideConfirmUnfollow","unfollow","doUnfollow","requestUnfollow","hidingLong","minimal","grid","audio","attachmentsRemaining","currentRow","attachmentsDimensionalScore","row","tooManyAttachments","editable","onNaturalSizeLoad","rowStyle","itemStyle","getAspectRatio","flex","toggleHidingLong","openGallery","onMedia","rowIndex","attachmentIndex","_component_Attachment","removeAttachment","shiftUpAttachment","shiftDnAttachment","editAttachment","onSetMedia","Select","promptText","controlledLanguage","addLanguage","setLanguageAt","removeLanguageAt","_component_Select","imageLoaded","useImage","censored","hideNsfwConfig","useDescription","newImg","provider_name","getKey","faUpload","uploadCount","uploadReady","uploading","uploadFile","self","filesize","allowedsize","filesizeunit","allowedsizeunit","fileData","decreaseUploadCount","clearFile","multiUpload","files","change","dropFiles","normalButton","acceptTypes","fileInfos","accept","faAt","userScreenName","hasSelection","shouldShowTooltip","handleSelection","getSelection","containsNode","full","userNameFullUi","serverName","userNameFull","highlightType","_highlightStyle","classnames","shouldBoldenYou","isRemote","shouldShowFullUserName","conf","shouldShowAvatar","shouldShowYous","shouldFadeDomain","MentionLink","mentionsComputed","extraMentions","manyMentions","toggleShowMore","_component_MentionLink","provide","noBackground","reportId","generateUserProfileLink","_component_status_content","notes","faStar","faRetweet","faEyeSlash","faSuitcaseRolling","faExpandAlt","faCompressAlt","statusExpanded","unmuted","Report","toggleStatusExpanded","getUser","toggleMute","userClass","userStyle","targetUser","targetUserProfileLink","needMute","botIndicator","_component_Report","filters","toggleNotificationFilter","NotificationFilters","minimalMode","seenToDisplayCount","mainClass","filteredNotifications","unseenCount","unseenCountTitle","noHeading","teleportTarget","wide","mobile","notificationsToDisplay","updateScrollPosition","markAsSeen","seenCount","notifs","_component_NotificationFilters","unseen","_component_notification","boundTo","boundToSelector","popoverClass","removePadding","overlayCenters","overlayCentersSelector","stayOnClick","triggerAttrs","anchorEl","teleport","lockReEntry","styles","oldSize","scrollable","graceTimeout","parentPopover","childrenShown","containerBoundingClientRect","anchorHeight","anchorWidth","anchorScreenBox","anchorStyle","paddingTop","bottomPadding","paddingBottom","rightPadding","paddingLeft","overlayCenter","parentScreenBox","xBounds","yBounds","horizOffset","vertOffset","box","overlayCenterScreenBox","leftInnerOffset","topInnerOffset","leftBorder","rightBorder","topBorder","bottomBorder","translateX","translateY","usingTop","topBoundary","bottomBoundary","yOffset","usingRight","rightBoundary","leftBoundary","xOffset","maxWidth","wasHidden","onChildPopoverState","onClickOutside","onMouseenterContent","onMouseleaveContent","childRef","$parent","$","beforeUnmount","_Transition","onClickContent","faPlus","pollType","expiryAmount","expiryUnit","maxOptions","maxLength","expiryUnits","expiry","convertExpiryFromUnit","minExpirationInCurrentUnit","convertExpiryToUnit","maxExpirationInCurrentUnit","nextOption","element","addOption","deleteOption","updatePollToParent","DateUtils","expiryAmountChange","maxlength","unstyled","faPollH","faBan","pxStringToNumber","MediaUpload","EmojiInput","PollForm","ScopeSelector","updateIdempotencyKey","textarea","replyTo","textLength","autoFocus","_ref$attentions","allAttentions","_reject","attention","buildMentionsString","repliedUser","copyMessageScope","statusParams","subject","mediaDescriptions","statusContentType","statusIsSensitive","statusFiles","statusPoll","statusMediaDescriptions","statusScope","quoting","uploadingFiles","pollFormVisible","showDropIcon","dropStopTimeout","previewLoading","emojiInputShown","userDefaultScope","showAllScopes","emojiUserSuggestor","suggestor","emojiSuggestor","statusLength","spoilerTextLength","statusLengthLimit","hasStatusLengthLimit","charactersLeft","isOverLengthLimit","alwaysShowSubject","safeDMEnabled","disablePolls","disableNotice","pollContentError","showPreview","disablePreview","emptyStatus","uploadFileLimitReached","fileLimit","isEdit","quotable","repliedStatus","deep","statusChanged","autoPreview","clearStatus","mediaUpload","clearPollForm","preserveFocus","previewStatus","_arguments","_postingOptions","replyOrQuoteAttr","postingOptions","optimisticPosting","disableSubmit","submitOnEnter","setAllMediaDescriptions","postHandler","statusPoster","_statusPoster$postSta","debouncePreviewStatus","closePreview","togglePreview","addMediaFile","fileInfo","removeMediaFile","newText","shiftUpMediaFile","shiftDnMediaFile","uploadFailed","errString","templateArgs","startedUploadingFiles","finishedUploadingFiles","paste","clipboardData","fileDrop","dataTransfer","fileDragStop","fileDrag","dropEffect","onEmojiInputInput","formRef","bottomRef","bottomBottomPaddingStr","bottomBottomPadding","bottomPaddingStr","vertPadding","oldHeight","scrollerHeight","heightWithoutPadding","newHeight","maxHeight","bottomBottomBorder","isBottomObstructed","isFormBiggerThanScroller","bottomChangeDelta","totalDelta","showEmojiPicker","changeVis","togglePollForm","setPoll","pollForm","dismissScopeNotice","handleEmojiInputShow","openProfileTab","onDragover","disableLockWarning","tabindex","disableSubject","_component_EmojiInput","inputProps","emojiPickerPlacement","onShown","onCompositionupdate","disableScopeSelector","disableVisibilitySelector","_component_scope_selector","postFormat","_component_poll_form","onUpdatePoll","_component_media_upload","onUploading","onAllUploaded","animation","onDragleave","onDrop","_component_gallery","disableSensitivityCheckbox","progress","$data","subscribeUrl","serverUrl","protocol","host","faLock","faLockOpen","currentScope","initialScope","showNothing","showPublic","showUnlisted","showPrivate","showDirect","originalScope","shouldShow","css","unlisted","private","direct","showAll","userDefault","onScopeChange","faReply","faStarRegular","animated","filterWord","addReaction","existingReaction","show","showingConfirmDialog","shouldConfirmRepeat","showConfirmDialog","doRetweet","hideConfirmDialog","faBookmarkReg","faShareAlt","faExternalLinkAlt","faHistory","showingDeleteDialog","shouldConfirmDelete","showDeleteStatusConfirmDialog","doDeleteStatus","hideDeleteStatusConfirmDialog","copyLink","clipboard","writeText","statusLink","reportStatus","showStatusHistory","p","canDelete","ownStatus","canPin","canMute","canBookmark","isEdited","_component_ConfirmModal","enter","oldStatus","usersCapped","UserListPopover","tooManyReactions","showMoreString","accountsForEmoji","toggleShowAll","reactedWith","fetchEmojiReactionsByIfMissing","reactWith","unreact","emojiOnClick","counterTriggerAttrs","_component_UserListPopover","faPlusSquare","faEye","camelCase","controlledOrUncontrolledSet","camelized","uncontrolledName","ReplyButton","FavoriteButton","ReactButton","RetweetButton","ExtraButtons","StatusPopover","EmojiReactions","uncontrolledReplying","userExpanded","uncontrolledMediaPlaying","headTailLinks","displayQuote","inQuote","toggle","controlledName","showReasonMutedThread","inConversation","repeaterClass","repeaterStyle","replyProfileLink","isReply","retweeterUser","retweeter","retweeterHtml","retweeterProfileLink","statusFromGlobalRepository","rtBotStatus","botStatus","rtBotIndicator","mentionsLine","writtenSet","attn","hasMentionsLine","reasonsToMute","userIsMuted","shouldNotMute","relationshipReblog","hideMutedUsers","isFocused","replyToName","replySubject","decodedSummary","startsWithRe","combinedFavsAndRepeatsUsers","combinedUsers","tagObj","isSuspendable","inThreadForest","controlledThreadDisplayStatus","visibilityLocalized","hasVisibleQuote","hasInvisibleQuote","quotedStatus","shouldDisplayQuote","visibilityIcon","showError","toggleReplying","gotoOriginal","toggleUserExpanded","addMediaPlaying","removeMediaPlaying","setHeadTailLinks","controlledToggleThreadDisplay","scrollIfHighlighted","highlightId","rect","toggleDisplayQuote","inlineExpanded","isPreview","showPinned","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_component_reply_button","onToggle","simpleTree","_hoisted_31","_component_StatusPopover","flip","_component_MentionsLine","controlledShowingTall","controlledExpandingSubject","controlledShowingLongSubject","controlledToggleShowingTall","controlledToggleExpandingSubject","controlledToggleShowingLongSubject","onMediaplay","onMediapause","onParseReady","_hoisted_40","showOtherRepliesAsButton","_hoisted_41","_hoisted_46","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_component_AvatarList","_component_EmojiReactions","_hoisted_53","_component_retweet_button","_component_favorite_button","_component_ReactButton","_component_extra_buttons","onOnError","onOnSuccess","_hoisted_58","basePoll","expiresAt","showResults","voted","totalVotesCount","votes_count","containerClass","choiceIndices","isDisabled","noChoice","percentageForOption","resultTitle","activateOption","clickedElement","_forEach","optionId","voters_count","faLink","postLength","parseReadyDone","localCollapseSubjectDefault","tallStatus","singleLine","longSubject","mightHideBecauseSubject","mightHideBecauseTall","hideSubjectStatus","hideTallStatus","showingMore","attachmentTypes","handle","toggleShowingTall","toggleExpandingSubject","toggleShowingLongSubject","fullContent","controlledOrUncontrolledToggle","uncontrolledShowingTall","uncontrolledShowingLongSubject","uncontrolledExpandingSubject","statusCard","nsfwClickthrough","attachmentSize","Poll","galleryAttachments","_component_Poll","_component_link_preview","realSrc","appendPx","loadLazy","dataSrc","imageLoadHandler","canvas","imageLoadError","removeAttribute","localeDateString","relativeTimeString","timeString","tc","templateKey","refreshRelativeTimeObject","longFormat","datetime","faRobot","showPlaceholder","imgSrc","FORCE_NSFW","STRIP_MEDIA","FORCE_UNLISTED","DISABLE_REMOTE_SUBSCRIPTION","DISABLE_ANY_SUBSCRIPTION","SANDBOX","QUARANTINE","showDeleteUserDialog","tagsSet","canGrantRole","canChangeActivationState","privileged","canDeleteAccount","canUseTagPolicy","tagPolicyAvailable","hasTag","privilege","toggleTag","toggleRight","deleteUserDialog","isProfile","isTargetUser","setToggled","_component_DialogModal","inListsSet","inList","toggleList","faEllipsisV","showingConfirmBlock","ProgressButton","UserListMenu","showConfirmBlock","hideConfirmBlock","showRepeats","hideRepeats","shouldConfirmBlock","doBlockUser","showing_reblogs","_component_UserListMenu","localNote","frozen","startEditing","cancelEditing","finalizeEditing","faRss","faEdit","followRequestInProgress","showingConfirmMute","muteExpiryAmount","muteExpiryUnit","bordered","isOtherUser","dailyAvg","days","userHighlightType","userHighlightColor","visibleRole","validRole","roleTitle","showModerationMenu","hasNote","supportsNote","shouldConfirmMute","muteExpiryUnits","ModerationTools","AccountActions","UserNote","showConfirmMute","hideConfirmMute","doMuteUser","setProfileView","zoomAvatar","mentionUser","onAvatarClickHandler","onAvatarClick","hideBio","heading","flexible","avatarAction","_component_AccountActions","subscribing","_component_ProgressButton","_component_ModerationTools","hasNoteEditor","_component_UserNote","blocksSuspend","hasAudio","onPlaying","setHasAudio","looping","onPaused","srcElement","webkitAudioDecodedByteCount","mozHasAudio","audioTracks","preload","loop","playsinline","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","O","chunkIds","fn","notFulfilled","Infinity","fulfilled","getter","__esModule","getPrototypeOf","mode","ns","getOwnPropertyNames","definition","defineProperty","enumerable","chunkId","miniCssF","globalThis","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","onScriptComplete","doneFns","removeChild","toStringTag","nmd","installedCssChunks","miniCss","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","createStylesheet","loadStylesheet","installedChunks","installedChunkData","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/js/app.d42ab31e1d50a3265a82.js b/priv/static/static/js/app.d42ab31e1d50a3265a82.js @@ -0,0 +1,2 @@ +(()=>{var e,t,n,o,r,i={88797:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const o={about:{mrf:{federation:e=>{const{normalize:t}=e;return t(["Federation"])},keyword:{keyword_policies:e=>{const{normalize:t}=e;return t(["Keyword policies"])},ftl_removal:e=>{const{normalize:t}=e;return t(['Removal from "The Whole Known Network" Timeline'])},reject:e=>{const{normalize:t}=e;return t(["Reject"])},replace:e=>{const{normalize:t}=e;return t(["Replace"])},is_replaced_by:e=>{const{normalize:t}=e;return t(["→"])}},mrf_policies:e=>{const{normalize:t}=e;return t(["Enabled MRF policies"])},mrf_policies_desc:e=>{const{normalize:t}=e;return t(["MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:"])},simple:{simple_policies:e=>{const{normalize:t}=e;return t(["Instance-specific policies"])},instance:e=>{const{normalize:t}=e;return t(["Instance"])},reason:e=>{const{normalize:t}=e;return t(["Reason"])},not_applicable:e=>{const{normalize:t}=e;return t(["N/A"])},accept:e=>{const{normalize:t}=e;return t(["Accept"])},accept_desc:e=>{const{normalize:t}=e;return t(["This instance only accepts messages from the following instances:"])},reject:e=>{const{normalize:t}=e;return t(["Reject"])},reject_desc:e=>{const{normalize:t}=e;return t(["This instance will not accept messages from the following instances:"])},quarantine:e=>{const{normalize:t}=e;return t(["Quarantine"])},quarantine_desc:e=>{const{normalize:t}=e;return t(["This instance will send only public posts to the following instances:"])},ftl_removal:e=>{const{normalize:t}=e;return t(['Removal from "Known Network" Timeline'])},ftl_removal_desc:e=>{const{normalize:t}=e;return t(['This instance removes these instances from "Known Network" timeline:'])},media_removal:e=>{const{normalize:t}=e;return t(["Media Removal"])},media_removal_desc:e=>{const{normalize:t}=e;return t(["This instance removes media from posts on the following instances:"])},media_nsfw:e=>{const{normalize:t}=e;return t(["Media force-set as sensitive"])},media_nsfw_desc:e=>{const{normalize:t}=e;return t(["This instance forces media to be set sensitive in posts on the following instances:"])}}},staff:e=>{const{normalize:t}=e;return t(["Staff"])}},announcements:{page_header:e=>{const{normalize:t}=e;return t(["Announcements"])},title:e=>{const{normalize:t}=e;return t(["Announcement"])},mark_as_read_action:e=>{const{normalize:t}=e;return t(["Mark as read"])},post_form_header:e=>{const{normalize:t}=e;return t(["Post announcement"])},post_placeholder:e=>{const{normalize:t}=e;return t(["Type your announcement content here..."])},post_action:e=>{const{normalize:t}=e;return t(["Post"])},post_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error: ",n(o("error"))])},close_error:e=>{const{normalize:t}=e;return t(["Close"])},delete_action:e=>{const{normalize:t}=e;return t(["Delete"])},start_time_prompt:e=>{const{normalize:t}=e;return t(["Start time: "])},end_time_prompt:e=>{const{normalize:t}=e;return t(["End time: "])},all_day_prompt:e=>{const{normalize:t}=e;return t(["This is an all-day event"])},published_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Published at ",n(o("time"))])},start_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Starts at ",n(o("time"))])},end_time_display:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Ends at ",n(o("time"))])},edit_action:e=>{const{normalize:t}=e;return t(["Edit"])},submit_edit_action:e=>{const{normalize:t}=e;return t(["Submit"])},cancel_edit_action:e=>{const{normalize:t}=e;return t(["Cancel"])},inactive_message:e=>{const{normalize:t}=e;return t(["This announcement is inactive"])}},shoutbox:{title:e=>{const{normalize:t}=e;return t(["Shoutbox"])}},domain_mute_card:{mute:e=>{const{normalize:t}=e;return t(["Mute"])},mute_progress:e=>{const{normalize:t}=e;return t(["Muting…"])},unmute:e=>{const{normalize:t}=e;return t(["Unmute"])},unmute_progress:e=>{const{normalize:t}=e;return t(["Unmuting…"])}},exporter:{export:e=>{const{normalize:t}=e;return t(["Export"])},processing:e=>{const{normalize:t}=e;return t(["Processing, you'll soon be asked to download your file"])}},features_panel:{shout:e=>{const{normalize:t}=e;return t(["Shoutbox"])},pleroma_chat_messages:e=>{const{normalize:t}=e;return t(["Pleroma Chat"])},gopher:e=>{const{normalize:t}=e;return t(["Gopher"])},media_proxy:e=>{const{normalize:t}=e;return t(["Media proxy"])},scope_options:e=>{const{normalize:t}=e;return t(["Scope options"])},text_limit:e=>{const{normalize:t}=e;return t(["Text limit"])},title:e=>{const{normalize:t}=e;return t(["Features"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])},upload_limit:e=>{const{normalize:t}=e;return t(["Upload limit"])}},finder:{error_fetching_user:e=>{const{normalize:t}=e;return t(["Error fetching user"])},find_user:e=>{const{normalize:t}=e;return t(["Find user"])}},general:{apply:e=>{const{normalize:t}=e;return t(["Apply"])},submit:e=>{const{normalize:t}=e;return t(["Submit"])},more:e=>{const{normalize:t}=e;return t(["More"])},loading:e=>{const{normalize:t}=e;return t(["Loading…"])},generic_error:e=>{const{normalize:t}=e;return t(["An error occured"])},generic_error_message:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["An error occured: ",n(o(0))])},error_retry:e=>{const{normalize:t}=e;return t(["Please try again"])},retry:e=>{const{normalize:t}=e;return t(["Try again"])},optional:e=>{const{normalize:t}=e;return t(["optional"])},show_more:e=>{const{normalize:t}=e;return t(["Show more"])},show_less:e=>{const{normalize:t}=e;return t(["Show less"])},never_show_again:e=>{const{normalize:t}=e;return t(["Never show again"])},dismiss:e=>{const{normalize:t}=e;return t(["Dismiss"])},cancel:e=>{const{normalize:t}=e;return t(["Cancel"])},disable:e=>{const{normalize:t}=e;return t(["Disable"])},enable:e=>{const{normalize:t}=e;return t(["Enable"])},confirm:e=>{const{normalize:t}=e;return t(["Confirm"])},verify:e=>{const{normalize:t}=e;return t(["Verify"])},close:e=>{const{normalize:t}=e;return t(["Close"])},undo:e=>{const{normalize:t}=e;return t(["Undo"])},yes:e=>{const{normalize:t}=e;return t(["Yes"])},no:e=>{const{normalize:t}=e;return t(["No"])},peek:e=>{const{normalize:t}=e;return t(["Peek"])},scroll_to_top:e=>{const{normalize:t}=e;return t(["Scroll to top"])},role:{admin:e=>{const{normalize:t}=e;return t(["Admin"])},moderator:e=>{const{normalize:t}=e;return t(["Moderator"])}},unpin:e=>{const{normalize:t}=e;return t(["Unpin item"])},pin:e=>{const{normalize:t}=e;return t(["Pin item"])},flash_content:e=>{const{normalize:t}=e;return t(["Click to show Flash content using Ruffle (Experimental, may not work)."])},flash_security:e=>{const{normalize:t}=e;return t(["Note that this can be potentially dangerous since Flash content is still arbitrary code."])},flash_fail:e=>{const{normalize:t}=e;return t(["Failed to load flash content, see console for details."])},scope_in_timeline:{direct:e=>{const{normalize:t}=e;return t(["Direct"])},private:e=>{const{normalize:t}=e;return t(["Followers-only"])},public:e=>{const{normalize:t}=e;return t(["Public"])},unlisted:e=>{const{normalize:t}=e;return t(["Unlisted"])}}},image_cropper:{crop_picture:e=>{const{normalize:t}=e;return t(["Crop picture"])},save:e=>{const{normalize:t}=e;return t(["Save"])},save_without_cropping:e=>{const{normalize:t}=e;return t(["Save without cropping"])},cancel:e=>{const{normalize:t}=e;return t(["Cancel"])}},importer:{submit:e=>{const{normalize:t}=e;return t(["Submit"])},success:e=>{const{normalize:t}=e;return t(["Imported successfully."])},error:e=>{const{normalize:t}=e;return t(["An error occured while importing this file."])}},login:{login:e=>{const{normalize:t}=e;return t(["Log in"])},description:e=>{const{normalize:t}=e;return t(["Log in with OAuth"])},logout:e=>{const{normalize:t}=e;return t(["Log out"])},logout_confirm_title:e=>{const{normalize:t}=e;return t(["Logout confirmation"])},logout_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to logout?"])},logout_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Logout"])},logout_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not logout"])},password:e=>{const{normalize:t}=e;return t(["Password"])},placeholder:e=>{const{normalize:t}=e;return t(["e.g. lain"])},register:e=>{const{normalize:t}=e;return t(["Register"])},username:e=>{const{normalize:t}=e;return t(["Username"])},hint:e=>{const{normalize:t}=e;return t(["Log in to join the discussion"])},authentication_code:e=>{const{normalize:t}=e;return t(["Authentication code"])},enter_recovery_code:e=>{const{normalize:t}=e;return t(["Enter a recovery code"])},enter_two_factor_code:e=>{const{normalize:t}=e;return t(["Enter a two-factor code"])},recovery_code:e=>{const{normalize:t}=e;return t(["Recovery code"])},heading:{totp:e=>{const{normalize:t}=e;return t(["Two-factor authentication"])},recovery:e=>{const{normalize:t}=e;return t(["Two-factor recovery"])}}},media_modal:{previous:e=>{const{normalize:t}=e;return t(["Previous"])},next:e=>{const{normalize:t}=e;return t(["Next"])},counter:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("current"))," / ",n(o("total"))])},hide:e=>{const{normalize:t}=e;return t(["Close media viewer"])}},nav:{about:e=>{const{normalize:t}=e;return t(["About"])},administration:e=>{const{normalize:t}=e;return t(["Administration"])},back:e=>{const{normalize:t}=e;return t(["Back"])},friend_requests:e=>{const{normalize:t}=e;return t(["Follow requests"])},mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},interactions:e=>{const{normalize:t}=e;return t(["Interactions"])},dms:e=>{const{normalize:t}=e;return t(["Direct messages"])},public_tl:e=>{const{normalize:t}=e;return t(["Public timeline"])},timeline:e=>{const{normalize:t}=e;return t(["Timeline"])},home_timeline:e=>{const{normalize:t}=e;return t(["Home timeline"])},twkn:e=>{const{normalize:t}=e;return t(["Known Network"])},bookmarks:e=>{const{normalize:t}=e;return t(["Bookmarks"])},user_search:e=>{const{normalize:t}=e;return t(["User Search"])},search:e=>{const{normalize:t}=e;return t(["Search"])},search_close:e=>{const{normalize:t}=e;return t(["Close search bar"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])},preferences:e=>{const{normalize:t}=e;return t(["Preferences"])},timelines:e=>{const{normalize:t}=e;return t(["Timelines"])},chats:e=>{const{normalize:t}=e;return t(["Chats"])},lists:e=>{const{normalize:t}=e;return t(["Lists"])},edit_nav_mobile:e=>{const{normalize:t}=e;return t(["Customize navigation bar"])},edit_pinned:e=>{const{normalize:t}=e;return t(["Edit pinned items"])},edit_finish:e=>{const{normalize:t}=e;return t(["Done editing"])},mobile_sidebar:e=>{const{normalize:t}=e;return t(["Toggle mobile sidebar"])},mobile_notifications:e=>{const{normalize:t}=e;return t(["Open notifications"])},mobile_notifications:e=>{const{normalize:t}=e;return t(["Open notifications (there are unread ones)"])},mobile_notifications_close:e=>{const{normalize:t}=e;return t(["Close notifications"])},announcements:e=>{const{normalize:t}=e;return t(["Announcements"])}},notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Unknown status, searching for it…"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error fetching notifications: ",n(o(0))])},favorited_you:e=>{const{normalize:t}=e;return t(["favorited your status"])},followed_you:e=>{const{normalize:t}=e;return t(["followed you"])},follow_request:e=>{const{normalize:t}=e;return t(["wants to follow you"])},load_older:e=>{const{normalize:t}=e;return t(["Load older notifications"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},read:e=>{const{normalize:t}=e;return t(["Read!"])},repeated_you:e=>{const{normalize:t}=e;return t(["repeated your status"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["No more notifications"])},migrated_to:e=>{const{normalize:t}=e;return t(["migrated to"])},reacted_with:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["reacted with ",n(o(0))])},submitted_report:e=>{const{normalize:t}=e;return t(["submitted a report"])},poll_ended:e=>{const{normalize:t}=e;return t(["poll has ended"])}},polls:{add_poll:e=>{const{normalize:t}=e;return t(["Add poll"])},add_option:e=>{const{normalize:t}=e;return t(["Add option"])},option:e=>{const{normalize:t}=e;return t(["Option"])},votes:e=>{const{normalize:t}=e;return t(["votes"])},people_voted_count:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("count"))," person voted"]),t([n(o("count"))," people voted"])])},votes_count:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("count"))," vote"]),t([n(o("count"))," votes"])])},vote:e=>{const{normalize:t}=e;return t(["Vote"])},type:e=>{const{normalize:t}=e;return t(["Poll type"])},single_choice:e=>{const{normalize:t}=e;return t(["Single choice"])},multiple_choices:e=>{const{normalize:t}=e;return t(["Multiple choices"])},expiry:e=>{const{normalize:t}=e;return t(["Poll age"])},expires_in:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Poll ends in ",n(o(0))])},expired:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Poll ended ",n(o(0))," ago"])},not_enough_options:e=>{const{normalize:t}=e;return t(["Too few unique options in poll"])}},emoji:{stickers:e=>{const{normalize:t}=e;return t(["Stickers"])},emoji:e=>{const{normalize:t}=e;return t(["Emoji"])},keep_open:e=>{const{normalize:t}=e;return t(["Keep picker open"])},search_emoji:e=>{const{normalize:t}=e;return t(["Search for an emoji"])},add_emoji:e=>{const{normalize:t}=e;return t(["Insert emoji"])},custom:e=>{const{normalize:t}=e;return t(["Custom emoji"])},unpacked:e=>{const{normalize:t}=e;return t(["Unpacked emoji"])},unicode:e=>{const{normalize:t}=e;return t(["Unicode emoji"])},unicode_groups:{activities:e=>{const{normalize:t}=e;return t(["Activities"])},"animals-and-nature":e=>{const{normalize:t}=e;return t(["Animals & Nature"])},flags:e=>{const{normalize:t}=e;return t(["Flags"])},"food-and-drink":e=>{const{normalize:t}=e;return t(["Food & Drink"])},objects:e=>{const{normalize:t}=e;return t(["Objects"])},"people-and-body":e=>{const{normalize:t}=e;return t(["People & Body"])},"smileys-and-emotion":e=>{const{normalize:t}=e;return t(["Smileys & Emotion"])},symbols:e=>{const{normalize:t}=e;return t(["Symbols"])},"travel-and-places":e=>{const{normalize:t}=e;return t(["Travel & Places"])}},load_all_hint:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Loaded first ",n(o("saneAmount"))," emoji, loading all emoji may cause performance issues."])},load_all:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Loading all ",n(o("emojiAmount"))," emoji"])},regional_indicator:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Regional indicator ",n(o("letter"))])}},errors:{storage_unavailable:e=>{const{normalize:t}=e;return t(["Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."])}},interactions:{favs_repeats:e=>{const{normalize:t}=e;return t(["Repeats and favorites"])},follows:e=>{const{normalize:t}=e;return t(["New follows"])},emoji_reactions:e=>{const{normalize:t}=e;return t(["Emoji Reactions"])},reports:e=>{const{normalize:t}=e;return t(["Reports"])},moves:e=>{const{normalize:t}=e;return t(["User migrates"])},load_older:e=>{const{normalize:t}=e;return t(["Load older interactions"])}},post_status:{edit_status:e=>{const{normalize:t}=e;return t(["Edit status"])},new_status:e=>{const{normalize:t}=e;return t(["Post new status"])},reply_option:e=>{const{normalize:t}=e;return t(["Reply to this status"])},quote_option:e=>{const{normalize:t}=e;return t(["Quote this status"])},account_not_locked_warning:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Your account is not ",n(o(0)),". Anyone can follow you to view your follower-only posts."])},account_not_locked_warning_link:e=>{const{normalize:t}=e;return t(["locked"])},attachments_sensitive:e=>{const{normalize:t}=e;return t(["Mark attachments as sensitive"])},media_description:e=>{const{normalize:t}=e;return t(["Media description"])},content_type:{"text/plain":e=>{const{normalize:t}=e;return t(["Plain text"])},"text/html":e=>{const{normalize:t}=e;return t(["HTML"])},"text/markdown":e=>{const{normalize:t}=e;return t(["Markdown"])},"text/bbcode":e=>{const{normalize:t}=e;return t(["BBCode"])}},content_type_selection:e=>{const{normalize:t}=e;return t(["Post format"])},content_warning:e=>{const{normalize:t}=e;return t(["Subject (optional)"])},default:e=>{const{normalize:t}=e;return t(["Just landed in L.A."])},direct_warning_to_all:e=>{const{normalize:t}=e;return t(["This post will be visible to all the mentioned users."])},direct_warning_to_first_only:e=>{const{normalize:t}=e;return t(["This post will only be visible to the mentioned users at the beginning of the message."])},edit_remote_warning:e=>{const{normalize:t}=e;return t(["Other remote instances may not support editing and unable to receive the latest version of your post."])},edit_unsupported_warning:e=>{const{normalize:t}=e;return t(["Pleroma does not support editing mentions or polls."])},posting:e=>{const{normalize:t}=e;return t(["Posting"])},post:e=>{const{normalize:t}=e;return t(["Post"])},preview:e=>{const{normalize:t}=e;return t(["Preview"])},preview_empty:e=>{const{normalize:t}=e;return t(["Empty"])},empty_status_error:e=>{const{normalize:t}=e;return t(["Can't post an empty status with no files"])},media_description_error:e=>{const{normalize:t}=e;return t(["Failed to update media, try again"])},scope_notice:{public:e=>{const{normalize:t}=e;return t(["This post will be visible to everyone"])},private:e=>{const{normalize:t}=e;return t(["This post will be visible to your followers only"])},unlisted:e=>{const{normalize:t}=e;return t(["This post will not be visible in Public Timeline and The Whole Known Network"])}},scope_notice_dismiss:e=>{const{normalize:t}=e;return t(["Close this notice"])},scope:{direct:e=>{const{normalize:t}=e;return t(["Direct - post to mentioned users only"])},private:e=>{const{normalize:t}=e;return t(["Followers-only - post to followers only"])},public:e=>{const{normalize:t}=e;return t(["Public - post to public timelines"])},unlisted:e=>{const{normalize:t}=e;return t(["Unlisted - do not post to public timelines"])}}},registration:{bio_optional:e=>{const{normalize:t}=e;return t(["Bio (optional)"])},email:e=>{const{normalize:t}=e;return t(["Email"])},email_optional:e=>{const{normalize:t}=e;return t(["Email (optional)"])},fullname:e=>{const{normalize:t}=e;return t(["Display name"])},password_confirm:e=>{const{normalize:t}=e;return t(["Password confirmation"])},registration:e=>{const{normalize:t}=e;return t(["Registration"])},token:e=>{const{normalize:t}=e;return t(["Invite token"])},captcha:e=>{const{normalize:t}=e;return t(["CAPTCHA"])},new_captcha:e=>{const{normalize:t}=e;return t(["Click the image to get a new captcha"])},username_placeholder:e=>{const{normalize:t}=e;return t(["e.g. lain"])},fullname_placeholder:e=>{const{normalize:t}=e;return t(["e.g. Lain Iwakura"])},bio_placeholder:e=>{const{normalize:t}=e;return t(["e.g.\nHi, I'm Lain.\nI’m an anime girl living in suburban Japan. You may know me from the Wired."])},reason:e=>{const{normalize:t}=e;return t(["Reason to register"])},reason_placeholder:e=>{const{normalize:t}=e;return t(["This instance approves registrations manually.\nLet the administration know why you want to register."])},register:e=>{const{normalize:t}=e;return t(["Register"])},validations:{username_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},fullname_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},email_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_confirmation_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},password_confirmation_match:e=>{const{normalize:t}=e;return t(["should be the same as password"])},birthday_required:e=>{const{normalize:t}=e;return t(["cannot be left blank"])},birthday_min_age:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["must be on or before ",n(o("date"))])}},email_language:e=>{const{normalize:t}=e;return t(["In which language do you want to receive emails from the server?"])},birthday:e=>{const{normalize:t}=e;return t(["Birthday:"])},birthday_optional:e=>{const{normalize:t}=e;return t(["Birthday (optional):"])}},remote_user_resolver:{remote_user_resolver:e=>{const{normalize:t}=e;return t(["Remote user resolver"])},searching_for:e=>{const{normalize:t}=e;return t(["Searching for"])},error:e=>{const{normalize:t}=e;return t(["Not found."])}},report:{reporter:e=>{const{normalize:t}=e;return t(["Reporter:"])},reported_user:e=>{const{normalize:t}=e;return t(["Reported user:"])},reported_statuses:e=>{const{normalize:t}=e;return t(["Reported statuses:"])},notes:e=>{const{normalize:t}=e;return t(["Notes:"])},state:e=>{const{normalize:t}=e;return t(["State:"])},state_open:e=>{const{normalize:t}=e;return t(["Open"])},state_closed:e=>{const{normalize:t}=e;return t(["Closed"])},state_resolved:e=>{const{normalize:t}=e;return t(["Resolved"])}},selectable_list:{select_all:e=>{const{normalize:t}=e;return t(["Select all"])}},settings:{add_language:e=>{const{normalize:t}=e;return t(["Add fallback language"])},remove_language:e=>{const{normalize:t}=e;return t(["Remove"])},primary_language:e=>{const{normalize:t}=e;return t(["Primary language:"])},fallback_language:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Fallback language ",n(o("index")),":"])},app_name:e=>{const{normalize:t}=e;return t(["App name"])},expert_mode:e=>{const{normalize:t}=e;return t(["Show advanced"])},save:e=>{const{normalize:t}=e;return t(["Save changes"])},security:e=>{const{normalize:t}=e;return t(["Security"])},setting_changed:e=>{const{normalize:t}=e;return t(["Setting is different from default"])},setting_server_side:e=>{const{normalize:t}=e;return t(["This setting is tied to your profile and affects all sessions and clients"])},enter_current_password_to_confirm:e=>{const{normalize:t}=e;return t(["Enter your current password to confirm your identity"])},post_look_feel:e=>{const{normalize:t}=e;return t(["Posts Look & Feel"])},mention_links:e=>{const{normalize:t}=e;return t(["Mention links"])},mfa:{otp:e=>{const{normalize:t}=e;return t(["OTP"])},setup_otp:e=>{const{normalize:t}=e;return t(["Setup OTP"])},wait_pre_setup_otp:e=>{const{normalize:t}=e;return t(["presetting OTP"])},confirm_and_enable:e=>{const{normalize:t}=e;return t(["Confirm & enable OTP"])},title:e=>{const{normalize:t}=e;return t(["Two-factor Authentication"])},generate_new_recovery_codes:e=>{const{normalize:t}=e;return t(["Generate new recovery codes"])},warning_of_generate_new_codes:e=>{const{normalize:t}=e;return t(["When you generate new recovery codes, your old codes won’t work anymore."])},recovery_codes:e=>{const{normalize:t}=e;return t(["Recovery codes."])},waiting_a_recovery_codes:e=>{const{normalize:t}=e;return t(["Receiving backup codes…"])},recovery_codes_warning:e=>{const{normalize:t}=e;return t(["Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account."])},authentication_methods:e=>{const{normalize:t}=e;return t(["Authentication methods"])},scan:{title:e=>{const{normalize:t}=e;return t(["Scan"])},desc:e=>{const{normalize:t}=e;return t(["Using your two-factor app, scan this QR code or enter text key:"])},secret_code:e=>{const{normalize:t}=e;return t(["Key"])}},verify:{desc:e=>{const{normalize:t}=e;return t(["To enable two-factor authentication, enter the code from your two-factor app:"])}}},lists_navigation:e=>{const{normalize:t}=e;return t(["Show lists in navigation"])},allow_following_move:e=>{const{normalize:t}=e;return t(["Allow auto-follow when following account moves"])},attachmentRadius:e=>{const{normalize:t}=e;return t(["Attachments"])},attachments:e=>{const{normalize:t}=e;return t(["Attachments"])},avatar:e=>{const{normalize:t}=e;return t(["Avatar"])},avatarAltRadius:e=>{const{normalize:t}=e;return t(["Avatars (notifications)"])},avatarRadius:e=>{const{normalize:t}=e;return t(["Avatars"])},background:e=>{const{normalize:t}=e;return t(["Background"])},bio:e=>{const{normalize:t}=e;return t(["Bio"])},email_language:e=>{const{normalize:t}=e;return t(["Language for receiving emails from the server"])},block_export:e=>{const{normalize:t}=e;return t(["Block export"])},block_export_button:e=>{const{normalize:t}=e;return t(["Export your blocks to a csv file"])},block_import:e=>{const{normalize:t}=e;return t(["Block import"])},block_import_error:e=>{const{normalize:t}=e;return t(["Error importing blocks"])},blocks_imported:e=>{const{normalize:t}=e;return t(["Blocks imported! Processing them will take a while."])},mute_export:e=>{const{normalize:t}=e;return t(["Mute export"])},mute_export_button:e=>{const{normalize:t}=e;return t(["Export your mutes to a csv file"])},mute_import:e=>{const{normalize:t}=e;return t(["Mute import"])},mute_import_error:e=>{const{normalize:t}=e;return t(["Error importing mutes"])},mutes_imported:e=>{const{normalize:t}=e;return t(["Mutes imported! Processing them will take a while."])},import_mutes_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import mutes from a csv file"])},account_backup:e=>{const{normalize:t}=e;return t(["Account backup"])},account_backup_description:e=>{const{normalize:t}=e;return t(["This allows you to download an archive of your account information and your posts, but they cannot yet be imported into a Pleroma account."])},account_backup_table_head:e=>{const{normalize:t}=e;return t(["Backup"])},download_backup:e=>{const{normalize:t}=e;return t(["Download"])},backup_not_ready:e=>{const{normalize:t}=e;return t(["This backup is not ready yet."])},backup_running:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["This backup is in progress, processed ",n(o("number"))," record."]),t(["This backup is in progress, processed ",n(o("number"))," records."])])},backup_failed:e=>{const{normalize:t}=e;return t(["This backup has failed."])},remove_backup:e=>{const{normalize:t}=e;return t(["Remove"])},list_backups_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error fetching backup list: ",n(o("error"))])},add_backup:e=>{const{normalize:t}=e;return t(["Create a new backup"])},added_backup:e=>{const{normalize:t}=e;return t(["Added a new backup."])},add_backup_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error adding a new backup: ",n(o("error"))])},blocks_tab:e=>{const{normalize:t}=e;return t(["Blocks"])},bot:e=>{const{normalize:t}=e;return t(["This is a bot account"])},btnRadius:e=>{const{normalize:t}=e;return t(["Buttons"])},cBlue:e=>{const{normalize:t}=e;return t(["Blue (Reply, follow)"])},cGreen:e=>{const{normalize:t}=e;return t(["Green (Retweet)"])},cOrange:e=>{const{normalize:t}=e;return t(["Orange (Favorite)"])},cRed:e=>{const{normalize:t}=e;return t(["Red (Cancel)"])},change_email:e=>{const{normalize:t}=e;return t(["Change email"])},change_email_error:e=>{const{normalize:t}=e;return t(["There was an issue changing your email."])},changed_email:e=>{const{normalize:t}=e;return t(["Email changed successfully!"])},change_password:e=>{const{normalize:t}=e;return t(["Change password"])},change_password_error:e=>{const{normalize:t}=e;return t(["There was an issue changing your password."])},changed_password:e=>{const{normalize:t}=e;return t(["Password changed successfully!"])},chatMessageRadius:e=>{const{normalize:t}=e;return t(["Chat message"])},collapse_subject:e=>{const{normalize:t}=e;return t(["Collapse posts with subjects"])},composing:e=>{const{normalize:t}=e;return t(["Composing"])},confirm_new_password:e=>{const{normalize:t}=e;return t(["Confirm new password"])},current_password:e=>{const{normalize:t}=e;return t(["Current password"])},confirm_dialogs:e=>{const{normalize:t}=e;return t(["Ask for confirmation when"])},confirm_dialogs_repeat:e=>{const{normalize:t}=e;return t(["repeating a status"])},confirm_dialogs_unfollow:e=>{const{normalize:t}=e;return t(["unfollowing a user"])},confirm_dialogs_block:e=>{const{normalize:t}=e;return t(["blocking a user"])},confirm_dialogs_mute:e=>{const{normalize:t}=e;return t(["muting a user"])},confirm_dialogs_delete:e=>{const{normalize:t}=e;return t(["deleting a status"])},confirm_dialogs_logout:e=>{const{normalize:t}=e;return t(["logging out"])},confirm_dialogs_approve_follow:e=>{const{normalize:t}=e;return t(["approving a follower"])},confirm_dialogs_deny_follow:e=>{const{normalize:t}=e;return t(["denying a follower"])},confirm_dialogs_remove_follower:e=>{const{normalize:t}=e;return t(["removing a follower"])},mutes_and_blocks:e=>{const{normalize:t}=e;return t(["Mutes and Blocks"])},data_import_export_tab:e=>{const{normalize:t}=e;return t(["Data import / export"])},default_vis:e=>{const{normalize:t}=e;return t(["Default visibility scope"])},delete_account:e=>{const{normalize:t}=e;return t(["Delete account"])},delete_account_description:e=>{const{normalize:t}=e;return t(["Permanently delete your data and deactivate your account."])},delete_account_error:e=>{const{normalize:t}=e;return t(["There was an issue deleting your account. If this persists please contact your instance administrator."])},delete_account_instructions:e=>{const{normalize:t}=e;return t(["Type your password in the input below to confirm account deletion."])},account_alias:e=>{const{normalize:t}=e;return t(["Account aliases"])},account_alias_table_head:e=>{const{normalize:t}=e;return t(["Alias"])},list_aliases_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error fetching aliases: ",n(o("error"))])},hide_list_aliases_error_action:e=>{const{normalize:t}=e;return t(["Close"])},remove_alias:e=>{const{normalize:t}=e;return t(["Remove this alias"])},new_alias_target:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Add a new alias (e.g. ",n(o("example")),")"])},added_alias:e=>{const{normalize:t}=e;return t(["Alias is added."])},add_alias_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error adding alias: ",n(o("error"))])},move_account:e=>{const{normalize:t}=e;return t(["Move account"])},move_account_notes:e=>{const{normalize:t}=e;return t(["If you want to move the account somewhere else, you must go to your target account and add an alias pointing here."])},move_account_target:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Target account (e.g. ",n(o("example")),")"])},moved_account:e=>{const{normalize:t}=e;return t(["Account is moved."])},move_account_error:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Error moving account: ",n(o("error"))])},discoverable:e=>{const{normalize:t}=e;return t(["Allow discovery of this account in search results and other services"])},domain_mutes:e=>{const{normalize:t}=e;return t(["Domains"])},avatar_size_instruction:e=>{const{normalize:t}=e;return t(["The recommended minimum size for avatar images is 150x150 pixels."])},pad_emoji:e=>{const{normalize:t}=e;return t(["Pad emoji with spaces when adding from picker"])},autocomplete_select_first:e=>{const{normalize:t}=e;return t(["Automatically select the first candidate when autocomplete results are available"])},emoji_reactions_on_timeline:e=>{const{normalize:t}=e;return t(["Show emoji reactions on timeline"])},emoji_reactions_scale:e=>{const{normalize:t}=e;return t(["Reactions scale factor"])},export_theme:e=>{const{normalize:t}=e;return t(["Save preset"])},filtering:e=>{const{normalize:t}=e;return t(["Filtering"])},wordfilter:e=>{const{normalize:t}=e;return t(["Wordfilter"])},filtering_explanation:e=>{const{normalize:t}=e;return t(["All statuses containing these words will be muted, one per line"])},word_filter_and_more:e=>{const{normalize:t}=e;return t(["Word filter and more..."])},follow_export:e=>{const{normalize:t}=e;return t(["Follow export"])},follow_export_button:e=>{const{normalize:t}=e;return t(["Export your follows to a csv file"])},follow_import:e=>{const{normalize:t}=e;return t(["Follow import"])},follow_import_error:e=>{const{normalize:t}=e;return t(["Error importing followers"])},follows_imported:e=>{const{normalize:t}=e;return t(["Follows imported! Processing them will take a while."])},accent:e=>{const{normalize:t}=e;return t(["Accent"])},foreground:e=>{const{normalize:t}=e;return t(["Foreground"])},general:e=>{const{normalize:t}=e;return t(["General"])},hide_attachments_in_convo:e=>{const{normalize:t}=e;return t(["Hide attachments in conversations"])},hide_attachments_in_tl:e=>{const{normalize:t}=e;return t(["Hide attachments in timeline"])},hide_media_previews:e=>{const{normalize:t}=e;return t(["Hide media previews"])},hide_muted_posts:e=>{const{normalize:t}=e;return t(["Hide posts of muted users"])},mute_bot_posts:e=>{const{normalize:t}=e;return t(["Mute bot posts"])},hide_bot_indication:e=>{const{normalize:t}=e;return t(["Hide bot indication in posts"])},hide_all_muted_posts:e=>{const{normalize:t}=e;return t(["Hide muted posts"])},max_thumbnails:e=>{const{normalize:t}=e;return t(["Maximum amount of thumbnails per post (empty = no limit)"])},hide_isp:e=>{const{normalize:t}=e;return t(["Hide instance-specific panel"])},hide_shoutbox:e=>{const{normalize:t}=e;return t(["Hide instance shoutbox"])},right_sidebar:e=>{const{normalize:t}=e;return t(["Reverse order of columns"])},navbar_column_stretch:e=>{const{normalize:t}=e;return t(["Stretch navbar to columns width"])},always_show_post_button:e=>{const{normalize:t}=e;return t(["Always show floating New Post button"])},hide_wallpaper:e=>{const{normalize:t}=e;return t(["Hide instance wallpaper"])},preload_images:e=>{const{normalize:t}=e;return t(["Preload images"])},use_one_click_nsfw:e=>{const{normalize:t}=e;return t(["Open NSFW attachments with just one click"])},hide_post_stats:e=>{const{normalize:t}=e;return t(["Hide post statistics (e.g. the number of favorites)"])},hide_user_stats:e=>{const{normalize:t}=e;return t(["Hide user statistics (e.g. the number of followers)"])},hide_filtered_statuses:e=>{const{normalize:t}=e;return t(["Hide all filtered posts"])},hide_wordfiltered_statuses:e=>{const{normalize:t}=e;return t(["Hide word-filtered statuses"])},hide_muted_threads:e=>{const{normalize:t}=e;return t(["Hide muted threads"])},import_blocks_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import blocks from a csv file"])},import_followers_from_a_csv_file:e=>{const{normalize:t}=e;return t(["Import follows from a csv file"])},import_theme:e=>{const{normalize:t}=e;return t(["Load preset"])},inputRadius:e=>{const{normalize:t}=e;return t(["Input fields"])},checkboxRadius:e=>{const{normalize:t}=e;return t(["Checkboxes"])},instance_default:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(default: ",n(o("value")),")"])},instance_default_simple:e=>{const{normalize:t}=e;return t(["(default)"])},interface:e=>{const{normalize:t}=e;return t(["Interface"])},interfaceLanguage:e=>{const{normalize:t}=e;return t(["Interface language"])},invalid_theme_imported:e=>{const{normalize:t}=e;return t(["The selected file is not a supported Pleroma theme. No changes to your theme were made."])},limited_availability:e=>{const{normalize:t}=e;return t(["Unavailable in your browser"])},links:e=>{const{normalize:t}=e;return t(["Links"])},lock_account_description:e=>{const{normalize:t}=e;return t(["Restrict your account to approved followers only"])},loop_video:e=>{const{normalize:t}=e;return t(["Loop videos"])},loop_video_silent_only:e=>{const{normalize:t}=e;return t(['Loop only videos without sound (i.e. Mastodon\'s "gifs")'])},mutes_tab:e=>{const{normalize:t}=e;return t(["Mutes"])},play_videos_in_modal:e=>{const{normalize:t}=e;return t(["Play videos in a popup frame"])},url:e=>{const{normalize:t}=e;return t(["URL"])},preview:e=>{const{normalize:t}=e;return t(["Preview"])},file_export_import:{backup_restore:e=>{const{normalize:t}=e;return t(["Settings backup"])},backup_settings:e=>{const{normalize:t}=e;return t(["Backup settings to file"])},backup_settings_theme:e=>{const{normalize:t}=e;return t(["Backup settings and theme to file"])},restore_settings:e=>{const{normalize:t}=e;return t(["Restore settings from file"])},errors:{invalid_file:e=>{const{normalize:t}=e;return t(["The selected file is not a supported Pleroma settings backup. No changes were made."])},file_too_new:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Incompatile major version: ",n(o("fileMajor")),", this PleromaFE (settings ver ",n(o("feMajor")),") is too old to handle it"])},file_too_old:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Incompatile major version: ",n(o("fileMajor")),", file version is too old and not supported (min. set. ver. ",n(o("feMajor")),")"])},file_slightly_new:e=>{const{normalize:t}=e;return t(["File minor version is different, some settings might not load"])}}},profile_fields:{label:e=>{const{normalize:t}=e;return t(["Profile metadata"])},add_field:e=>{const{normalize:t}=e;return t(["Add field"])},name:e=>{const{normalize:t}=e;return t(["Label"])},value:e=>{const{normalize:t}=e;return t(["Content"])}},birthday:{label:e=>{const{normalize:t}=e;return t(["Birthday"])},show_birthday:e=>{const{normalize:t}=e;return t(["Show my birthday"])}},account_privacy:e=>{const{normalize:t}=e;return t(["Privacy"])},use_contain_fit:e=>{const{normalize:t}=e;return t(["Don't crop the attachment in thumbnails"])},name:e=>{const{normalize:t}=e;return t(["Name"])},name_bio:e=>{const{normalize:t}=e;return t(["Name & bio"])},new_email:e=>{const{normalize:t}=e;return t(["New email"])},new_password:e=>{const{normalize:t}=e;return t(["New password"])},posts:e=>{const{normalize:t}=e;return t(["Posts"])},user_profiles:e=>{const{normalize:t}=e;return t(["User Profiles"])},notification_visibility:e=>{const{normalize:t}=e;return t(["Types of notifications to show"])},notification_visibility_follows:e=>{const{normalize:t}=e;return t(["Follows"])},notification_visibility_likes:e=>{const{normalize:t}=e;return t(["Favorites"])},notification_visibility_mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},notification_visibility_repeats:e=>{const{normalize:t}=e;return t(["Repeats"])},notification_visibility_moves:e=>{const{normalize:t}=e;return t(["User Migrates"])},notification_visibility_emoji_reactions:e=>{const{normalize:t}=e;return t(["Reactions"])},notification_visibility_polls:e=>{const{normalize:t}=e;return t(["Ends of polls you voted in"])},no_rich_text_description:e=>{const{normalize:t}=e;return t(["Strip rich text formatting from all posts"])},no_blocks:e=>{const{normalize:t}=e;return t(["No blocks"])},no_mutes:e=>{const{normalize:t}=e;return t(["No mutes"])},hide_favorites_description:e=>{const{normalize:t}=e;return t(["Don't show list of my favorites (people still get notified)"])},hide_follows_description:e=>{const{normalize:t}=e;return t(["Don't show who I'm following"])},hide_followers_description:e=>{const{normalize:t}=e;return t(["Don't show who's following me"])},hide_follows_count_description:e=>{const{normalize:t}=e;return t(["Don't show follow count"])},hide_followers_count_description:e=>{const{normalize:t}=e;return t(["Don't show follower count"])},show_admin_badge:e=>{const{normalize:t}=e;return t(['Show "Admin" badge in my profile'])},show_moderator_badge:e=>{const{normalize:t}=e;return t(['Show "Moderator" badge in my profile'])},nsfw_clickthrough:e=>{const{normalize:t}=e;return t(["Hide sensitive/NSFW media"])},oauth_tokens:e=>{const{normalize:t}=e;return t(["OAuth tokens"])},token:e=>{const{normalize:t}=e;return t(["Token"])},refresh_token:e=>{const{normalize:t}=e;return t(["Refresh token"])},valid_until:e=>{const{normalize:t}=e;return t(["Valid until"])},revoke_token:e=>{const{normalize:t}=e;return t(["Revoke"])},panelRadius:e=>{const{normalize:t}=e;return t(["Panels"])},pause_on_unfocused:e=>{const{normalize:t}=e;return t(["Pause when tab is not focused"])},presets:e=>{const{normalize:t}=e;return t(["Presets"])},profile_background:e=>{const{normalize:t}=e;return t(["Profile background"])},profile_banner:e=>{const{normalize:t}=e;return t(["Profile banner"])},profile_tab:e=>{const{normalize:t}=e;return t(["Profile"])},radii_help:e=>{const{normalize:t}=e;return t(["Set up interface edge rounding (in pixels)"])},replies_in_timeline:e=>{const{normalize:t}=e;return t(["Replies in timeline"])},reply_visibility_all:e=>{const{normalize:t}=e;return t(["Show all replies"])},reply_visibility_following:e=>{const{normalize:t}=e;return t(["Only show replies directed at me or users I'm following"])},reply_visibility_self:e=>{const{normalize:t}=e;return t(["Only show replies directed at me"])},reply_visibility_following_short:e=>{const{normalize:t}=e;return t(["Show replies to my follows"])},reply_visibility_self_short:e=>{const{normalize:t}=e;return t(["Show replies to self only"])},autohide_floating_post_button:e=>{const{normalize:t}=e;return t(["Automatically hide New Post button (mobile)"])},saving_err:e=>{const{normalize:t}=e;return t(["Error saving settings"])},saving_ok:e=>{const{normalize:t}=e;return t(["Settings saved"])},search_user_to_block:e=>{const{normalize:t}=e;return t(["Search whom you want to block"])},search_user_to_mute:e=>{const{normalize:t}=e;return t(["Search whom you want to mute"])},security_tab:e=>{const{normalize:t}=e;return t(["Security"])},scope_copy:e=>{const{normalize:t}=e;return t(["Copy scope when replying (DMs are always copied)"])},minimal_scopes_mode:e=>{const{normalize:t}=e;return t(["Minimize post scope selection options"])},set_new_avatar:e=>{const{normalize:t}=e;return t(["Set new avatar"])},set_new_profile_background:e=>{const{normalize:t}=e;return t(["Set new profile background"])},set_new_profile_banner:e=>{const{normalize:t}=e;return t(["Set new profile banner"])},reset_avatar:e=>{const{normalize:t}=e;return t(["Reset avatar"])},reset_profile_background:e=>{const{normalize:t}=e;return t(["Reset profile background"])},reset_profile_banner:e=>{const{normalize:t}=e;return t(["Reset profile banner"])},reset_avatar_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the avatar?"])},reset_banner_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the banner?"])},reset_background_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to reset the background?"])},settings:e=>{const{normalize:t}=e;return t(["Settings"])},subject_input_always_show:e=>{const{normalize:t}=e;return t(["Always show subject field"])},subject_line_behavior:e=>{const{normalize:t}=e;return t(["Copy subject when replying"])},subject_line_email:e=>{const{normalize:t}=e;return t(['Like email: "re: subject"'])},subject_line_mastodon:e=>{const{normalize:t}=e;return t(["Like mastodon: copy as is"])},subject_line_noop:e=>{const{normalize:t}=e;return t(["Do not copy"])},conversation_display:e=>{const{normalize:t}=e;return t(["Conversation display style"])},conversation_display_tree:e=>{const{normalize:t}=e;return t(["Tree-style"])},conversation_display_tree_quick:e=>{const{normalize:t}=e;return t(["Tree view"])},disable_sticky_headers:e=>{const{normalize:t}=e;return t(["Don't stick column headers to top of the screen"])},show_scrollbars:e=>{const{normalize:t}=e;return t(["Show side column's scrollbars"])},third_column_mode:e=>{const{normalize:t}=e;return t(["When there's enough space, show third column containing"])},third_column_mode_none:e=>{const{normalize:t}=e;return t(["Don't show third column at all"])},third_column_mode_notifications:e=>{const{normalize:t}=e;return t(["Notifications column"])},third_column_mode_postform:e=>{const{normalize:t}=e;return t(["Main post form and navigation"])},columns:e=>{const{normalize:t}=e;return t(["Columns"])},column_sizes:e=>{const{normalize:t}=e;return t(["Column sizes"])},column_sizes_sidebar:e=>{const{normalize:t}=e;return t(["Sidebar"])},column_sizes_content:e=>{const{normalize:t}=e;return t(["Content"])},column_sizes_notifs:e=>{const{normalize:t}=e;return t(["Notifications"])},tree_advanced:e=>{const{normalize:t}=e;return t(["Allow more flexible navigation in tree view"])},tree_fade_ancestors:e=>{const{normalize:t}=e;return t(["Display ancestors of the current status in faint text"])},conversation_display_linear:e=>{const{normalize:t}=e;return t(["Linear-style"])},conversation_display_linear_quick:e=>{const{normalize:t}=e;return t(["Linear view"])},conversation_other_replies_button:e=>{const{normalize:t}=e;return t(['Show the "other replies" button'])},conversation_other_replies_button_below:e=>{const{normalize:t}=e;return t(["Below statuses"])},conversation_other_replies_button_inside:e=>{const{normalize:t}=e;return t(["Inside statuses"])},max_depth_in_thread:e=>{const{normalize:t}=e;return t(["Maximum number of levels in thread to display by default"])},post_status_content_type:e=>{const{normalize:t}=e;return t(["Post status content type"])},sensitive_by_default:e=>{const{normalize:t}=e;return t(["Mark posts as sensitive by default"])},stop_gifs:e=>{const{normalize:t}=e;return t(["Pause animated images until you hover on them"])},streaming:e=>{const{normalize:t}=e;return t(["Automatically show new posts when scrolled to the top"])},auto_update:e=>{const{normalize:t}=e;return t(["Show new posts automatically"])},user_mutes:e=>{const{normalize:t}=e;return t(["Users"])},useStreamingApi:e=>{const{normalize:t}=e;return t(["Receive posts and notifications real-time"])},use_websockets:e=>{const{normalize:t}=e;return t(["Use websockets (Realtime updates)"])},text:e=>{const{normalize:t}=e;return t(["Text"])},theme:e=>{const{normalize:t}=e;return t(["Theme"])},theme_help:e=>{const{normalize:t}=e;return t(["Use hex color codes (#rrggbb) to customize your color theme."])},theme_help_v2_1:e=>{const{normalize:t}=e;return t(['You can also override certain component\'s colors and opacity by toggling the checkbox, use "Clear all" button to clear all overrides.'])},theme_help_v2_2:e=>{const{normalize:t}=e;return t(["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."])},tooltipRadius:e=>{const{normalize:t}=e;return t(["Tooltips/alerts"])},type_domains_to_mute:e=>{const{normalize:t}=e;return t(["Search domains to mute"])},upload_a_photo:e=>{const{normalize:t}=e;return t(["Upload a photo"])},user_settings:e=>{const{normalize:t}=e;return t(["User Settings"])},values:{false:e=>{const{normalize:t}=e;return t(["no"])},true:e=>{const{normalize:t}=e;return t(["yes"])}},virtual_scrolling:e=>{const{normalize:t}=e;return t(["Optimize timeline rendering"])},use_at_icon:e=>{const{normalize:t}=e;return t(["Display ","@"," symbol as an icon instead of text"])},mention_link_display:e=>{const{normalize:t}=e;return t(["Display mention links"])},mention_link_display_short:e=>{const{normalize:t}=e;return t(["always as short names (e.g. ","@","foo)"])},mention_link_display_full_for_remote:e=>{const{normalize:t}=e;return t(["as full names only for remote users (e.g. ","@","foo","@","example.org)"])},mention_link_display_full:e=>{const{normalize:t}=e;return t(["always as full names (e.g. ","@","foo","@","example.org)"])},mention_link_use_tooltip:e=>{const{normalize:t}=e;return t(["Show user card when clicking mention links"])},mention_link_show_avatar:e=>{const{normalize:t}=e;return t(["Show user avatar beside the link"])},mention_link_show_avatar_quick:e=>{const{normalize:t}=e;return t(["Show user avatar next to mentions"])},mention_link_fade_domain:e=>{const{normalize:t}=e;return t(["Fade domains (e.g. ","@","example.org in ","@","foo","@","example.org)"])},mention_link_bolden_you:e=>{const{normalize:t}=e;return t(["Highlight mention of you when you are mentioned"])},user_popover_avatar_action:e=>{const{normalize:t}=e;return t(["Popover avatar click action"])},user_popover_avatar_action_zoom:e=>{const{normalize:t}=e;return t(["Zoom the avatar"])},user_popover_avatar_action_close:e=>{const{normalize:t}=e;return t(["Close the popover"])},user_popover_avatar_action_open:e=>{const{normalize:t}=e;return t(["Open profile"])},user_popover_avatar_overlay:e=>{const{normalize:t}=e;return t(["Show user popover over user avatar"])},fun:e=>{const{normalize:t}=e;return t(["Fun"])},greentext:e=>{const{normalize:t}=e;return t(["Meme arrows"])},show_yous:e=>{const{normalize:t}=e;return t(["Show (You)s"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},notification_setting_filters:e=>{const{normalize:t}=e;return t(["Filters"])},notification_setting_block_from_strangers:e=>{const{normalize:t}=e;return t(["Block notifications from users who you do not follow"])},notification_setting_privacy:e=>{const{normalize:t}=e;return t(["Privacy"])},notification_setting_hide_notification_contents:e=>{const{normalize:t}=e;return t(["Hide the sender and contents of push notifications"])},notification_mutes:e=>{const{normalize:t}=e;return t(["To stop receiving notifications from a specific user, use a mute."])},notification_blocks:e=>{const{normalize:t}=e;return t(["Blocking a user stops all notifications as well as unsubscribes them."])},enable_web_push_notifications:e=>{const{normalize:t}=e;return t(["Enable web push notifications"])},more_settings:e=>{const{normalize:t}=e;return t(["More settings"])},style:{switcher:{keep_color:e=>{const{normalize:t}=e;return t(["Keep colors"])},keep_shadows:e=>{const{normalize:t}=e;return t(["Keep shadows"])},keep_opacity:e=>{const{normalize:t}=e;return t(["Keep opacity"])},keep_roundness:e=>{const{normalize:t}=e;return t(["Keep roundness"])},keep_fonts:e=>{const{normalize:t}=e;return t(["Keep fonts"])},save_load_hint:e=>{const{normalize:t}=e;return t(['"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.'])},reset:e=>{const{normalize:t}=e;return t(["Reset"])},clear_all:e=>{const{normalize:t}=e;return t(["Clear all"])},clear_opacity:e=>{const{normalize:t}=e;return t(["Clear opacity"])},load_theme:e=>{const{normalize:t}=e;return t(["Load theme"])},keep_as_is:e=>{const{normalize:t}=e;return t(["Keep as is"])},use_snapshot:e=>{const{normalize:t}=e;return t(["Old version"])},use_source:e=>{const{normalize:t}=e;return t(["New version"])},help:{upgraded_from_v2:e=>{const{normalize:t}=e;return t(["PleromaFE has been upgraded, theme could look a little bit different than you remember."])},v2_imported:e=>{const{normalize:t}=e;return t(["File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies."])},future_version_imported:e=>{const{normalize:t}=e;return t(["File you imported was made in newer version of FE."])},older_version_imported:e=>{const{normalize:t}=e;return t(["File you imported was made in older version of FE."])},snapshot_present:e=>{const{normalize:t}=e;return t(["Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead."])},snapshot_missing:e=>{const{normalize:t}=e;return t(["No theme snapshot was in the file so it could look different than originally envisioned."])},fe_upgraded:e=>{const{normalize:t}=e;return t(["PleromaFE's theme engine upgraded after version update."])},fe_downgraded:e=>{const{normalize:t}=e;return t(["PleromaFE's version rolled back."])},migration_snapshot_ok:e=>{const{normalize:t}=e;return t(["Just to be safe, theme snapshot loaded. You can try loading theme data."])},migration_napshot_gone:e=>{const{normalize:t}=e;return t(["For whatever reason snapshot was missing, some stuff could look different than you remember."])},snapshot_source_mismatch:e=>{const{normalize:t}=e;return t(["Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version."])}}},common:{color:e=>{const{normalize:t}=e;return t(["Color"])},opacity:e=>{const{normalize:t}=e;return t(["Opacity"])},contrast:{hint:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Contrast ratio is ",n(o("ratio")),", it ",n(o("level"))," ",n(o("context"))])},level:{aa:e=>{const{normalize:t}=e;return t(["meets Level AA guideline (minimal)"])},aaa:e=>{const{normalize:t}=e;return t(["meets Level AAA guideline (recommended)"])},bad:e=>{const{normalize:t}=e;return t(["doesn't meet any accessibility guidelines"])}},context:{"18pt":e=>{const{normalize:t}=e;return t(["for large (18pt+) text"])},text:e=>{const{normalize:t}=e;return t(["for text"])}}}},common_colors:{_tab_label:e=>{const{normalize:t}=e;return t(["Common"])},main:e=>{const{normalize:t}=e;return t(["Common colors"])},foreground_hint:e=>{const{normalize:t}=e;return t(['See "Advanced" tab for more detailed control'])},rgbo:e=>{const{normalize:t}=e;return t(["Icons, accents, badges"])}},advanced_colors:{_tab_label:e=>{const{normalize:t}=e;return t(["Advanced"])},alert:e=>{const{normalize:t}=e;return t(["Alert background"])},alert_error:e=>{const{normalize:t}=e;return t(["Error"])},alert_warning:e=>{const{normalize:t}=e;return t(["Warning"])},alert_neutral:e=>{const{normalize:t}=e;return t(["Neutral"])},post:e=>{const{normalize:t}=e;return t(["Posts/User bios"])},badge:e=>{const{normalize:t}=e;return t(["Badge background"])},popover:e=>{const{normalize:t}=e;return t(["Tooltips, menus, popovers"])},badge_notification:e=>{const{normalize:t}=e;return t(["Notification"])},panel_header:e=>{const{normalize:t}=e;return t(["Panel header"])},top_bar:e=>{const{normalize:t}=e;return t(["Top bar"])},borders:e=>{const{normalize:t}=e;return t(["Borders"])},buttons:e=>{const{normalize:t}=e;return t(["Buttons"])},inputs:e=>{const{normalize:t}=e;return t(["Input fields"])},faint_text:e=>{const{normalize:t}=e;return t(["Faded text"])},underlay:e=>{const{normalize:t}=e;return t(["Underlay"])},wallpaper:e=>{const{normalize:t}=e;return t(["Wallpaper"])},poll:e=>{const{normalize:t}=e;return t(["Poll graph"])},icons:e=>{const{normalize:t}=e;return t(["Icons"])},highlight:e=>{const{normalize:t}=e;return t(["Highlighted elements"])},pressed:e=>{const{normalize:t}=e;return t(["Pressed"])},selectedPost:e=>{const{normalize:t}=e;return t(["Selected post"])},selectedMenu:e=>{const{normalize:t}=e;return t(["Selected menu item"])},disabled:e=>{const{normalize:t}=e;return t(["Disabled"])},toggled:e=>{const{normalize:t}=e;return t(["Toggled"])},tabs:e=>{const{normalize:t}=e;return t(["Tabs"])},chat:{incoming:e=>{const{normalize:t}=e;return t(["Incoming"])},outgoing:e=>{const{normalize:t}=e;return t(["Outgoing"])},border:e=>{const{normalize:t}=e;return t(["Border"])}}},radii:{_tab_label:e=>{const{normalize:t}=e;return t(["Roundness"])}},shadows:{_tab_label:e=>{const{normalize:t}=e;return t(["Shadow and lighting"])},component:e=>{const{normalize:t}=e;return t(["Component"])},override:e=>{const{normalize:t}=e;return t(["Override"])},shadow_id:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Shadow #",n(o("value"))])},blur:e=>{const{normalize:t}=e;return t(["Blur"])},spread:e=>{const{normalize:t}=e;return t(["Spread"])},inset:e=>{const{normalize:t}=e;return t(["Inset"])},hintV3:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["For shadows you can also use the ",n(o(0))," notation to use other color slot."])},filter_hint:{always_drop_shadow:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Warning, this shadow always uses ",n(o(0))," when browser supports it."])},drop_shadow_syntax:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0))," does not support ",n(o(1))," parameter and ",n(o(2))," keyword."])},avatar_inset:e=>{const{normalize:t}=e;return t(["Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars."])},spread_zero:e=>{const{normalize:t}=e;return t(["Shadows with spread > 0 will appear as if it was set to zero"])},inset_classic:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Inset shadows will be using ",n(o(0))])}},components:{panel:e=>{const{normalize:t}=e;return t(["Panel"])},panelHeader:e=>{const{normalize:t}=e;return t(["Panel header"])},topBar:e=>{const{normalize:t}=e;return t(["Top bar"])},avatar:e=>{const{normalize:t}=e;return t(["User avatar (in profile view)"])},avatarStatus:e=>{const{normalize:t}=e;return t(["User avatar (in post display)"])},popup:e=>{const{normalize:t}=e;return t(["Popups and tooltips"])},button:e=>{const{normalize:t}=e;return t(["Button"])},buttonHover:e=>{const{normalize:t}=e;return t(["Button (hover)"])},buttonPressed:e=>{const{normalize:t}=e;return t(["Button (pressed)"])},buttonPressedHover:e=>{const{normalize:t}=e;return t(["Button (pressed+hover)"])},input:e=>{const{normalize:t}=e;return t(["Input field"])}}},fonts:{_tab_label:e=>{const{normalize:t}=e;return t(["Fonts"])},help:e=>{const{normalize:t}=e;return t(['Select font to use for elements of UI. For "custom" you have to enter exact font name as it appears in system.'])},components:{interface:e=>{const{normalize:t}=e;return t(["Interface"])},input:e=>{const{normalize:t}=e;return t(["Input fields"])},post:e=>{const{normalize:t}=e;return t(["Post text"])},postCode:e=>{const{normalize:t}=e;return t(["Monospaced text in a post (rich text)"])}},family:e=>{const{normalize:t}=e;return t(["Font name"])},size:e=>{const{normalize:t}=e;return t(["Size (in px)"])},weight:e=>{const{normalize:t}=e;return t(["Weight (boldness)"])},custom:e=>{const{normalize:t}=e;return t(["Custom"])}},preview:{header:e=>{const{normalize:t}=e;return t(["Preview"])},content:e=>{const{normalize:t}=e;return t(["Content"])},error:e=>{const{normalize:t}=e;return t(["Example error"])},button:e=>{const{normalize:t}=e;return t(["Button"])},text:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["A bunch of more ",n(o(0))," and ",n(o(1))])},mono:e=>{const{normalize:t}=e;return t(["content"])},input:e=>{const{normalize:t}=e;return t(["Just landed in L.A."])},faint_link:e=>{const{normalize:t}=e;return t(["helpful manual"])},fine_print:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Read our ",n(o(0))," to learn nothing useful!"])},header_faint:e=>{const{normalize:t}=e;return t(["This is fine"])},checkbox:e=>{const{normalize:t}=e;return t(["I have skimmed over terms and conditions"])},link:e=>{const{normalize:t}=e;return t(["a nice lil' link"])}}},version:{title:e=>{const{normalize:t}=e;return t(["Version"])},backend_version:e=>{const{normalize:t}=e;return t(["Backend version"])},frontend_version:e=>{const{normalize:t}=e;return t(["Frontend version"])}},commit_value:e=>{const{normalize:t}=e;return t(["Save"])},commit_value_tooltip:e=>{const{normalize:t}=e;return t(["Value is not saved, press this button to commit your changes"])},reset_value:e=>{const{normalize:t}=e;return t(["Reset"])},reset_value_tooltip:e=>{const{normalize:t}=e;return t(["Reset draft"])},hard_reset_value:e=>{const{normalize:t}=e;return t(["Hard reset"])},hard_reset_value_tooltip:e=>{const{normalize:t}=e;return t(["Remove setting from storage, forcing use of default value"])}},admin_dash:{window_title:e=>{const{normalize:t}=e;return t(["Administration"])},wip_notice:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["This admin dashboard is experimental and WIP, ",n(o("adminFeLink")),"."])},old_ui_link:e=>{const{normalize:t}=e;return t(["old admin UI available here"])},reset_all:e=>{const{normalize:t}=e;return t(["Reset all"])},commit_all:e=>{const{normalize:t}=e;return t(["Save all"])},tabs:{nodb:e=>{const{normalize:t}=e;return t(["No DB Config"])},instance:e=>{const{normalize:t}=e;return t(["Instance"])},limits:e=>{const{normalize:t}=e;return t(["Limits"])},frontends:e=>{const{normalize:t}=e;return t(["Front-ends"])}},nodb:{heading:e=>{const{normalize:t}=e;return t(["Database config is disabled"])},text:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["You need to change backend config files so that ",n(o("property"))," is set to ",n(o("value")),", see more in ",n(o("documentation")),"."])},documentation:e=>{const{normalize:t}=e;return t(["documentation"])},text2:e=>{const{normalize:t}=e;return t(["Most configuration options will be unavailable."])}},captcha:{native:e=>{const{normalize:t}=e;return t(["Native"])},kocaptcha:e=>{const{normalize:t}=e;return t(["KoCaptcha"])}},instance:{instance:e=>{const{normalize:t}=e;return t(["Instance information"])},registrations:e=>{const{normalize:t}=e;return t(["User sign-ups"])},captcha_header:e=>{const{normalize:t}=e;return t(["CAPTCHA"])},kocaptcha:e=>{const{normalize:t}=e;return t(["KoCaptcha settings"])},access:e=>{const{normalize:t}=e;return t(["Instance access"])},restrict:{header:e=>{const{normalize:t}=e;return t(["Restrict access for anonymous visitors"])},description:e=>{const{normalize:t}=e;return t(["Detailed setting for allowing/disallowing access to certain aspects of API. By default (indeterminate state) it will disallow if instance is not public, ticked checkbox means disallow access even if instance is public, unticked means allow access even if instance is private. Please note that unexpected behavior might happen if some settings are set, i.e. if profile access is disabled posts will show without profile information."])},timelines:e=>{const{normalize:t}=e;return t(["Timelines access"])},profiles:e=>{const{normalize:t}=e;return t(["User profiles access"])},activities:e=>{const{normalize:t}=e;return t(["Statues/activities access"])}}},limits:{arbitrary_limits:e=>{const{normalize:t}=e;return t(["Arbitrary limits"])},posts:e=>{const{normalize:t}=e;return t(["Post limits"])},uploads:e=>{const{normalize:t}=e;return t(["Attachments limits"])},users:e=>{const{normalize:t}=e;return t(["User profile limits"])},profile_fields:e=>{const{normalize:t}=e;return t(["Profile fields limits"])},user_uploads:e=>{const{normalize:t}=e;return t(["Profile media limits"])}},frontend:{repository:e=>{const{normalize:t}=e;return t(["Repository link"])},versions:e=>{const{normalize:t}=e;return t(["Available versions"])},build_url:e=>{const{normalize:t}=e;return t(["Build URL"])},reinstall:e=>{const{normalize:t}=e;return t(["Reinstall"])},is_default:e=>{const{normalize:t}=e;return t(["(Default)"])},is_default_custom:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(Default, version: ",n(o("version")),")"])},install:e=>{const{normalize:t}=e;return t(["Install"])},install_version:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Install version ",n(o("version"))])},more_install_options:e=>{const{normalize:t}=e;return t(["More install options"])},more_default_options:e=>{const{normalize:t}=e;return t(["More default setting options"])},set_default:e=>{const{normalize:t}=e;return t(["Set default"])},set_default_version:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Set version ",n(o("version"))," as default"])},wip_notice:e=>{const{normalize:t}=e;return t(["Please note that this section is a WIP and lacks certain features as backend implementation of front-end management is incomplete."])},default_frontend:e=>{const{normalize:t}=e;return t(["Default front-end"])},default_frontend_tip:e=>{const{normalize:t}=e;return t(["Default front-end will be shown to all users. Currently there's no way to for a user to select personal front-end. If you switch away from PleromaFE you'll most likely have to use old and buggy AdminFE to do instance configuration until we replace it."])},available_frontends:e=>{const{normalize:t}=e;return t(["Available for install"])},failure_installing_frontend:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Failed to install frontend ",n(o("version")),": ",n(o("reason"))])},success_installing_frontend:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Frontend ",n(o("version"))," successfully installed"])}},temp_overrides:{":pleroma":{":instance":{":public":{label:e=>{const{normalize:t}=e;return t(["Instance is public"])},description:e=>{const{normalize:t}=e;return t(["Disabling this will make all API accessible only for logged-in users, this will make Public and Federated timelines inaccessible to anonymous visitors."])}},":limit_to_local_content":{label:e=>{const{normalize:t}=e;return t(["Limit search to local content"])},description:e=>{const{normalize:t}=e;return t(["Disables global network search for unauthenticated (default), all users or none"])}},":description_limit":{label:e=>{const{normalize:t}=e;return t(["Limit"])},description:e=>{const{normalize:t}=e;return t(["Character limit for attachment descriptions"])}},":background_image":{label:e=>{const{normalize:t}=e;return t(["Background image"])},description:e=>{const{normalize:t}=e;return t(["Background image (primarily used by PleromaFE)"])}}}}}},time:{unit:{days:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," day"]),t([n(o(0))," days"])])},days_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"d"])},hours:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," hour"]),t([n(o(0))," hours"])])},hours_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"h"])},minutes:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," minute"]),t([n(o(0))," minutes"])])},minutes_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"min"])},months:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," month"]),t([n(o(0))," months"])])},months_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"mo"])},seconds:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," second"]),t([n(o(0))," seconds"])])},seconds_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"s"])},weeks:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," week"]),t([n(o(0))," weeks"])])},weeks_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"w"])},years:e=>{const{normalize:t,interpolate:n,list:o,plural:r}=e;return r([t([n(o(0))," year"]),t([n(o(0))," years"])])},years_short:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0)),"y"])}},in_future:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["in ",n(o(0))])},in_past:e=>{const{normalize:t,interpolate:n,list:o}=e;return t([n(o(0))," ago"])},now:e=>{const{normalize:t}=e;return t(["just now"])},now_short:e=>{const{normalize:t}=e;return t(["now"])}},timeline:{collapse:e=>{const{normalize:t}=e;return t(["Collapse"])},conversation:e=>{const{normalize:t}=e;return t(["Conversation"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error fetching timeline: ",n(o(0))])},load_older:e=>{const{normalize:t}=e;return t(["Load older statuses"])},no_retweet_hint:e=>{const{normalize:t}=e;return t(["Post is marked as followers-only or direct and cannot be repeated"])},repeated:e=>{const{normalize:t}=e;return t(["repeated"])},show_new:e=>{const{normalize:t}=e;return t(["Show new"])},reload:e=>{const{normalize:t}=e;return t(["Reload"])},up_to_date:e=>{const{normalize:t}=e;return t(["Up-to-date"])},no_more_statuses:e=>{const{normalize:t}=e;return t(["No more statuses"])},no_statuses:e=>{const{normalize:t}=e;return t(["No statuses"])},socket_reconnected:e=>{const{normalize:t}=e;return t(["Realtime connection established"])},socket_broke:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Realtime connection lost: CloseEvent code ",n(o(0))])},quick_view_settings:e=>{const{normalize:t}=e;return t(["Quick view settings"])},quick_filter_settings:e=>{const{normalize:t}=e;return t(["Quick filter settings"])}},status:{favorites:e=>{const{normalize:t}=e;return t(["Favorites"])},repeats:e=>{const{normalize:t}=e;return t(["Repeats"])},repeat_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to repeat this status?"])},repeat_confirm_title:e=>{const{normalize:t}=e;return t(["Repeat confirmation"])},repeat_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Repeat"])},repeat_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not repeat"])},delete:e=>{const{normalize:t}=e;return t(["Delete status"])},delete_error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error deleting status: ",n(o(0))])},edit:e=>{const{normalize:t}=e;return t(["Edit status"])},edited_at:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["(last edited ",n(o("time")),")"])},pin:e=>{const{normalize:t}=e;return t(["Pin on profile"])},unpin:e=>{const{normalize:t}=e;return t(["Unpin from profile"])},pinned:e=>{const{normalize:t}=e;return t(["Pinned"])},bookmark:e=>{const{normalize:t}=e;return t(["Bookmark"])},unbookmark:e=>{const{normalize:t}=e;return t(["Unbookmark"])},delete_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to delete this status?"])},delete_confirm_title:e=>{const{normalize:t}=e;return t(["Delete confirmation"])},delete_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Delete"])},delete_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Keep"])},reply_to:e=>{const{normalize:t}=e;return t(["Reply to"])},mentions:e=>{const{normalize:t}=e;return t(["Mentions"])},replies_list:e=>{const{normalize:t}=e;return t(["Replies:"])},replies_list_with_others:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Replies (+",n(o("numReplies"))," other):"]),t(["Replies (+",n(o("numReplies"))," others):"])])},mute_conversation:e=>{const{normalize:t}=e;return t(["Mute conversation"])},unmute_conversation:e=>{const{normalize:t}=e;return t(["Unmute conversation"])},status_unavailable:e=>{const{normalize:t}=e;return t(["Status unavailable"])},copy_link:e=>{const{normalize:t}=e;return t(["Copy link to status"])},external_source:e=>{const{normalize:t}=e;return t(["External source"])},thread_muted:e=>{const{normalize:t}=e;return t(["Thread muted"])},thread_muted_and_words:e=>{const{normalize:t}=e;return t([", has words:"])},show_full_subject:e=>{const{normalize:t}=e;return t(["Show full subject"])},hide_full_subject:e=>{const{normalize:t}=e;return t(["Hide full subject"])},show_content:e=>{const{normalize:t}=e;return t(["Show content"])},hide_content:e=>{const{normalize:t}=e;return t(["Hide content"])},status_deleted:e=>{const{normalize:t}=e;return t(["This post was deleted"])},nsfw:e=>{const{normalize:t}=e;return t(["NSFW"])},expand:e=>{const{normalize:t}=e;return t(["Expand"])},you:e=>{const{normalize:t}=e;return t(["(You)"])},plus_more:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["+",n(o("number"))," more"])},many_attachments:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Post has ",n(o("number"))," attachment(s)"])},collapse_attachments:e=>{const{normalize:t}=e;return t(["Collapse attachments"])},show_all_attachments:e=>{const{normalize:t}=e;return t(["Show all attachments"])},show_attachment_in_modal:e=>{const{normalize:t}=e;return t(["Show in media modal"])},show_attachment_description:e=>{const{normalize:t}=e;return t(["Preview description (open attachment for full description)"])},hide_attachment:e=>{const{normalize:t}=e;return t(["Hide attachment"])},remove_attachment:e=>{const{normalize:t}=e;return t(["Remove attachment"])},attachment_stop_flash:e=>{const{normalize:t}=e;return t(["Stop Flash player"])},move_up:e=>{const{normalize:t}=e;return t(["Shift attachment left"])},move_down:e=>{const{normalize:t}=e;return t(["Shift attachment right"])},open_gallery:e=>{const{normalize:t}=e;return t(["Open gallery"])},thread_hide:e=>{const{normalize:t}=e;return t(["Hide this thread"])},thread_show:e=>{const{normalize:t}=e;return t(["Show this thread"])},thread_show_full:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Show everything under this thread (",n(o("numStatus"))," status in total, max depth ",n(o("depth")),")"]),t(["Show everything under this thread (",n(o("numStatus"))," statuses in total, max depth ",n(o("depth")),")"])])},thread_show_full_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},thread_follow:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["See the remaining part of this thread (",n(o("numStatus"))," status in total)"]),t(["See the remaining part of this thread (",n(o("numStatus"))," statuses in total)"])])},thread_follow_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},ancestor_follow:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["See ",n(o("numReplies"))," other reply under this status"]),t(["See ",n(o("numReplies"))," other replies under this status"])])},ancestor_follow_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},show_all_conversation_with_icon:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("icon"))," ",n(o("text"))])},show_all_conversation:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t(["Show full conversation (",n(o("numStatus"))," other status)"]),t(["Show full conversation (",n(o("numStatus"))," other statuses)"])])},show_only_conversation_under_this:e=>{const{normalize:t}=e;return t(["Only show replies to this status"])},status_history:e=>{const{normalize:t}=e;return t(["Status history"])},reaction_count_label:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("num"))," person reacted"]),t([n(o("num"))," people reacted"])])},hide_quote:e=>{const{normalize:t}=e;return t(["Hide the quoted status"])},display_quote:e=>{const{normalize:t}=e;return t(["Display the quoted status"])},invisible_quote:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Quoted status unavailable: ",n(o("link"))])},more_actions:e=>{const{normalize:t}=e;return t(["More actions on this status"])}},user_card:{approve:e=>{const{normalize:t}=e;return t(["Approve"])},approve_confirm_title:e=>{const{normalize:t}=e;return t(["Approve confirmation"])},approve_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Approve"])},approve_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not approve"])},approve_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you want to approve ",n(o("user")),"'s follow request?"])},block:e=>{const{normalize:t}=e;return t(["Block"])},blocked:e=>{const{normalize:t}=e;return t(["Blocked!"])},block_confirm_title:e=>{const{normalize:t}=e;return t(["Block confirmation"])},block_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to block ",n(o("user")),"?"])},block_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Block"])},block_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not block"])},deactivated:e=>{const{normalize:t}=e;return t(["Deactivated"])},deny:e=>{const{normalize:t}=e;return t(["Deny"])},deny_confirm_title:e=>{const{normalize:t}=e;return t(["Deny confirmation"])},deny_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Deny"])},deny_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not deny"])},deny_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you want to deny ",n(o("user")),"'s follow request?"])},edit_profile:e=>{const{normalize:t}=e;return t(["Edit profile"])},favorites:e=>{const{normalize:t}=e;return t(["Favorites"])},follow:e=>{const{normalize:t}=e;return t(["Follow"])},follow_cancel:e=>{const{normalize:t}=e;return t(["Cancel request"])},follow_sent:e=>{const{normalize:t}=e;return t(["Request sent!"])},follow_progress:e=>{const{normalize:t}=e;return t(["Requesting…"])},follow_unfollow:e=>{const{normalize:t}=e;return t(["Unfollow"])},unfollow_confirm_title:e=>{const{normalize:t}=e;return t(["Unfollow confirmation"])},unfollow_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to unfollow ",n(o("user")),"?"])},unfollow_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Unfollow"])},unfollow_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not unfollow"])},followees:e=>{const{normalize:t}=e;return t(["Following"])},followers:e=>{const{normalize:t}=e;return t(["Followers"])},following:e=>{const{normalize:t}=e;return t(["Following!"])},follows_you:e=>{const{normalize:t}=e;return t(["Follows you!"])},hidden:e=>{const{normalize:t}=e;return t(["Hidden"])},its_you:e=>{const{normalize:t}=e;return t(["It's you!"])},media:e=>{const{normalize:t}=e;return t(["Media"])},mention:e=>{const{normalize:t}=e;return t(["Mention"])},message:e=>{const{normalize:t}=e;return t(["Message"])},mute:e=>{const{normalize:t}=e;return t(["Mute"])},muted:e=>{const{normalize:t}=e;return t(["Muted"])},mute_confirm_title:e=>{const{normalize:t}=e;return t(["Mute confirmation"])},mute_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to mute ",n(o("user")),"?"])},mute_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Mute"])},mute_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Do not mute"])},mute_duration_prompt:e=>{const{normalize:t}=e;return t(["Mute this user for (0 for indefinite time):"])},per_day:e=>{const{normalize:t}=e;return t(["per day"])},remote_follow:e=>{const{normalize:t}=e;return t(["Remote follow"])},remove_follower:e=>{const{normalize:t}=e;return t(["Remove follower"])},remove_follower_confirm_title:e=>{const{normalize:t}=e;return t(["Remove follower confirmation"])},remove_follower_confirm_accept_button:e=>{const{normalize:t}=e;return t(["Remove"])},remove_follower_confirm_cancel_button:e=>{const{normalize:t}=e;return t(["Keep"])},remove_follower_confirm:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Do you really want to remove ",n(o("user"))," from your followers?"])},report:e=>{const{normalize:t}=e;return t(["Report"])},statuses:e=>{const{normalize:t}=e;return t(["Statuses"])},subscribe:e=>{const{normalize:t}=e;return t(["Subscribe"])},unsubscribe:e=>{const{normalize:t}=e;return t(["Unsubscribe"])},unblock:e=>{const{normalize:t}=e;return t(["Unblock"])},unblock_progress:e=>{const{normalize:t}=e;return t(["Unblocking…"])},block_progress:e=>{const{normalize:t}=e;return t(["Blocking…"])},unmute:e=>{const{normalize:t}=e;return t(["Unmute"])},unmute_progress:e=>{const{normalize:t}=e;return t(["Unmuting…"])},mute_progress:e=>{const{normalize:t}=e;return t(["Muting…"])},hide_repeats:e=>{const{normalize:t}=e;return t(["Hide repeats"])},show_repeats:e=>{const{normalize:t}=e;return t(["Show repeats"])},bot:e=>{const{normalize:t}=e;return t(["Bot"])},birthday:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Born ",n(o("birthday"))])},admin_menu:{moderation:e=>{const{normalize:t}=e;return t(["Moderation"])},grant_admin:e=>{const{normalize:t}=e;return t(["Grant Admin"])},revoke_admin:e=>{const{normalize:t}=e;return t(["Revoke Admin"])},grant_moderator:e=>{const{normalize:t}=e;return t(["Grant Moderator"])},revoke_moderator:e=>{const{normalize:t}=e;return t(["Revoke Moderator"])},activate_account:e=>{const{normalize:t}=e;return t(["Activate account"])},deactivate_account:e=>{const{normalize:t}=e;return t(["Deactivate account"])},delete_account:e=>{const{normalize:t}=e;return t(["Delete account"])},force_nsfw:e=>{const{normalize:t}=e;return t(["Mark all posts as NSFW"])},strip_media:e=>{const{normalize:t}=e;return t(["Remove media from posts"])},force_unlisted:e=>{const{normalize:t}=e;return t(["Force posts to be unlisted"])},sandbox:e=>{const{normalize:t}=e;return t(["Force posts to be followers-only"])},disable_remote_subscription:e=>{const{normalize:t}=e;return t(["Disallow following user from remote instances"])},disable_any_subscription:e=>{const{normalize:t}=e;return t(["Disallow following user at all"])},quarantine:e=>{const{normalize:t}=e;return t(["Disallow user posts from federating"])},delete_user:e=>{const{normalize:t}=e;return t(["Delete user"])},delete_user_data_and_deactivate_confirmation:e=>{const{normalize:t}=e;return t(["This will permanently delete the data from this account and deactivate it. Are you absolutely sure?"])}},highlight:{disabled:e=>{const{normalize:t}=e;return t(["No highlight"])},solid:e=>{const{normalize:t}=e;return t(["Solid bg"])},striped:e=>{const{normalize:t}=e;return t(["Striped bg"])},side:e=>{const{normalize:t}=e;return t(["Side stripe"])}},note:e=>{const{normalize:t}=e;return t(["Note"])},note_blank:e=>{const{normalize:t}=e;return t(["(None)"])},edit_note:e=>{const{normalize:t}=e;return t(["Edit note"])},edit_note_apply:e=>{const{normalize:t}=e;return t(["Apply"])},edit_note_cancel:e=>{const{normalize:t}=e;return t(["Cancel"])}},user_profile:{timeline_title:e=>{const{normalize:t}=e;return t(["User timeline"])},profile_does_not_exist:e=>{const{normalize:t}=e;return t(["Sorry, this profile does not exist."])},profile_loading_error:e=>{const{normalize:t}=e;return t(["Sorry, there was an error loading this profile."])}},user_reporting:{title:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Reporting ",n(o(0))])},add_comment_description:e=>{const{normalize:t}=e;return t(["The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:"])},additional_comments:e=>{const{normalize:t}=e;return t(["Additional comments"])},forward_description:e=>{const{normalize:t}=e;return t(["The account is from another server. Send a copy of the report there as well?"])},forward_to:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Forward to ",n(o(0))])},submit:e=>{const{normalize:t}=e;return t(["Submit"])},generic_error:e=>{const{normalize:t}=e;return t(["An error occurred while processing your request."])}},who_to_follow:{more:e=>{const{normalize:t}=e;return t(["More"])},who_to_follow:e=>{const{normalize:t}=e;return t(["Who to follow"])}},tool_tip:{media_upload:e=>{const{normalize:t}=e;return t(["Upload media"])},repeat:e=>{const{normalize:t}=e;return t(["Repeat"])},reply:e=>{const{normalize:t}=e;return t(["Reply"])},favorite:e=>{const{normalize:t}=e;return t(["Favorite"])},add_reaction:e=>{const{normalize:t}=e;return t(["Add Reaction"])},user_settings:e=>{const{normalize:t}=e;return t(["User Settings"])},accept_follow_request:e=>{const{normalize:t}=e;return t(["Accept follow request"])},reject_follow_request:e=>{const{normalize:t}=e;return t(["Reject follow request"])},bookmark:e=>{const{normalize:t}=e;return t(["Bookmark"])},toggle_expand:e=>{const{normalize:t}=e;return t(["Expand or collapse notification to show post in full"])},toggle_mute:e=>{const{normalize:t}=e;return t(["Expand or collapse notification to reveal muted content"])},autocomplete_available:e=>{const{normalize:t,interpolate:n,named:o,plural:r}=e;return r([t([n(o("number"))," result is available. Use up and down keys to navigate through them."]),t([n(o("number"))," results are available. Use up and down keys to navigate through them."])])}},upload:{error:{base:e=>{const{normalize:t}=e;return t(["Upload failed."])},message:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Upload failed: ",n(o(0))])},file_too_big:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["File too big [",n(o("filesize")),n(o("filesizeunit"))," / ",n(o("allowedsize")),n(o("allowedsizeunit")),"]"])},default:e=>{const{normalize:t}=e;return t(["Try again later"])}},file_size_units:{B:e=>{const{normalize:t}=e;return t(["B"])},KiB:e=>{const{normalize:t}=e;return t(["KiB"])},MiB:e=>{const{normalize:t}=e;return t(["MiB"])},GiB:e=>{const{normalize:t}=e;return t(["GiB"])},TiB:e=>{const{normalize:t}=e;return t(["TiB"])}}},search:{people:e=>{const{normalize:t}=e;return t(["People"])},hashtags:e=>{const{normalize:t}=e;return t(["Hashtags"])},person_talking:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("count"))," person talking"])},people_talking:e=>{const{normalize:t,interpolate:n,named:o}=e;return t([n(o("count"))," people talking"])},no_results:e=>{const{normalize:t}=e;return t(["No results"])},no_more_results:e=>{const{normalize:t}=e;return t(["No more results"])},load_more:e=>{const{normalize:t}=e;return t(["Load more results"])}},password_reset:{forgot_password:e=>{const{normalize:t}=e;return t(["Forgot password?"])},password_reset:e=>{const{normalize:t}=e;return t(["Password reset"])},instruction:e=>{const{normalize:t}=e;return t(["Enter your email address or username. We will send you a link to reset your password."])},placeholder:e=>{const{normalize:t}=e;return t(["Your email or username"])},check_email:e=>{const{normalize:t}=e;return t(["Check your email for a link to reset your password."])},return_home:e=>{const{normalize:t}=e;return t(["Return to the home page"])},too_many_requests:e=>{const{normalize:t}=e;return t(["You have reached the limit of attempts, try again later."])},password_reset_disabled:e=>{const{normalize:t}=e;return t(["Password reset is disabled. Please contact your instance administrator."])},password_reset_required:e=>{const{normalize:t}=e;return t(["You must reset your password to log in."])},password_reset_required_but_mailer_is_disabled:e=>{const{normalize:t}=e;return t(["You must reset your password, but password reset is disabled. Please contact your instance administrator."])}},chats:{you:e=>{const{normalize:t}=e;return t(["You:"])},message_user:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Message ",n(o("nickname"))])},delete:e=>{const{normalize:t}=e;return t(["Delete"])},chats:e=>{const{normalize:t}=e;return t(["Chats"])},new:e=>{const{normalize:t}=e;return t(["New Chat"])},empty_message_error:e=>{const{normalize:t}=e;return t(["Cannot post empty message"])},more:e=>{const{normalize:t}=e;return t(["More"])},delete_confirm:e=>{const{normalize:t}=e;return t(["Do you really want to delete this message?"])},error_loading_chat:e=>{const{normalize:t}=e;return t(["Something went wrong when loading the chat."])},error_sending_message:e=>{const{normalize:t}=e;return t(["Something went wrong when sending the message."])},empty_chat_list_placeholder:e=>{const{normalize:t}=e;return t(["You don't have any chats yet. Start a new chat!"])}},lists:{lists:e=>{const{normalize:t}=e;return t(["Lists"])},new:e=>{const{normalize:t}=e;return t(["New List"])},title:e=>{const{normalize:t}=e;return t(["List title"])},search:e=>{const{normalize:t}=e;return t(["Search users"])},create:e=>{const{normalize:t}=e;return t(["Create"])},save:e=>{const{normalize:t}=e;return t(["Save changes"])},delete:e=>{const{normalize:t}=e;return t(["Delete list"])},following_only:e=>{const{normalize:t}=e;return t(["Limit to Following"])},manage_lists:e=>{const{normalize:t}=e;return t(["Manage lists"])},manage_members:e=>{const{normalize:t}=e;return t(["Manage list members"])},add_members:e=>{const{normalize:t}=e;return t(["Search for more users"])},remove_from_list:e=>{const{normalize:t}=e;return t(["Remove from list"])},add_to_list:e=>{const{normalize:t}=e;return t(["Add to list"])},is_in_list:e=>{const{normalize:t}=e;return t(["Already in list"])},editing_list:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Editing list ",n(o("listTitle"))])},creating_list:e=>{const{normalize:t}=e;return t(["Creating new list"])},update_title:e=>{const{normalize:t}=e;return t(["Save Title"])},really_delete:e=>{const{normalize:t}=e;return t(["Really delete list?"])},error:e=>{const{normalize:t,interpolate:n,list:o}=e;return t(["Error manipulating lists: ",n(o(0))])}},file_type:{audio:e=>{const{normalize:t}=e;return t(["Audio"])},video:e=>{const{normalize:t}=e;return t(["Video"])},image:e=>{const{normalize:t}=e;return t(["Image"])},file:e=>{const{normalize:t}=e;return t(["File"])}},display_date:{today:e=>{const{normalize:t}=e;return t(["Today"])}},update:{big_update_title:e=>{const{normalize:t}=e;return t(["Please bear with us"])},big_update_content:e=>{const{normalize:t}=e;return t(["We haven't had a release in a while, so things might look and feel different than what you're used to."])},update_bugs:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Please report any issues and bugs on ",n(o("pleromaGitlab")),", as we have changed a lot, and although we test thoroughly and use development versions ourselves, we may have missed some things. We welcome your feedback and suggestions on issues you might encounter, or how to improve Pleroma and Pleroma-FE."])},update_bugs_gitlab:e=>{const{normalize:t}=e;return t(["Pleroma GitLab"])},update_changelog:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["For more details on what's changed, see ",n(o("theFullChangelog")),"."])},update_changelog_here:e=>{const{normalize:t}=e;return t(["the full changelog"])},art_by:e=>{const{normalize:t,interpolate:n,named:o}=e;return t(["Art by ",n(o("linkToArtist"))])}},unicode_domain_indicator:{tooltip:e=>{const{normalize:t}=e;return t(["This domain contains non-ascii characters."])}}}},1395:(e,t,n)=>{var o={"./af.json":[44919,6355],"./am.json":[53139,5119],"./ar.json":[44557,9873],"./ar_SA.json":[23450,7360],"./as.json":[44359,3377],"./ast.json":[13764,7569],"./az.json":[86459,2342],"./be.json":[50866,7304],"./bg.json":[26219,3974],"./bn.json":[69178,9064],"./br.json":[67871,6148],"./bs.json":[75340,8134],"./ca.json":[86914,4691],"./ccp.json":[73872,1162],"./ceb.json":[64478,9790],"./chr.json":[61017,6869],"./ckb.json":[56412,2656],"./cs.json":[8888,4710],"./cy.json":[25392,6272],"./da.json":[35042,1596],"./de.json":[35169,6226],"./de_CH.json":[28246,7164],"./doi.json":[59784,4209],"./dsb.json":[60634,1790],"./el.json":[98338,7879],"./en.json":[74990,5728],"./en_001.json":[62736,577],"./en_AU.json":[2597,9360],"./en_CA.json":[1516,4879],"./en_GB.json":[84830,50],"./en_IN.json":[71809,8988],"./es.json":[61148,6831],"./es_419.json":[25696,8873],"./es_MX.json":[11915,2699],"./es_US.json":[87826,3313],"./et.json":[66641,3276],"./eu.json":[6541,2992],"./fa.json":[43305,5521],"./fi.json":[40752,420],"./fil.json":[26843,1236],"./fo.json":[43032,8995],"./fr.json":[80898,2223],"./fr_CA.json":[54515,1821],"./ga.json":[66572,4571],"./gd.json":[9185,6116],"./gl.json":[23840,6126],"./gu.json":[85811,7261],"./ha.json":[91566,227],"./ha_NE.json":[3400,5304],"./he.json":[26260,5548],"./hi.json":[18136,5968],"./hi_Latn.json":[95638,3056],"./hr.json":[77435,2861],"./hsb.json":[15758,8015],"./hu.json":[2727,4902],"./hy.json":[8397,6344],"./ia.json":[49796,6936],"./id.json":[56635,9465],"./ig.json":[26406,9895],"./is.json":[51391,7300],"./it.json":[54879,8970],"./ja.json":[2971,1290],"./jv.json":[18644,2479],"./ka.json":[71255,6068],"./kab.json":[92892,9780],"./kk.json":[46419,2873],"./kl.json":[2227,2397],"./km.json":[65729,1404],"./kn.json":[65611,278],"./ko.json":[67080,2966],"./kok.json":[47209,2599],"./ku.json":[18738,2883],"./ky.json":[89690,4785],"./lb.json":[3929,4770],"./lo.json":[19778,7464],"./lt.json":[41683,7169],"./lv.json":[54873,8898],"./mai.json":[11781,1613],"./mi.json":[11569,6701],"./mk.json":[67589,9921],"./ml.json":[24415,2685],"./mn.json":[50512,4718],"./mni.json":[81597,5401],"./mr.json":[97747,1911],"./ms.json":[81588,9924],"./mt.json":[25081,9399],"./my.json":[8608,6790],"./ne.json":[8572,9377],"./nl.json":[52355,6773],"./nn.json":[52874,9414],"./no.json":[48005,9979],"./or.json":[26728,1012],"./pa.json":[15042,6946],"./pa_Arab.json":[43578,9994],"./pcm.json":[91163,5104],"./pl.json":[61335,1095],"./ps.json":[51828,678],"./pt.json":[38543,5041],"./pt_PT.json":[8063,1546],"./qu.json":[15821,8031],"./rm.json":[5014,5887],"./ro.json":[34064,9864],"./ru.json":[95222,8395],"./rw.json":[12710,346],"./sa.json":[69343,2243],"./sat.json":[51243,7855],"./sc.json":[1319,2874],"./sd.json":[67728,6826],"./si.json":[5044,4354],"./sk.json":[45626,2350],"./sl.json":[76091,1553],"./so.json":[93761,625],"./sq.json":[1230,4368],"./sr.json":[60445,3887],"./sr_Cyrl_BA.json":[38940,6060],"./sr_Latn.json":[21650,8681],"./sr_Latn_BA.json":[78328,5115],"./su.json":[54395,1959],"./sv.json":[3418,3241],"./sw.json":[11958,7585],"./sw_KE.json":[35001,3994],"./ta.json":[92930,7897],"./te.json":[8748,4786],"./tg.json":[20999,313],"./th.json":[23900,3951],"./ti.json":[368,3568],"./tk.json":[88770,1780],"./to.json":[95781,1584],"./tr.json":[92619,9978],"./tt.json":[87782,2569],"./ug.json":[19005,9757],"./uk.json":[82057,9871],"./ur.json":[13889,6797],"./uz.json":[45108,1056],"./vi.json":[97099,5224],"./wo.json":[9923,7303],"./xh.json":[29064,786],"./yo.json":[11971,8732],"./yo_BJ.json":[64533,9926],"./yue.json":[40648,1452],"./yue_Hans.json":[24800,4424],"./zh.json":[34626,457],"./zh_Hant.json":[82560,2767],"./zh_Hant_HK.json":[47677,1044],"./zu.json":[73784,9319]};function r(e){if(!n.o(o,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=o[e],r=t[0];return n.e(t[1]).then((()=>n.t(r,19)))}r.keys=()=>Object.keys(o),r.id=1395,e.exports=r},19003:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>l});var o=n(15861),r=n(93433),i=n(4942),s=n(64687),a=n.n(s);function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){(0,i.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const l=function(e){var t=d(e.emoji),n=e.store&&p(e.store);return function(o,r){var i=o[0];return":"===i&&e.emoji?t(o,r):"@"===i&&n?n(o):[]}};var d=function(e){return function(t,n){var o=t.toLowerCase().substr(1);return e.map((function(e){return c(c({},e),n(e))})).filter((function(e){return e.names.concat(e.keywords).filter((function(e){return e.toLowerCase().match(o)})).length})).map((function(e){var t=0;return t+=Math.max.apply(Math,(0,r.Z)(e.names.map((function(e){return e.toLowerCase()===o?200:0}))).concat([0])),t+=e.imageUrl?100:0,t+=Math.max.apply(Math,(0,r.Z)(e.names.map((function(e){return e.toLowerCase().startsWith(o)?10:0}))).concat([0])),t-=e.displayText.length,e.score=t,e})).sort((function(e,t){var n=e.displayText>t.displayText?.5:-.5;return t.score-e.score+n}))}},p=function(e){var t=e.dispatch,n=e.state,r=[],i="",s=null,u=null,c=function(e){return u&&u(),new Promise((function(n,o){s=setTimeout((function(){(function(e){return t("searchUsers",{query:e})})(e).then(n).catch(o)}),300),u=function(){clearTimeout(s),n([])}}))};return function(){var e=(0,o.Z)(a().mark((function e(t){var o,s;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=t.toLowerCase().substr(1),i!==o){e.next=3;break}return e.abrupt("return",r);case 3:if(r=[],i=o,o.includes("@")){e.next=8;break}return e.next=8,c(o);case 8:return s=n.users.users.filter((function(e){return e.screen_name&&e.name&&(e.screen_name.toLowerCase().startsWith(o)||e.name.toLowerCase().startsWith(o))})).slice(0,20).sort((function(e,t){var n=0,r=0;return n+=e.screen_name.toLowerCase().startsWith(o)?2:0,r+=t.screen_name.toLowerCase().startsWith(o)?2:0,n+=e.name.toLowerCase().startsWith(o)?1:0,10*((r+=t.name.toLowerCase().startsWith(o)?1:0)-n)+(e.name>t.name?1:-1)+(e.screen_name>t.screen_name?1:-1)})).map((function(e){return{user:e,displayText:e.screen_name_ui,detailText:e.name,imageUrl:e.profile_image_url_original,replacement:"@"+e.screen_name+" "}})),r=s||[],e.abrupt("return",r);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()}},92820:(e,t,n)=>{"use strict";n.d(t,{Z:()=>F});var o=n(93433),r=n(29439),i=n(44925),s=n(42348),a=n.n(s),u=n(27955),c=n.n(u),l=n(66252);function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return p(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var m=function(e){var t=/(?:<\/(\w+)>|<(\w+)\s?[\s\S]*?\/?>)/gi.exec(e);return t&&(t[1]||t[2])},h=function(e,t){var n=e.substring(1,e.length-1).replace(new RegExp("^"+m(e)),"").replace(/\/?$/,"").trim(),o=Array.from(n.matchAll(/([a-z]+[a-z0-9-]*)(?:=("[^"]+?"|'[^']+?'))?/gi)).map((function(e){var t=(0,r.Z)(e,3);return t[0],[t[1],t[2]]})).map((function(e){var t=(0,r.Z)(e,2),n=t[0],o=t[1];return o?[n,o.substring(1,o.length-1)]:[n,!0]}));return Object.fromEntries(o.filter(t||function(e){var t=(0,r.Z)(e,2),n=t[0],o=t[1],i=n.toLowerCase();return"style"!==i&&("class"!==i||"greentext"===o||"cyantext"===o)}))},f=function(e,t,n){for(var o=[],r="",i=0;i<e.length;i++){var s=e[i];if(":"===s){var a,u=e.slice(i+1),c=!1,l=d(t);try{for(l.s();!(a=l.n()).done;){var p=a.value;if(u.slice(0,p.shortcode.length+1)===p.shortcode+":"){c=p;break}}}catch(e){l.e(e)}finally{l.f()}c?(o.push(r),r="",o.push(n(c)),i+=c.shortcode.length+1):r+=s}else r+=s}return r&&o.push(r),o};function g(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return v(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var w=n(32140),b=n(21268),y=n(49963),D={class:"HashtagLink"},_=["href","innerHTML"];const k={name:"HashtagLink",props:{url:{required:!0,type:String},content:{required:!0,type:String},tag:{required:!1,type:String,default:""}},methods:{onClick:function(){var e,t,n,o=this.tag||(e=this.url,t=decodeURI(e),!!(n=/tags*\/((?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])*(?:[A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u108F\u109A-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1713\u171F-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1ABF\u1AC0\u1ACC-\u1ACE\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4C\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C36\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA805\uA807-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FF\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC45\uDC71-\uDC75\uDC82-\uDCB8\uDCC2\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD47\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDCE\uDDCF\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDEB8\uDF00-\uDF1A\uDF1D-\uDF2A\uDF40-\uDF46]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B\uDD3C\uDD3F-\uDD42\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDDF\uDDE1\uDDE3\uDDE4\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE97\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])(?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB7\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088E\u0898-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09F4-\u09F9\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71-\u0B77\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BF2\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7E\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D63\u0D66-\u0D78\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u17F0-\u17F9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ACE\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u20D0-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA827\uA82C\uA830-\uA835\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE6\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD27\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF54\uDF70-\uDF85\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC52-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAE\uDEC0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]|\uDB40[\uDD00-\uDDEF])*)$/g.exec(t))&&n[1]);if(o){var r=this.generateTagLink(o);this.$router.push(r)}else window.open(this.url,"_blank")},generateTagLink:function(e){return"/tag/".concat(e)}}},C=(0,n(83744).Z)(k,[["render",function(e,t,n,o,r,i){return(0,l.wg)(),(0,l.iD)("span",D,[(0,l._)("a",{href:e.url,class:"original",target:"_blank",onClick:t[0]||(t[0]=(0,y.iM)((function(){return e.onClick&&e.onClick.apply(e,arguments)}),["prevent"])),innerHTML:e.content},null,8,_)])}]]);var S=["index"],j=["blockquote","br","hr","ul","ol","li","p","table","tbody","td","th","thead","tr","h1","h2","h3","h4","h5"];const F={name:"RichContent",components:{MentionsLine:b.Z,HashtagLink:C},props:{html:{required:!0,type:String},attentions:{required:!1,default:function(){return[]}},emoji:{required:!0,type:Array},handleLinks:{required:!1,type:Boolean,default:!1},greentext:{required:!1,type:Boolean,default:!1}},render:function(){var e=this,t=O(this.html,this.greentext).newHtml,n=null,s="",a=[],u=[],d=[],p=[],g=0,v=0,y=!1,D=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=new Set(["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),n=[],o=[["",n]],r="",i=null,s=function(){return o[o.length-1][1]},a=function(){""!==r&&(s().push(r),r="")},u=function(e){s().push([e])},l=function(e){var t=s(),n=[c()(e),[]];o.push(n),t.push(n)},d=function(e){var t=o[o.length-1];m(o[o.length-1][0])===m(e)?(t.push(e),o.pop()):s().push(e)},p=0;p<e.length;p++){var h=e[p];if("<"===h&&null===i)a(),i=h;else if(">"!==h&&null!==i)i+=h;else if(">"===h&&null!==i){var f=i+=h;i=null;var g=m(f);"/"===f[1]?d(f):t.has(g)||"/"===f[f.length-2]?u(f):l(f)}else r+=h}return i&&(r+=i),a(),n}(t).map((function t(o,i,a,c){if("string"==typeof o){var p=""===o.trim();return o.includes("\n")&&(n=null),p?(s=o,i!==a.length-1&&null!==n?o.trim():o):(n=null,o.includes(":")&&(o=["",f(o,e.emoji,(function(e){var t=e.shortcode,n=e.url;return(0,l.Wm)(w.Z,{class:"emoji img",src:n,title:":".concat(t,":"),alt:":".concat(t,":")},null)}))]),o)}if(Array.isArray(o)){var v=o,y=(0,r.Z)(v,3),D=y[0],_=y[1],k=y[2],C=m(D);"script"===C.toLowerCase()&&(C="js-exploit"),"style"===C.toLowerCase()&&(C="css-exploit");var S=h(D,(function(){return!0})),F=h(D),O=null===n||_&&"string"==typeof _[0]&&_[0].match(/^\s/)?"":s;if(j.includes(C))n=null;else{if("img"===C)return["",[O,(E=D,(0,l.Wm)(w.Z,(0,l.dG)(h(E),{class:"img"}),null))],""];if("a"===C&&e.handleLinks){if(S.class&&S.class.includes("mention"))return function(t,o){var r=A(t,o,g++);return r.notifying=e.attentions.some((function(e){return e.statusnet_profile_url===r.url})),u.push(r),null===n&&(n=[]),n.push(r),n.length>b.d&&d.push(r),1===n.length?(0,l.Wm)(b.Z,{mentions:n},null):""}(F,_);n=null}else if("span"===C&&e.handleLinks&&S.class&&S.class.includes("h-card"))return["",_.map(t),""]}return void 0!==_?["",[O,[D,_.map(t),k]],""]:["",[O,o],""]}var E})),_=(0,o.Z)(D).reverse().map((function t(n,s,u,d){var f;if("string"==typeof n)return""===n.trim()?n:(y||(y=!0),c()(n));if(Array.isArray(n)){var g=(0,r.Z)(n,2),w=g[0],b=g[1],D=""===w?"":m(w);switch(D){case"a":if(!e.handleLinks)break;var _=h(w,(function(){return!0})),k=h(w,(function(){return!0}));if(_.class&&_.class.includes("hashtag")||"tag"===_.rel)return function(e,t,n){var o=A(e,t,v++),r=(o.index,(0,i.Z)(o,S));p.push(r),n||a.push(r);var s=r.url,u=r.tag,c=r.content;return(0,l.Wm)(C,{url:s,tag:u,content:c},null)}(k,b,y);k.target="_blank";var j=(0,o.Z)(b).reverse().map(t).reverse();return(0,l.Wm)("a",k,[j]);case"":return(0,o.Z)(b).reverse().map(t).reverse()}if(void 0!==b){var F=Array.isArray(b)?(0,o.Z)(b).reverse().map(t).reverse():b;return(0,l.Wm)(D,h(w),"function"==typeof(f=F)||"[object Object]"===Object.prototype.toString.call(f)&&!(0,l.lA)(f)?F:{default:function(){return[F]}})}return(0,l.Wm)(D,null,null)}return n})).reverse(),k=(0,l.Wm)("span",{class:"RichContent"},[_]),F={lastTags:a,writtenMentions:u,writtenTags:p,invisibleMentions:d};return this.$emit("parseReady",F),k}};var A=function(e,t,n){var o=t.map((function e(t){return"string"==typeof t?t:t[1].map(e).join("")})).join("");return{index:n,url:e.href,tag:e["data-tag"],content:a()(t).join(""),textContent:o}},O=function(e,t){var n=new Set(["p","div"]),r=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=new Set(["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),r=new Set(["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"]),i=new Set(["br"]),s=new Set([].concat((0,o.Z)(r.values()),(0,o.Z)(i.values()))),a=new Set(s),u=g(n);try{for(u.s();!(e=u.n()).done;){var c=e.value;a.delete(c)}}catch(e){u.e(e)}finally{u.f()}for(var l=new Set([].concat((0,o.Z)(a.values()),(0,o.Z)(n.values()))),d=[],p=[],h="",f=null,v=function(){h.trim().length>0?d.push({level:[].concat(p),text:h}):d.push(h),h=""},w=function(e){v(),d.push(e)},b=function(e){v(),d.push(e),p.unshift(m(e))},y=function(e){p[0]===m(e)?(v(),d.push(e),p.shift()):h+=e},D=0;D<t.length;D++){var _=t[D];if("<"===_&&null===f)f=_;else if(">"!==_&&null!==f)f+=_;else if(">"===_&&null!==f){var k=f+=_;f=null;var C=m(k);l.has(C)?i.has(C)?w(k):a.has(C)?"/"===k[1]?y(k):"/"===k[k.length-2]?w(k):b(k):h+=k:h+=k}else"\n"===_?w(_):h+=_}return f&&(h+=f),v(),d}(e);return{newHtml:r.reverse().map((function(e,o,r){if(!e.text)return e;var i=e.text;if(t&&e.level.every((function(e){return n.has(e)}))&&(i.includes("&gt;")||i.includes("&lt;"))){var s=i.replace(/<[^>]+?>/gi,"").replace(/@\w+/gi,"").trim();if(s.startsWith("&gt;"))return"<span class='greentext'>".concat(i,"</span>");if(s.startsWith("&lt;"))return"<span class='cyantext'>".concat(i,"</span>")}return i})).reverse().join("")}}},79354:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=n(57810),i=function(e){return e.findIndex((function(e){return e.props}))};const s={name:"TabSwitcher",props:{renderOnlyFocused:{required:!1,type:Boolean,default:!1},onSwitch:{required:!1,type:Function,default:void 0},activeTab:{required:!1,type:String,default:void 0},scrollableTabs:{required:!1,type:Boolean,default:!1},sideTabBar:{required:!1,type:Boolean,default:!1},bodyScrollLock:{required:!1,type:Boolean,default:!1}},data:function(){return{active:i(this.slots())}},computed:{activeIndex:function(){var e=this;return this.activeTab?this.slots().findIndex((function(t){return t&&t.props&&e.activeTab===t.props.key})):this.active},isActive:function(){var e=this;return function(t){return e.$slots.default().findIndex((function(e){return e.props&&e.props["data-tab-name"]===t}))===e.activeIndex}}},beforeUpdate:function(){this.slots()[this.active].props||(this.active=i(this.slots()))},methods:{clickTab:function(e){var t=this;return function(n){n.preventDefault(),t.setTab(e)}},slots:function(){return this.$slots.default()[0].type===o.HY?this.$slots.default()[0].children:this.$slots.default()},setTab:function(e){"function"==typeof this.onSwitch&&this.onSwitch.call(null,this.slots()[e].key),this.active=e,this.scrollableTabs&&(this.$refs.contents.scrollTop=0)}},render:function(){var e=this,t=this.slots().map((function(t,n){var i=t.props;if(i){var s=["tab","button-default"],a=["tab-wrapper"];return e.activeIndex===n&&(s.push("active"),a.push("active")),i.image?(0,o.Wm)("div",{class:a.join(" ")},[(0,o.Wm)("button",{disabled:i.disabled,onClick:e.clickTab(n),class:s.join(" "),type:"button",role:"tab"},[(0,o.Wm)("img",{src:i.image,title:i["image-tooltip"]},null),i.label?"":i.label])]):(0,o.Wm)("div",{class:a.join(" ")},[(0,o.Wm)("button",{disabled:i.disabled,onClick:e.clickTab(n),class:s.join(" "),type:"button",role:"tab"},[i.icon?(0,o.Wm)(r.GN,{class:"tab-icon",size:"2x","fixed-width":!0,icon:i.icon},null):"",(0,o.Wm)("span",{class:"text"},[i.label])])])}})),n=this.slots().map((function(t,n){var r=t.props;if(r){var i=e.activeIndex===n,s=[i?"active":"hidden"];r.fullHeight&&s.push("full-height");var a=!e.renderOnlyFocused||i?t:"";return(0,o.Wm)("div",{class:s},[e.sideTabBar?(0,o.Wm)("h1",{class:"mobile-label"},[r.label]):"",a])}}));return(0,o.Wm)("div",{class:"tab-switcher "+(this.sideTabBar?"side-tabs":"top-tabs")},[(0,o.Wm)("div",{class:"tabs",role:"tablist"},[t]),(0,o.wy)((0,o.Wm)("div",{ref:"contents",role:"tabpanel",class:"contents"+(this.scrollableTabs?" scrollable-tabs":"")},[n]),[[(0,o.Q2)("body-scroll-lock"),this.bodyScrollLock]])])}}},98027:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(4942),r=n(66252),i=n(41609),s=n.n(i),a=n(13562),u=n(57810),c=n(9382),l=n(84131);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}c.vI.add(l.IJ7);const m=function(e){var t=e.fetch,n=e.select,i=e.unmounted,c=e.childPropName,l=void 0===c?"entries":c,d=e.additionalPropNames,m=void 0===d?[]:d;return function(e){return{props:Object.keys((0,a.g)(e)).filter((function(e){return e!==l})).concat(m),data:function(){return{loading:!1,bottomedOut:!1,error:!1,entries:[]}},created:function(){window.addEventListener("scroll",this.scrollLoad),0===this.entries.length&&this.fetchEntries()},unmounted:function(){window.removeEventListener("scroll",this.scrollLoad),i&&i(this.$props,this.$store)},methods:{updateEntries:function(){this.entries=n(this.$props,this.$store)||[]},fetchEntries:function(){var e=this;this.loading||(this.loading=!0,this.error=!1,t(this.$props,this.$store).then((function(t){e.loading=!1,e.bottomedOut=s()(t)})).catch((function(){e.loading=!1,e.error=!0})).finally((function(){e.updateEntries()})))},scrollLoad:function(e){var t=document.body.getBoundingClientRect(),n=Math.max(t.height,-t.y);!1===this.loading&&!1===this.bottomedOut&&this.$el.offsetHeight>0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchEntries()}},render:function(){var t,n=p(p({},this.$props),{},(0,o.Z)({},l,this.entries)),i=this.$slots;return(0,r.Wm)("div",{class:"with-load-more"},[(0,r.Wm)(e,n,(t=i,"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!(0,r.lA)(t)?i:{default:function(){return[i]}})),(0,r.Wm)("div",{class:"with-load-more-footer"},[this.error&&(0,r.Wm)("button",{onClick:this.fetchEntries,class:"button-unstyled -link -fullwidth alert error"},[this.$t("general.generic_error")]),!this.error&&this.loading&&(0,r.Wm)(u.GN,{spin:!0,icon:"circle-notch"},null),!this.error&&!this.loading&&!this.bottomedOut&&(0,r.Wm)("a",{onClick:this.fetchEntries,role:"button",tabindex:"0"},[this.$t("general.more")])])])}}}}},8312:e=>{var t={ja:"ja_pedantic"};e.exports={languages:["ar","ca","cs","de","eo","en","es","et","eu","fi","fr","ga","he","hu","it","ja","ja_easy","ko","nan-TW","nb","nl","oc","pl","pt","ro","ru","sk","te","uk","zh","zh_Hant"],langCodeToJsonName:function(e){return t[e]||e},langCodeToCldrName:function(e){return e},ensureFinalFallback:function(e){var t=Array.isArray(e)?e:[e];return t.includes("en")?t:t.concat(["en"])}}},72617:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o=n(84506),r=n(15861),i=n(18446),s=n.n(i),a=n(64687),u=n.n(a),c=n(8312);function l(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p,m=function(e){return n(27650)("./".concat((0,c.langCodeToJsonName)(e),".json"))};const h={languages:c.languages,default:{en:n(88797).default},setLanguage:(p=(0,r.Z)(u().mark((function e(t,n){var r,i,a,d,p,h,f,g;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((r=(Array.isArray(n)?n:[n]).filter((function(e){return e}))).includes("en")||r.push("en"),i=(0,o.Z)(r),a=i[0],d=i.slice(1),a!==t.locale||!s()(d,t.fallbackLocale)){e.next=5;break}return e.abrupt("return");case 5:p=l(r),e.prev=6,p.s();case 8:if((h=p.n()).done){e.next=17;break}if(u=f=h.value,!c.languages.includes(u)){e.next=15;break}return e.next=13,m(f);case 13:g=e.sent,t.setLocaleMessage(f,g.default);case 15:e.next=8;break;case 17:e.next=22;break;case 19:e.prev=19,e.t0=e.catch(6),p.e(e.t0);case 22:return e.prev=22,p.f(),e.finish(22);case 25:t.fallbackLocale=d,t.locale=a;case 27:case"end":return e.stop()}var u}),e,null,[[6,19,22,25]])}))),function(e,t){return p.apply(this,arguments)})}},35930:(e,t,n)=>{"use strict";var o=n(15861),r=n(64687),i=n.n(r),s=n(989),a=(n(67810),n(73152));try{new EventTarget}catch(e){window.EventTarget=a.Z}const u={state:{settingsModalState:"hidden",settingsModalLoadedUser:!1,settingsModalLoadedAdmin:!1,settingsModalTargetTab:null,settingsModalMode:"user",settings:{currentSaveStateNotice:null,noticeClearTimeout:null,notificationPermission:null},browserSupport:{cssFilter:window.CSS&&window.CSS.supports&&(window.CSS.supports("filter","drop-shadow(0 0)")||window.CSS.supports("-webkit-filter","drop-shadow(0 0)"))},layoutType:"normal",globalNotices:[],layoutHeight:0,lastTimeline:null},mutations:{settingsSaved:function(e,t){var n=t.success,o=t.error;n?(e.noticeClearTimeout&&clearTimeout(e.noticeClearTimeout),e.settings.currentSaveStateNotice={error:!1,data:n},e.settings.noticeClearTimeout=setTimeout((function(){return delete e.settings.currentSaveStateNotice}),2e3)):e.settings.currentSaveStateNotice={error:!0,errorData:o}},setNotificationPermission:function(e,t){e.notificationPermission=t},setLayoutType:function(e,t){e.layoutType=t},closeSettingsModal:function(e){e.settingsModalState="hidden"},togglePeekSettingsModal:function(e){switch(e.settingsModalState){case"minimized":return void(e.settingsModalState="visible");case"visible":return void(e.settingsModalState="minimized");default:throw new Error("Illegal minimization state of settings modal")}},openSettingsModal:function(e,t){e.settingsModalMode=t,e.settingsModalState="visible","user"===t?e.settingsModalLoadedUser||(e.settingsModalLoadedUser=!0):"admin"===t&&(e.settingsModalLoadedAdmin||(e.settingsModalLoadedAdmin=!0))},setSettingsModalTargetTab:function(e,t){e.settingsModalTargetTab=t},pushGlobalNotice:function(e,t){e.globalNotices.push(t)},removeGlobalNotice:function(e,t){e.globalNotices=e.globalNotices.filter((function(e){return e!==t}))},setLayoutHeight:function(e,t){e.layoutHeight=t},setLayoutWidth:function(e,t){e.layoutWidth=t},setLastTimeline:function(e,t){e.lastTimeline=t}},actions:{setPageTitle:function(e){var t=e.rootState,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";document.title="".concat(n," ").concat(t.instance.name)},settingsSaved:function(e,t){var n=e.commit;e.dispatch,n("settingsSaved",{success:t.success,error:t.error})},setNotificationPermission:function(e,t){(0,e.commit)("setNotificationPermission",t)},closeSettingsModal:function(e){(0,e.commit)("closeSettingsModal")},openSettingsModal:function(e){var t=e.commit,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user";t("openSettingsModal",n)},togglePeekSettingsModal:function(e){(0,e.commit)("togglePeekSettingsModal")},clearSettingsModalTargetTab:function(e){(0,e.commit)("setSettingsModalTargetTab",null)},openSettingsModalTab:function(e,t){var n=e.commit;n("setSettingsModalTargetTab",t),n("openSettingsModal","user")},pushGlobalNotice:function(e,t){var n=e.commit,o=e.dispatch,r=e.state,i=t.messageKey,s=t.messageArgs,a=void 0===s?{}:s,u=t.level,c=void 0===u?"error":u,l=t.timeout,d=void 0===l?0:l;n("pushGlobalNotice",{messageKey:i,messageArgs:a,level:c});var p=r.globalNotices[r.globalNotices.length-1];return d&&setTimeout((function(){return o("removeGlobalNotice",p)}),d),p},removeGlobalNotice:function(e,t){(0,e.commit)("removeGlobalNotice",t)},setLayoutHeight:function(e,t){(0,e.commit)("setLayoutHeight",t)},setLayoutWidth:function(e,t){var n=e.commit,o=e.state,r=e.rootGetters,i=e.rootState,s=t;void 0!==t?n("setLayoutWidth",t):s=o.layoutWidth;var a=s<=800?"mobile":"normal";"none"!==r.mergedConfig.thirdColumnMode&&i.users.currentUser?n("setLayoutType",s>=1300?"wide":a):n("setLayoutType",a)},setLastTimeline:function(e,t){(0,e.commit)("setLastTimeline",t)}}};var c=n(29439),l=n(93433),d=n(4942),p=n(77394),m=n(40454),h=n(77776),f=n(85565),g=n(8312);function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var b=["smileys-and-emotion","people-and-body","animals-and-nature","food-and-drink","travel-and-places","activities","objects","symbols","flags"],y=function(){for(var e=127462,t="A".codePointAt(0),n=new Array(26),o=e;o<=127487;++o){var r=String.fromCodePoint(t+o-e);n[o-e]={replacement:String.fromCodePoint(o),imageUrl:!1,displayText:"regional_indicator_"+r,displayTextI18n:{key:"emoji.regional_indicator",args:{letter:r}}}}return n}(),D=function(e){return n(1395)("./".concat((0,g.langCodeToCldrName)(e),".json")).then((function(e){return e.default}))},_=function(e,t){var n=Object.keys(t);return w(w({},e),{},{annotations:n.reduce((function(n,o){return n[o]=t[o][e.replacement],n}),{})})};const k={state:{name:"Pleroma FE",registrationOpen:!0,server:"http://localhost:4040/",textlimit:5e3,themeData:void 0,vapidPublicKey:void 0,alwaysShowSubjectInput:!0,defaultAvatar:"/images/avi.png",defaultBanner:"/images/banner.png",background:"/static/aurora_borealis.jpg",collapseMessageWithSubject:!1,greentext:!1,useAtIcon:!1,mentionLinkDisplay:"short",mentionLinkShowTooltip:!0,mentionLinkShowAvatar:!1,mentionLinkFadeDomain:!0,mentionLinkShowYous:!1,mentionLinkBoldenYou:!0,hideFilteredStatuses:!1,hideMutedPosts:!1,hideMutedThreads:!0,hideWordFilteredPosts:!1,hidePostStats:!1,hideBotIndication:!1,hideSitename:!1,hideUserStats:!1,muteBotStatuses:!1,modalOnRepeat:!1,modalOnUnfollow:!1,modalOnBlock:!0,modalOnMute:!1,modalOnDelete:!0,modalOnLogout:!0,modalOnApproveFollow:!1,modalOnDenyFollow:!1,modalOnRemoveUserFromFollowers:!1,loginMethod:"password",logo:"/static/logo.svg",logoMargin:".2em",logoMask:!0,logoLeft:!1,disableUpdateNotification:!1,minimalScopesMode:!1,nsfwCensorImage:void 0,postContentType:"text/plain",redirectRootLogin:"/main/friends",redirectRootNoLogin:"/main/all",scopeCopy:!0,showFeaturesPanel:!0,showInstanceSpecificPanel:!1,sidebarRight:!1,subjectLineBehavior:"email",theme:"pleroma-dark",virtualScrolling:!0,sensitiveByDefault:!1,conversationDisplay:"linear",conversationTreeAdvanced:!1,conversationOtherRepliesButton:"below",conversationTreeFadeAncestors:!1,maxDepthInThread:6,autocompleteSelect:!1,customEmoji:[],customEmojiFetched:!1,emoji:{},emojiFetched:!1,unicodeEmojiAnnotations:{},pleromaBackend:!0,postFormats:[],restrictedNicknames:[],safeDM:!0,knownDomains:[],birthdayRequired:!1,birthdayMinAge:0,shoutAvailable:!1,pleromaChatMessagesAvailable:!1,pleromaCustomEmojiReactionsAvailable:!1,gopherAvailable:!1,mediaProxyAvailable:!1,suggestionsEnabled:!1,suggestionsWeb:"",quotingAvailable:!1,instanceSpecificPanelContent:"",tos:"",backendVersion:"",frontendVersion:"",pollsAvailable:!1,pollLimits:{max_options:4,max_option_chars:255,min_expiration:60,max_expiration:86400}},mutations:{setInstanceOption:function(e,t){var n=t.name,o=t.value;void 0!==o&&(e[n]=o)},setKnownDomains:function(e,t){e.knownDomains=t},setUnicodeEmojiAnnotations:function(e,t){var n=t.lang,o=t.annotations;e.unicodeEmojiAnnotations[n]=o}},getters:{instanceDefaultConfig:function(e){return f.Oi.map((function(t){return[t,e[t]]})).reduce((function(e,t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];return w(w({},e),{},(0,d.Z)({},o,r))}),{})},groupedCustomEmojis:function(e){return e.customEmoji.reduce((function(e,t){return function(e){var t=e.tags.filter((function(e){return e.startsWith("pack:")})).map((function(e){var t=e.slice(5);return{id:"custom-".concat(t),text:t}}));return t.length?t:[{id:"unpacked"}]}(t).forEach((function(n){var o=n.id,r=n.text;e[o]||(e[o]={id:o,text:r,image:t.imageUrl,emojis:[]}),e[o].emojis.push(t)})),e}),{})},standardEmojiList:function(e){return b.map((function(t){return(e.emoji[t]||[]).map((function(t){return _(t,e.unicodeEmojiAnnotations)}))})).reduce((function(e,t){return e.concat(t)}),[])},standardEmojiGroupList:function(e){return b.map((function(t){return{id:t,emojis:(e.emoji[t]||[]).map((function(t){return _(t,e.unicodeEmojiAnnotations)}))}}))},instanceDomain:function(e){return new URL(e.server).hostname},remoteInteractionLink:function(e){var t=(e.server.endsWith("/")?e.server.slice(0,-1):e.server)+"/main/ostatus";return function(e){var n=e.statusId,o=e.nickname;return n?"".concat(t,"?status_id=").concat(n):"".concat(t,"?nickname=").concat(o)}}},actions:{setInstanceOption:function(e,t){var n=e.commit,o=e.dispatch,r=t.name,i=t.value;switch(n("setInstanceOption",{name:r,value:i}),r){case"name":o("setPageTitle");break;case"shoutAvailable":i&&o("initializeSocket");break;case"theme":o("setTheme",i)}},getStaticEmoji:function(e){return(0,o.Z)(i().mark((function t(){var o,r,s;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.commit,t.prev=1,t.next=4,n.e(3687).then(n.t.bind(n,13315,19));case 4:r=t.sent.default,s=Object.keys(r).reduce((function(e,t){return e[t]=r[t].map((function(e){return{displayText:e.slug,imageUrl:!1,replacement:e.emoji}})),e}),{}),o("setInstanceOption",{name:"emoji",value:(i=s,a=void 0,(a=i.symbols).push.apply(a,(0,l.Z)(y)),i)}),t.next=13;break;case 9:t.prev=9,t.t0=t.catch(1),console.warn("Can't load static emoji"),console.warn(t.t0);case 13:case"end":return t.stop()}var i,a}),t,null,[[1,9]])})))()},loadUnicodeEmojiData:function(e,t){var n=e.commit,r=e.state,s=(0,g.ensureFinalFallback)(t);return Promise.all(s.map(function(){var e=(0,o.Z)(i().mark((function e(t){var o;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r.unicodeEmojiAnnotations[t]){e.next=11;break}return e.prev=1,e.next=4,D(t);case 4:o=e.sent,n("setUnicodeEmojiAnnotations",{lang:t,annotations:o}),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.warn("Error loading unicode emoji annotations for ".concat(t,": "),e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}()))},getCustomEmoji:function(e){return(0,o.Z)(i().mark((function t(){var n,o,r,s,a,u,d,p,m;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,o=e.state,t.prev=1,t.next=4,window.fetch("/api/pleroma/emoji.json");case 4:if(!(r=t.sent).ok){t.next=17;break}return t.next=8,r.json();case 8:s=t.sent,a=Array.isArray(s)?Object.assign.apply(Object,[{}].concat((0,l.Z)(s))):s,u=function(e,t){var n=e.toLowerCase(),o=t.toLowerCase();return n>o?1:n<o?-1:0},d=function(e,t){var n=""===e,o=""===t;return n===o?0:n&&!o?1:-1},p=function(e,t){var n=function(e){return(e.tags.filter((function(e){return e.startsWith("pack:")}))[0]||"").slice(5)},o=n(e),r=n(t);return d(o,r)||u(o,r)||u(e.displayText,t.displayText)},m=Object.entries(a).map((function(e){var t=(0,c.Z)(e,2),n=t[0],r=t[1],i=r.image_url;return{displayText:n,imageUrl:i?o.server+i:r,tags:i?r.tags.sort((function(e,t){return e>t?1:0})):["utf"],replacement:":".concat(n,": ")}})).sort(p),n("setInstanceOption",{name:"customEmoji",value:m}),t.next=18;break;case 17:throw r;case 18:t.next=24;break;case 20:t.prev=20,t.t0=t.catch(1),console.warn("Can't load custom emojis"),console.warn(t.t0);case 24:case"end":return t.stop()}}),t,null,[[1,20]])})))()},setTheme:function(e,t){var n=e.commit,o=e.rootState;n("setInstanceOption",{name:"theme",value:t}),(0,p.I3)(t).then((function(e){if(n("setInstanceOption",{name:"themeData",value:e}),!o.config.customTheme){var t=e.source;!e.theme||t&&t.themeEngineVersion===m.we?(0,p._v)(t):(0,p._v)(e.theme)}}))},fetchEmoji:function(e){var t=e.dispatch,n=e.state;n.customEmojiFetched||(n.customEmojiFetched=!0,t("getCustomEmoji")),n.emojiFetched||(n.emojiFetched=!0,t("getStaticEmoji"))},getKnownDomains:function(e){return(0,o.Z)(i().mark((function t(){var n,o,r;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,o=e.rootState,t.prev=1,t.next=4,h.ZP.fetchKnownDomains({credentials:o.users.currentUser.credentials});case 4:r=t.sent,n("setKnownDomains",r),t.next=12;break;case 8:t.prev=8,t.t0=t.catch(1),console.warn("Can't load known domains"),console.warn(t.t0);case 12:case"end":return t.stop()}}),t,null,[[1,8]])})))()}}};var C=n(14176),S=n.n(C),j=n(1469),F=n.n(j),A=n(10928),O=n.n(A),E=n(8804),z=n.n(E),P=n(82492),I=n.n(P),x=n(22762),T=n.n(x),$=n(84753),B=n.n($),U=n(13311),M=n.n(U),L=n(30998),R=n.n(L),q=n(66073),N=n.n(q),Z=n(12571),W=n.n(Z),H=n(82729),V=n.n(H),K=n(52230);function G(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?G(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):G(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var J=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return{statuses:[],statusesObject:{},faves:[],visibleStatuses:[],visibleStatusesObject:{},newStatusCount:0,maxId:0,minId:0,minVisibleId:0,loading:!1,followers:[],friends:[],userId:e,flushMarker:0}},Q=function(){return{desktopNotificationSilence:!0,maxId:0,minId:Number.POSITIVE_INFINITY,data:[],idStore:{},loading:!1}},X=function(){return{allStatuses:[],allStatusesObject:{},conversationsObject:{},maxId:0,notifications:Q(),favorites:new Set,timelines:{mentions:J(),public:J(),user:J(),favorites:J(),media:J(),publicAndExternal:J(),friends:J(),tag:J(),dms:J(),bookmarks:J(),list:J()}}},ee=function(e,t,n){var o=t[n.id];return o?(I()(o,S()(n,(function(e,t){return null===e||"user"===t}))),o.attachments.splice(o.attachments.length),{item:o,new:!1}):(function(e){e.deleted=!1,e.attachments=e.attachments||[]}(n),e.push(n),t[n.id]=n,{item:n,new:!0})},te=function(e,t){var n=Number(e.id),o=Number(t.id),r=!Number.isNaN(n),i=!Number.isNaN(o);return r&&i?n>o?-1:1:r&&!i?1:!r&&i||e.id>t.id?-1:1},ne=function(e){return e.visibleStatuses=e.visibleStatuses.sort(te),e.statuses=e.statuses.sort(te),e.minVisibleId=(O()(e.visibleStatuses)||{}).id,e},oe=function(e,t){var n=ee(e.allStatuses,e.allStatusesObject,t);if(n.new){var o=n.item,r=e.conversationsObject,i=o.statusnet_conversation_id;r[i]?r[i].push(o):r[i]=[o]}return n},re=function(e,t){e.notifications.maxId=t.id>e.notifications.maxId?t.id:e.notifications.maxId,e.notifications.minId=t.id<e.notifications.minId?t.id:e.notifications.minId},ie={addNewStatuses:function(e,t){var n=t.statuses,o=t.showImmediately,r=void 0!==o&&o,i=t.timeline,s=t.user,a=void 0===s?{}:s,u=t.noIdUpdate,c=void 0!==u&&u,l=t.userId,d=t.pagination,p=void 0===d?{}:d;if(!F()(n))return!1;var m=e.allStatuses,h=e.timelines[i],f=p.maxId||(n.length>0?T()(n,"id").id:0),g=p.minId||(n.length>0?B()(n,"id").id:0),v=i&&(g>h.maxId||0===h.maxId)&&n.length>0,w=i&&(f<h.minId||0===h.minId)&&n.length>0;if(!c&&v&&(h.maxId=g),!c&&w&&(h.minId=f),"user"!==i&&"media"!==i||h.userId===l){var b=function t(n,o){var r,s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],u=oe(e,n),c=u.item;if(u.new){if("status"===c.type&&M()(c.attentions,{id:a.id})){var l=e.timelines.mentions;h!==l&&(ee(l.statuses,l.statusesObject,c),l.newStatusCount+=1,ne(l))}if("direct"===c.visibility){var d=e.timelines.dms;ee(d.statuses,d.statusesObject,c),d.newStatusCount+=1,ne(d)}}return i&&s&&(r=ee(h.statuses,h.statusesObject,c)),i&&o?ee(h.visibleStatuses,h.visibleStatusesObject,c):i&&s&&r.new&&(h.newStatusCount+=1),c.quote&&t(c.quote,!1,!1),c},y={status:function(e){b(e,r)},edit:function(e){b(e,r)},retweet:function(e){var t=b(e.retweeted_status,!1,!1);(i&&M()(h.statuses,(function(e){return e.retweeted_status?e.id===t.id||e.retweeted_status.id===t.id:e.id===t.id}))?b(e,!1,!1):b(e,r)).retweeted_status=t},favorite:function(t){e.favorites.has(t.id)||(e.favorites.add(t.id),function(e,t){var n=M()(m,{id:e.in_reply_to_status_id});n&&(e.user.id===a.id?n.favorited=!0:n.fave_num+=1)}(t))},deletion:function(t){var n=t.uri,o=M()(m,{uri:n});o&&(function(e,t){V()(e.allStatuses,{id:t.id}),V()(e.notifications.data,(function(e){return e.action.id===t.id}));var n=t.statusnet_conversation_id;e.conversationsObject[n]&&V()(e.conversationsObject[n],{id:t.id})}(e,o),i&&(V()(h.statuses,{uri:n}),V()(h.visibleStatuses,{uri:n})))},follow:function(e){},default:function(e){console.log("unknown status type"),console.log(e)}};N()(n,(function(e){var t=e.type;(y[t]||y.default)(e)})),i&&"bookmarks"!==i&&ne(h)}},addNewNotifications:function(e,t){var n=t.dispatch,o=t.notifications,r=(t.older,t.visibleNotificationTypes,t.rootGetters,t.newNotificationSideEffects);N()(o,(function(t){if(!(0,K.nU)(t))return console.error("Invalid notification:",t),void re(e,t);(0,K.Gr)(t.type)&&(t.action=oe(e,t.action).item,t.status=t.status&&oe(e,t.status).item),"pleroma:report"===t.type&&n("addReport",t.report),"pleroma:emoji_reaction"===t.type&&n("fetchEmojiReactionsBy",t.status.id),e.notifications.idStore.hasOwnProperty(t.id)?t.seen&&(e.notifications.idStore[t.id].seen=!0):(re(e,t),e.notifications.data.push(t),e.notifications.idStore[t.id]=t,r(t))}))},removeStatus:function(e,t){var n=t.timeline,o=t.userId,r=e.timelines[n];o&&(V()(r.statuses,{user:{id:o}}),V()(r.visibleStatuses,{user:{id:o}}),r.minVisibleId=r.visibleStatuses.length>0?O()(r.visibleStatuses).id:0,r.maxId=r.statuses.length>0?z()(r.statuses).id:0)},showNewStatuses:function(e,t){var n=t.timeline,o=e.timelines[n];o.newStatusCount=0,o.visibleStatuses=W()(o.statuses,0,50),o.minVisibleId=O()(o.visibleStatuses).id,o.minId=o.minVisibleId,o.visibleStatusesObject={},N()(o.visibleStatuses,(function(e){o.visibleStatusesObject[e.id]=e}))},resetStatuses:function(e){var t=X();Object.entries(t).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];e[o]=r}))},clearTimeline:function(e,t){var n=t.timeline,o=t.excludeUserId,r=void 0!==o&&o?e.timelines[n].userId:void 0;e.timelines[n]=J(r)},clearNotifications:function(e){e.notifications=Q()},setFavorited:function(e,t){var n=t.status,o=t.value,r=e.allStatusesObject[n.id];r.favorited!==o&&(o?r.fave_num++:r.fave_num--),r.favorited=o},setFavoritedConfirm:function(e,t){var n=t.status,o=t.user,r=e.allStatusesObject[n.id];r.favorited=n.favorited,r.fave_num=n.fave_num;var i=R()(r.favoritedBy,{id:o.id});-1===i||r.favorited?-1===i&&r.favorited&&r.favoritedBy.push(o):r.favoritedBy.splice(i,1)},setMutedStatus:function(e,t){var n=e.allStatusesObject[t.id];n.thread_muted=t.thread_muted,void 0!==n.thread_muted&&e.conversationsObject[n.statusnet_conversation_id].forEach((function(e){e.thread_muted=n.thread_muted}))},setRetweeted:function(e,t){var n=t.status,o=t.value,r=e.allStatusesObject[n.id];r.repeated!==o&&(o?r.repeat_num++:r.repeat_num--),r.repeated=o},setRetweetedConfirm:function(e,t){var n=t.status,o=t.user,r=e.allStatusesObject[n.id];r.repeated=n.repeated,r.repeat_num=n.repeat_num;var i=R()(r.rebloggedBy,{id:o.id});-1===i||r.repeated?-1===i&&r.repeated&&r.rebloggedBy.push(o):r.rebloggedBy.splice(i,1)},setBookmarked:function(e,t){var n=t.status,o=t.value;e.allStatusesObject[n.id].bookmarked=o},setBookmarkedConfirm:function(e,t){var n=t.status;e.allStatusesObject[n.id].bookmarked=n.bookmarked},setDeleted:function(e,t){var n=t.status,o=e.allStatusesObject[n.id];o&&(o.deleted=!0)},setManyDeleted:function(e,t){Object.values(e.allStatusesObject).forEach((function(e){t(e)&&(e.deleted=!0)}))},setLoading:function(e,t){var n=t.timeline,o=t.value;e.timelines[n].loading=o},setNsfw:function(e,t){var n=t.id,o=t.nsfw;e.allStatusesObject[n].nsfw=o},setNotificationsLoading:function(e,t){var n=t.value;e.notifications.loading=n},setNotificationsSilence:function(e,t){var n=t.value;e.notifications.desktopNotificationSilence=n},markNotificationsAsSeen:function(e){N()(e.notifications.data,(function(e){e.seen=!0}))},markSingleNotificationAsSeen:function(e,t){var n=t.id,o=M()(e.notifications.data,(function(e){return e.id===n}));o&&(o.seen=!0)},dismissNotification:function(e,t){var n=t.id;e.notifications.data=e.notifications.data.filter((function(e){return e.id!==n}))},dismissNotifications:function(e,t){var n=t.finder;e.notifications.data=e.notifications.data.filter((function(e){return n}))},updateNotification:function(e,t){var n=t.id,o=t.updater,r=M()(e.notifications.data,(function(e){return e.id===n}));r&&o(r)},queueFlush:function(e,t){var n=t.timeline,o=t.id;e.timelines[n].flushMarker=o},queueFlushAll:function(e){Object.keys(e.timelines).forEach((function(t){e.timelines[t].flushMarker=e.timelines[t].maxId}))},addRepeats:function(e,t){var n=t.id,o=t.rebloggedByUsers,r=t.currentUser,i=e.allStatusesObject[n];i.rebloggedBy=o.filter((function(e){return e})),i.repeat_num=i.rebloggedBy.length,i.repeated=!!i.rebloggedBy.find((function(e){var t=e.id;return r.id===t}))},addFavs:function(e,t){var n=t.id,o=t.favoritedByUsers,r=t.currentUser,i=e.allStatusesObject[n];i.favoritedBy=o.filter((function(e){return e})),i.fave_num=i.favoritedBy.length,i.favorited=!!i.favoritedBy.find((function(e){var t=e.id;return r.id===t}))},addEmojiReactionsBy:function(e,t){var n=t.id,o=t.emojiReactions;t.currentUser,e.allStatusesObject[n].emoji_reactions=o},addOwnReaction:function(e,t){var n=t.id,o=t.emoji,r=t.currentUser,i=e.allStatusesObject[n],s=R()(i.emoji_reactions,{name:o}),a=i.emoji_reactions[s]||{name:o,count:0,accounts:[]},u=Y(Y({},a),{},{count:a.count+1,me:!0,accounts:[].concat((0,l.Z)(a.accounts),[r])});s>=0?i.emoji_reactions[s]=u:i.emoji_reactions=[].concat((0,l.Z)(i.emoji_reactions),[u])},removeOwnReaction:function(e,t){var n=t.id,o=t.emoji,r=t.currentUser,i=e.allStatusesObject[n],s=R()(i.emoji_reactions,{name:o});if(!(s<0)){var a=i.emoji_reactions[s],u=a.accounts||[],c=Y(Y({},a),{},{count:a.count-1,me:!1,accounts:u.filter((function(e){return e.id!==r.id}))});c.count>0?i.emoji_reactions[s]=c:i.emoji_reactions=i.emoji_reactions.filter((function(e){return e.name!==o}))}},updateStatusWithPoll:function(e,t){var n=t.id,o=t.poll;e.allStatusesObject[n].poll=o},setVirtualHeight:function(e,t){var n=t.statusId,o=t.height;e.allStatusesObject[n].virtualHeight=o}},se={state:X(),actions:{addNewStatuses:function(e,t){var n=e.rootState,o=e.commit,r=t.statuses,i=t.showImmediately,s=void 0!==i&&i,a=t.timeline,u=void 0!==a&&a,c=t.noIdUpdate,l=void 0!==c&&c,d=t.userId,p=t.pagination;o("addNewStatuses",{statuses:r,showImmediately:s,timeline:u,noIdUpdate:l,user:n.users.currentUser,userId:d,pagination:p})},addNewNotifications:function(e,t){var n=t.notifications,o=t.older;(0,e.commit)("addNewNotifications",{dispatch:e.dispatch,notifications:n,older:o,rootGetters:e.rootGetters,newNotificationSideEffects:function(t){(0,K.nJ)(e,t)}})},setNotificationsLoading:function(e,t){e.rootState,(0,e.commit)("setNotificationsLoading",{value:t.value})},setNotificationsSilence:function(e,t){e.rootState,(0,e.commit)("setNotificationsSilence",{value:t.value})},fetchStatus:function(e,t){var n=e.rootState,o=e.dispatch;return n.api.backendInteractor.fetchStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},fetchStatusSource:function(e,t){var n=e.rootState;return e.dispatch,h.ZP.fetchStatusSource({id:t.id,credentials:n.users.currentUser.credentials})},fetchStatusHistory:function(e,t){return e.rootState,e.dispatch,h.ZP.fetchStatusHistory({status:t})},deleteStatus:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch;h.ZP.deleteStatus({id:t.id,credentials:n.users.currentUser.credentials}).then((function(e){o("setDeleted",{status:t})})).catch((function(e){r("pushGlobalNotice",{level:"error",messageKey:"status.delete_error",messageArgs:[e.message],timeout:5e3})}))},deleteStatusById:function(e,t){var n=e.rootState;(0,e.commit)("setDeleted",{status:n.statuses.allStatusesObject[t]})},markStatusesAsDeleted:function(e,t){(0,e.commit)("setManyDeleted",t)},favorite:function(e,t){var n=e.rootState,o=e.commit;o("setFavorited",{status:t,value:!0}),n.api.backendInteractor.favorite({id:t.id}).then((function(e){return o("setFavoritedConfirm",{status:e,user:n.users.currentUser})}))},unfavorite:function(e,t){var n=e.rootState,o=e.commit;o("setFavorited",{status:t,value:!1}),n.api.backendInteractor.unfavorite({id:t.id}).then((function(e){return o("setFavoritedConfirm",{status:e,user:n.users.currentUser})}))},fetchPinnedStatuses:function(e,t){var n=e.rootState,o=e.dispatch;n.api.backendInteractor.fetchPinnedStatuses({id:t}).then((function(e){return o("addNewStatuses",{statuses:e,timeline:"user",userId:t,showImmediately:!0,noIdUpdate:!0})}))},pinStatus:function(e,t){var n=e.rootState,o=e.dispatch;return n.api.backendInteractor.pinOwnStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},unpinStatus:function(e,t){var n=e.rootState,o=e.dispatch;n.api.backendInteractor.unpinOwnStatus({id:t}).then((function(e){return o("addNewStatuses",{statuses:[e]})}))},muteConversation:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.muteConversation({id:t}).then((function(e){return o("setMutedStatus",e)}))},unmuteConversation:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.unmuteConversation({id:t}).then((function(e){return o("setMutedStatus",e)}))},retweet:function(e,t){var n=e.rootState,o=e.commit;o("setRetweeted",{status:t,value:!0}),n.api.backendInteractor.retweet({id:t.id}).then((function(e){return o("setRetweetedConfirm",{status:e.retweeted_status,user:n.users.currentUser})}))},unretweet:function(e,t){var n=e.rootState,o=e.commit;o("setRetweeted",{status:t,value:!1}),n.api.backendInteractor.unretweet({id:t.id}).then((function(e){return o("setRetweetedConfirm",{status:e,user:n.users.currentUser})}))},bookmark:function(e,t){var n=e.rootState,o=e.commit;o("setBookmarked",{status:t,value:!0}),n.api.backendInteractor.bookmarkStatus({id:t.id}).then((function(e){o("setBookmarkedConfirm",{status:e})}))},unbookmark:function(e,t){var n=e.rootState,o=e.commit;o("setBookmarked",{status:t,value:!1}),n.api.backendInteractor.unbookmarkStatus({id:t.id}).then((function(e){o("setBookmarkedConfirm",{status:e})}))},queueFlush:function(e,t){e.rootState,(0,e.commit)("queueFlush",{timeline:t.timeline,id:t.id})},queueFlushAll:function(e){e.rootState,(0,e.commit)("queueFlushAll")},markNotificationsAsSeen:function(e){var t=e.rootState;(0,e.commit)("markNotificationsAsSeen"),h.ZP.markNotificationsAsSeen({id:t.statuses.notifications.maxId,credentials:t.users.currentUser.credentials})},markSingleNotificationAsSeen:function(e,t){var n=e.rootState,o=e.commit,r=t.id;o("markSingleNotificationAsSeen",{id:r}),h.ZP.markNotificationsAsSeen({single:!0,id:r,credentials:n.users.currentUser.credentials})},dismissNotificationLocal:function(e,t){e.rootState,(0,e.commit)("dismissNotification",{id:t.id})},dismissNotification:function(e,t){var n=e.rootState,o=e.commit,r=t.id;o("dismissNotification",{id:r}),n.api.backendInteractor.dismissNotification({id:r})},updateNotification:function(e,t){e.rootState,(0,e.commit)("updateNotification",{id:t.id,updater:t.updater})},fetchFavsAndRepeats:function(e,t){var n=e.rootState,o=e.commit;Promise.all([n.api.backendInteractor.fetchFavoritedByUsers({id:t}),n.api.backendInteractor.fetchRebloggedByUsers({id:t})]).then((function(e){var r=(0,c.Z)(e,2),i=r[0],s=r[1];o("addFavs",{id:t,favoritedByUsers:i,currentUser:n.users.currentUser}),o("addRepeats",{id:t,rebloggedByUsers:s,currentUser:n.users.currentUser})}))},reactWithEmoji:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit,i=t.id,s=t.emoji,a=n.users.currentUser;a&&(r("addOwnReaction",{id:i,emoji:s,currentUser:a}),n.api.backendInteractor.reactWithEmoji({id:i,emoji:s}).then((function(e){o("fetchEmojiReactionsBy",i)})))},unreactWithEmoji:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit,i=t.id,s=t.emoji,a=n.users.currentUser;a&&(r("removeOwnReaction",{id:i,emoji:s,currentUser:a}),n.api.backendInteractor.unreactWithEmoji({id:i,emoji:s}).then((function(e){o("fetchEmojiReactionsBy",i)})))},fetchEmojiReactionsBy:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.fetchEmojiReactions({id:t}).then((function(e){o("addEmojiReactionsBy",{id:t,emojiReactions:e,currentUser:n.users.currentUser})}))},fetchFavs:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.fetchFavoritedByUsers({id:t}).then((function(e){return o("addFavs",{id:t,favoritedByUsers:e,currentUser:n.users.currentUser})}))},fetchRepeats:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.fetchRebloggedByUsers({id:t}).then((function(e){return o("addRepeats",{id:t,rebloggedByUsers:e,currentUser:n.users.currentUser})}))},search:function(e,t){var n=t.q,o=t.resolve,r=t.limit,i=t.offset,s=t.following,a=t.type;return e.rootState.api.backendInteractor.search2({q:n,resolve:o,limit:r,offset:i,following:s,type:a}).then((function(t){return e.commit("addNewUsers",t.accounts),e.commit("addNewUsers",t.statuses.map((function(e){return e.user})).filter((function(e){return e}))),e.commit("addNewStatuses",{statuses:t.statuses}),t}))},setVirtualHeight:function(e,t){(0,e.commit)("setVirtualHeight",{statusId:t.statusId,height:t.height})}},mutations:ie};const ae=se;var ue={setLists:function(e,t){e.allLists=t},setList:function(e,t){var n=t.listId,o=t.title;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].title=o;var r=M()(e.allLists,{id:n});r?r.title=o:e.allLists.push({id:n,title:o})},setListAccounts:function(e,t){var n=t.listId,o=t.accountIds;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].accountIds=o},addListAccount:function(e,t){var n=t.listId,o=t.accountId;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]}),e.allListsObject[n].accountIds.push(o)},removeListAccount:function(e,t){var n=t.listId,o=t.accountId;e.allListsObject[n]||(e.allListsObject[n]={accountIds:[]});var r=e.allListsObject[n].accountIds,i=new Set(r);i.delete(o),e.allListsObject[n].accountIds=(0,l.Z)(i)},deleteList:function(e,t){var n=t.listId;delete e.allListsObject[n],V()(e.allLists,(function(e){return e.id===n}))}},ce={state:{allLists:[],allListsObject:{}},mutations:ue,actions:{setLists:function(e,t){(0,e.commit)("setLists",t)},createList:function(e,t){var n=e.rootState,o=e.commit,r=t.title;return n.api.backendInteractor.createList({title:r}).then((function(e){return o("setList",{listId:e.id,title:r}),e}))},fetchList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;return n.api.backendInteractor.getList({listId:r}).then((function(e){return o("setList",{listId:e.id,title:e.title})}))},fetchListAccounts:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;return n.api.backendInteractor.getListAccounts({listId:r}).then((function(e){return o("setListAccounts",{listId:r,accountIds:e})}))},setList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.title;n.api.backendInteractor.updateList({listId:r,title:i}),o("setList",{listId:r,title:i})},setListAccounts:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountIds,s=n.lists.allListsObject[r].accountIds||[],a=i.filter((function(e){return!s.includes(e)})),u=s.filter((function(e){return!i.includes(e)}));o("setListAccounts",{listId:r,accountIds:i}),a.length>0&&n.api.backendInteractor.addAccountsToList({listId:r,accountIds:a}),u.length>0&&n.api.backendInteractor.removeAccountsFromList({listId:r,accountIds:u})},addListAccount:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountId;return n.api.backendInteractor.addAccountsToList({listId:r,accountIds:[i]}).then((function(e){return o("addListAccount",{listId:r,accountId:i}),e}))},removeListAccount:function(e,t){var n=e.rootState,o=e.commit,r=t.listId,i=t.accountId;return n.api.backendInteractor.removeAccountsFromList({listId:r,accountIds:[i]}).then((function(e){return o("removeListAccount",{listId:r,accountId:i}),e}))},deleteList:function(e,t){var n=e.rootState,o=e.commit,r=t.listId;n.api.backendInteractor.deleteList({listId:r}),o("deleteList",{listId:r})}},getters:{findListTitle:function(e){return function(t){if(e.allListsObject[t])return e.allListsObject[t].title}},findListAccounts:function(e){return function(t){return(0,l.Z)(e.allListsObject[t].accountIds)}}}};const le=ce;var de=n(71002),pe=n(44908),me=n.n(pe),he=n(57043),fe=n.n(he),ge=n(30236),ve=n.n(ge),we=n(35161),be=n.n(we),ye=n(39693),De=n.n(ye),_e=n(68929),ke=n.n(_e),Ce=n(22626),Se=function(e){var t=e.store,n=e.credentials,o=e.timeline,r=void 0===o?"friends":o,i=e.older,s=void 0!==i&&i,a=e.showImmediately,u=void 0!==a&&a,c=e.userId,l=void 0!==c&&c,d=e.listId,p=void 0!==d&&d,m=e.tag,f=void 0!==m&&m,g=e.until,v=e.since,w={timeline:r,credentials:n},b=t.rootState||t.state,y=t.getters,D=b.statuses.timelines[ke()(r)],_=y.mergedConfig,k=_.hideMutedPosts,C=_.replyVisibility,S=!!b.users.currentUser;s?w.until=g||D.minId:void 0===v?w.since=D.maxId:null!==v&&(w.since=v),w.userId=l,w.listId=p,w.tag=f,w.withMuted=!k,S&&["friends","public","publicAndExternal"].includes(r)&&(w.replyVisibility=C);var j=D.statuses.length;return h.ZP.fetchTimeline(w).then((function(e){if(e.errors)throw new Error("".concat(e.status," ").concat(e.statusText));var n=e.data,o=e.pagination;return!s&&n.length>=20&&!D.loading&&j>0&&t.dispatch("queueFlush",{timeline:r,id:D.maxId}),function(e){var t=e.store,n=e.statuses,o=e.timeline,r=e.showImmediately,i=e.userId,s=e.listId,a=e.pagination,u=ke()(o);t.dispatch("addNewStatuses",{timeline:u,userId:i,listId:s,statuses:n,showImmediately:r,pagination:a})}({store:t,statuses:n,timeline:r,showImmediately:u,userId:l,listId:p,pagination:o}),{statuses:n,pagination:o}})).catch((function(e){t.dispatch("pushGlobalNotice",{level:"error",messageKey:"timeline.error",messageArgs:[e.message],timeout:5e3})}))},je={fetchAndUpdate:Se,startFetching:function(e){var t=e.timeline,n=void 0===t?"friends":t,o=e.credentials,r=e.store,i=e.userId,s=void 0!==i&&i,a=e.listId,u=void 0!==a&&a,c=e.tag,l=void 0!==c&&c,d=(r.rootState||r.state).statuses.timelines[ke()(n)],p=0===d.visibleStatuses.length;return d.userId=s,d.listId=u,Se({timeline:n,credentials:o,store:r,showImmediately:p,userId:s,listId:u,tag:l}),(0,Ce.F)((function(){return Se({timeline:n,credentials:o,store:r,userId:s,listId:u,tag:l})}),1e4)}};const Fe=je;var Ae=n(15568);const Oe=function(e){var t=e.credentials,n=e.store,o=function(){return function(e){var t=e.store,n=e.credentials;return h.ZP.fetchFollowRequests({credentials:n}).then((function(e){t.commit("setFollowRequests",e),t.commit("addNewUsers",e)}),(function(){})).catch((function(){}))}({credentials:t,store:n})};return o(),(0,Ce.F)(o,1e4)};var Ee={startFetching:function(e){var t=e.credentials,n=e.store,o=function(){return function(e){var t=e.store,n=e.credentials;return h.ZP.fetchLists({credentials:n}).then((function(e){t.commit("setLists",e)}),(function(){})).catch((function(){}))}({credentials:t,store:n})};return o(),(0,Ce.F)(o,24e4)}};const ze=Ee;function Pe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const xe=function(e){return Ie(Ie({startFetchingTimeline:function(t){var n=t.timeline,o=t.store,r=t.userId,i=void 0!==r&&r,s=t.listId,a=void 0!==s&&s,u=t.tag;return Fe.startFetching({timeline:n,store:o,credentials:e,userId:i,listId:a,tag:u})},fetchTimeline:function(t){return Fe.fetchAndUpdate(Ie(Ie({},t),{},{credentials:e}))},startFetchingNotifications:function(t){var n=t.store;return Ae.Z.startFetching({store:n,credentials:e})},fetchNotifications:function(t){return Ae.Z.fetchAndUpdate(Ie(Ie({},t),{},{credentials:e}))},startFetchingFollowRequests:function(t){var n=t.store;return Oe({store:n,credentials:e})},startFetchingLists:function(t){var n=t.store;return ze.startFetching({store:n,credentials:e})},startUserSocket:function(t){var n=t.store.rootState.instance.server.replace("http","ws")+(0,h.pR)({credentials:e,stream:"user"});return(0,h.ro)({url:n,id:"User"})}},Object.entries(h.ZP).reduce((function(t,n){var o=(0,c.Z)(n,2),r=o[0],i=o[1];return Ie(Ie({},t),{},(0,d.Z)({},r,(function(t){return i(Ie({credentials:e},t))})))}),{})),{},{verifyCredentials:h.ZP.verifyCredentials})};var Te=function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},$e=function(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight},Be=n(54061),Ue=n.n(Be),Me="".concat(window.location.origin,"/oauth-callback"),Le=function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.commit;if(t&&n)return Promise.resolve({clientId:t,clientSecret:n});var i="".concat(o,"/api/v1/apps"),s=new window.FormData;return s.append("client_name","PleromaFE_".concat(window.___pleromafe_commit_hash,"_").concat((new Date).toISOString())),s.append("redirect_uris",Me),s.append("scopes","read write follow push admin"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()})).then((function(e){return{clientId:e.client_id,clientSecret:e.client_secret}})).then((function(e){return r("setClientData",e)||e}))},Re=function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r="".concat(o,"/oauth/token"),i=new window.FormData;return i.append("client_id",t),i.append("client_secret",n),i.append("grant_type","client_credentials"),i.append("redirect_uri","".concat(window.location.origin,"/oauth-callback")),window.fetch(r,{method:"POST",body:i}).then((function(e){return e.json()}))},qe={login:function(e){var t=e.instance,n={response_type:"code",client_id:e.clientId,redirect_uri:Me,scope:"read write follow push admin"},o=Ue()(n,(function(e,t,n){var o="".concat(n,"=").concat(encodeURIComponent(t));return e?"".concat(e,"&").concat(o):o}),!1),r="".concat(t,"/oauth/authorize?").concat(o);window.location.href=r},getToken:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.code,i="".concat(o,"/oauth/token"),s=new window.FormData;return s.append("client_id",t),s.append("client_secret",n),s.append("grant_type","authorization_code"),s.append("code",r),s.append("redirect_uri","".concat(window.location.origin,"/oauth-callback")),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},getTokenWithCredentials:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.username,i=e.password,s="".concat(o,"/oauth/token"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("grant_type","password"),a.append("username",r),a.append("password",i),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))},getOrCreateApp:Le,verifyOTPCode:function(e){var t=e.app,n=e.instance,o=e.mfaToken,r=e.code,i="".concat(n,"/oauth/mfa/challenge"),s=new window.FormData;return s.append("client_id",t.client_id),s.append("client_secret",t.client_secret),s.append("mfa_token",o),s.append("code",r),s.append("challenge_type","totp"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},verifyRecoveryCode:function(e){var t=e.app,n=e.instance,o=e.mfaToken,r=e.code,i="".concat(n,"/oauth/mfa/challenge"),s=new window.FormData;return s.append("client_id",t.client_id),s.append("client_secret",t.client_secret),s.append("mfa_token",o),s.append("code",r),s.append("challenge_type","recovery"),window.fetch(i,{method:"POST",body:s}).then((function(e){return e.json()}))},revokeToken:function(e){var t=e.app,n=e.instance,o=e.token,r="".concat(n,"/oauth/revoke"),i=new window.FormData;return i.append("client_id",t.clientId),i.append("client_secret",t.clientSecret),i.append("token",o),window.fetch(r,{method:"POST",body:i}).then((function(e){return e.json()}))}};const Ne=qe;var Ze=n(56012),We=n.n(Ze);function He(){return"serviceWorker"in navigator&&"PushManager"in window}function Ve(){return We().register().catch((function(e){return console.error("Unable to get or create a service worker.",e)}))}function Ke(e){return window.fetch("/api/v1/push/subscription/",{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}}).then((function(e){if(!e.ok)throw new Error("Bad status code from server.");return e}))}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ye(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Je=function e(t,n){if(F()(t)&&F()(n))return t.length=n.length,ve()(t,n,e)},Qe=function(e,t){return e.rootState.api.backendInteractor.blockUser({id:t}).then((function(n){e.commit("updateUserRelationship",[n]),e.commit("addBlockId",t),e.commit("removeStatus",{timeline:"friends",userId:t}),e.commit("removeStatus",{timeline:"public",userId:t}),e.commit("removeStatus",{timeline:"publicAndExternal",userId:t})}))},Xe=function(e,t){return e.rootState.api.backendInteractor.unblockUser({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))},et=function(e,t){var n="object"===(0,de.Z)(t)?t.id:t,o="object"===(0,de.Z)(t)?t.expiresIn:0,r=e.state.relationships[n]||{id:n};return r.muting=!0,e.commit("updateUserRelationship",[r]),e.commit("addMuteId",n),e.rootState.api.backendInteractor.muteUser({id:n,expiresIn:o}).then((function(t){e.commit("updateUserRelationship",[t]),e.commit("addMuteId",n)}))},tt=function(e,t){var n=e.state.relationships[t]||{id:t};return n.muting=!1,e.commit("updateUserRelationship",[n]),e.rootState.api.backendInteractor.unmuteUser({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))},nt=function(e,t){return e.rootState.api.backendInteractor.muteDomain({domain:t}).then((function(){return e.commit("addDomainMute",t)}))},ot=function(e,t){return e.rootState.api.backendInteractor.unmuteDomain({domain:t}).then((function(){return e.commit("removeDomainMute",t)}))},rt={tagUser:function(e,t){var n=t.user.id,o=t.tag,r=e.usersObject[n],i=(r.tags||[]).concat([o]);r.tags=i},untagUser:function(e,t){var n=t.user.id,o=t.tag,r=e.usersObject[n],i=(r.tags||[]).filter((function(e){return e!==o}));r.tags=i},updateRight:function(e,t){var n=t.user.id,o=t.right,r=t.value,i=e.usersObject[n],s=i.rights;s[o]=r,i.rights=s},updateActivationStatus:function(e,t){var n=t.user.id,o=t.deactivated;e.usersObject[n].deactivated=o},setCurrentUser:function(e,t){e.lastLoginName=t.screen_name,e.currentUser=ve()(e.currentUser||{},t,Je)},clearCurrentUser:function(e){e.currentUser=!1,e.lastLoginName=!1},beginLogin:function(e){e.loggingIn=!0},endLogin:function(e){e.loggingIn=!1},saveFriendIds:function(e,t){var n=t.id,o=t.friendIds,r=e.usersObject[n];r.friendIds=me()(fe()(r.friendIds||[],o))},saveFollowerIds:function(e,t){var n=t.id,o=t.followerIds,r=e.usersObject[n];r.followerIds=me()(fe()(r.followerIds||[],o))},clearFriends:function(e,t){var n=e.usersObject[t];n&&(n.friendIds=[])},clearFollowers:function(e,t){var n=e.usersObject[t];n&&(n.followerIds=[])},addNewUsers:function(e,t){N()(t,(function(t){t.relationship&&(e.relationships[t.relationship.id]=t.relationship);var n=function(e,t,n){if(!n)return!1;var o=t[n.id];return o?(ve()(o,n,Je),{item:o,new:!1}):(e.push(n),t[n.id]=n,{item:n,new:!0})}(e.users,e.usersObject,t),o=n.item;n.new&&o.screen_name&&!o.screen_name.includes("@")&&(e.usersByNameObject[o.screen_name.toLowerCase()]=o)}))},updateUserRelationship:function(e,t){t.forEach((function(t){e.relationships[t.id]=t}))},updateUserInLists:function(e,t){var n=t.id,o=t.inLists;e.usersObject[n].inLists=o},saveBlockIds:function(e,t){e.currentUser.blockIds=t},addBlockId:function(e,t){-1===e.currentUser.blockIds.indexOf(t)&&e.currentUser.blockIds.push(t)},setBlockIdsMaxId:function(e,t){e.currentUser.blockIdsMaxId=t},saveMuteIds:function(e,t){e.currentUser.muteIds=t},setMuteIdsMaxId:function(e,t){e.currentUser.muteIdsMaxId=t},addMuteId:function(e,t){-1===e.currentUser.muteIds.indexOf(t)&&e.currentUser.muteIds.push(t)},saveDomainMutes:function(e,t){e.currentUser.domainMutes=t},addDomainMute:function(e,t){-1===e.currentUser.domainMutes.indexOf(t)&&e.currentUser.domainMutes.push(t)},removeDomainMute:function(e,t){var n=e.currentUser.domainMutes.indexOf(t);-1!==n&&e.currentUser.domainMutes.splice(n,1)},setPinnedToUser:function(e,t){var n=e.usersObject[t.user.id];n.pinnedStatusIds=n.pinnedStatusIds||[];var o=n.pinnedStatusIds.indexOf(t.id);t.pinned&&-1===o?n.pinnedStatusIds.push(t.id):t.pinned||-1===o||n.pinnedStatusIds.splice(o,1)},setUserForStatus:function(e,t){t.user=e.usersObject[t.user.id]},setUserForNotification:function(e,t){"follow"!==t.type&&(t.action.user=e.usersObject[t.action.user.id]),t.from_profile=e.usersObject[t.from_profile.id]},setColor:function(e,t){var n=t.user.id,o=t.highlighted;e.usersObject[n].highlight=o},signUpPending:function(e){e.signUpPending=!0,e.signUpErrors=[]},signUpSuccess:function(e){e.signUpPending=!1},signUpFailure:function(e,t){e.signUpPending=!1,e.signUpErrors=t}},it={state:{loggingIn:!1,lastLoginName:!1,currentUser:!1,users:[],usersObject:{},usersByNameObject:{},signUpPending:!1,signUpErrors:[],relationships:{}},mutations:rt,getters:{findUser:function(e){return function(t){return e.usersObject[t]}},findUserByName:function(e){return function(t){return e.usersByNameObject[t.toLowerCase()]}},findUserByUrl:function(e){return function(t){return e.users.find((function(e){return e.statusnet_profile_url&&e.statusnet_profile_url.toLowerCase()===t.toLowerCase()}))}},relationship:function(e){return function(t){return t&&e.relationships[t]||{id:t,loading:!0}}}},actions:{fetchUserIfMissing:function(e,t){e.getters.findUser(t)||e.dispatch("fetchUser",t)},fetchUser:function(e,t){return e.rootState.api.backendInteractor.fetchUser({id:t}).then((function(t){return e.commit("addNewUsers",[t]),t}))},fetchUserByName:function(e,t){return e.rootState.api.backendInteractor.fetchUserByName({name:t}).then((function(t){return e.commit("addNewUsers",[t]),t}))},fetchUserRelationship:function(e,t){e.state.currentUser&&e.rootState.api.backendInteractor.fetchUserRelationship({id:t}).then((function(t){return e.commit("updateUserRelationship",t)}))},fetchUserInLists:function(e,t){e.state.currentUser&&e.rootState.api.backendInteractor.fetchUserInLists({id:t}).then((function(n){return e.commit("updateUserInLists",{id:t,inLists:n})}))},fetchBlocks:function(e,t){var n=(t||{}).reset,o=e.state.currentUser.blockIdsMaxId;return e.rootState.api.backendInteractor.fetchBlocks({maxId:o}).then((function(t){return n?e.commit("saveBlockIds",be()(t,"id")):be()(t,"id").map((function(t){return e.commit("addBlockId",t)})),t.length&&e.commit("setBlockIdsMaxId",O()(t).id),e.commit("addNewUsers",t),t}))},blockUser:function(e,t){return Qe(e,t)},unblockUser:function(e,t){return Xe(e,t)},removeUserFromFollowers:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.removeUserFromFollowers({id:t}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},blockUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return Qe(e,t)})))},unblockUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return Xe(e,t)})))},editUserNote:function(e,t){return function(e,t){var n=t.id,o=t.comment;return e.rootState.api.backendInteractor.editUserNote({id:n,comment:o}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},fetchMutes:function(e,t){var n=(t||{}).reset,o=e.state.currentUser.muteIdsMaxId;return e.rootState.api.backendInteractor.fetchMutes({maxId:o}).then((function(t){return n?e.commit("saveMuteIds",be()(t,"id")):be()(t,"id").map((function(t){return e.commit("addMuteId",t)})),t.length&&e.commit("setMuteIdsMaxId",O()(t).id),e.commit("addNewUsers",t),t}))},muteUser:function(e,t){return et(e,t)},unmuteUser:function(e,t){return tt(e,t)},hideReblogs:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.followUser({id:t,reblogs:!1}).then((function(t){e.commit("updateUserRelationship",[t])}))}(e,t)},showReblogs:function(e,t){return function(e,t){return e.rootState.api.backendInteractor.followUser({id:t,reblogs:!0}).then((function(t){return e.commit("updateUserRelationship",[t])}))}(e,t)},muteUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return et(e,t)})))},unmuteUsers:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return tt(e,t)})))},fetchDomainMutes:function(e){return e.rootState.api.backendInteractor.fetchDomainMutes().then((function(t){return e.commit("saveDomainMutes",t),t}))},muteDomain:function(e,t){return nt(e,t)},unmuteDomain:function(e,t){return ot(e,t)},muteDomains:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return nt(e,t)})))},unmuteDomains:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(t.map((function(t){return ot(e,t)})))},fetchFriends:function(e,t){var n=e.rootState,o=e.commit,r=n.users.usersObject[t],i=O()(r.friendIds);return n.api.backendInteractor.fetchFriends({id:t,maxId:i}).then((function(e){return o("addNewUsers",e),o("saveFriendIds",{id:t,friendIds:be()(e,"id")}),e}))},fetchFollowers:function(e,t){var n=e.rootState,o=e.commit,r=n.users.usersObject[t],i=O()(r.followerIds);return n.api.backendInteractor.fetchFollowers({id:t,maxId:i}).then((function(e){return o("addNewUsers",e),o("saveFollowerIds",{id:t,followerIds:be()(e,"id")}),e}))},clearFriends:function(e,t){(0,e.commit)("clearFriends",t)},clearFollowers:function(e,t){(0,e.commit)("clearFollowers",t)},subscribeUser:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.subscribeUser({id:t}).then((function(e){return o("updateUserRelationship",[e])}))},unsubscribeUser:function(e,t){var n=e.rootState,o=e.commit;return n.api.backendInteractor.unsubscribeUser({id:t}).then((function(e){return o("updateUserRelationship",[e])}))},toggleActivationStatus:function(e,t){var n=e.rootState,o=e.commit,r=t.user;(r.deactivated?n.api.backendInteractor.activateUser:n.api.backendInteractor.deactivateUser)({user:r}).then((function(e){var t=!e.is_active;o("updateActivationStatus",{user:e,deactivated:t})}))},registerPushNotifications:function(e){var t=e.state.currentUser.credentials,n=e.rootState.instance.vapidPublicKey;!function(e,t,n,o){He()&&Ve().then((function(n){return function(e,t,n){if(!t)return Promise.reject(new Error("Web Push is disabled in config"));if(!n)return Promise.reject(new Error("VAPID public key is not found"));var o,r,i,s={userVisibleOnly:!0,applicationServerKey:(o=n,r=(o+"=".repeat((4-o.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/"),i=window.atob(r),Uint8Array.from((0,l.Z)(i).map((function(e){return e.charCodeAt(0)}))))};return e.pushManager.subscribe(s)}(n,e,t)})).then((function(e){return function(e,t,n){return window.fetch("/api/v1/push/subscription/",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(t)},body:JSON.stringify({subscription:e,data:{alerts:{follow:n.follows,favourite:n.likes,mention:n.mentions,reblog:n.repeats,move:n.moves}}})}).then((function(e){if(!e.ok)throw new Error("Bad status code from server.");return e.json()})).then((function(e){if(!e.id)throw new Error("Bad response from server.");return e}))}(e,n,o)})).catch((function(e){return console.warn("Failed to setup Web Push Notifications: ".concat(e.message))}))}(e.rootState.config.webPushNotifications,n,t,e.rootState.config.notificationVisibility)},unregisterPushNotifications:function(e){var t;t=e.state.currentUser.credentials,He()&&Promise.all([Ke(t),Ve().then((function(e){return function(e){return e.pushManager.getSubscription().then((function(e){if(null!==e)return e.unsubscribe()}))}(e).then((function(t){return[e,t]}))})).then((function(e){var t=(0,c.Z)(e,2),n=t[0];return t[1]||console.warn("Push subscription cancellation wasn't successful, killing SW anyway..."),n.unregister().then((function(e){e||console.warn("Failed to kill SW")}))}))]).catch((function(e){return console.warn("Failed to disable Web Push Notifications: ".concat(e.message))}))},addNewUsers:function(e,t){(0,e.commit)("addNewUsers",t)},addNewStatuses:function(e,t){var n=t.statuses,o=be()(n,"user"),r=De()(be()(n,"retweeted_status.user"));e.commit("addNewUsers",o),e.commit("addNewUsers",r),N()(n,(function(t){e.commit("setUserForStatus",t),e.commit("setPinnedToUser",t)})),N()(De()(be()(n,"retweeted_status")),(function(t){e.commit("setUserForStatus",t),e.commit("setPinnedToUser",t)}))},addNewNotifications:function(e,t){var n=t.notifications,o=be()(n,"from_profile"),r=be()(n,"target").filter((function(e){return e})),i=n.map((function(e){return e.id}));e.commit("addNewUsers",o),e.commit("addNewUsers",r);var s=e.rootState.statuses.notifications.idStore,a=Object.entries(s).filter((function(e){var t=(0,c.Z)(e,2),n=t[0];return t[1],i.includes(n)})).map((function(e){var t=(0,c.Z)(e,2);return t[0],t[1]}));N()(a,(function(t){e.commit("setUserForNotification",t)}))},searchUsers:function(e,t){var n=e.rootState,o=e.commit,r=t.query;return n.api.backendInteractor.searchUsers({query:r}).then((function(e){return o("addNewUsers",e),e}))},signUp:function(e,t){return(0,o.Z)(i().mark((function n(){var o,r,s;return i().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.commit("signUpPending"),o=e.rootState,n.prev=2,n.next=5,o.api.backendInteractor.register({params:Ye({},t)});case 5:r=n.sent,e.commit("signUpSuccess"),e.commit("setToken",r.access_token),e.dispatch("loginUser",r.access_token),n.next=16;break;case 11:throw n.prev=11,n.t0=n.catch(2),s=n.t0.message,e.commit("signUpFailure",s),n.t0;case 16:case"end":return n.stop()}}),n,null,[[2,11]])})))()},getCaptcha:function(e){return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",e.rootState.api.backendInteractor.getCaptcha());case 1:case"end":return t.stop()}}),t)})))()},logout:function(e){var t=e.rootState,n=t.oauth,o=t.instance,r=Ye(Ye({},n),{},{commit:e.commit,instance:o.server});return Ne.getOrCreateApp(r).then((function(e){var t={app:e,instance:r.instance,token:n.userToken};return Ne.revokeToken(t)})).then((function(){e.commit("clearCurrentUser"),e.dispatch("disconnectFromSocket"),e.commit("clearToken"),e.dispatch("stopFetchingTimeline","friends"),e.commit("setBackendInteractor",xe(e.getters.getToken())),e.dispatch("stopFetchingNotifications"),e.dispatch("stopFetchingLists"),e.dispatch("stopFetchingFollowRequests"),e.commit("clearNotifications"),e.commit("resetStatuses"),e.dispatch("resetChats"),e.dispatch("setLastTimeline","public-timeline"),e.dispatch("setLayoutWidth",Te()),e.dispatch("setLayoutHeight",$e()),e.commit("clearServerSideStorage")}))},loginUser:function(e,t){return new Promise((function(n,o){var r=e.commit,i=e.dispatch;r("beginLogin"),e.rootState.api.backendInteractor.verifyCredentials(t).then((function(s){if(s.error){var a=s.error;r("endLogin"),[400,401,403,422].includes(a.status)&&r("clearToken"),401===a.status?o(new Error("Wrong username or password")):o(new Error("An error occurred, please try again"))}else{var u=s;u.credentials=t,u.blockIds=[],u.muteIds=[],u.domainMutes=[],r("setCurrentUser",u),r("setServerSideStorage",u),r("addNewUsers",[u]),i("fetchEmoji"),(c=window.Notification,c?"default"===c.permission?c.requestPermission():Promise.resolve(c.permission):Promise.resolve(null)).then((function(e){return r("setNotificationPermission",e)})),r("setBackendInteractor",xe(t)),i("pushServerSideStorage"),u.token&&(i("setWsToken",u.token),i("initializeSocket")),i("startFetchingLists"),u.locked&&i("startFetchingFollowRequests"),e.getters.mergedConfig.useStreamingApi?(i("fetchTimeline",{timeline:"friends",since:null}),i("fetchNotifications",{since:null}),i("enableMastoSockets",!0).catch((function(e){console.error("Failed initializing MastoAPI Streaming socket",e)})).then((function(){i("fetchChats",{latest:!0}),setTimeout((function(){return i("setNotificationsSilence",!1)}),1e4)}))):(i("startFetchingTimeline",{timeline:"friends"}),i("startFetchingNotifications"),i("startFetchingChats")),i("fetchMutes"),i("setLayoutWidth",Te()),i("setLayoutHeight",$e()),e.rootState.api.backendInteractor.fetchFriends({id:u.id}).then((function(e){return r("addNewUsers",e)}))}var c;r("endLogin"),n()})).catch((function(e){console.log(e),r("endLogin"),o(new Error("Failed to connect to server, try again"))}))}))}}};const st=it;var at=n(36459),ut=n(87462),ct=n(44925),lt=n(64689),dt=function(e,t){if(t.lastMessage&&(e.rootState.chats.currentChatId!==t.id||document.hidden)&&e.rootState.users.currentUser.id!==t.lastMessage.account_id){var n={tag:t.lastMessage.id,title:t.account.name,icon:t.account.profile_image_url,body:t.lastMessage.content};t.lastMessage.attachment&&"image"===t.lastMessage.attachment.type&&(n.image=t.lastMessage.attachment.preview_url),(0,lt.w)(e.rootState,n)}},pt=n(61796),mt=["timeline"];function ht(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ft(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ht(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ht(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var gt={state:{retryMultiplier:1,backendInteractor:xe(),fetchers:{},socket:null,mastoUserSocket:null,mastoUserSocketStatus:null,followRequests:[]},getters:{followRequestCount:function(e){return e.followRequests.length}},mutations:{setBackendInteractor:function(e,t){e.backendInteractor=t},addFetcher:function(e,t){var n=t.fetcherName,o=t.fetcher;e.fetchers[n]=o},removeFetcher:function(e,t){var n=t.fetcherName;t.fetcher,e.fetchers[n].stop(),delete e.fetchers[n]},setWsToken:function(e,t){e.wsToken=t},setSocket:function(e,t){e.socket=t},setFollowRequests:function(e,t){e.followRequests=t},setMastoUserSocketStatus:function(e,t){e.mastoUserSocketStatus=t},incrementRetryMultiplier:function(e){e.retryMultiplier=Math.max(++e.retryMultiplier,3)},resetRetryMultiplier:function(e){e.retryMultiplier=1}},actions:{enableMastoSockets:function(e,t){var n=e.state,o=e.dispatch,r=e.commit;if(!n.mastoUserSocket||[WebSocket.CLOSED,WebSocket.CLOSING].includes(n.mastoUserSocket.getState()))return r("setMastoUserSocketStatus",t?h._z.STARTING_INITIAL:h._z.STARTING),o("startMastoUserSocket")},disableMastoSockets:function(e){var t=e.state,n=e.dispatch,o=e.commit;if(t.mastoUserSocket)return o("setMastoUserSocketStatus",h._z.DISABLED),n("stopMastoUserSocket")},startMastoUserSocket:function(e){return new Promise((function(t,n){try{var o=e.state,r=e.commit,i=e.dispatch,s=e.rootState.statuses.timelines.friends;o.mastoUserSocket=o.backendInteractor.startUserSocket({store:e}),o.mastoUserSocket.addEventListener("message",(function(t){var n=t.detail;n&&("notification"===n.event?i("addNewNotifications",{notifications:[n.notification],older:!1}):"update"===n.event?i("addNewStatuses",{statuses:[n.status],userId:!1,showImmediately:0===s.visibleStatuses.length,timeline:"friends"}):"status.update"===n.event?i("addNewStatuses",{statuses:[n.status],userId:!1,showImmediately:n.status.id in s.visibleStatusesObject,timeline:"friends"}):"delete"===n.event?i("deleteStatusById",n.id):"pleroma:chat_update"===n.event&&setTimeout((function(){i("addChatMessages",{chatId:n.chatUpdate.id,messages:[n.chatUpdate.lastMessage]}),i("updateChat",{chat:n.chatUpdate}),dt(e,n.chatUpdate)}),100))})),o.mastoUserSocket.addEventListener("open",(function(){o.mastoUserSocketStatus!==h._z.STARTING_INITIAL&&i("pushGlobalNotice",{level:"success",messageKey:"timeline.socket_reconnected",timeout:5e3}),new Set([h._z.ERROR,h._z.DISABLED]).has(o.mastoUserSocketStatus)&&(i("stopFetchingTimeline",{timeline:"friends"}),i("stopFetchingNotifications"),i("stopFetchingChats")),r("resetRetryMultiplier"),r("setMastoUserSocketStatus",h._z.JOINED)})),o.mastoUserSocket.addEventListener("error",(function(e){var t=e.detail;console.error("Error in MastoAPI websocket:",t),i("clearOpenedChats")})),o.mastoUserSocket.addEventListener("close",(function(e){var t=e.detail,n=new Set([1e3,1001]),s=t.code;n.has(s)?(console.debug("Not restarting socket becasue of closure code ".concat(s," is in ignore list")),r("setMastoUserSocketStatus",h._z.CLOSED)):(console.warn("MastoAPI websocket disconnected, restarting. CloseEvent code: ".concat(s)),setTimeout((function(){i("startMastoUserSocket")}),1e3*o.retryMultiplier),r("incrementRetryMultiplier"),o.mastoUserSocketStatus!==h._z.ERROR&&(i("startFetchingTimeline",{timeline:"friends"}),i("startFetchingNotifications"),i("startFetchingChats"),i("pushGlobalNotice",{level:"error",messageKey:"timeline.socket_broke",messageArgs:[s],timeout:5e3})),r("setMastoUserSocketStatus",h._z.ERROR)),i("clearOpenedChats")})),t()}catch(e){n(e)}}))},stopMastoUserSocket:function(e){var t=e.state,n=e.dispatch;n("startFetchingTimeline",{timeline:"friends"}),n("startFetchingNotifications"),n("startFetchingChats"),t.mastoUserSocket.close()},startFetchingTimeline:function(e,t){var n=t.timeline,o=void 0===n?"friends":n,r=t.tag,i=void 0!==r&&r,s=t.userId,a=void 0!==s&&s,u=t.listId,c=void 0!==u&&u;if(!e.state.fetchers[o]){var l=e.state.backendInteractor.startFetchingTimeline({timeline:o,store:e,userId:a,listId:c,tag:i});e.commit("addFetcher",{fetcherName:o,fetcher:l})}},stopFetchingTimeline:function(e,t){var n=e.state.fetchers[t];n&&e.commit("removeFetcher",{fetcherName:t,fetcher:n})},fetchTimeline:function(e,t){var n=t.timeline,o=(0,ct.Z)(t,mt);e.state.backendInteractor.fetchTimeline(ft({store:e,timeline:n},o))},startFetchingNotifications:function(e){if(!e.state.fetchers.notifications){var t=e.state.backendInteractor.startFetchingNotifications({store:e});e.commit("addFetcher",{fetcherName:"notifications",fetcher:t})}},stopFetchingNotifications:function(e){var t=e.state.fetchers.notifications;t&&e.commit("removeFetcher",{fetcherName:"notifications",fetcher:t})},fetchNotifications:function(e,t){var n=(0,ut.Z)({},((0,at.Z)(t),t));e.state.backendInteractor.fetchNotifications(ft({store:e},n))},startFetchingFollowRequests:function(e){if(!e.state.fetchers.followRequests){var t=e.state.backendInteractor.startFetchingFollowRequests({store:e});e.commit("addFetcher",{fetcherName:"followRequests",fetcher:t})}},stopFetchingFollowRequests:function(e){var t=e.state.fetchers.followRequests;t&&e.commit("removeFetcher",{fetcherName:"followRequests",fetcher:t})},removeFollowRequest:function(e,t){var n=e.state.followRequests.filter((function(e){return e!==t}));e.commit("setFollowRequests",n)},startFetchingLists:function(e){if(!e.state.fetchers.lists){var t=e.state.backendInteractor.startFetchingLists({store:e});e.commit("addFetcher",{fetcherName:"lists",fetcher:t})}},stopFetchingLists:function(e){var t=e.state.fetchers.lists;t&&e.commit("removeFetcher",{fetcherName:"lists",fetcher:t})},setWsToken:function(e,t){e.commit("setWsToken",t)},initializeSocket:function(e){var t=e.dispatch,n=e.commit,o=e.state,r=e.rootState,i=o.wsToken;if(r.instance.shoutAvailable&&void 0!==i&&null===o.socket){var s=new pt.sk("/socket",{params:{token:i}});s.connect(),n("setSocket",s),t("initializeShout",s)}},disconnectFromSocket:function(e){var t=e.commit,n=e.state;n.socket&&n.socket.disconnect(),t("setSocket",null)}}};const vt=gt;var wt=n(36968),bt=n.n(wt),yt=n(27361),Dt=n.n(yt);function _t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var kt=function(e,t){var n=e.rootState,o=e.commit,r=t.path,i=t.value,s={};return bt()(s,r,i),n.api.backendInteractor.updateProfile({params:s}).then((function(e){o("addNewUsers",[e]),o("setCurrentUser",e)}))},Ct=function(e,t){var n=e.rootState,o=e.commit,r=t.path,i=t.value,s=t.oldValue,a={};return bt()(a,r,i),n.api.backendInteractor.updateNotificationSettings({settings:a}).then((function(e){"success"===e.status?o("confirmProfileOption",{name,value:i}):o("confirmProfileOption",{name,value:s})}))},St={defaultScope:"source.privacy",defaultNSFW:"source.sensitive",stripRichContent:{get:"source.pleroma.no_rich_text",set:"no_rich_text"},locked:"locked",acceptChatMessages:{get:"pleroma.accepts_chat_messages",set:"accepts_chat_messages"},allowFollowingMove:{get:"pleroma.allow_following_move",set:"allow_following_move"},discoverable:{get:"source.pleroma.discoverable",set:"discoverable"},hideFavorites:{get:"pleroma.hide_favorites",set:"hide_favorites"},hideFollowers:{get:"pleroma.hide_followers",set:"hide_followers"},hideFollows:{get:"pleroma.hide_follows",set:"hide_follows"},hideFollowersCount:{get:"pleroma.hide_followers_count",set:"hide_followers_count"},hideFollowsCount:{get:"pleroma.hide_follows_count",set:"hide_follows_count"},webPushHideContents:{get:"pleroma.notification_settings.hide_notification_contents",set:"hide_notification_contents",api:Ct},blockNotificationsFromStrangers:{get:"pleroma.notification_settings.block_from_strangers",set:"block_from_strangers",api:Ct}},jt={state:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_t(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_t(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},Object.fromEntries(Object.keys(St).map((function(e){return[e,null]})))),mutations:{confirmProfileOption:function(e,t){var n=t.name,o=t.value;bt()(e,n,o)},wipeProfileOption:function(e,t){var n=t.name;bt()(e,n,null)},wipeAllProfileOptions:function(e){Object.keys(St).forEach((function(t){bt()(e,t,null)}))},setCurrentUser:function(e,t){Object.entries(St).forEach((function(n){var o=(0,c.Z)(n,2),r=o[0],i=o[1],s=i.get,a=void 0===s?i:s;bt()(e,r,Dt()(t._original,a))}))}},actions:{setProfileOption:function(e,t){var n=e.rootState,o=e.state,r=e.commit,i=(e.dispatch,t.name),s=t.value,a=Dt()(o,i),u=St[i];if(!u)throw new Error("Invalid server-side setting");var c=u.set,l=void 0===c?u:c,d=u.api,p=void 0===d?kt:d;r("wipeProfileOption",{name:i}),p({rootState:n,commit:r},{path:l,value:s,oldValue:a}).catch((function(e){console.warn("Error setting server-side option:",e),r("confirmProfileOption",{name:i,value:a})}))},logout:function(e){(0,e.commit)("wipeAllProfileOptions")}}};const Ft=jt;var At=n(87185),Ot=n.n(At),Et=n(69579),zt=n.n(Et),Pt=n(7436),It=n.n(Pt),xt=n(7739),Tt=n.n(xt),$t=n(85564),Bt=n.n($t),Ut=n(74691),Mt=n.n(Ut),Lt=n(50361),Rt=n.n(Lt),qt=n(18446),Nt=n.n(qt),Zt=n(2262),Wt=n(48328),Ht=n(9382),Vt=(n(31934),n(95326),n(43011),n(68789),n(84131));Ht.vI.add(Vt.NBC),Wt.Z;var Kt=["_journal"],Gt=["_timestamp","_version"],Yt=["_timestamp","_version"];function Jt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Qt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jt(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Xt=new Date("2022-08-04"),en=1001,tn={dirty:!1,flagStorage:{updateCounter:0,reset:0},prefsStorage:{_journal:[],simple:{dontShowUpdateNotifs:!1,collapseNav:!1},collections:{pinnedNavItems:["home","dms","chats"]}},raw:null,cache:null},nn=Qt(Qt({},tn.flagStorage),{},{updateCounter:1}),on=function(e,t,n){var o=e.indexOf(t),r=o+n,i=(0,l.Z)(e);return i.splice(o,1),i.splice(Mt()(r,0,i.length+1),0,t),i},rn=function(e,t){return Qt(Qt({},e),{},{_user:t,_timestamp:Date.now(),_version:1})},sn=function(e){return e._timestamp>0&&e._version>0},an=function(e){e.prefsStorage=e.prefsStorage||{simple:{},collections:{}},Object.entries(tn.prefsStorage.simple).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];"number"!=typeof r&&"boolean"!=typeof r&&(console.warn("Preference simple.".concat(o," as invalid type, reinitializing")),bt()(e.prefsStorage.simple,o,tn.prefsStorage.simple[o]))})),Object.entries(tn.prefsStorage.collections).forEach((function(t){var n=(0,c.Z)(t,2),o=n[0],r=n[1];Array.isArray(r)||(console.warn("Preference collections.".concat(o," as invalid type, reinitializing")),bt()(e.prefsStorage.collections,o,tn.prefsStorage.collections[o]))}))},un=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o=Bt()(t.map((function(e){return Array.isArray(e)?e:[]}))).filter((function(e){return Object.prototype.hasOwnProperty.call(e,"path")&&Object.prototype.hasOwnProperty.call(e,"operation")&&Object.prototype.hasOwnProperty.call(e,"args")&&Object.prototype.hasOwnProperty.call(e,"timestamp")})),r=Tt()(o,"path"),i=Object.entries(r).map((function(e){var t=(0,c.Z)(e,2),n=t[0],o=t[1];if(o.sort((function(e,t){return e.timestamp>t.timestamp?1:-1})),n.startsWith("collections")){var r,i=It()(o,(function(e){return"removeFromCollection"===e.operation}));return r=i>0?o.slice(i):o,Ot()(r,(function(e,t){return e.path===t.path&&e.operation===t.operation&&"addToCollection"===e.operation&&e.args[0]===t.args[0]}))}return n.startsWith("simple")?zt()(o):o}));return Bt()(i).sort((function(e,t){return e.timestamp>t.timestamp?1:-1}))},cn={clearServerSideStorage:function(e,t){Qt({},Rt()(tn))},setServerSideStorage:function(e,t){var n=t.storage;e.raw=n;var o=e.cache;o&&o._user!==t.fqn&&(console.warn("cache belongs to another user! reinitializing local cache!"),o=null);var r=function(e,t){var n={recent:null,stale:null,needUpload:!1},o=sn(e||{}),r=sn(t||{});return!r&&o?(n.needUpload=!0,console.debug("Nothing valid stored on server, assuming cache to be source of truth"),n.recent=e,n.stale=t):!o&&r?(console.debug("Valid storage on server found, no local cache found, using live as source of truth"),n.recent=t,n.stale=e):o&&r?(console.debug("Both sources have valid data, figuring things out..."),t._timestamp===e._timestamp&&t._version===e._version?(console.debug("Same version/timestamp on both source, source of truth irrelevant"),n.recent=e,n.stale=t):(console.debug("Different timestamp, figuring out which one is more recent"),t._timestamp<e._timestamp?(n.recent=e,n.stale=t):(n.recent=t,n.stale=e))):(console.debug("Both sources are invalid, start from scratch"),n.needUpload=!0),n}(o=function(e){return e?(e._version<1&&(console.debug("Local cached data has older version, seeing if there any migrations that can be applied"),console.debug("No migrations found")),e._version>1&&(console.debug("Local cached data has newer version, seeing if there any reverse migrations that can be applied"),window._PLEROMA_HOTPATCH&&window._PLEROMA_HOTPATCH.reverseMigrations)?(console.debug("Found hotpatch migration, applying"),window._PLEROMA_HOTPATCH.reverseMigrations.call({},"serverSideStorage",{from:e._version,to:1},e)):e):e}(o),n),i=r.recent,s=r.stale,a=r.needsUpload,u=t.created_at>Xt,d=u?nn:tn.flagStorage,p=!1;if(null===i&&(console.debug("Data is empty, initializing for ".concat(u?"new":"existing"," user")),i=rn({flagStorage:Qt({},d),prefsStorage:Qt({},tn.prefsStorage)})),!a&&i&&s){console.debug("Checking if data needs merging...");var m=i,h=(m._timestamp,m._version,(0,ct.Z)(m,Gt)),f=(s._timestamp,s._version,(0,ct.Z)(s,Yt));p=!Nt()(h,f),console.debug("Data ".concat(p?"needs":"doesn't need"," merging"))}var g,v,w=function(e,t){return Array.from(new Set([].concat((0,l.Z)(Object.keys((0,Zt.IU)((e||{}).flagStorage||{}))),(0,l.Z)(Object.keys((0,Zt.IU)((t||{}).flagStorage||{}))))))}(i,s);p?(console.debug("Merging the data..."),g=function(e,t,n){return t.flagStorage?e.flagStorage?Object.fromEntries(n.map((function(n){var o=e.flagStorage[n],r=t.flagStorage[n];return[n,Number((o>r?o:r)||0)]}))):t.flagStorage:e.flagStorage}(i,s,w),an(i),an(s),v=function(e,t,n){if(!t)return e;if(!e)return t;var o=e._journal,r=(0,ct.Z)(e,Kt),i=t._journal,s=Qt({},r),a=un(i,o);return a.forEach((function(e){var t=e.path,n=(e.timestamp,e.operation),o=(e.command,e.args);if(t.startsWith("_"))console.error("journal contains entry to edit internal (starts with _) field '".concat(t,"', something is incorrect here, ignoring."));else switch(n){case"set":bt()(s,t,o[0]);break;case"addToCollection":bt()(s,t,Array.from(new Set(Dt()(s,t)).add(o[0])));break;case"removeFromCollection":var r=new Set(Dt()(s,t));r.delete(o[0]),bt()(s,t,Array.from(r));break;case"reorderCollection":var i=(0,c.Z)(o,2),a=i[0],u=i[1];bt()(s,t,on(Dt()(s,t),a,u));break;default:console.error("Unknown journal operation: '".concat(n,"', did we forget to run reverse migrations beforehand?"))}})),Qt(Qt({},s),{},{_journal:a})}(i.prefsStorage,s.prefsStorage)):(g=i.flagStorage,v=i.prefsStorage),g=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:tn.flagStorage,n=Qt({},e),o=Object.keys(e);if(e.reset>=1e3&&e.reset<=en){console.debug("Received command to trim the flags");var r=new Set(Object.keys(t));n={},o.forEach((function(t){r.has(t)&&(n[t]=e[t])})),e.reset===en&&(console.debug("Received command to reset the flags"),Object.keys(t).forEach((function(e){n[e]=0})))}else e.reset>0&&e.reset<9e3&&(console.debug("Received command to reset the flags"),o.forEach((function(e){n[e]=0})));return n.reset=0,n}(g),i.flagStorage=Qt(Qt({},d),g),i.prefsStorage=Qt(Qt({},tn.prefsStorage),v),e.dirty=p||a,e.cache=i,s&&i&&!e.dirty&&(e.cache._timestamp=Math.min(s._timestamp,i._timestamp)),e.flagStorage=e.cache.flagStorage,e.prefsStorage=e.cache.prefsStorage},setFlag:function(e,t){var n=t.flag,o=t.value;e.flagStorage[n]=o,e.dirty=!0},setPreference:function(e,t){var n=t.path,o=t.value;n.startsWith("_")?console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring.")):(bt()(e.prefsStorage,n,o),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"set",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0)},addCollectionPreference:function(e,t){var n=t.path,o=t.value;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var r=new Set(Dt()(e.prefsStorage,n));r.add(o),bt()(e.prefsStorage,n,(0,l.Z)(r)),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"addToCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},removeCollectionPreference:function(e,t){var n=t.path,o=t.value;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var r=new Set(Dt()(e.prefsStorage,n));r.delete(o),bt()(e.prefsStorage,n,(0,l.Z)(r)),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"removeFromCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},reorderCollectionPreference:function(e,t){var n=t.path,o=t.value,r=t.movement;if(n.startsWith("_"))console.error("tried to edit internal (starts with _) field '".concat(n,"', ignoring."));else{var i=Dt()(e.prefsStorage,n),s=on(i,o,r);bt()(e.prefsStorage,n,s),e.prefsStorage._journal=[].concat((0,l.Z)(e.prefsStorage._journal),[{operation:"arrangeCollection",path:n,args:[o],timestamp:Date.now()}]),e.dirty=!0}},updateCache:function(e,t){var n=t.username;e.prefsStorage._journal=un(e.prefsStorage._journal),e.cache=rn({flagStorage:(0,Zt.IU)(e.flagStorage),prefsStorage:(0,Zt.IU)(e.prefsStorage)},n)}};const ln={state:Qt({},Rt()(tn)),mutations:cn,actions:{pushServerSideStorage:function(e){var t=e.state,n=e.rootState,o=e.commit,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.force,s=void 0!==i&&i,a=t.dirty||s;if(console.log(a),a){o("updateCache",{username:n.users.currentUser.fqn});var u={pleroma_settings_store:{"pleroma-fe":t.cache}};n.api.backendInteractor.updateProfile({params:u}).then((function(e){o("setServerSideStorage",e),t.dirty=!1}))}}}};var dn=n(84506),pn=n(29521),mn=n.n(pn);function hn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hn(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var gn={frontends:[],loaded:!1,needsReboot:null,config:null,modifiedPaths:null,descriptions:null,draft:null,dbConfigEnabled:null},vn=(fn({},gn.flagStorage),{state:fn({},Rt()(gn)),mutations:{setInstanceAdminNoDbConfig:function(e){e.loaded=!1,e.dbConfigEnabled=!1},setAvailableFrontends:function(e,t){var n=t.frontends;e.frontends=n.map((function(e){return e.installedRefs=e.installed_refs,"pleroma-fe"===e.name?e.refs=["master","develop"]:e.refs=[e.ref],e}))},updateAdminSettings:function(e,t){var n=t.config,o=t.modifiedPaths;e.loaded=!0,e.dbConfigEnabled=!0,e.config=n,e.modifiedPaths=o},updateAdminDescriptions:function(e,t){var n=t.descriptions;e.descriptions=n},updateAdminDraft:function(e,t){var n=t.path,o=t.value,r=(0,c.Z)(n,3),i=[r[0],r[1],r[2]];bt()(e.draft,n,o),n.length>i.length&&bt()(e.draft,i,Rt()(Dt()(e.draft,i)))},resetAdminDraft:function(e){e.draft=Rt()(e.config)}},actions:{loadFrontendsStuff:function(e){e.state;var t=e.rootState,n=(e.dispatch,e.commit);t.api.backendInteractor.fetchAvailableFrontends().then((function(e){return n("setAvailableFrontends",{frontends:e})}))},loadAdminStuff:function(e){var t=e.state,n=e.rootState,o=e.dispatch,r=e.commit;n.api.backendInteractor.fetchInstanceDBConfig().then((function(e){e.error?400===e.error.status&&e.error.json().then((function(e){/configurable_from_database/.test(e.error)&&r("setInstanceAdminNoDbConfig")})):o("setInstanceAdminSettings",{backendDbConfig:e})})),null===t.descriptions&&n.api.backendInteractor.fetchInstanceConfigDescriptions().then((function(e){return o("setInstanceAdminDescriptions",{backendDescriptions:e})}))},setInstanceAdminSettings:function(e,t){var n=e.state,o=e.commit,r=(e.dispatch,t.backendDbConfig),i=n.config||{},s=new Set;r.configs.forEach((function(e){var t=[e.group,e.key];e.db&&e.db.forEach((function(e){return s.add([].concat(t,[e]).join(" -> "))})),bt()(i,t,function e(t){return Array.isArray(t)&&t.length>0&&t[0].tuple?t.reduce((function(t,n){return fn(fn({},t),{},(0,d.Z)({},n.tuple[0],e(n.tuple[1])))}),{}):t}(e.value))})),console.log(i[":pleroma"]),o("updateAdminSettings",{config:i,modifiedPaths:s}),o("resetAdminDraft")},setInstanceAdminDescriptions:function(e,t){e.state;var n=e.commit,o=(e.dispatch,t.backendDescriptions),r=function e(t,n,o){var r=t.children,i=t.description,s=t.label,a=t.key,u=void 0===a?"<ROOT>":a,c=t.group,l=t.suggestions,d=c?[c,u]:[u],p={description:i,label:s,suggestions:l};Array.isArray(r)&&r.forEach((function(t){e(t,0,p)})),bt()(o,d,p)},i={};o.forEach((function(e){return r(e,0,i)})),console.log(i[":pleroma"]["Pleroma.Captcha"]),n("updateAdminDescriptions",{descriptions:i})},pushAdminDraft:function(e){var t=e.rootState,n=e.state,o=(e.commit,e.dispatch),r=function e(t){return"object"!==(0,de.Z)(t)?t:Array.isArray(t)?t.map(e):Object.entries(t).map((function(e){var t=(0,c.Z)(e,2);return{tuple:[t[0],t[1]]}}))},i=Bt()(Object.entries(n.config).map((function(e){var t=(0,c.Z)(e,2),n=t[0],o=t[1];return Object.keys(o).map((function(e){return{group:n,key:e}}))}))).filter((function(e){var t=e.group,o=e.key;return!Nt()(n.config[t][o],n.draft[t][o])})).map((function(e){var t=e.group,o=e.key,i=n.config[t][o],s=n.draft[t][o],a=Object.entries(i),u=Object.entries(s);return{group:t,key:o,value:r(Object.fromEntries(mn()(u,a,Nt())))}}));t.api.backendInteractor.pushInstanceDBConfig({payload:{configs:i}}).then((function(){return t.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return o("setInstanceAdminSettings",{backendDbConfig:e})}))},pushAdminSetting:function(e,t){var n=e.rootState,o=(e.state,e.commit,e.dispatch),r=t.path,i=t.value,s=Array.isArray(r)?r:r.split(/\./g),a=(0,dn.Z)(s),u=a[0],l=a[1],d=a.slice(2),p={};bt()(p,d,i),n.api.backendInteractor.pushInstanceDBConfig({payload:{configs:[{group:u,key:l,value:function e(t){return"object"!==(0,de.Z)(t)?t:Array.isArray(t)?t.map(e):Object.entries(t).map((function(e){var t=(0,c.Z)(e,2);return{tuple:[t[0],t[1]]}}))}(p)}]}}).then((function(){return n.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return o("setInstanceAdminSettings",{backendDbConfig:e})}))},resetAdminSetting:function(e,t){var n=e.rootState,o=e.state,r=(e.commit,e.dispatch),i=t.path,s=i.split(/\./g),a=(0,c.Z)(s,3),u=a[0],l=a[1],d=a[2];return o.modifiedPaths.delete(i),n.api.backendInteractor.pushInstanceDBConfig({payload:{configs:[{group:u,key:l,delete:!0,subkeys:[d]}]}}).then((function(){return n.api.backendInteractor.fetchInstanceDBConfig()})).then((function(e){return r("setInstanceAdminSettings",{backendDbConfig:e})}))}}});const wn=vn,bn={state:{messages:[],channel:{state:""},joined:!1},mutations:{setChannel:function(e,t){e.channel=t},addMessage:function(e,t){e.messages.push(t),e.messages=e.messages.slice(-19,20)},setMessages:function(e,t){e.messages=t.slice(-19,20)},setJoined:function(e,t){e.joined=t}},actions:{initializeShout:function(e,t){var n=t.channel("chat:public");n.joinPush.receive("ok",(function(){e.commit("setJoined",!0)})),n.onClose((function(){e.commit("setJoined",!1)})),n.onError((function(){e.commit("setJoined",!1)})),n.on("new_msg",(function(t){e.commit("addMessage",t)})),n.on("messages",(function(t){var n=t.messages;e.commit("setMessages",n)})),n.join(),e.commit("setChannel",n)}}},yn={state:{clientId:!1,clientSecret:!1,appToken:!1,userToken:!1},mutations:{setClientData:function(e,t){var n=t.clientId,o=t.clientSecret;e.clientId=n,e.clientSecret=o},setAppToken:function(e,t){e.appToken=t},setToken:function(e,t){e.userToken=t},clearToken:function(e){e.userToken=!1,delete e.token}},getters:{getToken:function(e){return function(){return e.userToken||e.token||e.appToken}},getUserToken:function(e){return function(){return e.userToken||e.token}}}};var Dn="password",_n="token",kn="totp",Cn="recovery",Sn=function(e){e.strategy=e.initStrategy,e.settings={}};const jn={namespaced:!0,state:{settings:{},strategy:Dn,initStrategy:Dn},getters:{settings:function(e,t){return e.settings},requiredPassword:function(e,t,n){return e.strategy===Dn},requiredToken:function(e,t,n){return e.strategy===_n},requiredTOTP:function(e,t,n){return e.strategy===kn},requiredRecovery:function(e,t,n){return e.strategy===Cn}},mutations:{setInitialStrategy:function(e,t){t&&(e.initStrategy=t,e.strategy=t)},requirePassword:function(e){e.strategy=Dn},requireToken:function(e){e.strategy=_n},requireMFA:function(e,t){var n=t.settings;e.settings=n,e.strategy=kn},requireRecovery:function(e){e.strategy=Cn},requireTOTP:function(e){e.strategy=kn},abortMFA:function(e){Sn(e)}},actions:{login:function(e,t){return(0,o.Z)(i().mark((function n(){var o,r,s,a;return i().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=e.state,r=e.dispatch,s=e.commit,a=t.access_token,s("setToken",a,{root:!0}),n.next=5,r("loginUser",a,{root:!0});case 5:Sn(o);case 6:case"end":return n.stop()}}),n)})))()}}};var Fn=n(58394),An=new Set(["image","video","audio","flash"]),On={state:{media:[],currentIndex:0,activated:!1},mutations:{setMedia:function(e,t){e.media=t},setCurrentMedia:function(e,t){e.activated=!0,e.currentIndex=t},close:function(e){e.activated=!1}},actions:{setMedia:function(e,t){var n=e.commit,o=t.filter((function(e){var t=Fn.ZP.fileType(e.mimetype);return An.has(t)}));n("setMedia",o)},setCurrentMedia:function(e,t){(0,e.commit)("setCurrentMedia",e.state.media.indexOf(t)||0)},closeMediaViewer:function(e){(0,e.commit)("close")}}};const En=On,zn={state:{tokens:[]},actions:{fetchTokens:function(e){var t=e.rootState,n=e.commit;t.api.backendInteractor.fetchOAuthTokens().then((function(e){n("swapTokens",e)}))},revokeToken:function(e,t){var n=e.rootState,o=e.commit,r=e.state;n.api.backendInteractor.revokeOAuthToken({id:t}).then((function(e){201===e.status&&o("swapTokens",r.tokens.filter((function(e){return e.id!==t})))}))}},mutations:{swapTokens:function(e,t){e.tokens=t}}};var Pn=n(63105),In=n.n(Pn),xn={state:{reportModal:{userId:null,statuses:[],preTickedIds:[],activated:!1},reports:{}},mutations:{openUserReportingModal:function(e,t){var n=t.userId,o=t.statuses,r=t.preTickedIds;e.reportModal.userId=n,e.reportModal.statuses=o,e.reportModal.preTickedIds=r,e.reportModal.activated=!0},closeUserReportingModal:function(e){e.reportModal.activated=!1},setReportState:function(e,t){var n=t.id,o=t.state;e.reports[n].state=o},addReport:function(e,t){e.reports[t.id]=t}},actions:{openUserReportingModal:function(e,t){var n=e.rootState,o=e.commit,r=t.userId,i=t.statusIds,s=void 0===i?[]:i,a=s.map((function(e){return n.statuses.allStatusesObject[e]})),u=s,c=a.concat(In()(n.statuses.allStatuses,(function(e){return e.user.id===r&&!u.includes(e.id)})));o("openUserReportingModal",{userId:r,statuses:c,preTickedIds:u})},closeUserReportingModal:function(e){(0,e.commit)("closeUserReportingModal")},setReportState:function(e,t){var n=e.commit,o=e.dispatch,r=e.rootState,i=t.id,s=t.state,a=r.reports.reports[i].state;n("setReportState",{id:i,state:s}),r.api.backendInteractor.setReportState({id:i,state:s}).catch((function(e){console.error("Failed to set report state",e),o("pushGlobalNotice",{level:"error",messageKey:"general.generic_error_message",messageArgs:[e.message],timeout:5e3}),n("setReportState",{id:i,state:a})}))},addReport:function(e,t){(0,e.commit)("addReport",t)}}};const Tn=xn;const $n={state:{trackedPolls:{},pollsObject:{}},mutations:{mergeOrAddPoll:function(e,t){var n=e.pollsObject[t.id];t.expired=Date.now()>Date.parse(t.expires_at),e.pollsObject[t.id]=n?I()(n,t):t},trackPoll:function(e,t){var n=e.trackedPolls[t];e.trackedPolls[t]=n?n+1:1},untrackPoll:function(e,t){var n=e.trackedPolls[t];e.trackedPolls[t]=n?n-1:0}},actions:{mergeOrAddPoll:function(e,t){(0,e.commit)("mergeOrAddPoll",t)},updateTrackedPoll:function(e,t){var n=e.rootState,o=e.dispatch,r=e.commit;n.api.backendInteractor.fetchPoll({pollId:t}).then((function(e){setTimeout((function(){n.polls.trackedPolls[t]&&o("updateTrackedPoll",t)}),3e4),r("mergeOrAddPoll",e)}))},trackPoll:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch;n.polls.trackedPolls[t]||setTimeout((function(){return r("updateTrackedPoll",t)}),3e4),o("trackPoll",t)},untrackPoll:function(e,t){(0,e.commit)("untrackPoll",t)},votePoll:function(e,t){var n=e.rootState,o=e.commit,r=(t.id,t.pollId),i=t.choices;return n.api.backendInteractor.vote({pollId:r,choices:i}).then((function(e){return o("mergeOrAddPoll",e),e}))}}},Bn={state:{params:null,modalActivated:!1},mutations:{openPostStatusModal:function(e,t){e.params=t,e.modalActivated=!0},closePostStatusModal:function(e){e.modalActivated=!1},resetPostStatusModal:function(e){e.params=null}},actions:{openPostStatusModal:function(e,t){(0,e.commit)("openPostStatusModal",t)},closePostStatusModal:function(e){(0,e.commit)("closePostStatusModal")},resetPostStatusModal:function(e){(0,e.commit)("resetPostStatusModal")}}},Un={state:{params:null,modalActivated:!1},mutations:{openEditStatusModal:function(e,t){e.params=t,e.modalActivated=!0},closeEditStatusModal:function(e){e.modalActivated=!1}},actions:{openEditStatusModal:function(e,t){(0,e.commit)("openEditStatusModal",t)},closeEditStatusModal:function(e){(0,e.commit)("closeEditStatusModal")}}},Mn={state:{params:{},modalActivated:!1},mutations:{openStatusHistoryModal:function(e,t){e.params=t,e.modalActivated=!0},closeStatusHistoryModal:function(e){e.modalActivated=!1}},actions:{openStatusHistoryModal:function(e,t){(0,e.commit)("openStatusHistoryModal",t)},closeStatusHistoryModal:function(e){(0,e.commit)("closeStatusHistoryModal")}}};var Ln=n(73303),Rn=n.n(Ln),qn=n(75472),Nn=n.n(qn),Zn=n(73955),Wn=n.n(Zn),Hn=n(89734),Vn=n.n(Hn);function Kn(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Gn(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var Yn={add:function(e,t){var n=t.messages,o=t.updateMaxId,r=void 0===o||o;if(e)for(var i=function(){var t=n[s];if(t.chat_id!==e.chatId)return{v:void 0};if(t.fakeId){var o=e.idIndex[t.fakeId];if(o)return e.idIndex[t.id]&&(delete e.idIndex[t.id],e.messages=e.messages.filter((function(e){return e.id!==t.id}))),Object.assign(o,t,{error:!1}),delete o.fakeId,e.idIndex[o.id]=o,delete e.idIndex[t.fakeId],{v:void 0}}(!e.minId||!t.pending&&t.id<e.minId)&&(e.minId=t.id),(!e.maxId||t.id>e.maxId)&&r&&(e.maxId=t.id),e.idIndex[t.id]||function(e,t){if(t.idempotency_key)return e.idempotencyKeyIndex[t.idempotency_key]}(e,t)||(e.lastSeenMessageId<t.id&&e.newMessageCount++,e.idIndex[t.id]=t,e.messages.push(e.idIndex[t.id]),e.idempotencyKeyIndex[t.idempotency_key]=!0)},s=0;s<n.length;s++){var a=i();if("object"===(0,de.Z)(a))return a.v}},empty:function(e){return{idIndex:{},idempotencyKeyIndex:{},messages:[],newMessageCount:0,lastSeenMessageId:"0",chatId:e,minId:void 0,maxId:void 0}},getView:function(e){if(!e)return[];var t,n=[],o=Nn()(e.messages,["pending","id"],["asc","asc"]),r=o[0],i=o[o.length-1];if(r){var s=new Date(r.created_at);s.setHours(0,0,0,0),n.push({type:"date",date:s,id:s.getTime().toString()})}for(var a=!1,u=0;u<o.length;u++){var c=o[u],l=o[u+1],d=new Date(c.created_at);d.setHours(0,0,0,0),i&&i.date<d&&(n.push({type:"date",date:d,id:d.getTime().toString()}),i.isTail=!0,t=void 0,a=!0);var p={type:"message",data:c,date:d,id:c.id,messageChainId:t};(l&&l.account_id)!==c.account_id&&(p.isTail=!0,t=void 0),((i&&i.data&&i.data.account_id)!==c.account_id||a)&&(t=Wn()(),p.isHead=!0,p.messageChainId=t),n.push(p),i=p,a=!1}return n},deleteMessage:function(e,t){if(e){if(e.messages=e.messages.filter((function(e){return e.id!==t})),delete e.idIndex[t],e.maxId===t){var n=B()(e.messages,"id");e.maxId=n.id}if(e.minId===t){var o=T()(e.messages,"id");e.minId=o.id}}},cullOlderMessages:function(e){var t=e.messages.length,n=t-50;if(!(t<=50)){e.messages=Vn()(e.messages,["id"]),e.minId=e.messages[n].id;var o,r=Kn(e.messages);try{for(r.s();!(o=r.n()).done;){var i=o.value;i.id<e.minId&&(delete e.idIndex[i.id],delete e.idempotencyKeyIndex[i.idempotency_key])}}catch(e){r.e(e)}finally{r.f()}e.messages=e.messages.slice(n,t)}},resetNewMessageCount:function(e){e&&(e.newMessageCount=0,e.lastSeenMessageId=e.maxId)},clear:function(e){var t,n=[],o=Kn(e.messages);try{for(o.s();!(t=o.n()).done;){var r=t.value;r.error?n.push(r.id):(delete e.idIndex[r.id],delete e.idempotencyKeyIndex[r.idempotency_key])}}catch(e){o.e(e)}finally{o.f()}e.messages=e.messages.filter((function(e){return n.includes(e.id)})),e.newMessageCount=0,e.lastSeenMessageId="0",e.minId=void 0,e.maxId=void 0},handleMessageError:function(e,t,n){if(e){var o=e.idIndex[t];if(o&&(o.error=!0,o.pending=!1,!n)){var r=Nn()(e.messages,["pending","id"],["asc","desc"])[0];if(r){var i=o.id;o.id="".concat(r.id,"-").concat((new Date).getTime()),e.idIndex[o.id]=o,delete e.idIndex[i]}}}}};const Jn=Yn;var Qn=n(27742);function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xn(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var to={chatList:{data:[],idStore:{}},chatListFetcher:null,openedChats:(0,Zt.qj)({}),openedChatMessageServices:(0,Zt.qj)({}),fetcher:void 0,currentChatId:null,lastReadMessageId:null},no=function(e,t){return M()(e.chatList.data,{id:t})},oo={state:eo({},to),getters:{currentChat:function(e){return e.openedChats[e.currentChatId]},currentChatMessageService:function(e){return e.openedChatMessageServices[e.currentChatId]},findOpenedChatByRecipientId:function(e){return function(t){return M()(e.openedChats,(function(e){return e.account.id===t}))}},sortedChatList:function(e){return Nn()(e.chatList.data,["updated_at"],["desc"])},unreadChatCount:function(e){return Rn()(e.chatList.data,"unread")}},actions:{startFetchingChats:function(e){var t=e.dispatch,n=e.commit,o=function(){return t("fetchChats",{latest:!0})};o(),n("setChatListFetcher",{fetcher:function(){return(0,Ce.F)(o,5e3)}})},stopFetchingChats:function(e){(0,e.commit)("setChatListFetcher",{fetcher:void 0})},fetchChats:function(e){var t=e.dispatch,n=e.rootState;return e.commit,n.api.backendInteractor.chats().then((function(e){var n=e.chats;return t("addNewChats",{chats:n}),n}))},addNewChats:function(e,t){var n=t.chats,o=e.commit,r=e.dispatch,i=e.rootGetters;o("addNewUsers",n.map((function(e){return e.account})).filter((function(e){return e}))),o("addNewChats",{dispatch:r,chats:n,rootGetters:i,newChatMessageSideEffects:function(t){dt(e,t)}})},updateChat:function(e,t){(0,e.commit)("updateChat",{chat:t.chat})},startFetchingCurrentChat:function(e,t){e.commit,(0,e.dispatch)("setCurrentChatFetcher",{fetcher:t.fetcher})},setCurrentChatFetcher:function(e,t){e.rootState,(0,e.commit)("setCurrentChatFetcher",{fetcher:t.fetcher})},addOpenedChat:function(e,t){e.rootState;var n=e.commit,o=e.dispatch,r=t.chat;n("addOpenedChat",{dispatch:o,chat:(0,Qn._J)(r)}),o("addNewUsers",[r.account])},addChatMessages:function(e,t){var n=e.commit;n("addChatMessages",eo({commit:n},t))},resetChatNewMessageCount:function(e,t){(0,e.commit)("resetChatNewMessageCount",t)},clearCurrentChat:function(e,t){e.rootState;var n=e.commit;e.dispatch,n("setCurrentChatId",{chatId:void 0}),n("setCurrentChatFetcher",{fetcher:void 0})},readChat:function(e,t){var n=e.rootState,o=e.commit,r=e.dispatch,i=t.id,s=t.lastReadId,a=n.chats.lastReadMessageId!==s;r("resetChatNewMessageCount"),o("readChat",{id:i,lastReadId:s}),a&&n.api.backendInteractor.readChat({id:i,lastReadId:s})},deleteChatMessage:function(e,t){var n=e.rootState,o=e.commit;n.api.backendInteractor.deleteChatMessage(t),o("deleteChatMessage",eo({commit:o},t))},resetChats:function(e){var t=e.commit;(0,e.dispatch)("clearCurrentChat"),t("resetChats",{commit:t})},clearOpenedChats:function(e){e.rootState;var t=e.commit;e.dispatch,e.rootGetters,t("clearOpenedChats",{commit:t})},handleMessageError:function(e,t){var n=e.commit;n("handleMessageError",eo({commit:n},t))},cullOlderMessages:function(e,t){(0,e.commit)("cullOlderMessages",t)}},mutations:{setChatListFetcher:function(e,t){t.commit;var n=t.fetcher,o=e.chatListFetcher;o&&o.stop(),e.chatListFetcher=n&&n()},setCurrentChatFetcher:function(e,t){var n=t.fetcher,o=e.fetcher;o&&o.stop(),e.fetcher=n&&n()},addOpenedChat:function(e,t){t._dispatch;var n=t.chat;e.currentChatId=n.id,e.openedChats[n.id]=n,e.openedChatMessageServices[n.id]||(e.openedChatMessageServices[n.id]=Jn.empty(n.id))},setCurrentChatId:function(e,t){var n=t.chatId;e.currentChatId=n},addNewChats:function(e,t){var n=t.chats,o=t.newChatMessageSideEffects;n.forEach((function(t){var n=no(e,t.id);if(n){var r=(n.lastMessage&&n.lastMessage.id)!==(t.lastMessage&&t.lastMessage.id);n.lastMessage=t.lastMessage,n.unread=t.unread,n.updated_at=t.updated_at,r&&n.unread&&o(t)}else e.chatList.data.push(t),e.chatList.idStore[t.id]=t}))},updateChat:function(e,t){t._dispatch;var n=t.chat,o=(t._rootGetters,no(e,n.id));o&&(o.lastMessage=n.lastMessage,o.unread=n.unread,o.updated_at=n.updated_at),o||e.chatList.data.unshift(n),e.chatList.idStore[n.id]=n},deleteChat:function(e,t){t._dispatch;var n=t.id;t._rootGetters,e.chats.data=e.chats.data.filter((function(e){return e.last_status.id!==n})),e.chats.idStore=S()(e.chats.idStore,(function(e){return e.last_status.id===n}))},resetChats:function(e,t){var n=t.commit;for(var o in e.chatList={data:[],idStore:{}},e.currentChatId=null,n("setChatListFetcher",{fetcher:void 0}),e.openedChats)Jn.clear(e.openedChatMessageServices[o]),delete e.openedChats[o],delete e.openedChatMessageServices[o]},setChatsLoading:function(e,t){var n=t.value;e.chats.loading=n},addChatMessages:function(e,t){var n=t.chatId,o=t.messages,r=t.updateMaxId,i=e.openedChatMessageServices[n];i&&Jn.add(i,{messages:o.map(Qn.UB),updateMaxId:r})},deleteChatMessage:function(e,t){var n=t.chatId,o=t.messageId,r=e.openedChatMessageServices[n];r&&Jn.deleteMessage(r,o)},resetChatNewMessageCount:function(e,t){var n=e.openedChatMessageServices[e.currentChatId];Jn.resetNewMessageCount(n)},clearOpenedChats:function(e){var t=e.currentChatId;for(var n in e.openedChats)t!==n&&(Jn.clear(e.openedChatMessageServices[n]),delete e.openedChats[n],delete e.openedChatMessageServices[n])},readChat:function(e,t){var n=t.id,o=t.lastReadId;e.lastReadMessageId=o;var r=no(e,n);r&&(r.unread=0)},handleMessageError:function(e,t){var n=t.chatId,o=t.fakeId,r=t.isRetry,i=e.openedChatMessageServices[n];Jn.handleMessageError(i,o,r)},cullOlderMessages:function(e,t){Jn.cullOlderMessages(e.openedChatMessageServices[t])}}};const ro=oo;const io={state:{announcements:[],supportsAnnouncements:!0,fetchAnnouncementsTimer:void 0},mutations:{setAnnouncements:function(e,t){e.announcements=t},setAnnouncementRead:function(e,t){var n=t.id,o=t.read,r=e.announcements.findIndex((function(e){return e.id===n}));r<0||(e.announcements[r].read=o)},setFetchAnnouncementsTimer:function(e,t){e.fetchAnnouncementsTimer=t},setSupportsAnnouncements:function(e,t){e.supportsAnnouncements=t}},getters:{unreadAnnouncementCount:function(e,t,n){return n.users.currentUser?e.announcements.filter((function(e){return!(e.inactive||e.read)})).length:0}},actions:{fetchAnnouncements:function(e){if(!e.state.supportsAnnouncements)return Promise.resolve();var t=e.rootState.users.currentUser,n=t&&t.privileges.includes("announcements_manage_announcements"),r=function(){var t=(0,o.Z)(i().mark((function t(){var o,r,s,a;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}return t.abrupt("return",e.rootState.api.backendInteractor.fetchAnnouncements());case 2:return t.next=4,e.rootState.api.backendInteractor.adminFetchAnnouncements();case 4:return o=t.sent,t.next=7,e.rootState.api.backendInteractor.fetchAnnouncements();case 7:return r=t.sent,s=r.reduce((function(e,t){return e[t.id]=t,e}),{}),a=function(e){return s[e.id]},o.forEach((function(e){var t=a(e);t?e.read=t.read:e.inactive=!0})),t.abrupt("return",o);case 12:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();return r().then((function(t){e.commit("setAnnouncements",t)})).catch((function(t){if(!t||404!==t.statusCode)throw t;e.commit("setSupportsAnnouncements",!1)}))},markAnnouncementAsRead:function(e,t){return e.rootState.api.backendInteractor.dismissAnnouncement({id:t}).then((function(){e.commit("setAnnouncementRead",{id:t,read:!0})}))},startFetchingAnnouncements:function(e){if(!e.state.fetchAnnouncementsTimer){var t=setInterval((function(){return e.dispatch("fetchAnnouncements")}),3e5);return e.commit("setFetchAnnouncementsTimer",t),e.dispatch("fetchAnnouncements")}},stopFetchingAnnouncements:function(e){var t=e.state.fetchAnnouncementsTimer;e.commit("setFetchAnnouncementsTimer",void 0),clearInterval(t)},postAnnouncement:function(e,t){var n=t.content,o=t.startsAt,r=t.endsAt,i=t.allDay;return e.rootState.api.backendInteractor.postAnnouncement({content:n,startsAt:o,endsAt:r,allDay:i}).then((function(){return e.dispatch("fetchAnnouncements")}))},editAnnouncement:function(e,t){var n=t.id,o=t.content,r=t.startsAt,i=t.endsAt,s=t.allDay;return e.rootState.api.backendInteractor.editAnnouncement({id:n,content:o,startsAt:r,endsAt:i,allDay:s}).then((function(){return e.dispatch("fetchAnnouncements")}))},deleteAnnouncement:function(e,t){return e.rootState.api.backendInteractor.deleteAnnouncement({id:t}).then((function(){return e.dispatch("fetchAnnouncements")}))}}};var so=n(90308),ao=n(72378),uo=n.n(ao),co=n(69483),lo=!1,po=function(e,t){return 0===t.length?e:t.reduce((function(t,n){return bt()(t,n,Dt()(e,n)),t}),{})},mo=["markNotificationsAsSeen","clearCurrentUser","setCurrentUser","setServerSideStorage","setHighlight","setOption","setClientData","setToken","clearToken"],ho=n.n(co)();function fo(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.key,n=void 0===t?"vuex-lz":t,o=e.paths,r=void 0===o?[]:o,i=e.getState,s=void 0===i?function(e,t){return t.getItem(e)}:i,a=e.setState,u=void 0===a?function(e,t,n){return lo?n.setItem(e,t):(console.log("waiting for old state to be loaded..."),Promise.resolve())}:a,c=e.reducer,l=void 0===c?po:c,d=e.storage,p=void 0===d?ho:d,m=e.subscriber,h=void 0===m?function(e){return function(t){return e.subscribe(t)}}:m;return s(n,p).then((function(e){return function(t){try{if(null!==e&&"object"===(0,de.Z)(e)){var o=e.users||{};o.usersObject={};var i=o.users||[];N()(i,(function(e){o.usersObject[e.id]=e})),e.users=o,t.replaceState(uo()({},t.state,e))}lo=!0}catch(e){console.log("Couldn't load state"),console.error(e),lo=!0}h(t)((function(e,o){try{mo.includes(e.type)&&u(n,l(Rt()(o),r),p).then((function(n){void 0!==n&&("setOption"!==e.type&&"setCurrentUser"!==e.type||t.dispatch("settingsSaved",{success:n}))}),(function(n){"setOption"!==e.type&&"setCurrentUser"!==e.type||t.dispatch("settingsSaved",{error:n})}))}catch(e){console.log("Couldn't persist state:"),console.log(e)}}))}}))}const go=function(e){e.subscribe((function(t,n){var o=n.instance.vapidPublicKey,r=n.config.webPushNotifications,i="granted"===n.interface.notificationPermission,s=n.users.currentUser,a="setCurrentUser"===t.type,u="setInstanceOption"===t.type&&"vapidPublicKey"===t.payload.name,c="setNotificationPermission"===t.type&&"granted"===t.payload,l="setOption"===t.type&&"webPushNotifications"===t.payload.name,d="setOption"===t.type&&"notificationVisibility"===t.payload.name;if(a||u||c||l||d){if(s&&o&&i&&r)return e.dispatch("registerPushNotifications");if(l&&!r)return e.dispatch("unregisterPushNotifications")}}))};var vo=n(72617),wo=n(49963),bo=n(28339),yo=n(20425),Do=n.n(yo),_o=n(42570),ko=n(57810),Co=n(66252),So=n(3577),jo=(0,Co._)("div",{id:"app_bg_wrapper",class:"app-bg-wrapper"},null,-1),Fo=(0,Co._)("div",{class:"underlay"},null,-1),Ao=(0,Co._)("div",{id:"notifs-sidebar"},null,-1),Oo={key:0,class:"login-hint panel panel-default"},Eo={class:"user-panel"},zo={key:"user-panel-signed",class:"panel panel-default signed-in"},Po={class:"login panel panel-default"},Io={class:"panel-heading"},xo={class:"panel-body"},To={class:"form-group"},$o={for:"username"},Bo=["disabled","placeholder"],Uo={class:"form-group"},Mo={for:"password"},Lo=["disabled"],Ro={class:"form-group"},qo={key:1,class:"form-group"},No={class:"form-group"},Zo={class:"login-bottom"},Wo=["disabled"],Ho={key:0,class:"form-group"},Vo={class:"alert error"};function Ko(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ko(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ko(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const Yo={data:function(){return{user:{},error:!1}},computed:Go(Go({isPasswordAuth:function(){return this.requiredPassword},isTokenAuth:function(){return this.requiredToken}},(0,s.rn)({registrationOpen:function(e){return e.instance.registrationOpen},instance:function(e){return e.instance},loggingIn:function(e){return e.users.loggingIn},oauth:function(e){return e.oauth}})),(0,s.Se)("authFlow",["requiredPassword","requiredToken","requiredMFA"])),methods:Go(Go(Go({},(0,s.OI)("authFlow",["requireMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{submit:function(){this.isTokenAuth?this.submitToken():this.submitPassword()},submitToken:function(){var e=this.oauth,t={clientId:e.clientId,clientSecret:e.clientSecret,instance:this.instance.server,commit:this.$store.commit};Ne.getOrCreateApp(t).then((function(e){Ne.login(Go(Go({},e),t))}))},submitPassword:function(){var e=this,t={clientId:this.oauth.clientId,oauth:this.oauth,instance:this.instance.server,commit:this.$store.commit};this.error=!1,Ne.getOrCreateApp(t).then((function(n){Ne.getTokenWithCredentials(Go(Go({},n),{},{instance:t.instance,username:e.user.username,password:e.user.password})).then((function(t){t.error?"mfa_required"===t.error?e.requireMFA({settings:t}):"password_reset_required"===t.identifier?e.$router.push({name:"password-reset",params:{passwordResetRequested:!0}}):(e.error=t.error,e.focusOnPasswordInput()):e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}))},clearError:function(){this.error=!1},focusOnPasswordInput:function(){var e=this.$refs.passwordInput;e.focus(),e.setSelectionRange(0,e.value.length)}})};var Jo=n(83744);const Qo=(0,Jo.Z)(Yo,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Po,[(0,Co._)("div",Io,(0,So.zw)(e.$t("login.login")),1),(0,Co._)("div",xo,[(0,Co._)("form",{class:"login-form",onSubmit:t[2]||(t[2]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[e.isPasswordAuth?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co._)("div",To,[(0,Co._)("label",$o,(0,So.zw)(e.$t("login.username")),1),(0,Co.wy)((0,Co._)("input",{id:"username","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.user.username=t}),disabled:e.loggingIn,class:"form-control",placeholder:e.$t("login.placeholder")},null,8,Bo),[[wo.nr,e.user.username]])]),(0,Co._)("div",Uo,[(0,Co._)("label",Mo,(0,So.zw)(e.$t("login.password")),1),(0,Co.wy)((0,Co._)("input",{id:"password",ref:"passwordInput","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.user.password=t}),disabled:e.loggingIn,class:"form-control",type:"password"},null,8,Lo),[[wo.nr,e.user.password]])]),(0,Co._)("div",Ro,[(0,Co.Wm)(s,{to:{name:"password-reset"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("password_reset.forgot_password")),1)]})),_:1})])],64)):(0,Co.kq)("",!0),e.isTokenAuth?((0,Co.wg)(),(0,Co.iD)("div",qo,[(0,Co._)("p",null,(0,So.zw)(e.$t("login.description")),1)])):(0,Co.kq)("",!0),(0,Co._)("div",No,[(0,Co._)("div",Zo,[(0,Co._)("div",null,[e.registrationOpen?((0,Co.wg)(),(0,Co.j4)(s,{key:0,to:{name:"registration"},class:"register"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.register")),1)]})),_:1})):(0,Co.kq)("",!0)]),(0,Co._)("button",{disabled:e.loggingIn,type:"submit",class:"btn button-default"},(0,So.zw)(e.$t("login.login")),9,Wo)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ho,[(0,Co._)("div",Vo,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[3]||(t[3]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);var Xo={class:"login panel panel-default"},er={class:"panel-heading"},tr={class:"panel-body"},nr={class:"form-group"},or={for:"code"},rr={class:"form-group"},ir={class:"login-bottom"},sr=(0,Co._)("br",null,null,-1),ar={type:"submit",class:"btn button-default"},ur={key:0,class:"form-group"},cr={class:"alert error"},lr={verifyOTPCode:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.mfaToken,i=e.code,s="".concat(o,"/oauth/mfa/challenge"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("mfa_token",r),a.append("code",i),a.append("challenge_type","totp"),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))},verifyRecoveryCode:function(e){var t=e.clientId,n=e.clientSecret,o=e.instance,r=e.mfaToken,i=e.code,s="".concat(o,"/oauth/mfa/challenge"),a=new window.FormData;return a.append("client_id",t),a.append("client_secret",n),a.append("mfa_token",r),a.append("code",i),a.append("challenge_type","recovery"),window.fetch(s,{method:"POST",body:a}).then((function(e){return e.json()}))}};const dr=lr;function pr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function mr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const hr={data:function(){return{code:null,error:!1}},computed:mr(mr({},(0,s.Se)({authSettings:"authFlow/settings"})),(0,s.rn)({instance:"instance",oauth:"oauth"})),methods:mr(mr(mr({},(0,s.OI)("authFlow",["requireTOTP","abortMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{clearError:function(){this.error=!1},submit:function(){var e=this,t=this.oauth,n={clientId:t.clientId,clientSecret:t.clientSecret,instance:this.instance.server,mfaToken:this.authSettings.mfa_token,code:this.code};dr.verifyRecoveryCode(n).then((function(t){if(t.error)return e.error=t.error,void(e.code=null);e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}})},fr=(0,Jo.Z)(hr,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Xo,[(0,Co._)("div",er,(0,So.zw)(e.$t("login.heading.recovery")),1),(0,Co._)("div",tr,[(0,Co._)("form",{class:"login-form",onSubmit:t[3]||(t[3]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",nr,[(0,Co._)("label",or,(0,So.zw)(e.$t("login.recovery_code")),1),(0,Co.wy)((0,Co._)("input",{id:"code","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.code=t}),class:"form-control"},null,512),[[wo.nr,e.code]])]),(0,Co._)("div",rr,[(0,Co._)("div",ir,[(0,Co._)("div",null,[(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.requireTOTP&&e.requireTOTP.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("login.enter_two_factor_code")),1),sr,(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.abortMFA&&e.abortMFA.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("general.cancel")),1)]),(0,Co._)("button",ar,(0,So.zw)(e.$t("general.verify")),1)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",ur,[(0,Co._)("div",cr,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[4]||(t[4]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);var gr={class:"login panel panel-default"},vr={class:"panel-heading"},wr={class:"panel-body"},br={class:"form-group"},yr={for:"code"},Dr={class:"form-group"},_r={class:"login-bottom"},kr=(0,Co._)("br",null,null,-1),Cr={type:"submit",class:"btn button-default"},Sr={key:0,class:"form-group"},jr={class:"alert error"};function Fr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ar(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Fr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);const Or={data:function(){return{code:null,error:!1}},computed:Ar(Ar({},(0,s.Se)({authSettings:"authFlow/settings"})),(0,s.rn)({instance:"instance",oauth:"oauth"})),methods:Ar(Ar(Ar({},(0,s.OI)("authFlow",["requireRecovery","abortMFA"])),(0,s.nv)({login:"authFlow/login"})),{},{clearError:function(){this.error=!1},submit:function(){var e=this,t=this.oauth,n={clientId:t.clientId,clientSecret:t.clientSecret,instance:this.instance.server,mfaToken:this.authSettings.mfa_token,code:this.code};dr.verifyOTPCode(n).then((function(t){if(t.error)return e.error=t.error,void(e.code=null);e.login(t).then((function(){e.$router.push({name:"friends"})}))}))}})},Er=(0,Jo.Z)(Or,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",gr,[(0,Co._)("div",vr,(0,So.zw)(e.$t("login.heading.totp")),1),(0,Co._)("div",wr,[(0,Co._)("form",{class:"login-form",onSubmit:t[3]||(t[3]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",br,[(0,Co._)("label",yr,(0,So.zw)(e.$t("login.authentication_code")),1),(0,Co.wy)((0,Co._)("input",{id:"code","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.code=t}),class:"form-control"},null,512),[[wo.nr,e.code]])]),(0,Co._)("div",Dr,[(0,Co._)("div",_r,[(0,Co._)("div",null,[(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.requireRecovery&&e.requireRecovery.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("login.enter_recovery_code")),1),kr,(0,Co._)("button",{class:"button-unstyled -link",type:"button",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.abortMFA&&e.abortMFA.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("general.cancel")),1)]),(0,Co._)("button",Cr,(0,So.zw)(e.$t("general.verify")),1)])])],32)]),e.error?((0,Co.wg)(),(0,Co.iD)("div",Sr,[(0,Co._)("div",jr,[(0,Co.Uk)((0,So.zw)(e.error)+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[4]||(t[4]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",class:"fa-scale-110 fa-old-padding",icon:"times"})])])])):(0,Co.kq)("",!0)])}]]);function zr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const Pr={name:"AuthForm",render:function(){return(0,Co.h)((0,Co.up)(this.authForm))},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({authForm:function(){return this.requiredTOTP?"MFATOTPForm":this.requiredRecovery?"MFARecoveryForm":"LoginForm"}},(0,s.Se)("authFlow",["requiredTOTP","requiredRecovery"])),components:{MFARecoveryForm:fr,MFATOTPForm:Er,LoginForm:Qo}};var Ir=n(45333),xr=n(20392);function Tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const $r={computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tr(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({signedIn:function(){return this.user}},(0,s.rn)({user:function(e){return e.users.currentUser}})),components:{AuthForm:Pr,PostStatusForm:Ir.Z,UserCard:xr.Z}},Br=(0,Jo.Z)($r,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("PostStatusForm"),u=(0,Co.up)("auth-form");return(0,Co.wg)(),(0,Co.iD)("aside",Eo,[e.signedIn?((0,Co.wg)(),(0,Co.iD)("div",zo,[(0,Co.Wm)(s,{"user-id":e.user.id,"hide-bio":!0,rounded:"top"},null,8,["user-id"]),(0,Co.Wm)(a)])):((0,Co.wg)(),(0,Co.j4)(u,{key:"user-panel"}))])}]]);var Ur={class:"NavPanel"},Mr={class:"panel panel-default"},Lr={key:0,class:"panel-heading nav-panel-heading"},Rr=(0,Co._)("div",{class:"spacer"},null,-1),qr={key:1,class:"panel-body"},Nr={class:"timelines-background"},Zr={class:"timelines"},Wr={class:"timelines-background"},Hr={key:0,class:"icon iconLetter fa-scale-110 menu-icon"},Vr={class:"label"},Kr={key:0,class:"badge badge-notification"},Gr=["title","aria-pressed"],Yr=new Set(["bookmarks","dms","interactions","notifications","chat","chats","user-profile"]),Jr={home:{route:"friends",icon:"home",label:"nav.home_timeline",criteria:["!private"]},public:{route:"public-timeline",anon:!0,icon:"users",label:"nav.public_tl",criteria:["!private"]},twkn:{route:"public-external-timeline",anon:!0,icon:"globe",label:"nav.twkn",criteria:["!private","federating"]},bookmarks:{route:"bookmarks",icon:"bookmark",label:"nav.bookmarks"},favorites:{routeObject:{name:"user-profile",query:{tab:"favorites"}},icon:"star",label:"user_card.favorites"},dms:{route:"dms",icon:"envelope",label:"nav.dms"}},Qr={interactions:{route:"interactions",icon:"bell",label:"nav.interactions"},chats:{route:"chats",icon:"comments",label:"nav.chats",badgeGetter:"unreadChatCount",criteria:["chats"]},friendRequests:{route:"friend-requests",icon:"user-plus",label:"nav.friend_requests",criteria:["lockedUser"],badgeGetter:"followRequestCount"},about:{route:"about",anon:!0,icon:"info-circle",label:"nav.about"},announcements:{route:"announcements",icon:"bullhorn",label:"nav.announcements",badgeGetter:"unreadAnnouncementCount",criteria:["announcements"]}};function Xr(e,t){return e.route||e.routeObject?(n=e.routeObject?e.routeObject:{name:e.anon||t?e.route:e.anonRoute},Yr.has(n.name)&&(n.params={username:t.screen_name,name:t.screen_name}),n):null;var n}const ei={props:["to"]},ti=(0,Jo.Z)(ei,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link");return n.to?((0,Co.wg)(),(0,Co.j4)(s,{key:0,to:n.to,custom:""},{default:(0,Co.w5)((function(t){return[(0,Co.WI)(e.$slots,"default",(0,So.vs)((0,Co.F4)(t)))]})),_:3},8,["to"])):(0,Co.WI)(e.$slots,"default",(0,So.vs)((0,Co.dG)({key:1},{})))}]]);function ni(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Ht.vI.add(Vt.RP7);const oi={props:["item","showPin"],components:{OptionalRouterLink:ti},methods:{isPinned:function(e){return this.pinnedItems.has(e)},togglePin:function(e){this.isPinned(e)?this.$store.commit("removeCollectionPreference",{path:"collections.pinnedNavItems",value:e}):this.$store.commit("addCollectionPreference",{path:"collections.pinnedNavItems",value:e}),this.$store.dispatch("pushServerSideStorage")}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ni(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ni(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({routeTo:function(){return Xr(this.item,this.currentUser)},getters:function(){return this.$store.getters}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)}}))},ri=(0,Jo.Z)(oi,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("OptionalRouterLink");return(0,Co.wg)(),(0,Co.j4)(a,{ass:"ass",to:e.routeTo},{default:(0,Co.w5)((function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.isActive,r=n.href,i=n.navigate;return[(0,Co._)("li",(0,Co.dG)({class:["NavigationEntry menu-item",{"-active":o}]},e.$attrs),[((0,Co.wg)(),(0,Co.j4)((0,Co.LL)(e.routeTo?"a":"button"),{class:"main-link button-unstyled",href:r,onClick:i},{default:(0,Co.w5)((function(){return[(0,Co._)("span",null,[e.item.icon?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",class:"fa-scale-110 menu-icon",icon:e.item.icon},null,8,["icon"])):(0,Co.kq)("",!0)]),e.item.iconLetter?((0,Co.wg)(),(0,Co.iD)("span",Hr,(0,So.zw)(e.item.iconLetter),1)):(0,Co.kq)("",!0),(0,Co._)("span",Vr,(0,So.zw)(e.item.labelRaw||e.$t(e.item.label)),1)]})),_:2},1032,["href","onClick"])),(0,Co.WI)(e.$slots,"default"),e.item.badgeGetter&&e.getters[e.item.badgeGetter]?((0,Co.wg)(),(0,Co.iD)("div",Kr,(0,So.zw)(e.getters[e.item.badgeGetter]),1)):(0,Co.kq)("",!0),e.showPin&&e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:1,type:"button",class:"button-unstyled extra-button",title:e.$t(e.isPinned?"general.unpin":"general.pin"),"aria-pressed":!!e.isPinned,onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.togglePin(e.item.name)}),["stop","prevent"]))},[e.showPin&&e.currentUser?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",class:(0,So.C_)(["fa-scale-110",{veryfaint:!e.isPinned(e.item.name)}]),transform:e.isPinned(e.item.name)?"":"rotate-45",icon:"thumbtack"},null,8,["class","transform"])):(0,Co.kq)("",!0)],8,Gr)):(0,Co.kq)("",!0)],16)]})),_:3},8,["to"])}]]);var ii=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=t.hasChats,o=t.hasAnnouncements,r=t.isFederating,i=t.isPrivate,s=t.currentUser;return e.filter((function(e){var t=e.criteria,a=e.anon,u=e.anonRoute,c=new Set(t||[]);return!(!r&&c.has("federating")||!s&&i&&c.has("!private")||!(s||a||u)||!(s&&s.locked||!c.has("lockedUser"))||!n&&c.has("chats")||!o&&c.has("announcements"))}))},si=function(e){return e.lists.allLists.map((function(e){return{name:"list-"+e.id,routeObject:{name:"lists-timeline",params:{id:e.id}},labelRaw:e.title,iconLetter:e.title[0]}}))};function ai(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var ui={props:["showPin"],components:{NavigationEntry:ri},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ai(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ai(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},(0,s.rn)({lists:si,currentUser:function(e){return e.users.currentUser},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating}}))};const ci=ui,li=(0,Jo.Z)(ci,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("NavigationEntry");return(0,Co.wg)(),(0,Co.iD)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.lists,(function(t){return(0,Co.wg)(),(0,Co.j4)(s,{key:t.name,"show-pin":e.showPin,item:t},null,8,["show-pin","item"])})),128))])}]]);var di={class:"NavigationPins"},pi={key:1,class:"iconLetter fa-scale-110 fa-old-padding"},mi={key:2,class:"alert-dot"};function hi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hi(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.FVb,Vt.g4A,Vt.xVw,Vt.FU$,Vt.lXL,Vt.qmU,Vt.sqG,Vt.aC2,Vt.Zrf);const gi={props:["limit"],methods:{getRouteTo:function(e){return Xr(e,this.currentUser)}},computed:fi(fi({getters:function(){return this.$store.getters}},(0,s.rn)({lists:si,currentUser:function(e){return e.users.currentUser},followRequestCount:function(e){return e.api.followRequests.length},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating},pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)}})),{},{pinnedList:function(){var e=this;return this.currentUser?ii([].concat((0,l.Z)(Object.entries(fi({},Jr)).filter((function(t){var n=(0,c.Z)(t,1)[0];return e.pinnedItems.has(n)})).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return fi(fi({},t[1]),{},{name:n})}))),(0,l.Z)(this.lists.filter((function(t){return e.pinnedItems.has(t.name)}))),(0,l.Z)(Object.entries(fi({},Qr)).filter((function(t){var n=(0,c.Z)(t,1)[0];return e.pinnedItems.has(n)})).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return fi(fi({},t[1]),{},{name:n})})))),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser}).slice(0,this.limit):ii([fi(fi({},Jr.public),{},{name:"public"}),fi(fi({},Jr.twkn),{},{name:"twkn"}),fi(fi({},Qr.about),{},{name:"about"})],{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}})},vi=(0,Jo.Z)(gi,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("span",di,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.pinnedList,(function(t){return(0,Co.wg)(),(0,Co.j4)(a,{key:t.name,class:"pinned-item",to:e.getRouteTo(t),title:t.labelRaw||e.$t(t.label)},{default:(0,Co.w5)((function(){return[t.icon?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"fixed-width":"",icon:t.icon},null,8,["icon"])):(0,Co.kq)("",!0),t.iconLetter?((0,Co.wg)(),(0,Co.iD)("span",pi,(0,So.zw)(t.iconLetter),1)):(0,Co.kq)("",!0),t.badgeGetter&&e.getters[t.badgeGetter]?((0,Co.wg)(),(0,Co.iD)("div",mi)):(0,Co.kq)("",!0)]})),_:2},1032,["to","title"])})),128))])}]]);var wi=n(66141);function bi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function yi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bi(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.FVb,Vt.g4A,Vt.xVw,Vt.FU$,Vt.ptq,Vt.mTx,Vt.lXL,Vt.qmU,Vt.sqG,Vt.aC2,Vt.Zrf,Vt.Acd);const Di={props:["forceExpand","forceEditMode"],created:function(){},components:{ListsMenuContent:li,NavigationEntry:ri,NavigationPins:vi,Checkbox:wi.Z},data:function(){return{editMode:!1,showTimelines:!1,showLists:!1,timelinesList:Object.entries(Jr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),rootList:Object.entries(Qr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})}))}},methods:{toggleTimelines:function(){this.showTimelines=!this.showTimelines},toggleLists:function(){this.showLists=!this.showLists},toggleEditMode:function(){this.editMode=!this.editMode},toggleCollapse:function(){this.$store.commit("setPreference",{path:"simple.collapseNav",value:!this.collapsed}),this.$store.dispatch("pushServerSideStorage")},isPinned:function(e){return this.pinnedItems.has(e)},togglePin:function(e){this.isPinned(e)?this.$store.commit("removeCollectionPreference",{path:"collections.pinnedNavItems",value:e}):this.$store.commit("addCollectionPreference",{path:"collections.pinnedNavItems",value:e}),this.$store.dispatch("pushServerSideStorage")}},computed:yi(yi({},(0,s.rn)({currentUser:function(e){return e.users.currentUser},followRequestCount:function(e){return e.api.followRequests.length},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating},pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements},pinnedItems:function(e){return new Set(e.serverSideStorage.prefsStorage.collections.pinnedNavItems)},collapsed:function(e){return e.serverSideStorage.prefsStorage.simple.collapseNav}})),{},{timelinesItems:function(){return ii(Object.entries(yi({},Jr)).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})},rootItems:function(){return ii(Object.entries(yi({},Qr)).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return yi(yi({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,hasAnnouncements:this.supportsAnnouncements,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}},(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"]))},_i=(0,Jo.Z)(Di,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("NavigationPins"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("NavigationEntry"),c=(0,Co.up)("router-link"),l=(0,Co.up)("ListsMenuContent");return(0,Co.wg)(),(0,Co.iD)("div",Ur,[(0,Co._)("div",Mr,[e.forceExpand?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Lr,[(0,Co.Wm)(s,{limit:6}),Rr,(0,Co._)("button",{class:"button-unstyled",onClick:t[0]||(t[0]=function(){return e.toggleCollapse&&e.toggleCollapse.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"navigation-chevron","fixed-width":"",icon:e.collapsed?"chevron-down":"chevron-up"},null,8,["icon"])])])),!e.collapsed||e.forceExpand?((0,Co.wg)(),(0,Co.iD)("ul",qr,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.j4)(u,{key:0,"show-pin":!1,item:{icon:"stream",label:"nav.timelines"},"aria-expanded":e.showTimelines?"true":"false",onClick:e.toggleTimelines},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"timelines-chevron","fixed-width":"",icon:e.showTimelines?"chevron-up":"chevron-down"},null,8,["icon"])]})),_:1},8,["item","aria-expanded","onClick"])):(0,Co.kq)("",!0),(0,Co.wy)((0,Co._)("div",Nr,[(0,Co._)("div",Zr,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.timelinesItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.name,"show-pin":e.editMode||e.forceEditMode,item:t},null,8,["show-pin","item"])})),128))])],512),[[wo.F8,e.showTimelines]]),e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:1,"show-pin":!1,item:{icon:"list",label:"nav.lists"},"aria-expanded":e.showLists?"true":"false",onClick:e.toggleLists},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(c,{title:e.$t("lists.manage_lists"),class:"extra-button",to:{name:"lists"},onClick:t[1]||(t[1]=(0,wo.iM)((function(){}),["stop"]))},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"extra-button","fixed-width":"",icon:"wrench"})]})),_:1},8,["title"]),(0,Co.Wm)(a,{class:"timelines-chevron","fixed-width":"",icon:e.showLists?"chevron-up":"chevron-down"},null,8,["icon"])]})),_:1},8,["item","aria-expanded","onClick"])):(0,Co.kq)("",!0),(0,Co.wy)((0,Co._)("div",Wr,[(0,Co.Wm)(l,{"show-pin":e.editMode||e.forceEditMode,class:"timelines"},null,8,["show-pin"])],512),[[wo.F8,e.showLists]]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.rootItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.name,"show-pin":e.editMode||e.forceEditMode,item:t},null,8,["show-pin","item"])})),128)),!e.forceEditMode&&e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:2,"show-pin":!1,item:{label:e.editMode?e.$t("nav.edit_finish"):e.$t("nav.edit_pinned"),icon:e.editMode?"check":"wrench"},onClick:e.toggleEditMode},null,8,["item","onClick"])):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0)])])}]]);var ki={class:"instance-specific-panel"},Ci={class:"panel panel-default"},Si={class:"panel-body"},ji=["innerHTML"];const Fi={computed:{instanceSpecificPanelContent:function(){return this.$store.state.instance.instanceSpecificPanelContent}}},Ai=(0,Jo.Z)(Fi,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",ki,[(0,Co._)("div",Ci,[(0,Co._)("div",Si,[(0,Co._)("div",{innerHTML:e.instanceSpecificPanelContent},null,8,ji)])])])}]]);var Oi={class:"features-panel"},Ei={class:"panel panel-default base01-background"},zi={class:"panel-heading timeline-heading base02-background base04"},Pi={class:"title"},Ii={class:"panel-body features-panel"},xi={key:0},Ti={key:1},$i={key:2},Bi={key:3},Ui={key:4},Mi=n(65079);const Li={computed:{shout:function(){return this.$store.state.instance.shoutAvailable},pleromaChatMessages:function(){return this.$store.state.instance.pleromaChatMessagesAvailable},gopher:function(){return this.$store.state.instance.gopherAvailable},whoToFollow:function(){return this.$store.state.instance.suggestionsEnabled},mediaProxy:function(){return this.$store.state.instance.mediaProxyAvailable},minimalScopesMode:function(){return this.$store.state.instance.minimalScopesMode},textlimit:function(){return this.$store.state.instance.textlimit},uploadlimit:function(){return Mi.Z.fileSizeFormat(this.$store.state.instance.uploadlimit)}}},Ri=(0,Jo.Z)(Li,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",Oi,[(0,Co._)("div",Ei,[(0,Co._)("div",zi,[(0,Co._)("div",Pi,(0,So.zw)(e.$t("features_panel.title")),1)]),(0,Co._)("div",Ii,[(0,Co._)("ul",null,[e.shout?((0,Co.wg)(),(0,Co.iD)("li",xi,(0,So.zw)(e.$t("features_panel.shout")),1)):(0,Co.kq)("",!0),e.pleromaChatMessages?((0,Co.wg)(),(0,Co.iD)("li",Ti,(0,So.zw)(e.$t("features_panel.pleroma_chat_messages")),1)):(0,Co.kq)("",!0),e.gopher?((0,Co.wg)(),(0,Co.iD)("li",$i,(0,So.zw)(e.$t("features_panel.gopher")),1)):(0,Co.kq)("",!0),e.whoToFollow?((0,Co.wg)(),(0,Co.iD)("li",Bi,(0,So.zw)(e.$t("features_panel.who_to_follow")),1)):(0,Co.kq)("",!0),e.mediaProxy?((0,Co.wg)(),(0,Co.iD)("li",Ui,(0,So.zw)(e.$t("features_panel.media_proxy")),1)):(0,Co.kq)("",!0),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.scope_options")),1),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.text_limit"))+" = "+(0,So.zw)(e.textlimit),1),(0,Co._)("li",null,(0,So.zw)(e.$t("features_panel.upload_limit"))+" = "+(0,So.zw)(e.uploadlimit.num)+" "+(0,So.zw)(e.$t("upload.file_size_units."+e.uploadlimit.unit)),1)])])])])}]]);var qi={class:"who-to-follow-panel"},Ni={class:"panel panel-default base01-background"},Zi={class:"panel-heading timeline-heading base02-background base04"},Wi={class:"title"},Hi={class:"who-to-follow"},Vi=["src"],Ki=(0,Co._)("br",null,null,-1),Gi={class:"who-to-follow-more"},Yi=n(69983),Ji=n.n(Yi),Qi=n(4493);function Xi(e){var t=e.$store.state.users.currentUser.credentials;t&&(e.usersToFollow.forEach((function(e){e.name="Loading..."})),h.ZP.suggestions({credentials:t}).then((function(t){!function(e,t){var n=this,o=Ji()(t);e.usersToFollow.forEach((function(t,r){var i=o[r],s=i.avatar||n.$store.state.instance.defaultAvatar,a=i.acct;t.img=s,t.name=a,e.$store.state.api.backendInteractor.fetchUser({id:a}).then((function(n){n.error||(e.$store.commit("addNewUsers",[n]),t.id=n.id)}))}))}(e,t)})))}const es={data:function(){return{usersToFollow:[]}},computed:{user:function(){return this.$store.state.users.currentUser.screen_name},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled}},methods:{userProfileLink:function(e,t){return(0,Qi.Z)(e,t,this.$store.state.instance.restrictedNicknames)}},watch:{user:function(e,t){this.suggestionsEnabled&&Xi(this)}},mounted:function(){var e=this;this.usersToFollow=new Array(3).fill().map((function(t){return{img:e.$store.state.instance.defaultAvatar,name:"",id:0}})),this.suggestionsEnabled&&Xi(this)}},ts=(0,Jo.Z)(es,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",qi,[(0,Co._)("div",Ni,[(0,Co._)("div",Zi,[(0,Co._)("div",Wi,(0,So.zw)(e.$t("who_to_follow.who_to_follow")),1)]),(0,Co._)("div",Hi,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.usersToFollow,(function(t){return(0,Co.wg)(),(0,Co.iD)("p",{key:t.id,class:"who-to-follow-items"},[(0,Co._)("img",{src:t.img},null,8,Vi),(0,Co.Wm)(s,{to:e.userProfileLink(t.id,t.name)},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(t.name),1)]})),_:2},1032,["to"]),Ki])})),128)),(0,Co._)("p",Gi,[(0,Co.Wm)(s,{to:{name:"who-to-follow"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("who_to_follow.more")),1)]})),_:1})])])])])}]]);var ns={key:0,class:"shout-panel"},os={class:"panel panel-default"},rs={class:"title"},is={class:"shout-window"},ss={class:"shout-avatar"},as=["src"],us={class:"shout-content"},cs=(0,Co._)("br",null,null,-1),ls={class:"shout-text"},ds={class:"shout-input"},ps={key:1,class:"shout-panel"},ms={class:"panel panel-default"},hs={class:"title"};Ht.vI.add(Vt.Acd,Vt.NBC);const fs={props:["floating"],data:function(){return{currentMessage:"",channel:null,collapsed:!0}},computed:{messages:function(){return this.$store.state.shout.messages}},methods:{submit:function(e){this.$store.state.shout.channel.push("new_msg",{text:e},1e4),this.currentMessage=""},togglePanel:function(){this.collapsed=!this.collapsed},userProfileLink:function(e){return(0,Qi.Z)(e.id,e.username,this.$store.state.instance.restrictedNicknames)}},watch:{messages:function(e){var t=this.$el.querySelector(".chat-window");t&&t.scrollTop+t.offsetHeight+20>t.scrollHeight&&this.$nextTick((function(){t&&(t.scrollTop=t.scrollHeight-t.offsetHeight)}))}}},gs=(0,Jo.Z)(fs,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("router-link");return e.collapsed&&e.floating?((0,Co.wg)(),(0,Co.iD)("div",ps,[(0,Co._)("div",ms,[(0,Co._)("div",{class:"panel-heading -stub timeline-heading shout-heading",onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.togglePanel&&e.togglePanel.apply(e,arguments)}),["stop","prevent"]))},[(0,Co._)("div",hs,[(0,Co.Wm)(s,{class:"icon",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("shoutbox.title")),1)])])])])):((0,Co.wg)(),(0,Co.iD)("div",ns,[(0,Co._)("div",os,[(0,Co._)("div",{class:(0,So.C_)(["panel-heading timeline-heading",{"shout-heading":e.floating}]),onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.togglePanel&&e.togglePanel.apply(e,arguments)}),["stop","prevent"]))},[(0,Co._)("div",rs,[(0,Co.Uk)((0,So.zw)(e.$t("shoutbox.title"))+" ",1),e.floating?((0,Co.wg)(),(0,Co.j4)(s,{key:0,icon:"times",class:"close-icon"})):(0,Co.kq)("",!0)])],2),(0,Co._)("div",is,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.messages,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"shout-message"},[(0,Co._)("span",ss,[(0,Co._)("img",{src:t.author.avatar},null,8,as)]),(0,Co._)("div",us,[(0,Co.Wm)(a,{class:"shout-name",to:e.userProfileLink(t.author)},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(t.author.username),1)]})),_:2},1032,["to"]),cs,(0,Co._)("span",ls,(0,So.zw)(t.text),1)])])})),128))]),(0,Co._)("div",ds,[(0,Co.wy)((0,Co._)("textarea",{"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.currentMessage=t}),class:"shout-input-textarea",rows:"1",onKeyup:t[2]||(t[2]=(0,wo.D2)((function(t){return e.submit(e.currentMessage)}),["enter"]))},null,544),[[wo.nr,e.currentMessage]])])])]))}]]);var vs=["src","alt","title"],ws=["src","alt","title"],bs=["title"],ys=["title"],Ds=["title"],_s={key:6,class:"description"},ks={class:"counter"},Cs={key:7,class:"loading-spinner"},Ss=n(32140),js=n(34133),Fs=n(782);const As={methods:{setTransform:function(e){var t=e.scale,n=e.x,o=e.y;this.$el.setTransform({scale:t,x:n,y:o})}},created:function(){Fs.Z}},Os=(0,Jo.Z)(As,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("pinch-zoom",(0,Co.dG)({class:"pinch-zoom-parent"},e.$attrs,(0,Co.mx)(e.$listeners,!0)),[(0,Co.WI)(e.$slots,"default")],16)}]]);var Es=n(15671),zs=n(43144),Ps=function(e,t){return[t[0]-e[0],t[1]-e[1]]},Is=function(e){return[(t=e.touches[0]).screenX,t.screenY];var t},xs=function(e){return[e.clientX,e.clientY]},Ts=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},$s=function(e){return[e[1],-e[0]]},Bs=function(e,t){return e[0]*t[0]+e[1]*t[1]},Us=function(e,t){var n=Bs(e,t)/Bs(t,t);return[n*t[0],n*t[1]]};const Ms={DIRECTION_LEFT:[-1,0],DIRECTION_RIGHT:[1,0],DIRECTION_UP:[0,-1],DIRECTION_DOWN:[0,1],swipeGesture:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;return{direction:e,onSwipe:t,threshold:n,perpendicularTolerance:o,_startPos:[0,0],_swiping:!1}},beginSwipe:function(e,t){t._startPos=Is(e),t._swiping=!0},updateSwipe:function(e,t){if(t._swiping){var n=Ps(t._startPos,Is(e));if(!(Ts(n)<t.threshold||Bs(n,t.direction)<0)){var o=Us(n,t.direction),r=$s(t.direction),i=Us(n,r);Ts(o)*t.perpendicularTolerance<Ts(i)||(t.onSwipe(),t._swiping=!1)}}},SwipeAndClickGesture:function(){function e(t){var n=t.direction,o=t.swipePreviewCallback,r=t.swipeEndCallback,i=t.swipeCancelCallback,s=t.swipelessClickCallback,a=t.threshold,u=void 0===a?30:a,c=t.perpendicularTolerance,l=void 0===c?1:c,d=t.disableClickThreshold,p=void 0===d?1:d;(0,Es.Z)(this,e);var m=function(){};this.direction=n,this.swipePreviewCallback=o||m,this.swipeEndCallback=r||m,this.swipeCancelCallback=i||m,this.swipelessClickCallback=s||m,this.threshold="function"==typeof u?u:function(){return u},this.disableClickThreshold="function"==typeof p?p:function(){return p},this.perpendicularTolerance=l,this._reset()}return(0,zs.Z)(e,[{key:"_reset",value:function(){this._startPos=[0,0],this._pointerId=-1,this._swiping=!1,this._swiped=!1,this._preventNextClick=!1}},{key:"start",value:function(e){0===e.button&&(this._startPos=xs(e),this._pointerId=e.pointerId,this._swiping=!0,this._swiped=!1)}},{key:"move",value:function(e){if(this._swiping&&this._pointerId===e.pointerId){this._swiped=!0;var t=xs(e),n=Ps(this._startPos,t);this.swipePreviewCallback(n)}}},{key:"cancel",value:function(e){this._swiping&&this._pointerId===e.pointerId&&this.swipeCancelCallback()}},{key:"end",value:function(e){var t=this;if(this._swiping&&this._pointerId===e.pointerId){this._swiping=!1;var n=xs(e),o=Ps(this._startPos,n),r=function(){if(Ts(o)<t.threshold())return 0;var e=Bs(o,t.direction)>0,n=Us(o,t.direction),r=$s(t.direction),i=Us(o,r);return Ts(n)*t.perpendicularTolerance<Ts(i)?0:e?1:-1}();this._swiped&&this.swipeEndCallback(r),this._reset(),Ts(o)>=this.disableClickThreshold()&&"mouse"===e.pointerType&&(this._preventNextClick=!0)}}},{key:"click",value:function(e){this._preventNextClick||this.swipelessClickCallback(),this._reset()}}]),e}()},Ls={props:{direction:{type:Array},threshold:{type:Function,default:function(){return 30}},disableClickThreshold:{type:Function,default:function(){return 1}},perpendicularTolerance:{type:Number,default:1}},methods:{handlePointerDown:function(e){this.$gesture.start(e)},handlePointerMove:function(e){this.$gesture.move(e)},handlePointerUp:function(e){this.$gesture.end(e)},handlePointerCancel:function(e){this.$gesture.cancel(e)},handleNativeClick:function(e){this.$gesture.click(e)},preview:function(e){this.$emit("preview-requested",e)},end:function(e){this.$emit("swipe-finished",e)},click:function(){this.$emit("swipeless-clicked")},cancel:function(){this.$emit("swipe-canceled")}},created:function(){this.$gesture=new Ms.SwipeAndClickGesture({direction:this.direction,threshold:this.threshold,disableClickThreshold:this.disableClickThreshold,perpendicularTolerance:this.perpendicularTolerance,swipePreviewCallback:this.preview,swipeEndCallback:this.end,swipeCancelCallback:this.cancel,swipelessClickCallback:this.click})}},Rs=(0,Jo.Z)(Ls,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",(0,Co.dG)(e.$attrs,{onPointerdown:t[0]||(t[0]=function(){return e.handlePointerDown&&e.handlePointerDown.apply(e,arguments)}),onPointermove:t[1]||(t[1]=function(){return e.handlePointerMove&&e.handlePointerMove.apply(e,arguments)}),onPointerup:t[2]||(t[2]=function(){return e.handlePointerUp&&e.handlePointerUp.apply(e,arguments)}),onPointercancel:t[3]||(t[3]=function(){return e.handlePointerCancel&&e.handlePointerCancel.apply(e,arguments)}),onClick:t[4]||(t[4]=function(){return e.handleNativeClick&&e.handleNativeClick.apply(e,arguments)})}),[(0,Co.WI)(e.$slots,"default")],16)}]]);var qs=n(72884);Ht.vI.add(Vt.A35,Vt._tD,Vt.IJ7,Vt.NBC);const Ns={components:{StillImage:Ss.Z,VideoAttachment:js.Z,PinchZoom:Os,SwipeClick:Rs,Modal:Wt.Z,Flash:qs.Z},data:function(){return{loading:!1,swipeDirection:Ms.DIRECTION_LEFT,swipeThreshold:function(){return window.innerWidth*(1/4)},pinchZoomMinScale:1,pinchZoomScaleResetLimit:1.2}},computed:{showing:function(){return this.$store.state.mediaViewer.activated},media:function(){return this.$store.state.mediaViewer.media},description:function(){return this.currentMedia.description},currentIndex:function(){return this.$store.state.mediaViewer.currentIndex},currentMedia:function(){return this.media[this.currentIndex]},canNavigate:function(){return this.media.length>1},type:function(){return this.currentMedia?this.getType(this.currentMedia):null},swipeDisableClickThreshold:function(){var e=this;return function(){return e.canNavigate?1:30}}},methods:{getType:function(e){return Fn.ZP.fileType(e.mimetype)},hide:function(){var e=this;setTimeout((function(){e.$store.dispatch("closeMediaViewer")}),100)},hideIfNotSwiped:function(e){var t=this.$refs.swipeClick;t?t.$gesture.click(e):this.hide()},goPrev:function(){if(this.canNavigate){var e=0===this.currentIndex?this.media.length-1:this.currentIndex-1,t=this.media[e];"image"===this.getType(t)&&(this.loading=!0),this.$store.dispatch("setCurrentMedia",t)}},goNext:function(){if(this.canNavigate){var e=this.currentIndex===this.media.length-1?0:this.currentIndex+1,t=this.media[e];"image"===this.getType(t)&&(this.loading=!0),this.$store.dispatch("setCurrentMedia",t)}},onImageLoaded:function(){this.loading=!1},handleSwipePreview:function(e){this.$refs.pinchZoom.setTransform({scale:1,x:e[0],y:0})},handleSwipeEnd:function(e){this.$refs.pinchZoom.setTransform({scale:1,x:0,y:0}),e>0?this.goNext():e<0&&this.goPrev()},handleKeyupEvent:function(e){this.showing&&27===e.keyCode&&this.hide()},handleKeydownEvent:function(e){this.showing&&(39===e.keyCode?this.goNext():37===e.keyCode&&this.goPrev())}},mounted:function(){window.addEventListener("popstate",this.hide),document.addEventListener("keyup",this.handleKeyupEvent),document.addEventListener("keydown",this.handleKeydownEvent)},unmounted:function(){window.removeEventListener("popstate",this.hide),document.removeEventListener("keyup",this.handleKeyupEvent),document.removeEventListener("keydown",this.handleKeydownEvent)}},Zs=(0,Jo.Z)(Ns,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PinchZoom"),a=(0,Co.up)("SwipeClick"),u=(0,Co.up)("VideoAttachment"),c=(0,Co.up)("Flash"),l=(0,Co.up)("FAIcon"),d=(0,Co.up)("Modal");return e.showing?((0,Co.wg)(),(0,Co.j4)(d,{key:0,class:"media-modal-view",onBackdropClicked:e.hideIfNotSwiped},{default:(0,Co.w5)((function(){return["image"===e.type?((0,Co.wg)(),(0,Co.j4)(a,{key:0,ref:"swipeClick",class:"modal-image-container",direction:e.swipeDirection,threshold:e.swipeThreshold,"disable-click-threshold":e.swipeDisableClickThreshold,onPreviewRequested:e.handleSwipePreview,onSwipeFinished:e.handleSwipeEnd,onSwipelessClicked:e.hide},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{ref:"pinchZoom",class:"modal-image-container-inner",selector:".modal-image","reach-min-scale-strategy":"reset","stop-propagate-handled":"stop-propgate-handled","allow-pan-min-scale":e.pinchZoomMinScale,"min-scale":e.pinchZoomMinScale,"reset-to-min-scale-limit":e.pinchZoomScaleResetLimit},{default:(0,Co.w5)((function(){return[(0,Co._)("img",{class:(0,So.C_)([{loading:e.loading},"modal-image"]),src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description,onLoad:t[0]||(t[0]=function(){return e.onImageLoaded&&e.onImageLoaded.apply(e,arguments)})},null,42,vs)]})),_:1},8,["allow-pan-min-scale","min-scale","reset-to-min-scale-limit"])]})),_:1},8,["direction","threshold","disable-click-threshold","onPreviewRequested","onSwipeFinished","onSwipelessClicked"])):(0,Co.kq)("",!0),"video"===e.type?((0,Co.wg)(),(0,Co.j4)(u,{key:1,class:"modal-image",attachment:e.currentMedia,controls:!0},null,8,["attachment"])):(0,Co.kq)("",!0),"audio"===e.type?((0,Co.wg)(),(0,Co.iD)("audio",{key:2,class:"modal-image",src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description,controls:""},null,8,ws)):(0,Co.kq)("",!0),"flash"===e.type?((0,Co.wg)(),(0,Co.j4)(c,{key:3,class:"modal-image",src:e.currentMedia.url,alt:e.currentMedia.description,title:e.currentMedia.description},null,8,["src","alt","title"])):(0,Co.kq)("",!0),e.canNavigate?((0,Co.wg)(),(0,Co.iD)("button",{key:4,title:e.$t("media_modal.previous"),class:"modal-view-button modal-view-button-arrow modal-view-button-arrow--prev",onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.goPrev&&e.goPrev.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon arrow-icon",icon:"chevron-left"})],8,bs)):(0,Co.kq)("",!0),e.canNavigate?((0,Co.wg)(),(0,Co.iD)("button",{key:5,title:e.$t("media_modal.next"),class:"modal-view-button modal-view-button-arrow modal-view-button-arrow--next",onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.goNext&&e.goNext.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon arrow-icon",icon:"chevron-right"})],8,ys)):(0,Co.kq)("",!0),(0,Co._)("button",{class:"modal-view-button modal-view-button-hide",title:e.$t("media_modal.hide"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.hide&&e.hide.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(l,{class:"button-icon",icon:"times"})],8,Ds),e.description?((0,Co.wg)(),(0,Co.iD)("span",_s,(0,So.zw)(e.description),1)):(0,Co.kq)("",!0),(0,Co._)("span",ks,(0,So.zw)(e.$tc("media_modal.counter",e.currentIndex+1,{current:e.currentIndex+1,total:e.media.length})),1),e.loading?((0,Co.wg)(),(0,Co.iD)("span",Cs,[(0,Co.Wm)(l,{spin:"",icon:"circle-notch",size:"5x"})])):(0,Co.kq)("",!0)]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var Ws={key:1,class:"side-drawer-logo-wrapper"},Hs=["src"],Vs={key:0},Ks={key:0,class:"badge badge-notification"},Gs={key:0},Ys={key:0,class:"badge badge-notification"},Js={key:0,class:"badge badge-notification"};function Qs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Xs(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qs(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qs(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.$Wj,Vt.jLD,Vt.J9Y,Vt.lXL,Vt.qmU,Vt.FKd,Vt.Acd,Vt.wn1,Vt.HLz,Vt.b7W,Vt.sqG,Vt.GTN,Vt.Zrf);const ea={props:["logout"],data:function(){return{closed:!0,closeGesture:void 0}},created:function(){this.closeGesture=Ms.swipeGesture(Ms.DIRECTION_LEFT,this.toggleDrawer),this.currentUser&&this.currentUser.locked&&this.$store.dispatch("startFetchingFollowRequests")},components:{UserCard:xr.Z},computed:Xs(Xs({currentUser:function(){return this.$store.state.users.currentUser},shout:function(){return this.$store.state.shout.joined},unseenNotifications:function(){return(0,K.Km)(this.$store)},unseenNotificationsCount:function(){return this.unseenNotifications.length},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled},logo:function(){return this.$store.state.instance.logo},hideSitename:function(){return this.$store.state.instance.hideSitename},sitename:function(){return this.$store.state.instance.name},followRequestCount:function(){return this.$store.state.api.followRequests.length},privateMode:function(){return this.$store.state.instance.private},federating:function(){return this.$store.state.instance.federating},timelinesRoute:function(){var e;return this.$store.state.interface.lastTimeline&&(e=this.$store.state.interface.lastTimeline),e=this.currentUser?"friends":"public-timeline",Yr.has(e)?{name:e,params:{username:this.currentUser.screen_name}}:{name:e}}},(0,s.rn)({pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable},supportsAnnouncements:function(e){return e.announcements.supportsAnnouncements}})),(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"])),methods:{toggleDrawer:function(){this.closed=!this.closed},doLogout:function(){this.logout(),this.toggleDrawer()},touchStart:function(e){Ms.beginSwipe(e,this.closeGesture)},touchMove:function(e){Ms.updateSwipe(e,this.closeGesture)},openSettingsModal:function(){this.$store.dispatch("openSettingsModal","user")},openAdminModal:function(){this.$store.dispatch("openSettingsModal","admin")}}},ta=(0,Jo.Z)(ea,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["side-drawer-container",{"side-drawer-container-closed":e.closed,"side-drawer-container-open":!e.closed}])},[(0,Co._)("div",{class:(0,So.C_)(["side-drawer-darken",{"side-drawer-darken-closed":e.closed}])},null,2),(0,Co._)("div",{class:(0,So.C_)(["side-drawer",{"side-drawer-closed":e.closed}]),onTouchstart:t[19]||(t[19]=function(){return e.touchStart&&e.touchStart.apply(e,arguments)}),onTouchmove:t[20]||(t[20]=function(){return e.touchMove&&e.touchMove.apply(e,arguments)})},[(0,Co._)("div",{class:"side-drawer-heading",onClick:t[0]||(t[0]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[e.currentUser?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"user-id":e.currentUser.id,"hide-bio":!0},null,8,["user-id"])):((0,Co.wg)(),(0,Co.iD)("div",Ws,[(0,Co._)("img",{src:e.logo},null,8,Hs),e.hideSitename?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("span",Vs,(0,So.zw)(e.sitename),1))]))]),(0,Co._)("ul",null,[e.currentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[1]||(t[1]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"login"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-in-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("login.login")),1)]})),_:1})])),e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[2]||(t[2]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:e.timelinesRoute},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"home"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.timelines")),1)]})),_:1},8,["to"])])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:2,onClick:t[3]||(t[3]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"lists"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"list"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.lists")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser&&e.pleromaChatMessagesAvailable?((0,Co.wg)(),(0,Co.iD)("li",{key:3,onClick:t[4]||(t[4]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"chats",params:{username:e.currentUser.screen_name}},style:{position:"relative"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"comments"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.chats"))+" ",1),e.unreadChatCount?((0,Co.wg)(),(0,Co.iD)("span",Ks,(0,So.zw)(e.unreadChatCount),1)):(0,Co.kq)("",!0)]})),_:1},8,["to"])])):(0,Co.kq)("",!0)]),e.currentUser?((0,Co.wg)(),(0,Co.iD)("ul",Gs,[(0,Co._)("li",{onClick:t[5]||(t[5]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"interactions",params:{username:e.currentUser.screen_name}}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bell"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.interactions")),1)]})),_:1},8,["to"])]),e.currentUser.locked?((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[6]||(t[6]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:"/friend-requests"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"user-plus"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.friend_requests"))+" ",1),e.followRequestCount>0?((0,Co.wg)(),(0,Co.iD)("span",Ys,(0,So.zw)(e.followRequestCount),1)):(0,Co.kq)("",!0)]})),_:1})])):(0,Co.kq)("",!0),e.shout?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[7]||(t[7]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"shout-panel"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("shoutbox.title")),1)]})),_:1})])):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0),(0,Co._)("ul",null,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.iD)("li",{key:0,onClick:t[8]||(t[8]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"search"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"search"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.search")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser&&e.suggestionsEnabled?((0,Co.wg)(),(0,Co.iD)("li",{key:1,onClick:t[9]||(t[9]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"who-to-follow"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"user-plus"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.who_to_follow")),1)]})),_:1})])):(0,Co.kq)("",!0),(0,Co._)("li",{onClick:t[11]||(t[11]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[10]||(t[10]=function(){return e.openSettingsModal&&e.openSettingsModal.apply(e,arguments)})},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"cog"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.settings")),1)])]),(0,Co._)("li",{onClick:t[12]||(t[12]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"about"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"info-circle"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.about")),1)]})),_:1})]),e.currentUser&&"admin"===e.currentUser.role?((0,Co.wg)(),(0,Co.iD)("li",{key:2,onClick:t[14]||(t[14]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[13]||(t[13]=(0,wo.iM)((function(){return e.openAdminModal&&e.openAdminModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"tachometer-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.administration")),1)])])):(0,Co.kq)("",!0),e.currentUser&&e.supportsAnnouncements?((0,Co.wg)(),(0,Co.iD)("li",{key:3,onClick:t[15]||(t[15]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"announcements"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"bullhorn"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.announcements"))+" ",1),e.unreadAnnouncementCount?((0,Co.wg)(),(0,Co.iD)("span",Js,(0,So.zw)(e.unreadAnnouncementCount),1)):(0,Co.kq)("",!0)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:4,onClick:t[16]||(t[16]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co.Wm)(u,{to:{name:"edit-navigation"}},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"compass"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("nav.edit_nav_mobile")),1)]})),_:1})])):(0,Co.kq)("",!0),e.currentUser?((0,Co.wg)(),(0,Co.iD)("li",{key:5,onClick:t[18]||(t[18]=function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)})},[(0,Co._)("button",{class:"button-unstyled -link -fullwidth",onClick:t[17]||(t[17]=function(){return e.doLogout&&e.doLogout.apply(e,arguments)})},[(0,Co.Wm)(a,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-out-alt"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("login.logout")),1)])])):(0,Co.kq)("",!0)])],34),(0,Co._)("div",{class:(0,So.C_)(["side-drawer-click-outside",{"side-drawer-click-outside-closed":e.closed}]),onClick:t[21]||(t[21]=(0,wo.iM)((function(){return e.toggleDrawer&&e.toggleDrawer.apply(e,arguments)}),["stop","prevent"]))},null,2)],2)}]]);var na=["title"],oa=n(23279),ra=n.n(oa);Ht.vI.add(Vt.IwR);var ia=new Set(["chats","chat","lists-edit"]);const sa={data:function(){return{hidden:!1,scrollingDown:!1,inputActive:!1,oldScrollPos:0,amountScrolled:0}},created:function(){this.autohideFloatingPostButton&&this.activateFloatingPostButtonAutohide(),window.addEventListener("resize",this.handleOSK)},unmounted:function(){this.autohideFloatingPostButton&&this.deactivateFloatingPostButtonAutohide(),window.removeEventListener("resize",this.handleOSK)},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},isHidden:function(){return!!ia.has(this.$route.name)||this.autohideFloatingPostButton&&(this.hidden||this.inputActive)},isPersistent:function(){return!!this.$store.getters.mergedConfig.alwaysShowNewPostButton},autohideFloatingPostButton:function(){return!!this.$store.getters.mergedConfig.autohideFloatingPostButton}},watch:{autohideFloatingPostButton:function(e){e?this.activateFloatingPostButtonAutohide():this.deactivateFloatingPostButtonAutohide()}},methods:{activateFloatingPostButtonAutohide:function(){window.addEventListener("scroll",this.handleScrollStart),window.addEventListener("scroll",this.handleScrollEnd)},deactivateFloatingPostButtonAutohide:function(){window.removeEventListener("scroll",this.handleScrollStart),window.removeEventListener("scroll",this.handleScrollEnd)},openPostForm:function(){this.$store.dispatch("openPostStatusModal")},handleOSK:function(){var e=window.innerWidth<350,t=e&&window.innerHeight<345,n=!e&&window.innerWidth<450&&window.innerHeight<560;this.inputActive=!(!t&&!n)},handleScrollStart:ra()((function(){window.scrollY>this.oldScrollPos?this.hidden=!0:this.hidden=!1,this.oldScrollPos=window.scrollY}),100,{leading:!0,trailing:!1}),handleScrollEnd:ra()((function(){this.hidden=!1,this.oldScrollPos=window.scrollY}),100,{leading:!1,trailing:!0})}},aa=(0,Jo.Z)(sa,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return e.isLoggedIn?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:(0,So.C_)(["MobilePostButton button-default new-status-button",{hidden:e.isHidden,"always-show":e.isPersistent}]),title:e.$t("post_status.new_status"),onClick:t[0]||(t[0]=function(){return e.openPostForm&&e.openPostForm.apply(e,arguments)})},[(0,Co.Wm)(s,{icon:"pen"})],10,na)):(0,Co.kq)("",!0)}]]);var ua={class:"MobileNav"},ca={class:"item"},la=["title","aria-expanaded"],da={key:0,class:"alert-dot"},pa={class:"item right"},ma=["title"],ha={key:0,class:"alert-dot"},fa={class:"mobile-notifications-header"},ga={class:"title"},va=(0,Co._)("span",{class:"spacer"},null,-1),wa=["title"],ba=["title"],ya=n(93737),Da=n(1447);function _a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ka(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_a(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC,Vt.qmU,Vt.xiG,Vt.FPD,Vt.Kl4);const Ca={components:{SideDrawer:ta,Notifications:ya.default,NavigationPins:vi,ConfirmModal:Da.Z},data:function(){return{notificationsCloseGesture:void 0,notificationsOpen:!1,notificationsAtTop:!0,showingConfirmLogout:!1}},created:function(){var e=this;this.notificationsCloseGesture=Ms.swipeGesture(Ms.DIRECTION_RIGHT,(function(){return e.closeMobileNotifications(!0)}),50)},computed:ka(ka({currentUser:function(){return this.$store.state.users.currentUser},unseenNotifications:function(){return(0,K.Km)(this.$store)},unseenNotificationsCount:function(){return this.unseenNotifications.length},hideSitename:function(){return this.$store.state.instance.hideSitename},sitename:function(){return this.$store.state.instance.name},isChat:function(){return"chat"===this.$route.name}},(0,s.Se)(["unreadChatCount","unreadAnnouncementCount"])),{},{chatsPinned:function(){return new Set(this.$store.state.serverSideStorage.prefsStorage.collections.pinnedNavItems).has("chats")},shouldConfirmLogout:function(){return this.$store.getters.mergedConfig.modalOnLogout}},(0,s.Se)(["unreadChatCount"])),methods:{toggleMobileSidebar:function(){this.$refs.sideDrawer.toggleDrawer()},openMobileNotifications:function(){this.notificationsOpen=!0},closeMobileNotifications:function(e){this.notificationsOpen&&(this.notificationsOpen=!1,e&&this.markNotificationsAsSeen())},notificationsTouchStart:function(e){Ms.beginSwipe(e,this.notificationsCloseGesture)},notificationsTouchMove:function(e){Ms.updateSwipe(e,this.notificationsCloseGesture)},scrollToTop:function(){window.scrollTo(0,0)},scrollMobileNotificationsToTop:function(){this.$refs.mobileNotifications.scrollTo(0,0)},showConfirmLogout:function(){this.showingConfirmLogout=!0},hideConfirmLogout:function(){this.showingConfirmLogout=!1},logout:function(){this.shouldConfirmLogout?this.showConfirmLogout():this.doLogout()},doLogout:function(){this.$router.replace("/main/public"),this.$store.dispatch("logout"),this.hideConfirmLogout()},markNotificationsAsSeen:function(){this.$store.dispatch("markNotificationsAsSeen")},onScroll:function(e){var t=e.target,n=t.scrollTop,o=t.clientHeight,r=t.scrollHeight;this.notificationsAtTop=n>0,n+o>=r&&this.$refs.notifications.fetchOlderNotifications()}},watch:{$route:function(){this.closeMobileNotifications()}}},Sa=(0,Jo.Z)(Ca,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("NavigationPins"),u=(0,Co.up)("FALayers"),c=(0,Co.up)("SideDrawer"),l=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("div",ua,[(0,Co._)("nav",{id:"nav",class:"mobile-nav",onClick:t[2]||(t[2]=function(t){return e.scrollToTop()})},[(0,Co._)("div",ca,[(0,Co._)("button",{class:"button-unstyled mobile-nav-button",title:e.$t("nav.mobile_sidebar"),"aria-expanaded":e.$refs.sideDrawer&&!e.$refs.sideDrawer.closed,onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.toggleMobileSidebar()}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"bars"}),e.unreadChatCount&&!e.chatsPinned||e.unreadAnnouncementCount?((0,Co.wg)(),(0,Co.iD)("div",da)):(0,Co.kq)("",!0)],8,la),(0,Co.Wm)(a,{class:"pins"})]),(0,Co.Uk)(),(0,Co._)("div",pa,[e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled mobile-nav-button",title:e.unseenNotificationsCount?e.$t("nav.mobile_notifications_unread_active"):e.$t("nav.mobile_notifications"),onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.openMobileNotifications()}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"bell"}),e.unseenNotificationsCount?((0,Co.wg)(),(0,Co.iD)("div",ha)):(0,Co.kq)("",!0)],8,ma)):(0,Co.kq)("",!0)])]),e.currentUser?((0,Co.wg)(),(0,Co.iD)("aside",{key:0,class:(0,So.C_)(["mobile-notifications-drawer",{"-closed":!e.notificationsOpen}]),onTouchstart:t[6]||(t[6]=(0,wo.iM)((function(){return e.notificationsTouchStart&&e.notificationsTouchStart.apply(e,arguments)}),["stop"])),onTouchmove:t[7]||(t[7]=(0,wo.iM)((function(){return e.notificationsTouchMove&&e.notificationsTouchMove.apply(e,arguments)}),["stop"]))},[(0,Co._)("div",fa,[(0,Co._)("span",ga,(0,So.zw)(e.$t("notifications.notifications")),1),va,e.notificationsAtTop?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled mobile-nav-button",title:e.$t("general.scroll_to_top"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.scrollMobileNotificationsToTop&&e.scrollMobileNotificationsToTop.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"arrow-up"}),(0,Co.Wm)(s,{icon:"minus",transform:"up-7"})]})),_:1})],8,wa)):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-unstyled mobile-nav-button",title:e.$t("nav.mobile_notifications_close"),onClick:t[4]||(t[4]=(0,wo.iM)((function(t){return e.closeMobileNotifications(!0)}),["stop","prevent"]))},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})],8,ba)]),(0,Co._)("div",{id:"mobile-notifications",ref:"mobileNotifications",class:"mobile-notifications",onScroll:t[5]||(t[5]=function(){return e.onScroll&&e.onScroll.apply(e,arguments)})},null,544)],34)):(0,Co.kq)("",!0),(0,Co.Wm)(c,{ref:"sideDrawer",logout:e.logout},null,8,["logout"]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmLogout?((0,Co.wg)(),(0,Co.j4)(l,{key:0,title:e.$t("login.logout_confirm_title"),"confirm-text":e.$t("login.logout_confirm_accept_button"),"cancel-text":e.$t("login.logout_confirm_cancel_button"),onAccepted:e.doLogout,onCancelled:e.hideConfirmLogout},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.logout_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))])}]]);var ja={class:"inner-nav"},Fa={class:"item sitename"},Aa=["src"],Oa={class:"item right actions"},Ea=["title"],za=["title"],Pa=(0,Co._)("span",{class:"spacer"},null,-1),Ia=["title"],xa=["title","aria-expanded"],Ta=["placeholder"],$a=["title"],Ba=["title","aria-expanded"],Ua=(0,Co._)("span",{class:"spacer"},null,-1),Ma=(0,Co._)("span",{class:"spacer"},null,-1);Ht.vI.add(Vt.NBC,Vt.wn1);const La={data:function(){return{searchTerm:void 0,hidden:!0,error:!1}},watch:{$route:function(e){"search"===e.name&&(this.searchTerm=e.query.query)}},methods:{find:function(e){this.$router.push({name:"search",query:{query:e}}),this.$refs.searchInput.focus()},toggleHidden:function(){var e=this;this.hidden=!this.hidden,this.$emit("toggled",this.hidden),this.$nextTick((function(){e.hidden||e.$refs.searchInput.focus()}))}}},Ra=(0,Jo.Z)(La,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["SearchBar",{"-expanded":!e.hidden}])},[e.hidden?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled nav-icon",title:e.$t("nav.search"),type:"button","aria-expanded":!e.hidden,onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[(0,Co.Wm)(s,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"search"})],8,xa)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:1},[(0,Co.wy)((0,Co._)("input",{id:"search-bar-input",ref:"searchInput","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),class:"search-bar-input",placeholder:e.$t("nav.search"),type:"text",onKeyup:t[2]||(t[2]=(0,wo.D2)((function(t){return e.find(e.searchTerm)}),["enter"]))},null,40,Ta),[[wo.nr,e.searchTerm]]),(0,Co._)("button",{class:"button-default search-button",type:"submit",title:e.$t("nav.search"),onClick:t[3]||(t[3]=function(t){return e.find(e.searchTerm)})},[(0,Co.Wm)(s,{"fixed-width":"",icon:"search"})],8,$a),(0,Co._)("button",{class:"button-unstyled cancel-search",type:"button",title:e.$t("nav.search_close"),"aria-expanded":!e.hidden,onClick:t[4]||(t[4]=(0,wo.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[(0,Co.Wm)(s,{"fixed-width":"",icon:"times",class:"cancel-icon fa-scale-110 fa-old-padding"})],8,Ba),Ua,Ma],64))],2)}]]);Ht.vI.add(Vt.$Wj,Vt.jLD,Vt.J9Y,Vt.lXL,Vt.qmU,Vt.FKd,Vt.Acd,Vt.wn1,Vt.HLz,Vt.b7W,Vt.sqG);const qa={components:{SearchBar:Ra,ConfirmModal:Da.Z},data:function(){return{searchBarHidden:!0,supportsMask:window.CSS&&window.CSS.supports&&(window.CSS.supports("mask-size","contain")||window.CSS.supports("-webkit-mask-size","contain")||window.CSS.supports("-moz-mask-size","contain")||window.CSS.supports("-ms-mask-size","contain")||window.CSS.supports("-o-mask-size","contain")),showingConfirmLogout:!1}},computed:{enableMask:function(){return this.supportsMask&&this.$store.state.instance.logoMask},logoStyle:function(){return{visibility:this.enableMask?"hidden":"visible"}},logoMaskStyle:function(){return this.enableMask?{"mask-image":"url(".concat(this.$store.state.instance.logo,")")}:{"background-color":this.enableMask?"":"transparent"}},logoBgStyle:function(){return Object.assign({margin:"".concat(this.$store.state.instance.logoMargin," 0"),opacity:this.searchBarHidden?1:0},this.enableMask?{}:{"background-color":this.enableMask?"":"transparent"})},logo:function(){return this.$store.state.instance.logo},sitename:function(){return this.$store.state.instance.name},hideSitename:function(){return this.$store.state.instance.hideSitename},logoLeft:function(){return this.$store.state.instance.logoLeft},currentUser:function(){return this.$store.state.users.currentUser},privateMode:function(){return this.$store.state.instance.private},shouldConfirmLogout:function(){return this.$store.getters.mergedConfig.modalOnLogout}},methods:{scrollToTop:function(){window.scrollTo(0,0)},showConfirmLogout:function(){this.showingConfirmLogout=!0},hideConfirmLogout:function(){this.showingConfirmLogout=!1},logout:function(){this.shouldConfirmLogout?this.showConfirmLogout():this.doLogout()},doLogout:function(){this.$router.replace("/main/public"),this.$store.dispatch("logout"),this.hideConfirmLogout()},onSearchBarToggled:function(e){this.searchBarHidden=e},openSettingsModal:function(){this.$store.dispatch("openSettingsModal","user")},openAdminModal:function(){this.$store.dispatch("openSettingsModal","admin")}}},Na=(0,Jo.Z)(qa,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("search-bar"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("nav",{id:"nav",class:(0,So.C_)(["DesktopNav",{"-logoLeft":e.logoLeft}]),onClick:t[4]||(t[4]=function(t){return e.scrollToTop()})},[(0,Co._)("div",ja,[(0,Co._)("div",Fa,[e.hideSitename?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:0,class:"site-name",to:{name:"root"},"active-class":"home"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.sitename),1)]})),_:1}))]),(0,Co.Wm)(s,{class:"logo",to:{name:"root"},style:(0,So.j5)(e.logoBgStyle),title:e.sitename},{default:(0,Co.w5)((function(){return[(0,Co._)("div",{class:"mask",style:(0,So.j5)(e.logoMaskStyle)},null,4),(0,Co._)("img",{src:e.logo,style:(0,So.j5)(e.logoStyle)},null,12,Aa)]})),_:1},8,["style","title"]),(0,Co._)("div",Oa,[e.currentUser||!e.privateMode?((0,Co.wg)(),(0,Co.j4)(a,{key:0,onToggled:e.onSearchBarToggled,onClick:t[0]||(t[0]=(0,wo.iM)((function(){}),["stop"]))},null,8,["onToggled"])):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-unstyled nav-icon",title:e.$t("nav.preferences"),onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.openSettingsModal&&e.openSettingsModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"cog"})],8,Ea),e.currentUser&&"admin"===e.currentUser.role?((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-unstyled nav-icon",target:"_blank",title:e.$t("nav.administration"),onClick:t[2]||(t[2]=(0,wo.iM)((function(){return e.openAdminModal&&e.openAdminModal.apply(e,arguments)}),["stop"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"tachometer-alt"})],8,za)):(0,Co.kq)("",!0),Pa,e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-unstyled nav-icon",title:e.$t("login.logout"),onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.logout&&e.logout.apply(e,arguments)}),["stop","prevent"]))},[(0,Co.Wm)(u,{"fixed-width":"",class:"fa-scale-110 fa-old-padding",icon:"sign-out-alt"})],8,Ia)):(0,Co.kq)("",!0)])]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmLogout?((0,Co.wg)(),(0,Co.j4)(c,{key:0,title:e.$t("login.logout_confirm_title"),"confirm-text":e.$t("login.logout_confirm_accept_button"),"cancel-text":e.$t("login.logout_confirm_cancel_button"),onAccepted:e.doLogout,onCancelled:e.hideConfirmLogout},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.logout_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))],2)}]]);var Za={class:"user-reporting-panel panel"},Wa={class:"panel-heading"},Ha={class:"panel-body"},Va={class:"user-reporting-panel-left"},Ka=["placeholder"],Ga={key:0},Ya=["disabled"],Ja={key:0,class:"alert error"},Qa={class:"user-reporting-panel-right"},Xa={class:"status-fadein user-reporting-panel-sitem"},eu=n(24049),tu=n(88369),nu=n(12061);function ou(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const ru={components:{Status:eu.default,List:tu.Z,Checkbox:wi.Z,Modal:Wt.Z,UserLink:nu.Z},data:function(){return{comment:"",forward:!1,statusIdsToReport:[],processing:!1,error:!1}},computed:{reportModal:function(){return this.$store.state.reports.reportModal},isLoggedIn:function(){return!!this.$store.state.users.currentUser},isOpen:function(){return this.isLoggedIn&&this.reportModal.activated},userId:function(){return this.reportModal.userId},user:function(){return this.$store.getters.findUser(this.userId)},remoteInstance:function(){return!this.user.is_local&&this.user.screen_name.substr(this.user.screen_name.indexOf("@")+1)},statuses:function(){return this.reportModal.statuses},preTickedIds:function(){return this.reportModal.preTickedIds}},watch:{userId:"resetState",preTickedIds:function(e){this.statusIdsToReport=e}},methods:{resetState:function(){this.comment="",this.forward=!1,this.statusIdsToReport=this.preTickedIds,this.processing=!1,this.error=!1},closeModal:function(){this.$store.dispatch("closeUserReportingModal")},reportUser:function(){var e=this;this.processing=!0,this.error=!1;var t={userId:this.userId,comment:this.comment,forward:this.forward,statusIds:this.statusIdsToReport};this.$store.state.api.backendInteractor.reportUser(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ou(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ou(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},t)).then((function(){e.processing=!1,e.resetState(),e.closeModal()})).catch((function(){e.processing=!1,e.error=!0}))},clearError:function(){this.error=!1},isChecked:function(e){return-1!==this.statusIdsToReport.indexOf(e)},toggleStatus:function(e,t){e!==this.isChecked(t)&&(e?this.statusIdsToReport.push(t):this.statusIdsToReport.splice(this.statusIdsToReport.indexOf(t),1))},resize:function(e){var t=e.target||e;t instanceof window.Element&&(t.style.height="auto",t.style.height="".concat(t.scrollHeight,"px"),""===t.value&&(t.style.height=null))}}},iu=(0,Jo.Z)(ru,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserLink"),a=(0,Co.up)("i18n-t"),u=(0,Co.up)("Checkbox"),c=(0,Co.up)("Status"),l=(0,Co.up)("List"),d=(0,Co.up)("Modal");return e.isOpen?((0,Co.wg)(),(0,Co.j4)(d,{key:0,onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",Za,[(0,Co._)("div",Wa,[(0,Co.Wm)(a,{tag:"div",keypath:"user_reporting.title",class:"title"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{user:e.user},null,8,["user"])]})),_:1})]),(0,Co._)("div",Ha,[(0,Co._)("div",Va,[(0,Co._)("div",null,[(0,Co._)("p",null,(0,So.zw)(e.$t("user_reporting.add_comment_description")),1),(0,Co.wy)((0,Co._)("textarea",{"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.comment=t}),class:"form-control",placeholder:e.$t("user_reporting.additional_comments"),rows:"1",onInput:t[1]||(t[1]=function(){return e.resize&&e.resize.apply(e,arguments)})},null,40,Ka),[[wo.nr,e.comment]])]),e.user.is_local?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Ga,[(0,Co._)("p",null,(0,So.zw)(e.$t("user_reporting.forward_description")),1),(0,Co.Wm)(u,{modelValue:e.forward,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.forward=t})},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_reporting.forward_to",[e.remoteInstance])),1)]})),_:1},8,["modelValue"])])),(0,Co._)("div",null,[(0,Co._)("button",{class:"btn button-default",disabled:e.processing,onClick:t[3]||(t[3]=function(){return e.reportUser&&e.reportUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_reporting.submit")),9,Ya),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ja,(0,So.zw)(e.$t("user_reporting.generic_error")),1)):(0,Co.kq)("",!0)])]),(0,Co._)("div",Qa,[(0,Co.Wm)(l,{items:e.statuses},{item:(0,Co.w5)((function(t){var n=t.item;return[(0,Co._)("div",Xa,[(0,Co.Wm)(c,{"in-conversation":!1,focused:!1,statusoid:n},null,8,["statusoid"]),(0,Co.Wm)(u,{"model-value":e.isChecked(n.id),"onUpdate:modelValue":function(t){return e.toggleStatus(t,n.id)}},null,8,["model-value","onUpdate:modelValue"])])]})),_:1},8,["items"])])])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var su={class:"edit-form-modal-panel panel"},au={class:"panel-heading"},uu=n(7257);const cu={components:{PostStatusForm:Ir.Z,Modal:Wt.Z},data:function(){return{resettingForm:!1}},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},modalActivated:function(){return this.$store.state.editStatus.modalActivated},isFormVisible:function(){return this.isLoggedIn&&!this.resettingForm&&this.modalActivated},params:function(){return this.$store.state.editStatus.params||{}}},watch:{params:function(e,t){var n=this;Dt()(e,"statusId")!==Dt()(t,"statusId")&&(this.resettingForm=!0,this.$nextTick((function(){n.resettingForm=!1})))},isFormVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$el&&t.$el.querySelector("textarea").focus()}))}},methods:{doEditStatus:function(e){var t=e.status,n=e.spoilerText,o=e.sensitive,r=e.media,i=e.contentType,s=e.poll,a={store:this.$store,statusId:this.$store.state.editStatus.params.statusId,status:t,spoilerText:n,sensitive:o,poll:s,media:r,contentType:i};return uu.Z.editStatus(a).then((function(e){return e})).catch((function(e){return console.error("Error editing status",e),{error:e.message}}))},closeModal:function(){this.$store.dispatch("closeEditStatusModal")}}},lu=(0,Jo.Z)(cu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PostStatusForm"),a=(0,Co.up)("Modal");return e.isFormVisible?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"edit-form-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",su,[(0,Co._)("div",au,(0,So.zw)(e.$t("post_status.edit_status")),1),(0,Co.Wm)(s,(0,Co.dG)({class:"panel-body"},e.params,{"post-handler":e.doEditStatus,"disable-polls":!0,"disable-visibility-selector":!0,onPosted:e.closeModal}),null,16,["post-handler","onPosted"])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var du={class:"post-form-modal-panel panel"},pu={class:"panel-heading"};const mu={components:{PostStatusForm:Ir.Z,Modal:Wt.Z},data:function(){return{resettingForm:!1}},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},modalActivated:function(){return this.$store.state.postStatus.modalActivated},isFormVisible:function(){return this.isLoggedIn&&!this.resettingForm&&this.modalActivated},params:function(){return this.$store.state.postStatus.params||{}}},watch:{params:function(e,t){var n=this;Dt()(e,"repliedUser.id")!==Dt()(t,"repliedUser.id")&&(this.resettingForm=!0,this.$nextTick((function(){n.resettingForm=!1})))},isFormVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$el&&t.$el.querySelector("textarea").focus()}))}},methods:{closeModal:function(){this.$store.dispatch("closePostStatusModal")},resetAndClose:function(){this.$store.dispatch("resetPostStatusModal"),this.$store.dispatch("closePostStatusModal")}}},hu=(0,Jo.Z)(mu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("PostStatusForm"),a=(0,Co.up)("Modal");return e.isLoggedIn&&!e.resettingForm?((0,Co.wg)(),(0,Co.j4)(a,{key:0,"is-open":e.modalActivated,class:"post-form-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",du,[(0,Co._)("div",pu,(0,So.zw)(e.$t("post_status.new_status")),1),(0,Co.Wm)(s,(0,Co.dG)({class:"panel-body"},e.params,{onPosted:e.resetAndClose}),null,16,["onPosted"])])]})),_:1},8,["is-open","onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var fu={class:"status-history-modal-panel panel"},gu={class:"panel-heading"},vu={class:"panel-body"},wu={key:0,class:"history-body"};const bu={components:{Modal:Wt.Z,Status:eu.default},data:function(){return{statuses:[]}},computed:{modalActivated:function(){return this.$store.state.statusHistory.modalActivated},params:function(){return this.$store.state.statusHistory.params},statusId:function(){return this.params.id},historyCount:function(){return this.statuses.length},history:function(){return this.statuses}},watch:{params:function(e,t){var n=Dt()(e,"id")!==Dt()(t,"id");n&&this.resetHistory(),(n||Dt()(e,"edited_at")!==Dt()(t,"edited_at"))&&this.fetchStatusHistory()}},methods:{resetHistory:function(){this.statuses=[]},fetchStatusHistory:function(){var e=this;this.$store.dispatch("fetchStatusHistory",this.params).then((function(t){e.statuses=t}))},closeModal:function(){this.$store.dispatch("closeStatusHistoryModal")}}},yu=(0,Jo.Z)(bu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("status"),a=(0,Co.up)("Modal");return e.modalActivated?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"status-history-modal-view",onBackdropClicked:e.closeModal},{default:(0,Co.w5)((function(){return[(0,Co._)("div",fu,[(0,Co._)("div",gu,(0,So.zw)(e.$t("status.status_history"))+" ("+(0,So.zw)(e.historyCount)+") ",1),(0,Co._)("div",vu,[e.historyCount>0?((0,Co.wg)(),(0,Co.iD)("div",wu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.history,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,statusoid:e,"is-preview":!0,class:"conversation-status status-fadein panel-body"},null,8,["statusoid"])})),128))])):(0,Co.kq)("",!0)])])]})),_:1},8,["onBackdropClicked"])):(0,Co.kq)("",!0)}]]);var Du={class:"global-notice-list"},_u={class:"notice-message"},ku=["onClick"];Ht.vI.add(Vt.NBC);const Cu={computed:{notices:function(){return this.$store.state.interface.globalNotices}},methods:{closeNotice:function(e){this.$store.dispatch("removeGlobalNotice",e)}}},Su=(0,Jo.Z)(Cu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Du,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.notices,(function(t,n){return(0,Co.wg)(),(0,Co.iD)("div",{key:n,class:(0,So.C_)(["alert global-notice",(0,d.Z)({},"global-"+t.level,!0)])},[(0,Co._)("div",_u,(0,So.zw)(e.$t(t.messageKey,t.messageArgs)),1),(0,Co._)("button",{class:"button-unstyled close-notice",onClick:function(n){return e.closeNotice(t)}},[(0,Co.Wm)(s,{class:"fa-scale-110 fa-old-padding",icon:"times"})],8,ku)],2)})),128))])}]]);function ju(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const Fu={name:"app",components:{UserPanel:Br,NavPanel:_i,Notifications:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,93737))})),InstanceSpecificPanel:Ai,FeaturesPanel:Ri,WhoToFollowPanel:ts,ShoutPanel:gs,MediaModal:Zs,SideDrawer:ta,MobilePostStatusButton:aa,MobileNav:Sa,DesktopNav:Na,SettingsModal:(0,Co.RC)((function(){return n.e(7586).then(n.bind(n,27586))})),UpdateNotification:(0,Co.RC)((function(){return n.e(6464).then(n.bind(n,16464))})),UserReportingModal:iu,PostStatusModal:hu,EditStatusModal:lu,StatusHistoryModal:yu,GlobalNoticeList:Su},data:function(){return{mobileActivePanel:"timeline"}},created:function(){var e=this.$store.getters.mergedConfig.interfaceLanguage;this.$store.dispatch("setOption",{name:"interfaceLanguage",value:e}),window.addEventListener("resize",this.updateMobileState)},unmounted:function(){window.removeEventListener("resize",this.updateMobileState)},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ju(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ju(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({classes:function(){return[{"-reverse":this.reverseLayout,"-no-sticky-headers":this.noSticky,"-has-new-post-button":this.newPostButtonShown},"-"+this.layoutType]},navClasses:function(){var e=this.$store.getters.mergedConfig.navbarColumnStretch;return["-"+this.layoutType].concat((0,l.Z)(e?["-column-stretch"]:[]))},currentUser:function(){return this.$store.state.users.currentUser},userBackground:function(){return this.currentUser.background_image},instanceBackground:function(){return this.mergedConfig.hideInstanceWallpaper?null:this.$store.state.instance.background},background:function(){return this.userBackground||this.instanceBackground},bgStyle:function(){if(this.background)return{"--body-background-image":"url(".concat(this.background,")")}},shout:function(){return this.$store.state.shout.joined},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled},showInstanceSpecificPanel:function(){return this.$store.state.instance.showInstanceSpecificPanel&&!this.$store.getters.mergedConfig.hideISP&&this.$store.state.instance.instanceSpecificPanelContent},isChats:function(){return"chat"===this.$route.name||"chats"===this.$route.name},isListEdit:function(){return"lists-edit"===this.$route.name},newPostButtonShown:function(){return!this.isChats&&!this.isListEdit&&(this.$store.getters.mergedConfig.alwaysShowNewPostButton||"mobile"===this.layoutType)},showFeaturesPanel:function(){return this.$store.state.instance.showFeaturesPanel},editingAvailable:function(){return this.$store.state.instance.editingAvailable},shoutboxPosition:function(){return this.$store.getters.mergedConfig.alwaysShowNewPostButton||!1},hideShoutbox:function(){return this.$store.getters.mergedConfig.hideShoutbox},layoutType:function(){return this.$store.state.interface.layoutType},privateMode:function(){return this.$store.state.instance.private},reverseLayout:function(){var e=this.$store.getters.mergedConfig,t=e.thirdColumnMode,n=e.sidebarRight;return"wide"!==this.layoutType||"notifications"===t?n:!n},noSticky:function(){return this.$store.getters.mergedConfig.disableStickyHeaders},showScrollbars:function(){return this.$store.getters.mergedConfig.showScrollbars}},(0,s.Se)(["mergedConfig"])),methods:{updateMobileState:function(){this.$store.dispatch("setLayoutWidth",Te()),this.$store.dispatch("setLayoutHeight",$e())}}},Au=(0,Jo.Z)(Fu,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("MobileNav"),a=(0,Co.up)("DesktopNav"),u=(0,Co.up)("Notifications"),c=(0,Co.up)("user-panel"),l=(0,Co.up)("nav-panel"),d=(0,Co.up)("instance-specific-panel"),p=(0,Co.up)("features-panel"),m=(0,Co.up)("who-to-follow-panel"),h=(0,Co.up)("router-link"),f=(0,Co.up)("router-view"),g=(0,Co.up)("MediaModal"),v=(0,Co.up)("shout-panel"),w=(0,Co.up)("MobilePostStatusButton"),b=(0,Co.up)("UserReportingModal"),y=(0,Co.up)("PostStatusModal"),D=(0,Co.up)("EditStatusModal"),_=(0,Co.up)("StatusHistoryModal"),k=(0,Co.up)("SettingsModal"),C=(0,Co.up)("UpdateNotification"),S=(0,Co.up)("GlobalNoticeList");return(0,Co.wg)(),(0,Co.iD)("div",{id:"app-loaded",style:(0,So.j5)(e.bgStyle)},[jo,"mobile"===e.layoutType?((0,Co.wg)(),(0,Co.j4)(s,{key:0})):((0,Co.wg)(),(0,Co.j4)(a,{key:1,class:(0,So.C_)(e.navClasses)},null,8,["class"])),e.currentUser?((0,Co.wg)(),(0,Co.j4)(u,{key:2})):(0,Co.kq)("",!0),(0,Co._)("div",{id:"content",class:(0,So.C_)(["app-layout container",e.classes])},[Fo,(0,Co._)("div",{id:"sidebar",class:(0,So.C_)(["column -scrollable",{"-show-scrollbar":e.showScrollbars}])},[(0,Co.Wm)(c),"mobile"!==e.layoutType?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co.Wm)(l),e.showInstanceSpecificPanel?((0,Co.wg)(),(0,Co.j4)(d,{key:0})):(0,Co.kq)("",!0),!e.currentUser&&e.showFeaturesPanel?((0,Co.wg)(),(0,Co.j4)(p,{key:1})):(0,Co.kq)("",!0),e.currentUser&&e.suggestionsEnabled?((0,Co.wg)(),(0,Co.j4)(m,{key:2})):(0,Co.kq)("",!0),Ao],64)):(0,Co.kq)("",!0)],2),(0,Co._)("main",{id:"main-scroller",class:(0,So.C_)(["column main",{"-full-height":e.isChats||e.isListEdit}])},[e.currentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Oo,[(0,Co.Wm)(h,{to:{name:"login"},class:"panel-body"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("login.hint")),1)]})),_:1})])),(0,Co.Wm)(f)],2),(0,Co._)("div",{id:"notifs-column",class:(0,So.C_)(["column -scrollable",{"-show-scrollbar":e.showScrollbars}])},null,2)],2),(0,Co.Wm)(g),e.currentUser&&e.shout&&!e.hideShoutbox?((0,Co.wg)(),(0,Co.j4)(v,{key:3,floating:!0,class:(0,So.C_)(["floating-shout mobile-hidden",{"-left":e.shoutboxPosition}])},null,8,["class"])):(0,Co.kq)("",!0),(0,Co.Wm)(w),(0,Co.Wm)(b),(0,Co.Wm)(y),e.editingAvailable?((0,Co.wg)(),(0,Co.j4)(D,{key:4})):(0,Co.kq)("",!0),e.editingAvailable?((0,Co.wg)(),(0,Co.j4)(_,{key:5})):(0,Co.kq)("",!0),(0,Co.Wm)(k),(0,Co.Wm)(C),(0,Co.Wm)(S)],4)}]]);var Ou={key:1,class:"rightside-button"},Eu=["title"],zu={key:0,class:"rightside-button"},Pu=["title"],Iu={class:"alert-badge"},xu=["title"],Tu={ref:"timeline",class:"timeline",role:"feed"},$u={key:0,class:"new-status-notification text-center faint"},Bu={key:1,class:"new-status-notification text-center faint"},Uu={class:"new-status-notification text-center"},Mu={key:3,class:"new-status-notification text-center"},Lu=n(24350),Ru=n.n(Lu),qu=n(23493),Nu=n.n(qu),Zu={key:0,class:"panel-heading conversation-heading -sticky"},Wu={class:"title"},Hu={class:"conversation-body panel-body"},Vu={key:0,class:"thread-body"},Ku={key:0,class:"conversation-dive-to-top-level-box"},Gu={key:1,class:"thread-ancestors"},Yu={key:0,class:"thread-ancestor-dive-box"},Ju={class:"thread-ancestor-dive-box-inner"},Qu={key:1,class:"thread-body"},Xu=n(66678),ec=n.n(Xu),tc={class:"thread-tree"},nc={key:0,class:"thread-tree-replies"},oc={key:1,class:"thread-tree-replies thread-tree-replies-hidden"};Ht.vI.add(Vt.Sbq,Vt.cLY);const rc={components:{Status:eu.default},name:"ThreadTree",props:{depth:Number,status:Object,inProfile:Boolean,conversation:Array,collapsable:Boolean,isExpanded:Boolean,pinnedStatusIdsObject:Object,profileUserId:String,focused:Function,highlight:String,getReplies:Function,setHighlight:Function,toggleExpanded:Function,simple:Boolean,toggleThreadDisplay:Function,threadDisplayStatus:Object,showThreadRecursively:Function,totalReplyCount:Object,totalReplyDepth:Object,statusContentProperties:Object,setStatusContentProperty:Function,toggleStatusContentProperty:Function,dive:Function},computed:{suspendable:function(){var e=!this.$refs.statusComponent||this.$refs.statusComponent.suspendable;return this.$refs.childComponent?e&&this.$refs.childComponent.every((function(e){return e.suspendable})):e},reverseLookupTable:function(){return this.conversation.reduce((function(e,t,n){return e[t.id]=n,e}),{})},currentReplies:function(){var e=this;return this.getReplies(this.status.id).map((function(t){var n=t.id;return e.statusById(n)}))},threadShowing:function(){return"showing"===this.threadDisplayStatus[this.status.id]},currentProp:function(){return this.statusContentProperties[this.status.id]}},methods:{statusById:function(e){return this.conversation[this.reverseLookupTable[e]]},collapseThread:function(){},showThread:function(){},showAllSubthreads:function(){},toggleCurrentProp:function(e){this.toggleStatusContentProperty(this.status.id,e)},setCurrentProp:function(e,t){this.setStatusContentProperty(this.status.id,e)}}},ic=(0,Jo.Z)(rc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("status"),a=(0,Co.up)("thread-tree"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("i18n-t");return(0,Co.wg)(),(0,Co.iD)("article",tc,[((0,Co.wg)(),(0,Co.j4)(s,{key:e.status.id,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:e.status,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[e.status.id],focused:e.focused(e.status.id),"in-conversation":e.isExpanded,highlight:e.highlight,replies:e.getReplies(e.status.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status conversation-status-treeview status-fadein panel-body","simple-tree":e.simple,"controlled-thread-display-status":e.threadDisplayStatus[e.status.id],"controlled-toggle-thread-display":function(){return e.toggleThreadDisplay(e.status.id)},"controlled-showing-tall":e.currentProp.showingTall,"controlled-expanding-subject":e.currentProp.expandingSubject,"controlled-showing-long-subject":e.currentProp.showingLongSubject,"controlled-replying":e.currentProp.replying,"controlled-media-playing":e.currentProp.mediaPlaying,"controlled-toggle-showing-tall":function(){return e.toggleCurrentProp("showingTall")},"controlled-toggle-expanding-subject":function(){return e.toggleCurrentProp("expandingSubject")},"controlled-toggle-showing-long-subject":function(){return e.toggleCurrentProp("showingLongSubject")},"controlled-toggle-replying":function(){return e.toggleCurrentProp("replying")},"controlled-set-media-playing":function(t){return e.setCurrentProp("mediaPlaying",t)},dive:e.dive?function(){return e.dive(e.status.id)}:void 0,onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","simple-tree","controlled-thread-display-status","controlled-toggle-thread-display","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-replying","controlled-media-playing","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","controlled-toggle-replying","controlled-set-media-playing","dive","onGoto","onToggleExpanded"])),e.currentReplies.length&&e.threadShowing?((0,Co.wg)(),(0,Co.iD)("div",nc,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.currentReplies,(function(t){return(0,Co.wg)(),(0,Co.j4)(a,{key:t.id,ref_for:!0,ref:"childComponent",depth:e.depth+1,status:t,"in-profile":e.inProfile,conversation:e.conversation,collapsable:e.collapsable,"is-expanded":e.isExpanded,"pinned-status-ids-object":e.pinnedStatusIdsObject,"profile-user-id":e.profileUserId,focused:e.focused,"get-replies":e.getReplies,highlight:e.highlight,"set-highlight":e.setHighlight,"toggle-expanded":e.toggleExpanded,simple:e.simple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,dive:e.dive},null,8,["depth","status","in-profile","conversation","collapsable","is-expanded","pinned-status-ids-object","profile-user-id","focused","get-replies","highlight","set-highlight","toggle-expanded","simple","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","dive"])})),128))])):(0,Co.kq)("",!0),e.currentReplies.length&&!e.threadShowing?((0,Co.wg)(),(0,Co.iD)("div",oc,[e.simple?((0,Co.wg)(),(0,Co.j4)(c,{key:0,scope:"global",tag:"button",keypath:"status.thread_follow_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:t[0]||(t[0]=(0,wo.iM)((function(t){return e.dive(e.status.id)}),["prevent"]))},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-right"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.thread_follow",e.totalReplyCount[e.status.id],{numStatus:e.totalReplyCount[e.status.id]})),1)]})),_:1})):((0,Co.wg)(),(0,Co.j4)(c,{key:1,scope:"global",tag:"button",keypath:"status.thread_show_full_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.showThreadRecursively(e.status.id)}),["prevent"]))},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-down"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.thread_show_full",e.totalReplyCount[e.status.id],{numStatus:e.totalReplyCount[e.status.id],depth:e.totalReplyDepth[e.status.id]})),1)]})),_:1}))])):(0,Co.kq)("",!0)])}]]);var sc={class:"dropdown-menu",role:"menu"},ac={key:0,role:"group"},uc=["aria-checked"],cc=["aria-checked"],lc=["aria-checked"],dc={key:3,role:"separator",class:"dropdown-divider"},pc=["aria-checked"],mc=["aria-checked"],hc=["aria-checked"],fc=n(84535);function gc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function vc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.G_j,Vt.yGG,Vt.klh);const wc={props:{conversation:Boolean},components:{Popover:fc.default},methods:{setReplyVisibility:function(e){this.$store.dispatch("setOption",{name:"replyVisibility",value:e}),this.$store.dispatch("queueFlushAll")},openTab:function(e){this.$store.dispatch("openSettingsModalTab",e)}},computed:vc(vc({},(0,s.Se)(["mergedConfig"])),{},{loggedIn:function(){return!!this.$store.state.users.currentUser},replyVisibilitySelf:{get:function(){return"self"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("self")}},replyVisibilityFollowing:{get:function(){return"following"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("following")}},replyVisibilityAll:{get:function(){return"all"===this.mergedConfig.replyVisibility},set:function(){this.setReplyVisibility("all")}},hideMedia:{get:function(){return this.mergedConfig.hideAttachments||this.mergedConfig.hideAttachmentsInConv},set:function(){var e=!this.hideMedia;this.$store.dispatch("setOption",{name:"hideAttachments",value:e}),this.$store.dispatch("setOption",{name:"hideAttachmentsInConv",value:e})}},hideMutedPosts:{get:function(){return this.mergedConfig.hideFilteredStatuses},set:function(){var e=!this.hideMutedPosts;this.$store.dispatch("setOption",{name:"hideFilteredStatuses",value:e})}},muteBotStatuses:{get:function(){return this.mergedConfig.muteBotStatuses},set:function(){var e=!this.muteBotStatuses;this.$store.dispatch("setOption",{name:"muteBotStatuses",value:e})}}})},bc=(0,Jo.Z)(wc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(a,{trigger:"click",class:"QuickFilterSettings","bound-to":{x:"container"},"trigger-attrs":{title:e.$t("timeline.quick_filter_settings")}},{content:(0,Co.w5)((function(){return[(0,Co._)("div",sc,[e.loggedIn?((0,Co.wg)(),(0,Co.iD)("div",ac,[e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default dropdown-item","aria-checked":e.replyVisibilityAll,role:"menuitemradio",onClick:t[0]||(t[0]=function(t){return e.replyVisibilityAll=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilityAll}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_all")),1)],8,uc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-default dropdown-item","aria-checked":e.replyVisibilityFollowing,role:"menuitemradio",onClick:t[1]||(t[1]=function(t){return e.replyVisibilityFollowing=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilityFollowing}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_following_short")),1)],8,cc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-default dropdown-item","aria-checked":e.replyVisibilitySelf,role:"menuitemradio",onClick:t[2]||(t[2]=function(t){return e.replyVisibilitySelf=!0})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":e.replyVisibilitySelf}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.reply_visibility_self_short")),1)],8,lc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",dc))])):(0,Co.kq)("",!0),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.muteBotStatuses,onClick:t[3]||(t[3]=function(t){return e.muteBotStatuses=!e.muteBotStatuses})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.muteBotStatuses}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.mute_bot_posts")),1)],8,pc),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.hideMedia,onClick:t[4]||(t[4]=function(t){return e.hideMedia=!e.hideMedia})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hideMedia}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.hide_media_previews")),1)],8,mc),(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.hideMutedPosts,onClick:t[5]||(t[5]=function(t){return e.hideMutedPosts=!e.hideMutedPosts})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hideMutedPosts}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.hide_all_muted_posts")),1)],8,hc),(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[6]||(t[6]=function(t){return e.openTab("filtering")})},[(0,Co.Wm)(s,{icon:"font"}),(0,Co.Uk)((0,So.zw)(e.$t("settings.word_filter_and_more")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"filter"})]})),_:1},8,["trigger-attrs"])}]]);var yc={class:"dropdown-menu",role:"menu"},Dc={role:"group"},_c=["aria-checked"],kc=["aria-checked"],Cc=(0,Co._)("div",{role:"separator",class:"dropdown-divider"},null,-1),Sc=["aria-checked"],jc=["aria-checked"],Fc=["aria-checked"];function Ac(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Oc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ac(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ac(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.Zrf,Vt.lCn,Vt.xiG,Vt.klh);const Ec={props:{conversation:Boolean},components:{Popover:fc.default},methods:{setConversationDisplay:function(e){this.$store.dispatch("setOption",{name:"conversationDisplay",value:e})},openTab:function(e){this.$store.dispatch("openSettingsModalTab",e)}},computed:Oc(Oc({},(0,s.Se)(["mergedConfig"])),{},{loggedIn:function(){return!!this.$store.state.users.currentUser},conversationDisplay:{get:function(){return this.mergedConfig.conversationDisplay},set:function(e){this.setConversationDisplay(e)}},autoUpdate:{get:function(){return this.mergedConfig.streaming},set:function(){var e=!this.autoUpdate;this.$store.dispatch("setOption",{name:"streaming",value:e})}},collapseWithSubjects:{get:function(){return this.mergedConfig.collapseMessageWithSubject},set:function(){var e=!this.collapseWithSubjects;this.$store.dispatch("setOption",{name:"collapseMessageWithSubject",value:e})}},showUserAvatars:{get:function(){return this.mergedConfig.mentionLinkShowAvatar},set:function(){var e=!this.showUserAvatars;console.log(e),this.$store.dispatch("setOption",{name:"mentionLinkShowAvatar",value:e})}},muteBotStatuses:{get:function(){return this.mergedConfig.muteBotStatuses},set:function(){var e=!this.muteBotStatuses;this.$store.dispatch("setOption",{name:"muteBotStatuses",value:e})}}})},zc=(0,Jo.Z)(Ec,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(a,{trigger:"click",class:"QuickViewSettings","bound-to":{x:"container"},"trigger-attrs":{title:e.$t("timeline.quick_view_settings")}},{content:(0,Co.w5)((function(){return[(0,Co._)("div",yc,[(0,Co._)("div",Dc,[(0,Co._)("button",{class:"button-default dropdown-item","aria-checked":"tree"===e.conversationDisplay,role:"menuitemradio",onClick:t[0]||(t[0]=function(t){return e.conversationDisplay="tree"})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":"tree"===e.conversationDisplay}]),"aria-hidden":!0},null,2),(0,Co.Wm)(s,{icon:"folder-tree","aria-hidden":!0}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.conversation_display_tree_quick")),1)],8,_c),(0,Co._)("button",{class:"button-default dropdown-item","aria-checked":"linear"===e.conversationDisplay,role:"menuitemradio",onClick:t[1]||(t[1]=function(t){return e.conversationDisplay="linear"})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox -radio",{"menu-checkbox-checked":"linear"===e.conversationDisplay}]),"aria-hidden":!0},null,2),(0,Co.Wm)(s,{icon:"list","aria-hidden":!0}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("settings.conversation_display_linear_quick")),1)],8,kc)]),Cc,(0,Co._)("button",{class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.showUserAvatars,onClick:t[2]||(t[2]=function(t){return e.showUserAvatars=!e.showUserAvatars})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.showUserAvatars}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.mention_link_show_avatar_quick")),1)],8,Sc),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.autoUpdate,onClick:t[3]||(t[3]=function(t){return e.autoUpdate=!e.autoUpdate})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.autoUpdate}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.auto_update")),1)],8,jc)),e.conversation?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"button-default dropdown-item",role:"menuitemcheckbox","aria-checked":e.collapseWithSubjects,onClick:t[4]||(t[4]=function(t){return e.collapseWithSubjects=!e.collapseWithSubjects})},[(0,Co._)("span",{class:(0,So.C_)(["menu-checkbox",{"menu-checkbox-checked":e.collapseWithSubjects}]),"aria-hidden":!0},null,2),(0,Co.Uk)((0,So.zw)(e.$t("settings.collapse_subject")),1)],8,Fc)),(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[5]||(t[5]=function(t){return e.openTab("general")})},[(0,Co.Wm)(s,{icon:"wrench"}),(0,Co.Uk)((0,So.zw)(e.$t("settings.more_settings")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{icon:"bars"})]})),_:1},8,["trigger-attrs"])}]]);function Pc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ic(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.Sbq,Vt.UXu,Vt.A35);var xc=function(e,t){var n="retweet"===e.type?e.retweeted_status.id:e.id,o="retweet"===t.type?t.retweeted_status.id:t.id,r=Number(n),i=Number(o),s=!Number.isNaN(r),a=!Number.isNaN(i);return s&&a?r<i?-1:1:s&&!a?-1:!s&&a?1:n<o?-1:1};const Tc={data:function(){return{highlight:null,expanded:!1,threadDisplayStatusObject:{},statusContentPropertiesObject:{},inlineDivePosition:null}},props:["statusId","collapsable","isPage","pinnedStatusIdsObject","inProfile","profileUserId","virtualHidden"],created:function(){this.isPage&&this.fetchConversation()},computed:Ic(Ic({maxDepthToShowByDefault:function(){var e=this.$store.getters.mergedConfig.maxDepthInThread-2;return e>=1?e:1},streamingEnabled:function(){return this.mergedConfig.useStreamingApi&&this.mastoUserSocketStatus===h._z.JOINED},displayStyle:function(){return this.$store.getters.mergedConfig.conversationDisplay},isTreeView:function(){return!this.isLinearView},treeViewIsSimple:function(){return!this.$store.getters.mergedConfig.conversationTreeAdvanced},isLinearView:function(){return"linear"===this.displayStyle},shouldFadeAncestors:function(){return this.$store.getters.mergedConfig.conversationTreeFadeAncestors},otherRepliesButtonPosition:function(){return this.$store.getters.mergedConfig.conversationOtherRepliesButton},showOtherRepliesButtonBelowStatus:function(){return"below"===this.otherRepliesButtonPosition},showOtherRepliesButtonInsideStatus:function(){return"inside"===this.otherRepliesButtonPosition},suspendable:function(){return this.isTreeView?Object.entries(this.statusContentProperties).every((function(e){var t=(0,c.Z)(e,2),n=(t[0],t[1]);return!n.replying&&0===n.mediaPlaying.length})):!this.$refs.statusComponent||!this.$refs.statusComponent[0]||this.$refs.statusComponent.every((function(e){return e.suspendable}))},hideStatus:function(){return this.virtualHidden&&this.suspendable},status:function(){return this.$store.state.statuses.allStatusesObject[this.statusId]},originalStatusId:function(){return this.status.retweeted_status?this.status.retweeted_status.id:this.statusId},conversationId:function(){return this.getConversationId(this.statusId)},conversation:function(){if(!this.status)return[];if(!this.isExpanded)return[this.status];var e=ec()(this.$store.state.statuses.conversationsObject[this.conversationId]),t=R()(e,{id:this.originalStatusId});return-1!==t&&(e[t]=this.status),function(e,t){return(e="retweet"===t.type?In()(e,(function(e){return"retweet"===e.type||e.id!==t.retweeted_status.id})):In()(e,(function(e){return"retweet"!==e.type}))).filter((function(e){return e})).sort(xc)}(e,this.status)},statusMap:function(){return this.conversation.reduce((function(e,t){return e[t.id]=t,e}),{})},threadTree:function(){var e=this,t=this.conversation.reduce((function(e,t,n){return e[t.id]=n,e}),{}),n=function n(o,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return r.map((function(r){return s[r]?[]:(s[r]=!0,[{status:e.conversation[t[r]],id:r,depth:i},n(o,o[r],i+1,s)].reduce((function(e,t){return e.concat(t)}),[]))})).reduce((function(e,t){return e.concat(t)}),[])}(this.conversation.reduce((function(t,n){var o=n.id;return t.forest[o]=e.getReplies(o).map((function(e){return e.id})),t}),{forest:{}}).forest,this.topLevel.map((function(e){return e.id})));return n},replyIds:function(){var e=this;return this.conversation.map((function(e){return e.id})).reduce((function(t,n){return t[n]=(e.replies[n]||[]).map((function(e){return e.id})),t}),{})},totalReplyCount:function(){var e=this,t={};return this.conversation.map((function(e){return e.id})).map((function n(o){return t[o]||(t[o]=1+e.replyIds[o].map((function(e){return n(e)})).reduce((function(e,t){return e+t}),0)),t[o]})),Object.keys(t).reduce((function(e,n){return e[n]=t[n]-1,e}),{})},totalReplyDepth:function(){var e=this,t={};return this.conversation.map((function(e){return e.id})).map((function n(o){return t[o]||(t[o]=1+e.replyIds[o].map((function(e){return n(e)})).reduce((function(e,t){return e>t?e:t}),0)),t[o]})),Object.keys(t).reduce((function(e,n){return e[n]=t[n]-1,e}),{})},depths:function(){return this.threadTree.reduce((function(e,t){return e[t.id]=t.depth,e}),{})},topLevel:function(){var e=this;return this.conversation.reduce((function(t,n){return t.filter((function(t){return-1===e.getReplies(n.id).map((function(e){return e.id})).indexOf(t.id)}))}),this.conversation)},otherTopLevelCount:function(){return this.topLevel.length-1},showingTopLevel:function(){return this.canDive&&this.diveRoot?[this.statusMap[this.diveRoot]]:this.topLevel},diveRoot:function(){var e=this.inlineDivePosition||this.statusId;return this.parentOf(e)?e:null},diveDepth:function(){return this.canDive&&this.diveRoot?this.depths[this.diveRoot]:0},diveMode:function(){return this.canDive&&!!this.diveRoot},shouldShowAllConversationButton:function(){return this.isTreeView&&this.isExpanded&&this.diveMode&&this.topLevel.length>1},shouldShowAncestors:function(){return this.isTreeView&&this.isExpanded&&this.ancestorsOf(this.diveRoot).length},replies:function(){var e=1;return Ue()(this.conversation,(function(t,n){var o=n.id,r=n.in_reply_to_status_id;return r&&(t[r]=t[r]||[],t[r].push({name:"#".concat(e),id:o})),e++,t}),{})},isExpanded:function(){return!(!this.expanded&&!this.isPage)},hiddenStyle:function(){var e=this.status&&this.status.virtualHeight||"120px";return this.virtualHidden?{height:e}:{}},threadDisplayStatus:function(){var e=this;return this.conversation.reduce((function(t,n){var o=n.id,r=e.depths[o],i=e.threadDisplayStatusObject[o]?e.threadDisplayStatusObject[o]:r-e.diveDepth<=e.maxDepthToShowByDefault?"showing":"hidden";return t[o]=i,t}),{})},statusContentProperties:function(){var e=this;return this.conversation.reduce((function(t,n){var o,r=n.id,i=(o={showingTall:!1,expandingSubject:!1,showingLongSubject:!1,isReplying:!1,mediaPlaying:[]},e.statusContentPropertiesObject[r]?Ic(Ic({},o),e.statusContentPropertiesObject[r]):o);return t[r]=i,t}),{})},canDive:function(){return this.isTreeView&&this.isExpanded},focused:function(){var e=this;return function(t){return e.isExpanded&&t===e.highlight}},maybeHighlight:function(){return this.isExpanded?this.highlight:null}},(0,s.Se)(["mergedConfig"])),(0,s.rn)({mastoUserSocketStatus:function(e){return e.api.mastoUserSocketStatus}})),components:{Status:eu.default,ThreadTree:ic,QuickFilterSettings:bc,QuickViewSettings:zc},watch:{statusId:function(e,t){var n=this.getConversationId(e),o=this.getConversationId(t);n&&o&&n===o?this.setHighlight(this.originalStatusId):this.fetchConversation()},expanded:function(e){e?this.fetchConversation():this.resetDisplayState()},virtualHidden:function(e){this.$store.dispatch("setVirtualHeight",{statusId:this.statusId,height:"".concat(this.$el.clientHeight,"px")})}},methods:{fetchConversation:function(){var e=this;this.status?this.$store.state.api.backendInteractor.fetchConversation({id:this.statusId}).then((function(t){var n=t.ancestors,o=t.descendants;e.$store.dispatch("addNewStatuses",{statuses:n}),e.$store.dispatch("addNewStatuses",{statuses:o}),e.setHighlight(e.originalStatusId)})):this.$store.state.api.backendInteractor.fetchStatus({id:this.statusId}).then((function(t){e.$store.dispatch("addNewStatuses",{statuses:[t]}),e.fetchConversation()}))},getReplies:function(e){return this.replies[e]||[]},getHighlight:function(){return this.isExpanded?this.highlight:null},setHighlight:function(e){e&&(this.highlight=e,this.streamingEnabled||this.$store.dispatch("fetchStatus",e),this.$store.dispatch("fetchFavsAndRepeats",e),this.$store.dispatch("fetchEmojiReactionsBy",e))},toggleExpanded:function(){this.expanded=!this.expanded},getConversationId:function(e){var t=this.$store.state.statuses.allStatusesObject[e];return Dt()(t,"retweeted_status.statusnet_conversation_id",Dt()(t,"statusnet_conversation_id"))},setThreadDisplay:function(e,t){this.threadDisplayStatusObject=Ic(Ic({},this.threadDisplayStatusObject),{},(0,d.Z)({},e,t))},toggleThreadDisplay:function(e){var t="showing"===this.threadDisplayStatus[e]?"hidden":"showing";this.setThreadDisplay(e,t)},setThreadDisplayRecursively:function(e,t){var n=this;this.setThreadDisplay(e,t),this.getReplies(e).map((function(e){return e.id})).map((function(e){return n.setThreadDisplayRecursively(e,t)}))},showThreadRecursively:function(e){this.setThreadDisplayRecursively(e,"showing")},setStatusContentProperty:function(e,t,n){this.statusContentPropertiesObject=Ic(Ic({},this.statusContentPropertiesObject),{},(0,d.Z)({},e,Ic(Ic({},this.statusContentPropertiesObject[e]),{},(0,d.Z)({},t,n))))},toggleStatusContentProperty:function(e,t){this.setStatusContentProperty(e,t,!this.statusContentProperties[e][t])},leastVisibleAncestor:function(e){for(var t=e,n=this.parentOf(t);t;){if("showing"===this.threadDisplayStatus[n])return t;n=this.parentOf(n),t=this.parentOf(t)}return this.topLevel[0]?this.topLevel[0].id:void 0},diveIntoStatus:function(e,t){this.tryScrollTo(e)},diveToTopLevel:function(){this.tryScrollTo(this.topLevelAncestorOrSelfId(this.diveRoot)||this.topLevel[0].id)},undive:function(){this.inlineDivePosition=null,this.setHighlight(this.statusId)},tryScrollTo:function(e){var t=this;e&&(this.isPage?this.$router.push({name:"conversation",params:{id:e}}):this.inlineDivePosition=e,this.$nextTick((function(){t.setHighlight(e)})))},goToCurrent:function(){this.tryScrollTo(this.diveRoot||this.topLevel[0].id)},statusById:function(e){return this.statusMap[e]},parentOf:function(e){var t=this.statusById(e);if(t){var n=t.in_reply_to_status_id;if(this.statusMap[n])return n}},parentOrSelf:function(e){return this.parentOf(e)||e},ancestorsOf:function(e){for(var t=[],n=this.parentOf(e);n;)t.unshift(this.statusMap[n]),n=this.parentOf(n);return t},topLevelAncestorOrSelfId:function(e){for(var t=e,n=this.parentOf(e);n;)t=this.parentOf(t),n=this.parentOf(n);return t},resetDisplayState:function(){this.undive(),this.threadDisplayStatusObject={}}}},$c=(0,Jo.Z)(Tc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("QuickFilterSettings"),a=(0,Co.up)("QuickViewSettings"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("i18n-t"),l=(0,Co.up)("status"),d=(0,Co.up)("thread-tree");return e.hideStatus?((0,Co.wg)(),(0,Co.iD)("div",{key:1,style:(0,So.j5)(e.hiddenStyle)},null,4)):((0,Co.wg)(),(0,Co.iD)("div",{key:0,style:(0,So.j5)(e.hiddenStyle),class:(0,So.C_)(["Conversation",{"-expanded":e.isExpanded,panel:e.isExpanded}])},[e.isExpanded?((0,Co.wg)(),(0,Co.iD)("div",Zu,[(0,Co._)("span",Wu,(0,So.zw)(e.$t("timeline.conversation")),1),e.collapsable?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-unstyled -link",onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.toggleExpanded&&e.toggleExpanded.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("timeline.collapse")),1)):(0,Co.kq)("",!0),e.collapsable?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:1,conversation:!0,class:"rightside-button"})),e.collapsable?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(a,{key:2,conversation:!0,class:"rightside-button"}))])):(0,Co.kq)("",!0),(0,Co._)("div",Hu,[e.isTreeView?((0,Co.wg)(),(0,Co.iD)("div",Vu,[e.shouldShowAllConversationButton?((0,Co.wg)(),(0,Co.iD)("div",Ku,[(0,Co.Wm)(c,{keypath:"status.show_all_conversation_with_icon",tag:"button",class:"button-unstyled -link",scope:"global",onClick:(0,wo.iM)(e.diveToTopLevel,["prevent"])},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-left"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.show_all_conversation",e.otherTopLevelCount,{numStatus:e.otherTopLevelCount})),1)]})),_:1},8,["onClick"])])):(0,Co.kq)("",!0),e.shouldShowAncestors?((0,Co.wg)(),(0,Co.iD)("div",Gu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.ancestorsOf(e.diveRoot),(function(t){return(0,Co.wg)(),(0,Co.iD)("article",{key:t.id,class:(0,So.C_)(["thread-ancestor",{"thread-ancestor-has-other-replies":e.getReplies(t.id).length>1,"-faded":e.shouldFadeAncestors}])},[(0,Co.Wm)(l,{ref_for:!0,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:t,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[t.id],focused:e.focused(t.id),"in-conversation":e.isExpanded,highlight:e.getHighlight(),replies:e.getReplies(t.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status status-fadein panel-body","simple-tree":e.treeViewIsSimple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"show-other-replies-as-button":e.showOtherRepliesButtonInsideStatus,dive:function(){return e.diveIntoStatus(t.id)},"controlled-showing-tall":e.statusContentProperties[t.id].showingTall,"controlled-expanding-subject":e.statusContentProperties[t.id].expandingSubject,"controlled-showing-long-subject":e.statusContentProperties[t.id].showingLongSubject,"controlled-replying":e.statusContentProperties[t.id].replying,"controlled-media-playing":e.statusContentProperties[t.id].mediaPlaying,"controlled-toggle-showing-tall":function(){return e.toggleStatusContentProperty(t.id,"showingTall")},"controlled-toggle-expanding-subject":function(){return e.toggleStatusContentProperty(t.id,"expandingSubject")},"controlled-toggle-showing-long-subject":function(){return e.toggleStatusContentProperty(t.id,"showingLongSubject")},"controlled-toggle-replying":function(){return e.toggleStatusContentProperty(t.id,"replying")},"controlled-set-media-playing":function(n){return e.toggleStatusContentProperty(t.id,"mediaPlaying",n)},onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","simple-tree","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","show-other-replies-as-button","dive","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-replying","controlled-media-playing","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","controlled-toggle-replying","controlled-set-media-playing","onGoto","onToggleExpanded"]),e.showOtherRepliesButtonBelowStatus&&e.getReplies(t.id).length>1?((0,Co.wg)(),(0,Co.iD)("div",Yu,[(0,Co._)("div",Ju,[(0,Co.Wm)(c,{tag:"button",scope:"global",keypath:"status.ancestor_follow_with_icon",class:"button-unstyled -link thread-tree-show-replies-button",onClick:(0,wo.iM)((function(n){return e.diveIntoStatus(t.id)}),["prevent"])},{icon:(0,Co.w5)((function(){return[(0,Co.Wm)(u,{icon:"angle-double-right"})]})),text:(0,Co.w5)((function(){return[(0,Co._)("span",null,(0,So.zw)(e.$tc("status.ancestor_follow",e.getReplies(t.id).length-1,{numReplies:e.getReplies(t.id).length-1})),1)]})),_:2},1032,["onClick"])])])):(0,Co.kq)("",!0)],2)})),128))])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.showingTopLevel,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t.id,ref_for:!0,ref:"statusComponent",depth:0,status:t,"in-profile":e.inProfile,conversation:e.conversation,collapsable:e.collapsable,"is-expanded":e.isExpanded,"pinned-status-ids-object":e.pinnedStatusIdsObject,"profile-user-id":e.profileUserId,focused:e.focused,"get-replies":e.getReplies,highlight:e.maybeHighlight,"set-highlight":e.setHighlight,"toggle-expanded":e.toggleExpanded,simple:e.treeViewIsSimple,"toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,dive:e.canDive?e.diveIntoStatus:void 0},null,8,["status","in-profile","conversation","collapsable","is-expanded","pinned-status-ids-object","profile-user-id","focused","get-replies","highlight","set-highlight","toggle-expanded","simple","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","dive"])})),128))])):(0,Co.kq)("",!0),e.isLinearView?((0,Co.wg)(),(0,Co.iD)("div",Qu,[(0,Co._)("article",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.conversation,(function(t){return(0,Co.wg)(),(0,Co.j4)(l,{key:t.id,ref_for:!0,ref:"statusComponent","inline-expanded":e.collapsable&&e.isExpanded,statusoid:t,expandable:!e.isExpanded,"show-pinned":e.pinnedStatusIdsObject&&e.pinnedStatusIdsObject[t.id],focused:e.focused(t.id),"in-conversation":e.isExpanded,highlight:e.getHighlight(),replies:e.getReplies(t.id),"in-profile":e.inProfile,"profile-user-id":e.profileUserId,class:"conversation-status status-fadein panel-body","toggle-thread-display":e.toggleThreadDisplay,"thread-display-status":e.threadDisplayStatus,"show-thread-recursively":e.showThreadRecursively,"total-reply-count":e.totalReplyCount,"total-reply-depth":e.totalReplyDepth,"status-content-properties":e.statusContentProperties,"set-status-content-property":e.setStatusContentProperty,"toggle-status-content-property":e.toggleStatusContentProperty,onGoto:e.setHighlight,onToggleExpanded:e.toggleExpanded},null,8,["inline-expanded","statusoid","expandable","show-pinned","focused","in-conversation","highlight","replies","in-profile","profile-user-id","toggle-thread-display","thread-display-status","show-thread-recursively","total-reply-count","total-reply-depth","status-content-properties","set-status-content-property","toggle-status-content-property","onGoto","onToggleExpanded"])})),128))])])):(0,Co.kq)("",!0)])],6))}]]);var Bc={key:1},Uc={class:"button-unstyled title timeline-menu-title"},Mc={class:"timeline-title"};function Lc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Rc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.ptq);const qc={components:{Popover:fc.default,NavigationEntry:ri,ListsMenuContent:ui},data:function(){return{isOpen:!1}},created:function(){({friends:"nav.home_timeline",bookmarks:"nav.bookmarks",dms:"nav.dms","public-timeline":"nav.public_tl","public-external-timeline":"nav.twkn"})[this.$route.name]&&this.$store.dispatch("setLastTimeline",this.$route.name)},computed:Rc(Rc({useListsMenu:function(){return"lists-timeline"===this.$route.name}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},privateMode:function(e){return e.instance.private},federating:function(e){return e.instance.federating}})),{},{timelinesList:function(){return ii(Object.entries(Jr).map((function(e){var t=(0,c.Z)(e,2),n=t[0];return Rc(Rc({},t[1]),{},{name:n})})),{hasChats:this.pleromaChatMessagesAvailable,isFederating:this.federating,isPrivate:this.privateMode,currentUser:this.currentUser})}}),methods:{openMenu:function(){var e=this;setTimeout((function(){e.isOpen=!0}),25)},blockOpen:function(e){this.isOpen||e.stopPropagation()},timelineName:function(){var e=this.$route.name;if("tag-timeline"===e)return"#"+this.$route.params.tag;if("lists-timeline"===e)return this.$store.getters.findListTitle(this.$route.params.id);var t={friends:"nav.home_timeline",bookmarks:"nav.bookmarks",dms:"nav.dms","public-timeline":"nav.public_tl","public-external-timeline":"nav.twkn"}[this.$route.name];return t?this.$t(t):e}}},Nc=(0,Jo.Z)(qc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("ListsMenuContent"),a=(0,Co.up)("NavigationEntry"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("Popover");return(0,Co.wg)(),(0,Co.j4)(c,{trigger:"click",class:(0,So.C_)(["TimelineMenu",{open:e.isOpen}]),"bound-to":{x:"container"},"bound-to-selector":".Timeline","popover-class":"timeline-menu-popover popover-default",onShow:e.openMenu,onClose:t[1]||(t[1]=function(){return e.isOpen=!1})},{content:(0,Co.w5)((function(){return[e.useListsMenu?((0,Co.wg)(),(0,Co.j4)(s,{key:0,"show-pin":!1,class:"timelines"})):((0,Co.wg)(),(0,Co.iD)("ul",Bc,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.timelinesList,(function(e){return(0,Co.wg)(),(0,Co.j4)(a,{key:e.name,"show-pin":!1,item:e},null,8,["item"])})),128))]))]})),trigger:(0,Co.w5)((function(){return[(0,Co._)("span",Uc,[(0,Co._)("span",Mc,(0,So.zw)(e.timelineName()),1),(0,Co._)("span",null,[(0,Co.Wm)(u,{size:"sm",icon:"chevron-down"})]),(0,Co._)("span",{class:"click-blocker",onClick:t[0]||(t[0]=function(){return e.blockOpen&&e.blockOpen.apply(e,arguments)})})])]})),_:1},8,["class","onShow"])}]]);function Zc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Ht.vI.add(Vt.IJ7,Vt.b7W,Vt.Kl4,Vt.FPD,Vt.EQ8,Vt.LEp);var Wc={props:["timeline","timelineName","title","userId","listId","tag","embedded","count","pinnedStatusIds","inProfile","footerSlipgate"],data:function(){return{showScrollTop:!1,paused:!1,unfocused:!1,bottomedOut:!1,virtualScrollIndex:0,blockingClicks:!1}},components:{Status:eu.default,Conversation:$c,TimelineMenu:Nc,QuickFilterSettings:bc,QuickViewSettings:zc},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zc(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({filteredVisibleStatuses:function(){var e=this;return this.timeline.visibleStatuses.filter((function(t){return"user"!==e.timelineName||t.id>=e.timeline.minId&&t.id<=e.timeline.maxId}))},filteredPinnedStatusIds:function(){var e=this;return(this.pinnedStatusIds||[]).filter((function(t){return e.timeline.statusesObject[t]}))},newStatusCount:function(){return this.timeline.newStatusCount},showLoadButton:function(){return this.timeline.newStatusCount>0||0!==this.timeline.flushMarker},loadButtonString:function(){return 0!==this.timeline.flushMarker?this.$t("timeline.reload"):"".concat(this.$t("timeline.show_new")," (").concat(this.newStatusCount,")")},mobileLoadButtonString:function(){return 0!==this.timeline.flushMarker?"+":this.newStatusCount>99?"∞":this.newStatusCount},classes:function(){var e=this.embedded?["-nonpanel"]:["panel","panel-default"];return this.blockingClicks&&(e=e.concat(["-blocked","_misclick-prevention"])),{root:e,header:["timeline-heading"].concat(this.embedded?[]:["panel-heading","-sticky"]),body:["timeline-body"].concat(this.embedded?[]:["panel-body"]),footer:["timeline-footer"].concat(this.embedded?[]:["panel-footer"])}},pinnedStatusIdsObject:function(){return Ru()(this.pinnedStatusIds)},statusesToDisplay:function(){var e=this.timeline.visibleStatuses.length,t=Math.ceil(Math.max(3,window.innerHeight/80)),n=this.virtualScrollIndex-this.filteredPinnedStatusIds.length,o=Math.max(0,n-t),r=Math.min(e,n+t);return this.timeline.visibleStatuses.slice(o,r).map((function(e){return e.id}))},virtualScrollingEnabled:function(){return this.$store.getters.mergedConfig.virtualScrolling}},(0,s.rn)({mobileLayout:function(e){return"mobile"===e.interface.layoutType}})),created:function(){var e=this.$store,t=e.state.users.currentUser.credentials,n=0===this.timeline.visibleStatuses.length;if(window.addEventListener("scroll",this.handleScroll),e.state.api.fetchers[this.timelineName])return!1;Fe.fetchAndUpdate({store:e,credentials:t,timeline:this.timelineName,showImmediately:n,userId:this.userId,listId:this.listId,tag:this.tag})},mounted:function(){void 0!==document.hidden&&(document.addEventListener("visibilitychange",this.handleVisibilityChange,!1),this.unfocused=document.hidden),window.addEventListener("keydown",this.handleShortKey),setTimeout(this.determineVisibleStatuses,250)},unmounted:function(){window.removeEventListener("scroll",this.handleScroll),window.removeEventListener("keydown",this.handleShortKey),void 0!==document.hidden&&document.removeEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$store.commit("setLoading",{timeline:this.timelineName,value:!1})},methods:{scrollToTop:function(){window.scrollTo({top:this.$el.offsetTop})},stopBlockingClicks:ra()((function(){this.blockingClicks=!1}),1e3),blockClicksTemporarily:function(){this.blockingClicks||(this.blockingClicks=!0),this.stopBlockingClicks()},handleShortKey:function(e){["textarea","input"].includes(e.target.tagName.toLowerCase())||"."===e.key&&this.showNewStatuses()},showNewStatuses:function(){0!==this.timeline.flushMarker?(this.$store.commit("clearTimeline",{timeline:this.timelineName,excludeUserId:!0}),this.$store.commit("queueFlush",{timeline:this.timelineName,id:0}),"user"===this.timelineName&&this.$store.dispatch("fetchPinnedStatuses",this.userId),this.fetchOlderStatuses()):(this.blockClicksTemporarily(),this.$store.commit("showNewStatuses",{timeline:this.timelineName}),this.paused=!1),window.scrollTo({top:0})},fetchOlderStatuses:Nu()((function(){var e=this,t=this.$store,n=t.state.users.currentUser.credentials;t.commit("setLoading",{timeline:this.timelineName,value:!0}),Fe.fetchAndUpdate({store:t,credentials:n,timeline:this.timelineName,older:!0,showImmediately:!0,userId:this.userId,listId:this.listId,tag:this.tag}).then((function(t){var n=t.statuses;n&&0===n.length&&(e.bottomedOut=!0)})).finally((function(){return t.commit("setLoading",{timeline:e.timelineName,value:!1})}))}),1e3,void 0),determineVisibleStatuses:function(){if(this.$refs.timeline&&this.virtualScrollingEnabled){var e=this.$refs.timeline.children,t=Math.max(0,Math.min(this.virtualScrollIndex,e.length-1));if(0!==e.length){var n=Math.max(document.body.offsetHeight,window.pageYOffset),o=window.pageYOffset+.5*window.innerHeight,r=Math.floor(e.length*(o/n)),i=e[r].getBoundingClientRect().y,s=e[t].getBoundingClientRect().y;for(Math.abs(i)>s&&(r=t,i=s);i<-20&&r<e.length-1;)i+=e[r].offsetHeight,r++;for(;i>window.innerHeight+100&&r>0;)i-=e[--r].offsetHeight;this.virtualScrollIndex=r}}},scrollLoad:function(e){var t=document.body.getBoundingClientRect(),n=Math.max(t.height,-t.y);!1===this.timeline.loading&&this.$el.offsetHeight>0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchOlderStatuses()},handleScroll:Nu()((function(e){this.showScrollTop=this.$el.offsetTop<window.scrollY,this.determineVisibleStatuses(),this.scrollLoad(e)}),200),handleVisibilityChange:function(){this.unfocused=document.hidden}},watch:{newStatusCount:function(e){if(this.$store.getters.mergedConfig.streaming&&e>0){var t=document.documentElement;!((window.pageYOffset||t.scrollTop)-(t.clientTop||0)<15)||this.paused||this.unfocused&&this.$store.getters.mergedConfig.pauseOnUnfocused?this.paused=!0:this.showNewStatuses()}}}};const Hc=Wc,Vc=(0,Jo.Z)(Hc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("TimelineMenu"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("FALayers"),c=(0,Co.up)("QuickFilterSettings"),l=(0,Co.up)("QuickViewSettings"),d=(0,Co.up)("conversation");return(0,Co.wg)(),(0,Co.iD)("div",{class:(0,So.C_)(["Timeline",e.classes.root])},[(0,Co._)("div",{class:(0,So.C_)(e.classes.header)},[e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(s,{key:0,"timeline-name":e.timelineName},null,8,["timeline-name"])),e.showScrollTop&&!e.embedded?((0,Co.wg)(),(0,Co.iD)("div",Ou,[(0,Co._)("button",{class:"button-unstyled scroll-to-top-button",type:"button",title:e.$t("general.scroll_to_top"),onClick:t[0]||(t[0]=function(){return e.scrollToTop&&e.scrollToTop.apply(e,arguments)})},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{icon:"arrow-up"}),(0,Co.Wm)(a,{icon:"minus",transform:"up-7"})]})),_:1})],8,Eu)])):(0,Co.kq)("",!0),e.mobileLayout&&!e.embedded?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[e.showLoadButton?((0,Co.wg)(),(0,Co.iD)("div",zu,[(0,Co._)("button",{class:"button-unstyled loadmore-button",title:e.loadButtonString,onClick:t[1]||(t[1]=(0,wo.iM)((function(){return e.showNewStatuses&&e.showNewStatuses.apply(e,arguments)}),["prevent"]))},[(0,Co.Wm)(a,{"fixed-width":"",icon:"circle-plus"}),(0,Co._)("div",Iu,(0,So.zw)(e.mobileLoadButtonString),1)],8,Pu)])):e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",{key:1,class:"loadmore-text faint veryfaint rightside-icon",title:e.$t("timeline.up_to_date"),"aria-disabled":!0,onClick:t[2]||(t[2]=(0,wo.iM)((function(){}),["prevent"]))},[(0,Co.Wm)(a,{"fixed-width":"",icon:"check"})],8,xu))],64)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:3},[e.showLoadButton?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"button-default loadmore-button",onClick:t[3]||(t[3]=(0,wo.iM)((function(){return e.showNewStatuses&&e.showNewStatuses.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.loadButtonString),1)):e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",{key:1,class:"loadmore-text faint",onClick:t[4]||(t[4]=(0,wo.iM)((function(){}),["prevent"]))},(0,So.zw)(e.$t("timeline.up_to_date")),1))],64)),e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(c,{key:4,class:"rightside-button"})),e.embedded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.j4)(l,{key:5,class:"rightside-button"}))],2),(0,Co._)("div",{class:(0,So.C_)(e.classes.body)},[(0,Co._)("div",Tu,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.filteredPinnedStatusIds,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t+"-pinned",role:"listitem",class:"status-fadein","status-id":t,collapsable:!0,"pinned-status-ids-object":e.pinnedStatusIdsObject,"in-profile":e.inProfile,"profile-user-id":e.userId},null,8,["status-id","pinned-status-ids-object","in-profile","profile-user-id"])})),128)),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.filteredVisibleStatuses,(function(t){return(0,Co.wg)(),(0,Co.j4)(d,{key:t.id,role:"listitem",class:"status-fadein","status-id":t.id,collapsable:!0,"in-profile":e.inProfile,"profile-user-id":e.userId,"virtual-hidden":e.virtualScrollingEnabled&&!e.statusesToDisplay.includes(t.id)},null,8,["status-id","in-profile","profile-user-id","virtual-hidden"])})),128))],512)],2),(0,Co._)("div",{class:(0,So.C_)(e.classes.footer)},[((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:e.footerSlipgate,disabled:!e.embedded||!e.footerSlipgate},[0===e.count?((0,Co.wg)(),(0,Co.iD)("div",$u,(0,So.zw)(e.$t("timeline.no_statuses")),1)):e.bottomedOut?((0,Co.wg)(),(0,Co.iD)("div",Bu,(0,So.zw)(e.$t("timeline.no_more_statuses")),1)):e.timeline.loading?((0,Co.wg)(),(0,Co.iD)("div",Mu,[(0,Co.Wm)(a,{icon:"circle-notch",spin:"",size:"lg"})])):((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"button-unstyled -link",onClick:t[5]||(t[5]=(0,wo.iM)((function(t){return e.fetchOlderStatuses()}),["prevent"]))},[(0,Co._)("div",Uu,(0,So.zw)(e.$t("timeline.load_older")),1)]))],8,["to","disabled"]))],2)],2)}]]),Kc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.public}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"public"})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","public")}},Gc=(0,Jo.Z)(Kc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.public_tl"),timeline:e.timeline,"timeline-name":"public"},null,8,["title","timeline"])}]]),Yc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.publicAndExternal}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"publicAndExternal"})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","publicAndExternal")}},Jc=(0,Jo.Z)(Yc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.twkn"),timeline:e.timeline,"timeline-name":"publicAndExternal"},null,8,["title","timeline"])}]]),Qc={components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.friends}}},Xc=(0,Jo.Z)(Qc,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.timeline"),timeline:e.timeline,"timeline-name":"friends"},null,8,["title","timeline"])}]]),el={created:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})},components:{Timeline:Vc},computed:{tag:function(){return this.$route.params.tag},timeline:function(){return this.$store.state.statuses.timelines.tag}},watch:{tag:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})}},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","tag")}},tl=(0,Jo.Z)(el,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.tag,timeline:e.timeline,"timeline-name":"tag",tag:e.tag},null,8,["title","timeline","tag"])}]]),nl={computed:{timeline:function(){return this.$store.state.statuses.timelines.bookmarks}},components:{Timeline:Vc},unmounted:function(){this.$store.commit("clearTimeline",{timeline:"bookmarks"})}},ol=(0,Jo.Z)(nl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.bookmarks"),timeline:e.timeline,"timeline-name":"bookmarks"},null,8,["title","timeline"])}]]),rl={components:{Conversation:$c},computed:{statusId:function(){return this.$route.params.id}}},il=(0,Jo.Z)(rl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("conversation");return(0,Co.wg)(),(0,Co.j4)(s,{collapsable:!1,"is-page":"true","status-id":e.statusId},null,8,["status-id"])}]]);var sl={class:"panel panel-default"},al={class:"panel-heading"},ul={class:"title"},cl=["label"],ll=["label"],dl=["label"],pl=["label"],ml=["label"],hl=["label"],fl=n(79354),gl={mentions:["mention"],"likes+repeats":["repeat","like"],follows:["follow"],reactions:["pleroma:emoji_reaction"],reports:["pleroma:report"],moves:["move"]};const vl={data:function(){return{allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,filterMode:gl.mentions,canSeeReports:this.$store.state.users.currentUser.privileges.includes("reports_manage_reports")}},methods:{onModeSwitch:function(e){this.filterMode=gl[e]}},components:{Notifications:ya.default,TabSwitcher:fl.Z}},wl=(0,Jo.Z)(vl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("tab-switcher"),a=(0,Co.up)("Notifications");return(0,Co.wg)(),(0,Co.iD)("div",sl,[(0,Co._)("div",al,[(0,Co._)("div",ul,(0,So.zw)(e.$t("nav.interactions")),1)]),(0,Co.Wm)(s,{ref:"tabSwitcher","on-switch":e.onModeSwitch},{default:(0,Co.w5)((function(){return[(0,Co._)("span",{key:"mentions",label:e.$t("nav.mentions")},null,8,cl),(0,Co._)("span",{key:"likes+repeats",label:e.$t("interactions.favs_repeats")},null,8,ll),(0,Co._)("span",{key:"follows",label:e.$t("interactions.follows")},null,8,dl),(0,Co._)("span",{key:"reactions",label:e.$t("interactions.emoji_reactions")},null,8,pl),e.canSeeReports?((0,Co.wg)(),(0,Co.iD)("span",{key:"reports",label:e.$t("interactions.reports")},null,8,ml)):(0,Co.kq)("",!0),e.allowFollowingMove?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("span",{key:"moves",label:e.$t("interactions.moves")},null,8,hl))]})),_:1},8,["on-switch"]),(0,Co.Wm)(a,{ref:"notifications","no-heading":!0,"minimal-mode":!0,"filter-mode":e.filterMode},null,8,["filter-mode"])])}]]),bl={computed:{timeline:function(){return this.$store.state.statuses.timelines.dms}},components:{Timeline:Vc}},yl=(0,Jo.Z)(bl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:e.$t("nav.dms"),timeline:e.timeline,"timeline-name":"dms"},null,8,["title","timeline"])}]]);var Dl={key:0},_l={key:1,class:"chat-list panel panel-default"},kl={class:"panel-heading -sticky"},Cl={class:"title"},Sl={class:"panel-body"},jl={key:0,class:"timeline"},Fl={key:1,class:"emtpy-chat-list-alert"},Al={class:"chat-list-item-left"},Ol={class:"chat-list-item-center"},El={class:"heading"},zl={key:0,class:"name-and-account-name"},Pl=(0,Co._)("span",{class:"heading-right"},null,-1),Il={class:"time-wrapper"},xl={class:"chat-preview"},Tl={key:0,class:"badge badge-notification unread-chat-count"},$l=n(10252),Bl=n(48173),Ul=n(19066),Ml=n(1840),Ll=["title"],Rl=n(92820);const ql={name:"ChatTitle",components:{UserAvatar:Bl.default,RichContent:Rl.Z,UserPopover:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},props:["user","withAvatar"],computed:{title:function(){return this.user?this.user.screen_name_ui:""},htmlTitle:function(){return this.user?this.user.name_html:""}}},Nl=(0,Jo.Z)(ql,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("UserPopover"),u=(0,Co.up)("RichContent");return(0,Co.wg)(),(0,Co.iD)("div",{class:"chat-title",title:e.title},[e.withAvatar&&e.user?((0,Co.wg)(),(0,Co.j4)(a,{key:0,class:"avatar-container","user-id":e.user.id},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{class:"titlebar-avatar",user:e.user},null,8,["user"])]})),_:1},8,["user-id"])):(0,Co.kq)("",!0),e.user?((0,Co.wg)(),(0,Co.j4)(u,{key:1,class:"username",title:"@"+(e.user&&e.user.screen_name_ui),html:e.htmlTitle,emoji:e.user.emoji||[]},null,8,["title","html","emoji"])):(0,Co.kq)("",!0)],8,Ll)}]]);function Zl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Wl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zl(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Hl={name:"ChatListItem",props:["chat"],components:{UserAvatar:Bl.default,AvatarList:Ul.Z,Timeago:Ml.Z,ChatTitle:Nl,StatusBody:$l.Z},computed:Wl(Wl({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{attachmentInfo:function(){if(0!==this.chat.lastMessage.attachments.length){var e=this.chat.lastMessage.attachments.map((function(e){return Fn.ZP.fileType(e.mimetype)}));return e.includes("video")?this.$t("file_type.video"):e.includes("audio")?this.$t("file_type.audio"):e.includes("image")?this.$t("file_type.image"):this.$t("file_type.file")}},messageForStatusContent:function(){var e=this.chat.lastMessage,t=e?e.emojis:[],n=e&&e.account_id===this.currentUser.id,o=e?this.attachmentInfo||e.content:"",r=n?"<i>".concat(this.$t("chats.you"),"</i> ").concat(o):o;return{summary:"",emojis:t,raw_html:r,text:r,attachments:[]}}}),methods:{openChat:function(e){this.chat.id&&this.$router.push({name:"chat",params:{username:this.currentUser.screen_name,recipient_id:this.chat.account.id}})}}},Vl=(0,Jo.Z)(Hl,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("ChatTitle"),u=(0,Co.up)("Timeago"),c=(0,Co.up)("StatusBody");return(0,Co.wg)(),(0,Co.iD)("div",{class:"chat-list-item",onClickCapture:t[0]||(t[0]=(0,wo.iM)((function(){return e.openChat&&e.openChat.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",Al,[(0,Co.Wm)(s,{user:e.chat.account,height:"48px",width:"48px"},null,8,["user"])]),(0,Co._)("div",Ol,[(0,Co._)("div",El,[e.chat.account?((0,Co.wg)(),(0,Co.iD)("span",zl,[(0,Co.Wm)(a,{user:e.chat.account},null,8,["user"])])):(0,Co.kq)("",!0),Pl,(0,Co._)("div",Il,[(0,Co.Wm)(u,{time:e.chat.updated_at,"auto-update":60},null,8,["time"])])]),(0,Co._)("div",xl,[(0,Co.Wm)(c,{class:"chat-preview-body",status:e.messageForStatusContent,"single-line":!0},null,8,["status"]),e.chat.unread>0?((0,Co.wg)(),(0,Co.iD)("div",Tl,(0,So.zw)(e.chat.unread),1)):(0,Co.kq)("",!0)])])],32)}]]);var Kl={class:"panel-default panel chat-new"},Gl={ref:"header",class:"panel-heading"},Yl={class:"input-wrap"},Jl={class:"input-search"},Ql={class:"member-list"},Xl=["onClickCapture"],ed=n(29076);function td(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function nd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?td(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):td(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.wn1,Vt.A35);var od={components:{BasicUserCard:ed.Z,UserAvatar:Bl.default},data:function(){return{suggestions:[],userIds:[],loading:!1,query:""}},created:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.backendInteractor.chats();case 2:t.sent.chats.forEach((function(t){return e.suggestions.push(t.account)}));case 5:case"end":return t.stop()}}),t)})))()},computed:nd(nd({users:function(){var e=this;return this.userIds.map((function(t){return e.findUser(t)}))},availableUsers:function(){return 0!==this.query.length?this.users:this.suggestions}},(0,s.rn)({currentUser:function(e){return e.users.currentUser},backendInteractor:function(e){return e.api.backendInteractor}})),(0,s.Se)(["findUser"])),methods:{goBack:function(){this.$emit("cancel")},goToChat:function(e){this.$router.push({name:"chat",params:{recipient_id:e.id}})},onInput:function(){this.search(this.query)},addUser:function(e){this.selectedUserIds.push(e.id),this.query=""},removeUser:function(e){this.selectedUserIds=this.selectedUserIds.filter((function(t){return t!==e}))},search:function(e){var t=this;e?(this.loading=!0,this.userIds=[],this.$store.dispatch("search",{q:e,resolve:!0,type:"accounts"}).then((function(e){t.loading=!1,t.userIds=e.accounts.map((function(e){return e.id}))}))):this.loading=!1}}};const rd=od,id=(0,Jo.Z)(rd,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("BasicUserCard");return(0,Co.wg)(),(0,Co.iD)("div",Kl,[(0,Co._)("div",Gl,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){return e.goBack&&e.goBack.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})])],512),(0,Co._)("div",Yl,[(0,Co._)("div",Jl,[(0,Co.Wm)(s,{class:"search-icon fa-scale-110 fa-old-padding",icon:"search"})]),(0,Co.wy)((0,Co._)("input",{ref:"search","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.query=t}),placeholder:"Search people",onInput:t[2]||(t[2]=function(){return e.onInput&&e.onInput.apply(e,arguments)})},null,544),[[wo.nr,e.query]])]),(0,Co._)("div",Ql,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.availableUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co._)("div",{onClickCapture:(0,wo.iM)((function(n){return e.goToChat(t)}),["prevent"])},[(0,Co.Wm)(a,{user:t},null,8,["user"])],40,Xl)])})),128))])])}]]);function sd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ad(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sd(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const ud={components:{ChatListItem:Vl,List:tu.Z,ChatNew:id},computed:ad(ad({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),(0,s.Se)(["sortedChatList"])),data:function(){return{isNew:!1}},created:function(){this.$store.dispatch("fetchChats",{latest:!0})},methods:{cancelNewChat:function(){this.isNew=!1,this.$store.dispatch("fetchChats",{latest:!0})},newChat:function(){this.isNew=!0}}},cd=(0,Jo.Z)(ud,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("ChatNew"),a=(0,Co.up)("ChatListItem"),u=(0,Co.up)("List");return e.isNew?((0,Co.wg)(),(0,Co.iD)("div",Dl,[(0,Co.Wm)(s,{onCancel:e.cancelNewChat},null,8,["onCancel"])])):((0,Co.wg)(),(0,Co.iD)("div",_l,[(0,Co._)("div",kl,[(0,Co._)("span",Cl,(0,So.zw)(e.$t("chats.chats")),1),(0,Co._)("button",{class:"button-default",onClick:t[0]||(t[0]=function(){return e.newChat&&e.newChat.apply(e,arguments)})},(0,So.zw)(e.$t("chats.new")),1)]),(0,Co._)("div",Sl,[e.sortedChatList.length>0?((0,Co.wg)(),(0,Co.iD)("div",jl,[(0,Co.Wm)(u,{items:e.sortedChatList},{item:(0,Co.w5)((function(e){var t=e.item;return[((0,Co.wg)(),(0,Co.j4)(a,{key:t.id,compact:!1,chat:t},null,8,["chat"]))]})),_:1},8,["items"])])):((0,Co.wg)(),(0,Co.iD)("div",Fl,[(0,Co._)("span",null,(0,So.zw)(e.$t("chats.empty_chat_list_placeholder")),1)]))])]))}]]);var ld={class:"chat-view"},dd={class:"chat-view-inner"},pd={ref:"inner",class:"panel-default panel chat-view-body"},md={ref:"header",class:"panel-heading -sticky chat-view-heading"},hd={class:"title text-center"},fd={key:1,class:"chat-loading-error"},gd={class:"alert error"},vd={ref:"footer",class:"panel-body footer"},wd={key:0,class:"badge badge-notification unread-chat-count unread-message-count"},bd={key:0,class:"avatar-wrapper"},yd={class:"chat-message-inner"},Dd={class:"dropdown-menu"},_d=["title"],kd={class:"created-at"},Cd={key:1,class:"chat-message-date-separator"},Sd=n(66596),jd=n(67671),Fd=n(92798),Ad=n(39776);const Od={name:"Timeago",props:["date"],computed:{displayDate:function(){var e=new Date;return e.setHours(0,0,0,0),this.date.getTime()===e.getTime()?this.$t("display_date.today"):this.date.toLocaleDateString(Ad.Z.internalToBrowserLocale(this.$i18n.locale),{day:"numeric",month:"long"})}}},Ed=(0,Jo.Z)(Od,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("time",null,(0,So.zw)(i.displayDate),1)}]]);function zd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Pd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zd(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC,Vt.cNd);const Id={name:"ChatMessage",props:["author","edited","noHeading","chatViewItem","hoveredMessageChain"],emits:["hover"],components:{Popover:fc.default,Attachment:Sd.Z,StatusContent:$l.Z,UserAvatar:Bl.default,Gallery:jd.Z,LinkPreview:Fd.Z,ChatMessageDate:Ed,UserPopover:(0,Co.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},computed:Pd(Pd({createdAt:function(){return this.chatViewItem.data.created_at.toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit",hour12:!1})},isCurrentUser:function(){return this.message.account_id===this.currentUser.id},message:function(){return this.chatViewItem.data},isMessage:function(){return"message"===this.chatViewItem.type},messageForStatusContent:function(){return{summary:"",emojis:this.message.emojis,raw_html:this.message.content||"",text:this.message.content||"",attachments:this.message.attachments}},hasAttachment:function(){return this.message.attachments.length>0}},(0,s.rn)({betterShadow:function(e){return e.interface.browserSupport.cssFilter},currentUser:function(e){return e.users.currentUser},restrictedNicknames:function(e){return e.instance.restrictedNicknames}})),{},{popoverMarginStyle:function(){return this.isCurrentUser?{}:{left:50}}},(0,s.Se)(["mergedConfig","findUser"])),data:function(){return{hovered:!1,menuOpened:!1}},methods:{onHover:function(e){this.$emit("hover",{isHovered:e,messageChainId:this.chatViewItem.messageChainId})},deleteMessage:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!window.confirm(e.$t("chats.delete_confirm"))){t.next=4;break}return t.next=4,e.$store.dispatch("deleteChatMessage",{messageId:e.chatViewItem.data.id,chatId:e.chatViewItem.data.chat_id});case 4:e.hovered=!1,e.menuOpened=!1;case 6:case"end":return t.stop()}}),t)})))()}}},xd=(0,Jo.Z)(Id,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserAvatar"),a=(0,Co.up)("UserPopover"),u=(0,Co.up)("FAIcon"),c=(0,Co.up)("Popover"),l=(0,Co.up)("StatusContent"),d=(0,Co.up)("ChatMessageDate");return e.isMessage?((0,Co.wg)(),(0,Co.iD)("div",{key:0,class:(0,So.C_)(["chat-message-wrapper",{"hovered-message-chain":e.hoveredMessageChain}]),onMouseover:t[5]||(t[5]=function(t){return e.onHover(!0)}),onMouseleave:t[6]||(t[6]=function(t){return e.onHover(!1)})},[(0,Co._)("div",{class:(0,So.C_)(["chat-message",[{outgoing:e.isCurrentUser,incoming:!e.isCurrentUser}]])},[e.isCurrentUser?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",bd,[e.chatViewItem.isHead?((0,Co.wg)(),(0,Co.j4)(a,{key:0,"user-id":e.author.id},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{compact:!0,"better-shadow":e.betterShadow,user:e.author},null,8,["better-shadow","user"])]})),_:1},8,["user-id"])):(0,Co.kq)("",!0)])),(0,Co._)("div",yd,[(0,Co._)("div",{class:"status-body",style:(0,So.j5)({"min-width":e.message.attachment?"80%":""})},[(0,Co._)("div",{class:(0,So.C_)(["media status",{"without-attachment":!e.hasAttachment,pending:e.chatViewItem.data.pending,error:e.chatViewItem.data.error}]),style:{position:"relative"},onMouseenter:t[3]||(t[3]=function(t){return e.hovered=!0}),onMouseleave:t[4]||(t[4]=function(t){return e.hovered=!1})},[(0,Co._)("div",{class:(0,So.C_)(["chat-message-menu",{visible:e.hovered||e.menuOpened}])},[(0,Co.Wm)(c,{trigger:"click",placement:"top","bound-to-selector":".chat-view-inner","bound-to":{x:"container"},margin:e.popoverMarginStyle,onShow:t[1]||(t[1]=function(t){return e.menuOpened=!0}),onClose:t[2]||(t[2]=function(t){return e.menuOpened=!1})},{content:(0,Co.w5)((function(){return[(0,Co._)("div",Dd,[(0,Co._)("button",{class:"button-default dropdown-item dropdown-item-icon",onClick:t[0]||(t[0]=function(){return e.deleteMessage&&e.deleteMessage.apply(e,arguments)})},[(0,Co.Wm)(u,{icon:"times"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("chats.delete")),1)])])]})),trigger:(0,Co.w5)((function(){return[(0,Co._)("button",{class:"button-default menu-icon",title:e.$t("chats.more")},[(0,Co.Wm)(u,{icon:"ellipsis-h"})],8,_d)]})),_:1},8,["margin"])],2),(0,Co.Wm)(l,{class:"message-content",status:e.messageForStatusContent,"full-content":!0},{footer:(0,Co.w5)((function(){return[(0,Co._)("span",kd,(0,So.zw)(e.createdAt),1)]})),_:1},8,["status"])],34)],4)])],2)],34)):((0,Co.wg)(),(0,Co.iD)("div",Cd,[(0,Co.Wm)(d,{date:e.chatViewItem.date},null,8,["date"])]))}]]);var Td=function(){return{scrollTop:window.scrollY,scrollHeight:document.documentElement.scrollHeight,offsetHeight:window.innerHeight}};function $d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Bd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$d(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.ptq,Vt.A35);var Ud={components:{ChatMessage:xd,ChatTitle:Nl,PostStatusForm:Ir.Z},data:function(){return{jumpToBottomButtonVisible:!1,hoveredMessageChainId:void 0,lastScrollPosition:{},scrollableContainerHeight:"100%",errorLoadingChat:!1,messageRetriers:{}}},created:function(){this.startFetching(),window.addEventListener("resize",this.handleResize)},mounted:function(){var e=this;window.addEventListener("scroll",this.handleScroll),void 0!==document.hidden&&document.addEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$nextTick((function(){e.handleResize()}))},unmounted:function(){window.removeEventListener("scroll",this.handleScroll),window.removeEventListener("resize",this.handleResize),void 0!==document.hidden&&document.removeEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$store.dispatch("clearCurrentChat")},computed:Bd(Bd({recipient:function(){return this.currentChat&&this.currentChat.account},recipientId:function(){return this.$route.params.recipient_id},formPlaceholder:function(){return this.recipient?this.$t("chats.message_user",{nickname:this.recipient.screen_name_ui}):""},chatViewItems:function(){return Jn.getView(this.currentChatMessageService)},newMessageCount:function(){return this.currentChatMessageService&&this.currentChatMessageService.newMessageCount},streamingEnabled:function(){return this.mergedConfig.useStreamingApi&&this.mastoUserSocketStatus===h._z.JOINED}},(0,s.Se)(["currentChat","currentChatMessageService","findOpenedChatByRecipientId","mergedConfig"])),(0,s.rn)({backendInteractor:function(e){return e.api.backendInteractor},mastoUserSocketStatus:function(e){return e.api.mastoUserSocketStatus},mobileLayout:function(e){return"mobile"===e.interface.layoutType},currentUser:function(e){return e.users.currentUser}})),watch:{chatViewItems:function(){var e=this,t=this.bottomedOut(10);this.$nextTick((function(){t&&e.scrollDown()}))},$route:function(){this.startFetching()},mastoUserSocketStatus:function(e){e===h._z.JOINED&&this.fetchChat({isFirstFetch:!0})}},methods:{onMessageHover:function(e){var t=e.isHovered,n=e.messageChainId;this.hoveredMessageChainId=t?n:void 0},onFilesDropped:function(){var e=this;this.$nextTick((function(){e.handleResize()}))},handleVisibilityChange:function(){var e=this;this.$nextTick((function(){!document.hidden&&e.bottomedOut(10)&&e.scrollDown({forceRead:!0})}))},handleResize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.delayed,o=void 0!==n&&n;o?setTimeout((function(){e.handleResize(Bd(Bd({},t),{},{delayed:!1}))}),100):this.$nextTick((function(){var t=Td().offsetHeight,n=(void 0===t?void 0:t)-e.lastScrollPosition.offsetHeight;0===n||e.bottomedOut()||e.$nextTick((function(){window.scrollBy({top:-Math.trunc(n)})})),e.lastScrollPosition=Td()}))},scrollDown:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.behavior,n=void 0===t?"auto":t,o=e.forceRead,r=void 0!==o&&o;this.$nextTick((function(){window.scrollTo({top:document.documentElement.scrollHeight,behavior:n})})),r&&this.readChat()},readChat:function(){if(this.currentChatMessageService&&this.currentChatMessageService.maxId&&!document.hidden){var e=this.currentChatMessageService.maxId;this.$store.dispatch("readChat",{id:this.currentChat.id,lastReadId:e})}},bottomedOut:function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=window.scrollY+e;return document.documentElement.scrollHeight-window.innerHeight<=t}(e)},reachedTop:function(){return window.scrollY<=0},cullOlderCheck:function(){var e=this;window.setTimeout((function(){e.bottomedOut(10)&&e.$store.dispatch("cullOlderMessages",e.currentChatMessageService.chatId)}),5e3)},handleScroll:Nu()((function(){var e=this;this.lastScrollPosition=Td(),this.currentChat&&(this.reachedTop()?this.fetchChat({maxId:this.currentChatMessageService.minId}):this.bottomedOut(10)?(this.jumpToBottomButtonVisible=!1,this.cullOlderCheck(),this.newMessageCount>0&&window.setTimeout((function(){e.$el&&e.readChat()}),1500)):this.jumpToBottomButtonVisible=!0)}),200),handleScrollUp:function(e){var t,n,o=Td();window.scrollTo({top:(t=e,n=o,t.scrollTop+(n.scrollHeight-t.scrollHeight))})},fetchChat:function(e){var t=this,n=e.isFirstFetch,o=void 0!==n&&n,r=e.fetchLatest,i=void 0!==r&&r,s=e.maxId,a=this.currentChatMessageService;if(a&&(!i||!this.streamingEnabled)){var u=a.chatId,c=!!s,l=i&&a.maxId;return this.backendInteractor.chatMessages({id:u,maxId:s,sinceId:l}).then((function(e){o&&Jn.clear(a);var n=Td();t.$store.dispatch("addChatMessages",{chatId:u,messages:e}).then((function(){t.$nextTick((function(){c&&t.handleScrollUp(n),!(document.documentElement.scrollHeight>window.innerHeight)&&e.length>0&&t.fetchChat({maxId:t.currentChatMessageService.minId})}))}))}))}},startFetching:function(){var e=this;return(0,o.Z)(i().mark((function t(){var n;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.findOpenedChatByRecipientId(e.recipientId)){t.next=12;break}return t.prev=2,t.next=5,e.backendInteractor.getOrCreateChat({accountId:e.recipientId});case 5:n=t.sent,t.next=12;break;case 8:t.prev=8,t.t0=t.catch(2),console.error("Error creating or getting a chat",t.t0),e.errorLoadingChat=!0;case 12:n&&(e.$nextTick((function(){e.scrollDown({forceRead:!0})})),e.$store.dispatch("addOpenedChat",{chat:n}),e.doStartFetching());case 13:case"end":return t.stop()}}),t,null,[[2,8]])})))()},doStartFetching:function(){var e=this;this.$store.dispatch("startFetchingCurrentChat",{fetcher:function(){return(0,Ce.F)((function(){return e.fetchChat({fetchLatest:!0})}),5e3)}}),this.fetchChat({isFirstFetch:!0})},handleAttachmentPosting:function(){var e=this;this.$nextTick((function(){e.handleResize(),e.scrollDown({forceRead:!0})}))},sendMessage:function(e){var t=this,n=e.status,o=e.media,r=e.idempotencyKey,i={id:this.currentChat.id,content:n,idempotencyKey:r};o[0]&&(i.mediaId=o[0].id);var s=function(e){var t=e.attachments,n=e.userId,o=e.idempotencyKey,r={content:e.content,chat_id:e.chatId,created_at:new Date,id:"".concat((new Date).getTime()),attachments:t,account_id:n,idempotency_key:o,emojis:[],pending:!0,isNormalized:!0};return t[0]&&(r.attachment=t[0]),r}({attachments:o,chatId:this.currentChat.id,content:n,userId:this.currentUser.id,idempotencyKey:r});return this.$store.dispatch("addChatMessages",{chatId:this.currentChat.id,messages:[s]}).then((function(){t.handleAttachmentPosting()})),this.doSendMessage({params:i,fakeMessage:s,retriesLeft:10})},doSendMessage:function(e){var t=this,n=e.params,o=e.fakeMessage,r=e.retriesLeft,i=void 0===r?10:r;if(!(i<=0))return this.backendInteractor.sendChatMessage(n).then((function(e){return t.$store.dispatch("addChatMessages",{chatId:t.currentChat.id,updateMaxId:!1,messages:[Bd(Bd({},e),{},{fakeId:o.id})]}),e})).catch((function(e){return console.error("Error sending message",e),t.$store.dispatch("handleMessageError",{chatId:t.currentChat.id,fakeId:o.id,isRetry:10!==i}),(e.statusCode>=500&&e.statusCode<600||"Failed to fetch"===e.message)&&(t.messageRetriers[o.id]=setTimeout((function(){t.doSendMessage({params:n,fakeMessage:o,retriesLeft:i-1})}),1e3*Math.pow(2,10-i))),{}})),Promise.resolve(o)},goBack:function(){this.$router.push({name:"chats",params:{username:this.currentUser.screen_name}})}}};const Md=Ud,Ld=(0,Jo.Z)(Md,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("ChatTitle"),u=(0,Co.up)("ChatMessage"),c=(0,Co.up)("PostStatusForm");return(0,Co.wg)(),(0,Co.iD)("div",ld,[(0,Co._)("div",dd,[(0,Co._)("div",pd,[(0,Co._)("div",md,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){return e.goBack&&e.goBack.apply(e,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})]),(0,Co._)("div",hd,[(0,Co.Wm)(a,{user:e.recipient,"with-avatar":!0},null,8,["user"])])],512),(0,Co._)("div",{class:"message-list",style:(0,So.j5)({height:e.scrollableContainerHeight})},[e.errorLoadingChat?((0,Co.wg)(),(0,Co.iD)("div",fd,[(0,Co._)("div",gd,(0,So.zw)(e.$t("chats.error_loading_chat")),1)])):((0,Co.wg)(!0),(0,Co.iD)(Co.HY,{key:0},(0,Co.Ko)(e.chatViewItems,(function(t){return(0,Co.wg)(),(0,Co.j4)(u,{key:t.id,author:e.recipient,"chat-view-item":t,"hovered-message-chain":t.messageChainId===e.hoveredMessageChainId,onHover:e.onMessageHover},null,8,["author","chat-view-item","hovered-message-chain","onHover"])})),128))],4),(0,Co._)("div",vd,[(0,Co._)("div",{class:(0,So.C_)(["jump-to-bottom-button",{visible:e.jumpToBottomButtonVisible}]),onClick:t[1]||(t[1]=function(t){return e.scrollDown({behavior:"smooth"})})},[(0,Co._)("span",null,[(0,Co.Wm)(s,{icon:"chevron-down"}),e.newMessageCount?((0,Co.wg)(),(0,Co.iD)("div",wd,(0,So.zw)(e.newMessageCount),1)):(0,Co.kq)("",!0)])],2),(0,Co.Wm)(c,{"disable-subject":!0,"disable-scope-selector":!0,"disable-notice":!0,"disable-lock-warning":!0,"disable-polls":!0,"disable-sensitivity-checkbox":!0,"disable-submit":e.errorLoadingChat||!e.currentChat,"disable-preview":!0,"optimistic-posting":!0,"post-handler":e.sendMessage,"submit-on-enter":!e.mobileLayout,"preserve-focus":!e.mobileLayout,"auto-focus":!e.mobileLayout,placeholder:e.formPlaceholder,"file-limit":1,"max-height":"160","emoji-picker-placement":"top",onResize:e.handleResize},null,8,["disable-submit","post-handler","submit-on-enter","preserve-focus","auto-focus","placeholder","onResize"])],512)],512)])])}]]);var Rd={key:0,class:"user-profile panel panel-default"},qd={key:0,class:"user-birthday"},Nd={key:1,class:"user-profile-fields"},Zd=["title"],Wd=["title"],Hd=["label","disabled"],Vd=["label","disabled"],Kd={key:1,class:"panel user-profile-placeholder"},Gd={class:"panel-heading"},Yd={class:"title"},Jd={class:"panel-body"},Qd={key:0},Xd={class:"follow-card-content-container"},ep={key:0,class:"faint"},tp={key:0,class:"follow-card-follow-button"},np=n(72895),op=n(34837),rp=["disabled","title"],ip=["textContent"];const sp={props:["user","relationship"],data:function(){return{inProgress:!1,showingConfirmRemoveFollower:!1}},components:{ConfirmModal:Da.Z},computed:{label:function(){return this.inProgress?this.$t("user_card.follow_progress"):this.$t("user_card.remove_follower")},shouldConfirmRemoveUserFromFollowers:function(){return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers}},methods:{showConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!0},hideConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!1},onClick:function(){this.shouldConfirmRemoveUserFromFollowers?this.showConfirmRemoveUserFromFollowers():this.doRemoveUserFromFollowers()},doRemoveUserFromFollowers:function(){var e=this;this.inProgress=!0,this.$store.dispatch("removeUserFromFollowers",this.relationship.id).then((function(){e.inProgress=!1})),this.hideConfirmRemoveUserFromFollowers()}}},ap=(0,Jo.Z)(sp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("i18n-t"),a=(0,Co.up)("confirm-modal");return(0,Co.wg)(),(0,Co.iD)("button",{class:(0,So.C_)(["btn button-default follow-button",{toggled:e.inProgress}]),disabled:e.inProgress,title:e.$t("user_card.remove_follower"),onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[(0,Co.Uk)((0,So.zw)(e.label)+" ",1),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingConfirmRemoveFollower?((0,Co.wg)(),(0,Co.j4)(a,{key:0,title:e.$t("user_card.remove_follower_confirm_title"),"confirm-text":e.$t("user_card.remove_follower_confirm_accept_button"),"cancel-text":e.$t("user_card.remove_follower_confirm_cancel_button"),onAccepted:e.doRemoveUserFromFollowers,onCancelled:e.hideConfirmRemoveUserFromFollowers},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(s,{keypath:"user_card.remove_follower_confirm",tag:"span"},{user:(0,Co.w5)((function(){return[(0,Co._)("span",{textContent:(0,So.zw)(e.user.screen_name_ui)},null,8,ip)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))],10,rp)}]]),up={props:["user","noFollowsYou"],components:{BasicUserCard:ed.Z,RemoteFollow:np.Z,FollowButton:op.Z,RemoveFollowerButton:ap},computed:{isMe:function(){return this.$store.state.users.currentUser.id===this.user.id},loggedIn:function(){return this.$store.state.users.currentUser},relationship:function(){return this.$store.getters.relationship(this.user.id)}}},cp=(0,Jo.Z)(up,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("RemoteFollow"),a=(0,Co.up)("FollowButton"),u=(0,Co.up)("RemoveFollowerButton"),c=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.j4)(c,{user:e.user},{default:(0,Co.w5)((function(){return[(0,Co._)("div",Xd,[e.isMe||!e.noFollowsYou&&e.relationship.followed_by?((0,Co.wg)(),(0,Co.iD)("span",ep,(0,So.zw)(e.isMe?e.$t("user_card.its_you"):e.$t("user_card.follows_you")),1)):(0,Co.kq)("",!0),e.loggedIn?e.isMe?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[(0,Co.Wm)(a,{relationship:e.relationship,"label-following":e.$t("user_card.follow_unfollow"),class:"follow-card-follow-button",user:e.user},null,8,["relationship","label-following","user"]),e.noFollowsYou&&e.relationship.followed_by?((0,Co.wg)(),(0,Co.j4)(u,{key:0,user:e.user,relationship:e.relationship,class:"follow-card-button"},null,8,["user","relationship"])):(0,Co.kq)("",!0)],64)):((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:1},[e.relationship.following?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",tp,[(0,Co.Wm)(s,{user:e.user},null,8,["user"])]))],64))])]})),_:1},8,["user"])}]]);var lp=n(98027);Ht.vI.add(Vt.IJ7,Vt.xiy);var dp=(0,lp.Z)({fetch:function(e,t){return t.dispatch("fetchFollowers",e.userId)},select:function(e,t){return Dt()(t.getters.findUser(e.userId),"followerIds",[]).map((function(e){return t.getters.findUser(e)}))},destroy:function(e,t){return t.dispatch("clearFollowers",e.userId)},childPropName:"items",additionalPropNames:["userId"]})(tu.Z),pp=(0,lp.Z)({fetch:function(e,t){return t.dispatch("fetchFriends",e.userId)},select:function(e,t){return Dt()(t.getters.findUser(e.userId),"friendIds",[]).map((function(e){return t.getters.findUser(e)}))},destroy:function(e,t){return t.dispatch("clearFriends",e.userId)},childPropName:"items",additionalPropNames:["userId"]})(tu.Z),mp="statuses";const hp={data:function(){return{error:!1,userId:null,tab:mp,footerRef:null}},created:function(){var e=this.$route.params;this.load({name:e.name,id:e.id}),this.tab=Dt()(this.$route,"query.tab",mp)},unmounted:function(){this.stopFetching()},computed:{timeline:function(){return this.$store.state.statuses.timelines.user},favorites:function(){return this.$store.state.statuses.timelines.favorites},media:function(){return this.$store.state.statuses.timelines.media},isUs:function(){return this.userId&&this.$store.state.users.currentUser.id&&this.userId===this.$store.state.users.currentUser.id},user:function(){return this.$store.getters.findUser(this.userId)},isExternal:function(){return"external-user-profile"===this.$route.name},followsTabVisible:function(){return this.isUs||!this.user.hide_follows},followersTabVisible:function(){return this.isUs||!this.user.hide_followers},formattedBirthday:function(){var e=Ad.Z.internalToBrowserLocale(this.$i18n.locale);return this.user.birthday&&new Date(Date.parse(this.user.birthday)).toLocaleDateString(e,{timeZone:"UTC",day:"numeric",month:"long",year:"numeric"})}},methods:{setFooterRef:function(e){this.footerRef=e},load:function(e){var t=this,n=function(e,n){n!==t.$store.state.statuses.timelines[e].userId&&t.$store.commit("clearTimeline",{timeline:e}),t.$store.dispatch("startFetchingTimeline",{timeline:e,userId:n})},o=function(e){t.userId=e,n("user",e),n("media",e),t.isUs&&n("favorites",e),t.$store.dispatch("fetchPinnedStatuses",e)};this.userId=null,this.error=!1;var r=e.id,i=e.name,s=r?this.$store.getters.findUser(r):this.$store.getters.findUserByName(i);s?o(s.id):(r?this.$store.dispatch("fetchUser",r):this.$store.dispatch("fetchUserByName",i)).then((function(e){var t=e.id;return o(t)})).catch((function(e){var n=Dt()(e,"error.error");t.error="No user with such user_id"===n?t.$t("user_profile.profile_does_not_exist"):n||t.$t("user_profile.profile_loading_error")}))},stopFetching:function(){this.$store.dispatch("stopFetchingTimeline","user"),this.$store.dispatch("stopFetchingTimeline","favorites"),this.$store.dispatch("stopFetchingTimeline","media")},switchUser:function(e){this.stopFetching(),this.load(e)},onTabSwitch:function(e){this.tab=e,this.$router.replace({query:{tab:e}})},linkClicked:function(e){var t=e.target;"SPAN"===t.tagName&&(t=t.parentNode),"A"===t.tagName&&window.open(t.href,"_blank")}},watch:{"$route.params.id":function(e){e&&this.switchUser({id:e})},"$route.params.name":function(e){e&&this.switchUser({name:e})},"$route.query":function(e){this.tab=e.tab||mp}},components:{UserCard:xr.Z,Timeline:Vc,FollowerList:dp,FriendList:pp,FollowCard:cp,TabSwitcher:fl.Z,Conversation:$c,RichContent:Rl.Z}},fp=(0,Jo.Z)(hp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("UserCard"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("RichContent"),c=(0,Co.up)("Timeline"),l=(0,Co.up)("FollowCard"),d=(0,Co.up)("FriendList"),p=(0,Co.up)("FollowerList"),m=(0,Co.up)("tab-switcher");return(0,Co.wg)(),(0,Co.iD)("div",null,[e.user?((0,Co.wg)(),(0,Co.iD)("div",Rd,[(0,Co.Wm)(s,{"user-id":e.userId,switcher:!0,selected:e.timeline.viewing,"avatar-action":"zoom",rounded:"top","has-note-editor":!0},null,8,["user-id","selected"]),e.user.birthday?((0,Co.wg)(),(0,Co.iD)("span",qd,[(0,Co.Wm)(a,{class:"fa-old-padding",icon:"birthday-cake"}),(0,Co.Uk)(" "+(0,So.zw)(e.$t("user_card.birthday",{birthday:e.formattedBirthday})),1)])):(0,Co.kq)("",!0),e.user.fields_html&&e.user.fields_html.length>0?((0,Co.wg)(),(0,Co.iD)("div",Nd,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.user.fields_html,(function(t,n){return(0,Co.wg)(),(0,Co.iD)("dl",{key:n,class:"user-profile-field"},[(0,Co._)("dt",{title:e.user.fields_text[n].name,class:"user-profile-field-name"},[(0,Co.Wm)(u,{html:t.name,emoji:e.user.emoji},null,8,["html","emoji"])],8,Zd),(0,Co._)("dd",{title:e.user.fields_text[n].value,class:"user-profile-field-value"},[(0,Co.Wm)(u,{html:t.value,emoji:e.user.emoji},null,8,["html","emoji"])],8,Wd)])})),128))])):(0,Co.kq)("",!0),(0,Co.Wm)(m,{"active-tab":e.tab,"render-only-focused":!0,"on-switch":e.onTabSwitch},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(c,{key:"statuses",label:e.$t("user_card.statuses"),count:e.user.statuses_count,embedded:!0,title:e.$t("user_profile.timeline_title"),timeline:e.timeline,"timeline-name":"user","user-id":e.userId,"pinned-status-ids":e.user.pinnedStatusIds,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","count","title","timeline","user-id","pinned-status-ids","footer-slipgate"]),e.followsTabVisible?((0,Co.wg)(),(0,Co.iD)("div",{key:"followees",label:e.$t("user_card.followees"),disabled:!e.user.friends_count},[(0,Co.Wm)(d,{"user-id":e.userId},{item:(0,Co.w5)((function(e){var t=e.item;return[(0,Co.Wm)(l,{user:t},null,8,["user"])]})),_:1},8,["user-id"])],8,Hd)):(0,Co.kq)("",!0),e.followersTabVisible?((0,Co.wg)(),(0,Co.iD)("div",{key:"followers",label:e.$t("user_card.followers"),disabled:!e.user.followers_count},[(0,Co.Wm)(p,{"user-id":e.userId},{item:(0,Co.w5)((function(t){var n=t.item;return[(0,Co.Wm)(l,{user:n,"no-follows-you":e.isUs},null,8,["user","no-follows-you"])]})),_:1},8,["user-id"])],8,Vd)):(0,Co.kq)("",!0),(0,Co.Wm)(c,{key:"media",label:e.$t("user_card.media"),disabled:!e.media.visibleStatuses.length,embedded:!0,title:e.$t("user_card.media"),"timeline-name":"media",timeline:e.media,"user-id":e.userId,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","disabled","title","timeline","user-id","footer-slipgate"]),e.isUs?((0,Co.wg)(),(0,Co.j4)(c,{key:"favorites",label:e.$t("user_card.favorites"),disabled:!e.favorites.visibleStatuses.length,embedded:!0,title:e.$t("user_card.favorites"),"timeline-name":"favorites",timeline:e.favorites,"in-profile":!0,"footer-slipgate":e.footerRef},null,8,["label","disabled","title","timeline","footer-slipgate"])):(0,Co.kq)("",!0)]})),_:1},8,["active-tab","on-switch"]),(0,Co._)("div",{ref:e.setFooterRef,class:"panel-footer"},null,512)])):((0,Co.wg)(),(0,Co.iD)("div",Kd,[(0,Co._)("div",Gd,[(0,Co._)("div",Yd,(0,So.zw)(e.$t("settings.profile_tab")),1)]),(0,Co._)("div",Jd,[e.error?((0,Co.wg)(),(0,Co.iD)("span",Qd,(0,So.zw)(e.error),1)):((0,Co.wg)(),(0,Co.j4)(a,{key:1,spin:"",icon:"circle-notch"}))])]))])}]]);var gp={class:"panel panel-default"},vp={class:"panel-heading"},wp={class:"title"},bp={class:"search-input-container"},yp=["placeholder"],Dp={key:0,class:"text-center loading-icon"},_p={key:1},kp={class:"search-nav-heading"},Cp=["label"],Sp=["label"],jp=["label"],Fp={class:"panel-body"},Ap={key:0},Op={class:"new-status-notification text-center"},Ep={key:1,class:"text-center loading-icon"},zp={key:2,class:"search-result-heading"},Pp={key:1},Ip={key:0,class:"search-result-heading"},xp={key:2},Tp={key:0,class:"search-result-heading"},$p={class:"hashtag"},Bp={key:0},Up={key:0},Mp={key:1},Lp={key:0,class:"count"},Rp=(0,Co._)("div",{class:"search-result-footer text-center panel-footer faint"},null,-1),qp=n(45578),Np=n.n(qp);Ht.vI.add(Vt.IJ7,Vt.wn1);const Zp={components:{FollowCard:cp,Conversation:$c,Status:eu.default,TabSwitcher:fl.Z},props:["query"],data:function(){return{loaded:!1,loading:!1,searchTerm:this.query||"",userIds:[],statuses:[],hashtags:[],currenResultTab:"statuses",statusesOffset:0,lastStatusFetchCount:0,lastQuery:""}},computed:{users:function(){var e=this;return this.userIds.map((function(t){return e.$store.getters.findUser(t)}))},visibleStatuses:function(){var e=this.$store.state.statuses.allStatusesObject;return this.statuses.filter((function(t){return e[t.id]&&!e[t.id].deleted}))}},mounted:function(){this.search(this.query)},watch:{query:function(e){this.searchTerm=e,this.search(e)}},methods:{newQuery:function(e){this.$router.push({name:"search",query:{query:e}}),this.$refs.searchInput.focus()},search:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e?(this.loading=!0,this.$refs.searchInput.blur(),this.lastQuery!==e&&(this.userIds=[],this.hashtags=[],this.statuses=[],this.statusesOffset=0,this.lastStatusFetchCount=0),this.$store.dispatch("search",{q:e,resolve:!0,offset:this.statusesOffset,type:n}).then((function(n){t.loading=!1;var o=t.statuses.length;t.userIds=t.userIds.concat(be()(n.accounts,"id")),t.statuses=Np()(t.statuses.concat(n.statuses),"id"),t.hashtags=t.hashtags.concat(n.hashtags),t.currenResultTab=t.getActiveTab(),t.loaded=!0,t.statusesOffset=t.statuses.length,t.lastStatusFetchCount=t.statuses.length-o,t.lastQuery=e}))):this.loading=!1},resultCount:function(e){var t=this[e].length;return 0===t?"":" (".concat(t,")")},onResultTabSwitch:function(e){this.currenResultTab=e},getActiveTab:function(){return this.visibleStatuses.length>0?"statuses":this.users.length>0?"people":this.hashtags.length>0?"hashtags":"statuses"},lastHistoryRecord:function(e){return e.history&&e.history[0]}}},Wp=(0,Jo.Z)(Zp,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("tab-switcher"),u=(0,Co.up)("Status"),c=(0,Co.up)("FollowCard"),l=(0,Co.up)("router-link");return(0,Co.wg)(),(0,Co.iD)("div",gp,[(0,Co._)("div",vp,[(0,Co._)("div",wp,(0,So.zw)(e.$t("nav.search")),1)]),(0,Co._)("div",bp,[(0,Co.wy)((0,Co._)("input",{ref:"searchInput","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.searchTerm=t}),class:"search-input",placeholder:e.$t("nav.search"),onKeyup:t[1]||(t[1]=(0,wo.D2)((function(t){return e.newQuery(e.searchTerm)}),["enter"]))},null,40,yp),[[wo.nr,e.searchTerm]]),(0,Co._)("button",{class:"btn button-default search-button",type:"submit",onClick:t[2]||(t[2]=function(t){return e.newQuery(e.searchTerm)})},[(0,Co.Wm)(s,{icon:"search"})])]),e.loading&&0==e.statusesOffset?((0,Co.wg)(),(0,Co.iD)("div",Dp,[(0,Co.Wm)(s,{icon:"circle-notch",spin:"",size:"lg"})])):e.loaded?((0,Co.wg)(),(0,Co.iD)("div",_p,[(0,Co._)("div",kp,[(0,Co.Wm)(a,{ref:"tabSwitcher","on-switch":e.onResultTabSwitch,"active-tab":e.currenResultTab},{default:(0,Co.w5)((function(){return[(0,Co._)("span",{key:"statuses",label:e.$t("user_card.statuses")+e.resultCount("visibleStatuses")},null,8,Cp),(0,Co._)("span",{key:"people",label:e.$t("search.people")+e.resultCount("users")},null,8,Sp),(0,Co._)("span",{key:"hashtags",label:e.$t("search.hashtags")+e.resultCount("hashtags")},null,8,jp)]})),_:1},8,["on-switch","active-tab"])])])):(0,Co.kq)("",!0),(0,Co._)("div",Fp,["statuses"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",Ap,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.visibleStatuses,(function(e){return(0,Co.wg)(),(0,Co.j4)(u,{key:e.id,collapsable:!1,expandable:!1,compact:!1,class:"search-result",statusoid:e,"no-heading":!1},null,8,["statusoid"])})),128)),!e.loading&&e.loaded&&e.lastStatusFetchCount>0?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"more-statuses-button button-unstyled -link -fullwidth",onClick:t[3]||(t[3]=(0,wo.iM)((function(t){return e.search(e.searchTerm,"statuses")}),["prevent"]))},[(0,Co._)("div",Op,(0,So.zw)(e.$t("search.load_more")),1)])):e.loading&&e.statusesOffset>0?((0,Co.wg)(),(0,Co.iD)("div",Ep,[(0,Co.Wm)(s,{icon:"circle-notch",spin:"",size:"lg"})])):(0,Co.kq)("",!0),0!==e.visibleStatuses.length&&0!==e.lastStatusFetchCount||e.loading||!e.loaded?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",zp,[(0,Co._)("h4",null,(0,So.zw)(0===e.visibleStatuses.length?e.$t("search.no_results"):e.$t("search.no_more_results")),1)]))])):"people"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",Pp,[0===e.users.length&&!e.loading&&e.loaded?((0,Co.wg)(),(0,Co.iD)("div",Ip,[(0,Co._)("h4",null,(0,So.zw)(e.$t("search.no_results")),1)])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(c,{key:e.id,user:e,class:"list-item search-result"},null,8,["user"])})),128))])):"hashtags"===e.currenResultTab?((0,Co.wg)(),(0,Co.iD)("div",xp,[0===e.hashtags.length&&!e.loading&&e.loaded?((0,Co.wg)(),(0,Co.iD)("div",Tp,[(0,Co._)("h4",null,(0,So.zw)(e.$t("search.no_results")),1)])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.hashtags,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.url,class:"status trend search-result"},[(0,Co._)("div",$p,[(0,Co.Wm)(l,{to:{name:"tag-timeline",params:{tag:t.name}}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)(" #"+(0,So.zw)(t.name),1)]})),_:2},1032,["to"]),e.lastHistoryRecord(t)?((0,Co.wg)(),(0,Co.iD)("div",Bp,[1==e.lastHistoryRecord(t).accounts?((0,Co.wg)(),(0,Co.iD)("span",Up,(0,So.zw)(e.$t("search.person_talking",{count:e.lastHistoryRecord(t).accounts})),1)):((0,Co.wg)(),(0,Co.iD)("span",Mp,(0,So.zw)(e.$t("search.people_talking",{count:e.lastHistoryRecord(t).accounts})),1))])):(0,Co.kq)("",!0)]),e.lastHistoryRecord(t)?((0,Co.wg)(),(0,Co.iD)("div",Lp,(0,So.zw)(e.lastHistoryRecord(t).uses),1)):(0,Co.kq)("",!0)])})),128))])):(0,Co.kq)("",!0)]),Rp])}]]);var Hp={class:"settings panel panel-default"},Vp={class:"panel-heading"},Kp={class:"panel-body"},Gp={class:"container"},Yp={class:"text-fields"},Jp={class:"form--label",for:"sign-up-username"},Qp=["disabled","placeholder"],Xp={key:0,class:"form-error"},em={key:0},tm={class:"form--label",for:"sign-up-fullname"},nm=["disabled","placeholder"],om={key:1,class:"form-error"},rm={key:0},im={class:"form--label",for:"email"},sm=["disabled","aria-required"],am={key:2,class:"form-error"},um={key:0},cm={class:"form-group"},lm={class:"form--label",for:"bio"},dm=["disabled","placeholder"],pm={class:"form--label",for:"sign-up-password"},mm=["disabled"],hm={key:3,class:"form-error"},fm={key:0},gm={class:"form--label",for:"sign-up-password-confirmation"},vm=["disabled"],wm={key:4,class:"form-error"},bm={key:0},ym={key:1},Dm={class:"form--label",for:"sign-up-birthday"},_m=["disabled","max","aria-required"],km={key:5,class:"form-error"},Cm={key:0},Sm={key:1},jm={key:6,class:"form-group"},Fm={class:"form--label",for:"reason"},Am=["disabled","placeholder"],Om={key:7,id:"captcha-group",class:"form-group"},Em={class:"form--label",for:"captcha-label"},zm=["src"],Pm=["disabled"],Im={key:8,class:"form-group"},xm={for:"token"},Tm={class:"form-group"},$m=["disabled"],Bm=["innerHTML"],Um={key:0,class:"form-group"},Mm={class:"alert error"},Lm=n(21359),Rm=n(35332),qm=n(86269),Nm=n(27483);function Zm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Wm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zm(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Hm={setup:function(){return{v$:(0,Lm.ZP)()}},data:function(){return{user:{email:"",fullname:"",username:"",password:"",confirm:"",birthday:"",reason:"",language:[""]},captcha:{}}},components:{InterfaceLanguageSwitcher:qm.Z},validations:function(){var e=this;return{user:{email:{required:(0,Rm.CF)((function(){return e.accountActivationRequired}))},username:{required:Rm.C1},fullname:{required:Rm.C1},password:{required:Rm.C1},confirm:{required:Rm.C1,sameAs:(0,Rm.sH)(this.user.password)},birthday:{required:(0,Rm.CF)((function(){return e.birthdayRequired})),maxValue:function(t){return!e.birthdayRequired||new Date(t).getTime()<=e.birthdayMin.getTime()}},reason:{required:(0,Rm.CF)((function(){return e.accountApprovalRequired}))},language:{}}}},created:function(){(!this.registrationOpen&&!this.token||this.signedIn)&&this.$router.push({name:"root"}),this.setCaptcha()},computed:Wm({token:function(){return this.$route.params.token},bioPlaceholder:function(){return this.replaceNewlines(this.$t("registration.bio_placeholder"))},reasonPlaceholder:function(){return this.replaceNewlines(this.$t("registration.reason_placeholder"))},birthdayMin:function(){var e=this.birthdayMinAge,t=new Date;t.setUTCMilliseconds(0),t.setUTCSeconds(0),t.setUTCMinutes(0),t.setUTCHours(0);var n=new Date;return n.setTime(t.getTime()-e*Nm.x4),n},birthdayMinAttr:function(){return this.birthdayMin.toJSON().replace(/T.+$/,"")},birthdayMinFormatted:function(){var e=Ad.Z.internalToBrowserLocale(this.$i18n.locale);return this.user.birthday&&new Date(Date.parse(this.birthdayMin)).toLocaleDateString(e,{timeZone:"UTC",day:"numeric",month:"long",year:"numeric"})}},(0,s.rn)({registrationOpen:function(e){return e.instance.registrationOpen},signedIn:function(e){return!!e.users.currentUser},isPending:function(e){return e.users.signUpPending},serverValidationErrors:function(e){return e.users.signUpErrors},termsOfService:function(e){return e.instance.tos},accountActivationRequired:function(e){return e.instance.accountActivationRequired},accountApprovalRequired:function(e){return e.instance.accountApprovalRequired},birthdayRequired:function(e){return e.instance.birthdayRequired},birthdayMinAge:function(e){return e.instance.birthdayMinAge}})),methods:Wm(Wm({},(0,s.nv)(["signUp","getCaptcha"])),{},{submit:function(){var e=this;return(0,o.Z)(i().mark((function t(){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.user.nickname=e.user.username,e.user.token=e.token,e.user.captcha_solution=e.captcha.solution,e.user.captcha_token=e.captcha.token,e.user.captcha_answer_data=e.captcha.answer_data,e.user.language&&(e.user.language=Ad.Z.internalToBackendLocaleMulti(e.user.language.filter((function(e){return e})))),e.v$.$touch(),e.v$.$invalid){t.next=18;break}return t.prev=8,t.next=11,e.signUp(e.user);case 11:e.$router.push({name:"friends"}),t.next=18;break;case 14:t.prev=14,t.t0=t.catch(8),console.warn("Registration failed: ",t.t0),e.setCaptcha();case 18:case"end":return t.stop()}}),t,null,[[8,14]])})))()},setCaptcha:function(){var e=this;this.getCaptcha().then((function(t){e.captcha=t}))},replaceNewlines:function(e){return e.replace(/\s*\n\s*/g," \n")}})},Vm=(0,Jo.Z)(Hm,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("interface-language-switcher");return(0,Co.wg)(),(0,Co.iD)("div",Hp,[(0,Co._)("div",Vp,(0,So.zw)(e.$t("registration.registration")),1),(0,Co._)("div",Kp,[(0,Co._)("form",{class:"registration-form",onSubmit:t[12]||(t[12]=(0,wo.iM)((function(t){return e.submit(e.user)}),["prevent"]))},[(0,Co._)("div",Gp,[(0,Co._)("div",Yp,[(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.username.$error}])},[(0,Co._)("label",Jp,(0,So.zw)(e.$t("login.username")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-username","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.v$.user.username.$model=t}),disabled:e.isPending,class:"form-control","aria-required":!0,placeholder:e.$t("registration.username_placeholder")},null,8,Qp),[[wo.nr,e.v$.user.username.$model,void 0,{trim:!0}]])],2),e.v$.user.username.$dirty?((0,Co.wg)(),(0,Co.iD)("div",Xp,[(0,Co._)("ul",null,[e.v$.user.username.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",em,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.username_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.fullname.$error}])},[(0,Co._)("label",tm,(0,So.zw)(e.$t("registration.fullname")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-fullname","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.v$.user.fullname.$model=t}),disabled:e.isPending,class:"form-control","aria-required":!0,placeholder:e.$t("registration.fullname_placeholder")},null,8,nm),[[wo.nr,e.v$.user.fullname.$model,void 0,{trim:!0}]])],2),e.v$.user.fullname.$dirty?((0,Co.wg)(),(0,Co.iD)("div",om,[(0,Co._)("ul",null,[e.v$.user.fullname.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",rm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.fullname_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.email.$error}])},[(0,Co._)("label",im,(0,So.zw)(e.accountActivationRequired?e.$t("registration.email"):e.$t("registration.email_optional")),1),(0,Co.wy)((0,Co._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.v$.user.email.$model=t}),disabled:e.isPending,class:"form-control",type:"email","aria-required":e.accountActivationRequired},null,8,sm),[[wo.nr,e.v$.user.email.$model]])],2),e.v$.user.email.$dirty?((0,Co.wg)(),(0,Co.iD)("div",am,[(0,Co._)("ul",null,[e.v$.user.email.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",um,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.email_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",cm,[(0,Co._)("label",lm,(0,So.zw)(e.$t("registration.bio_optional")),1),(0,Co.wy)((0,Co._)("textarea",{id:"bio","onUpdate:modelValue":t[3]||(t[3]=function(t){return e.user.bio=t}),disabled:e.isPending,class:"form-control",placeholder:e.bioPlaceholder},null,8,dm),[[wo.nr,e.user.bio]])]),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.password.$error}])},[(0,Co._)("label",pm,(0,So.zw)(e.$t("login.password")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-password","onUpdate:modelValue":t[4]||(t[4]=function(t){return e.user.password=t}),disabled:e.isPending,class:"form-control",type:"password","aria-required":!0},null,8,mm),[[wo.nr,e.user.password]])],2),e.v$.user.password.$dirty?((0,Co.wg)(),(0,Co.iD)("div",hm,[(0,Co._)("ul",null,[e.v$.user.password.required?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("li",fm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_required")),1)]))])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.confirm.$error}])},[(0,Co._)("label",gm,(0,So.zw)(e.$t("registration.password_confirm")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-password-confirmation","onUpdate:modelValue":t[5]||(t[5]=function(t){return e.user.confirm=t}),disabled:e.isPending,class:"form-control",type:"password","aria-required":!0},null,8,vm),[[wo.nr,e.user.confirm]])],2),e.v$.user.confirm.$dirty?((0,Co.wg)(),(0,Co.iD)("div",wm,[(0,Co._)("ul",null,[e.v$.user.confirm.required.$invalid?((0,Co.wg)(),(0,Co.iD)("li",bm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_confirmation_required")),1)])):(0,Co.kq)("",!0),e.v$.user.confirm.sameAs.$invalid?((0,Co.wg)(),(0,Co.iD)("li",ym,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.password_confirmation_match")),1)])):(0,Co.kq)("",!0)])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.birthday.$error}])},[(0,Co._)("label",Dm,(0,So.zw)(e.birthdayRequired?e.$t("registration.birthday"):e.$t("registration.birthday_optional")),1),(0,Co.wy)((0,Co._)("input",{id:"sign-up-birthday","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.user.birthday=t}),disabled:e.isPending,class:"form-control",type:"date",max:e.birthdayRequired?e.birthdayMinAttr:void 0,"aria-required":e.birthdayRequired},null,8,_m),[[wo.nr,e.user.birthday]])],2),e.v$.user.birthday.$dirty?((0,Co.wg)(),(0,Co.iD)("div",km,[(0,Co._)("ul",null,[e.v$.user.birthday.required.$invalid?((0,Co.wg)(),(0,Co.iD)("li",Cm,[(0,Co._)("span",null,(0,So.zw)(e.$t("registration.validations.birthday_required")),1)])):(0,Co.kq)("",!0),e.v$.user.birthday.maxValue.$invalid?((0,Co.wg)(),(0,Co.iD)("li",Sm,[(0,Co._)("span",null,(0,So.zw)(e.$tc("registration.validations.birthday_min_age",{date:e.birthdayMinFormatted})),1)])):(0,Co.kq)("",!0)])])):(0,Co.kq)("",!0),(0,Co._)("div",{class:(0,So.C_)(["form-group",{"form-group--error":e.v$.user.language.$error}])},[(0,Co.Wm)(s,{for:"email-language","prompt-text":e.$t("registration.email_language"),language:e.v$.user.language.$model,"set-language":function(t){return e.v$.user.language.$model=t},onClick:t[7]||(t[7]=(0,wo.iM)((function(){}),["stop","prevent"]))},null,8,["prompt-text","language","set-language"])],2),e.accountApprovalRequired?((0,Co.wg)(),(0,Co.iD)("div",jm,[(0,Co._)("label",Fm,(0,So.zw)(e.$t("registration.reason")),1),(0,Co.wy)((0,Co._)("textarea",{id:"reason","onUpdate:modelValue":t[8]||(t[8]=function(t){return e.user.reason=t}),disabled:e.isPending,class:"form-control",placeholder:e.reasonPlaceholder},null,8,Am),[[wo.nr,e.user.reason]])])):(0,Co.kq)("",!0),"none"!=e.captcha.type?((0,Co.wg)(),(0,Co.iD)("div",Om,[(0,Co._)("label",Em,(0,So.zw)(e.$t("registration.captcha")),1),["kocaptcha","native"].includes(e.captcha.type)?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:0},[(0,Co._)("img",{src:e.captcha.url,onClick:t[9]||(t[9]=function(){return e.setCaptcha&&e.setCaptcha.apply(e,arguments)})},null,8,zm),(0,Co._)("sub",null,(0,So.zw)(e.$t("registration.new_captcha")),1),(0,Co.wy)((0,Co._)("input",{id:"captcha-answer","onUpdate:modelValue":t[10]||(t[10]=function(t){return e.captcha.solution=t}),disabled:e.isPending,class:"form-control",type:"text",autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},null,8,Pm),[[wo.nr,e.captcha.solution]])],64)):(0,Co.kq)("",!0)])):(0,Co.kq)("",!0),e.token?((0,Co.wg)(),(0,Co.iD)("div",Im,[(0,Co._)("label",xm,(0,So.zw)(e.$t("registration.token")),1),(0,Co.wy)((0,Co._)("input",{id:"token","onUpdate:modelValue":t[11]||(t[11]=function(t){return e.token=t}),disabled:"true",class:"form-control",type:"text"},null,512),[[wo.nr,e.token]])])):(0,Co.kq)("",!0),(0,Co._)("div",Tm,[(0,Co._)("button",{disabled:e.isPending,type:"submit",class:"btn button-default"},(0,So.zw)(e.$t("registration.register")),9,$m)])]),(0,Co._)("div",{class:"terms-of-service",innerHTML:e.termsOfService},null,8,Bm)]),e.serverValidationErrors.length?((0,Co.wg)(),(0,Co.iD)("div",Um,[(0,Co._)("div",Mm,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.serverValidationErrors,(function(e){return(0,Co.wg)(),(0,Co.iD)("span",{key:e},(0,So.zw)(e),1)})),128))])])):(0,Co.kq)("",!0)],32)])])}]]);var Km={class:"settings panel panel-default"},Gm={class:"panel-heading"},Ym={class:"panel-body"},Jm={class:"container"},Qm={key:0},Xm={key:0},eh={key:1},th={key:1},nh={key:0},oh={class:"form-group text-center"},rh={key:2},ih={key:0,class:"password-reset-required error"},sh={class:"form-group"},ah=["disabled","placeholder"],uh={class:"form-group"},ch=["disabled"],lh={key:3,class:"alert error notice-dismissible"};function dh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ph(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?dh(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dh(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.NBC);var mh={data:function(){return{user:{email:""},isPending:!1,success:!1,throttled:!1,error:null}},computed:ph(ph({},(0,s.rn)({signedIn:function(e){return!!e.users.currentUser},instance:function(e){return e.instance}})),{},{mailerEnabled:function(){return this.instance.mailerEnabled}}),created:function(){this.signedIn&&this.$router.push({name:"root"})},props:{passwordResetRequested:{default:!1,type:Boolean}},methods:{dismissError:function(){this.error=null},submit:function(){var e=this;this.isPending=!0;var t=this.user.email;(function(e){var t=e.instance,n={email:e.email},o=Ue()(n,(function(e,t,n){var o="".concat(n,"=").concat(encodeURIComponent(t));return"".concat(e,"&").concat(o)}),""),r="".concat(t).concat("/auth/password","?").concat(o);return window.fetch(r,{method:"POST"})})({instance:this.instance.server,email:t}).then((function(t){var n=t.status;e.isPending=!1,e.user.email="",204===n?(e.success=!0,e.error=null):429===n&&(e.throttled=!0,e.error=e.$t("password_reset.too_many_requests"))})).catch((function(){e.isPending=!1,e.user.email="",e.error=e.$t("general.generic_error")}))}}};const hh=mh,fh=(0,Jo.Z)(hh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Km,[(0,Co._)("div",Gm,(0,So.zw)(e.$t("password_reset.password_reset")),1),(0,Co._)("div",Ym,[(0,Co._)("form",{class:"password-reset-form",onSubmit:t[2]||(t[2]=(0,wo.iM)((function(){return e.submit&&e.submit.apply(e,arguments)}),["prevent"]))},[(0,Co._)("div",Jm,[e.mailerEnabled?e.success||e.throttled?((0,Co.wg)(),(0,Co.iD)("div",th,[e.success?((0,Co.wg)(),(0,Co.iD)("p",nh,(0,So.zw)(e.$t("password_reset.check_email")),1)):(0,Co.kq)("",!0),(0,Co._)("div",oh,[(0,Co.Wm)(s,{to:{name:"root"}},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("password_reset.return_home")),1)]})),_:1})])])):((0,Co.wg)(),(0,Co.iD)("div",rh,[e.passwordResetRequested?((0,Co.wg)(),(0,Co.iD)("p",ih,(0,So.zw)(e.$t("password_reset.password_reset_required")),1)):(0,Co.kq)("",!0),(0,Co._)("p",null,(0,So.zw)(e.$t("password_reset.instruction")),1),(0,Co._)("div",sh,[(0,Co.wy)((0,Co._)("input",{ref:"email","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.user.email=t}),disabled:e.isPending,placeholder:e.$t("password_reset.placeholder"),class:"form-control",type:"input"},null,8,ah),[[wo.nr,e.user.email]])]),(0,Co._)("div",uh,[(0,Co._)("button",{disabled:e.isPending,type:"submit",class:"btn button-default btn-block"},(0,So.zw)(e.$t("settings.save")),9,ch)])])):((0,Co.wg)(),(0,Co.iD)("div",Qm,[e.passwordResetRequested?((0,Co.wg)(),(0,Co.iD)("p",Xm,(0,So.zw)(e.$t("password_reset.password_reset_required_but_mailer_is_disabled")),1)):((0,Co.wg)(),(0,Co.iD)("p",eh,(0,So.zw)(e.$t("password_reset.password_reset_disabled")),1))])),e.error?((0,Co.wg)(),(0,Co.iD)("p",lh,[(0,Co._)("span",null,(0,So.zw)(e.error),1),(0,Co._)("a",{class:"fa-scale-110 fa-old-padding dismiss",onClick:t[1]||(t[1]=(0,wo.iM)((function(t){return e.dismissError()}),["prevent"]))},[(0,Co.Wm)(a,{icon:"times"})])])):(0,Co.kq)("",!0)])],32)])])}]]);var gh={class:"settings panel panel-default"},vh={class:"panel-heading"},wh={class:"title"},bh={class:"panel-body"},yh={class:"follow-request-card-content-container"};const Dh={props:["user"],components:{BasicUserCard:ed.Z,ConfirmModal:Da.Z},data:function(){return{showingApproveConfirmDialog:!1,showingDenyConfirmDialog:!1}},methods:{findFollowRequestNotificationId:function(){var e=this,t=(0,K.Bt)(this.$store).find((function(t){return t.from_profile.id===e.user.id&&"follow_request"===t.type}));return t&&t.id},showApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!0},hideApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!1},showDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!0},hideDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!1},approveUser:function(){this.shouldConfirmApprove?this.showApproveConfirmDialog():this.doApprove()},doApprove:function(){this.$store.state.api.backendInteractor.approveUser({id:this.user.id}),this.$store.dispatch("removeFollowRequest",this.user);var e=this.findFollowRequestNotificationId();this.$store.dispatch("markSingleNotificationAsSeen",{id:e}),this.$store.dispatch("updateNotification",{id:e,updater:function(e){e.type="follow"}}),this.hideApproveConfirmDialog()},denyUser:function(){this.shouldConfirmDeny?this.showDenyConfirmDialog():this.doDeny()},doDeny:function(){var e=this,t=this.findFollowRequestNotificationId();this.$store.state.api.backendInteractor.denyUser({id:this.user.id}).then((function(){e.$store.dispatch("dismissNotificationLocal",{id:t}),e.$store.dispatch("removeFollowRequest",e.user)})),this.hideDenyConfirmDialog()}},computed:{mergedConfig:function(){return this.$store.getters.mergedConfig},shouldConfirmApprove:function(){return this.mergedConfig.modalOnApproveFollow},shouldConfirmDeny:function(){return this.mergedConfig.modalOnDenyFollow}}},_h={components:{FollowRequestCard:(0,Jo.Z)(Dh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("confirm-modal"),a=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.j4)(a,{user:e.user},{default:(0,Co.w5)((function(){return[(0,Co._)("div",yh,[(0,Co._)("button",{class:"btn button-default",onClick:t[0]||(t[0]=function(){return e.approveUser&&e.approveUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_card.approve")),1),(0,Co._)("button",{class:"btn button-default",onClick:t[1]||(t[1]=function(){return e.denyUser&&e.denyUser.apply(e,arguments)})},(0,So.zw)(e.$t("user_card.deny")),1)]),((0,Co.wg)(),(0,Co.j4)(Co.lR,{to:"#modal"},[e.showingApproveConfirmDialog?((0,Co.wg)(),(0,Co.j4)(s,{key:0,title:e.$t("user_card.approve_confirm_title"),"confirm-text":e.$t("user_card.approve_confirm_accept_button"),"cancel-text":e.$t("user_card.approve_confirm_cancel_button"),onAccepted:e.doApprove,onCancelled:e.hideApproveConfirmDialog},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_card.approve_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0),e.showingDenyConfirmDialog?((0,Co.wg)(),(0,Co.j4)(s,{key:1,title:e.$t("user_card.deny_confirm_title"),"confirm-text":e.$t("user_card.deny_confirm_accept_button"),"cancel-text":e.$t("user_card.deny_confirm_cancel_button"),onAccepted:e.doDeny,onCancelled:e.hideDenyConfirmDialog},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("user_card.deny_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,Co.kq)("",!0)]))]})),_:1},8,["user"])}]])},computed:{requests:function(){return this.$store.state.api.followRequests}}},kh=(0,Jo.Z)(_h,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FollowRequestCard");return(0,Co.wg)(),(0,Co.iD)("div",gh,[(0,Co._)("div",vh,[(0,Co._)("div",wh,(0,So.zw)(e.$t("nav.friend_requests")),1)]),(0,Co._)("div",bh,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.requests,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,user:e,class:"list-item"},null,8,["user"])})),128))])])}]]),Ch={props:["code"],mounted:function(){var e=this;if(this.code){var t=this.$store.state.oauth,n=t.clientId,o=t.clientSecret;Ne.getToken({clientId:n,clientSecret:o,instance:this.$store.state.instance.server,code:this.code}).then((function(t){e.$store.commit("setToken",t.access_token),e.$store.dispatch("loginUser",t.access_token),e.$router.push({name:"friends"})}))}}},Sh=(0,Jo.Z)(Ch,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("h1",null,"...")}]]);var jh={class:"panel panel-default"},Fh={class:"panel-heading"},Ah={class:"panel-body"};const Oh={components:{FollowCard:cp},data:function(){return{users:[]}},mounted:function(){this.getWhoToFollow()},methods:{showWhoToFollow:function(e){var t=this;e.forEach((function(e,n){t.$store.state.api.backendInteractor.fetchUser({id:e.acct}).then((function(e){e.error||(t.$store.commit("addNewUsers",[e]),t.users.push(e))}))}))},getWhoToFollow:function(){var e=this,t=this.$store.state.users.currentUser.credentials;t&&h.ZP.suggestions({credentials:t}).then((function(t){e.showWhoToFollow(t)}))}}},Eh=(0,Jo.Z)(Oh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FollowCard");return(0,Co.wg)(),(0,Co.iD)("div",jh,[(0,Co._)("div",Fh,(0,So.zw)(e.$t("who_to_follow.who_to_follow")),1),(0,Co._)("div",Ah,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.id,user:e,class:"list-item"},null,8,["user"])})),128))])])}]]);var zh={class:"column-inner"},Ph={class:"panel panel-default"},Ih={class:"panel-body"},xh=["innerHTML"];const Th={computed:{content:function(){return this.$store.state.instance.tos}}},$h=(0,Jo.Z)(Th,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",null,[(0,Co._)("div",Ph,[(0,Co._)("div",Ih,[(0,Co._)("div",{class:"tos-content",innerHTML:e.content},null,8,xh)])])])}]]);var Bh={class:"staff-panel"},Uh={class:"panel panel-default base01-background"},Mh={class:"panel-heading timeline-heading base02-background"},Lh={class:"title"},Rh={class:"panel-body"};function qh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Nh(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qh(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qh(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Zh={created:function(){var e=this;this.$store.state.instance.staffAccounts.forEach((function(t){return e.$store.dispatch("fetchUserIfMissing",t)}))},components:{BasicUserCard:ed.Z},computed:Nh(Nh({groupedStaffAccounts:function(){var e=be()(this.staffAccounts,this.findUserByName).filter((function(e){return e})),t=Tt()(e,"role");return[{role:"admin",users:t.admin},{role:"moderator",users:t.moderator}].filter((function(e){return e.users}))}},(0,s.Se)(["findUserByName"])),(0,s.rn)({staffAccounts:function(e){return e.instance.staffAccounts}}))},Wh=(0,Jo.Z)(Zh,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("basic-user-card");return(0,Co.wg)(),(0,Co.iD)("div",Bh,[(0,Co._)("div",Uh,[(0,Co._)("div",Mh,[(0,Co._)("div",Lh,(0,So.zw)(e.$t("about.staff")),1)]),(0,Co._)("div",Rh,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.groupedStaffAccounts,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.role,class:"staff-group"},[(0,Co._)("h4",null,(0,So.zw)(e.$t("general.role."+t.role)),1),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(t.users,(function(e){return(0,Co.wg)(),(0,Co.j4)(s,{key:e.screen_name,user:e},null,8,["user"])})),128))])})),128))])])])}]]);var Hh={key:0,class:"mrf-transparency-panel"},Vh={class:"panel panel-default base01-background"},Kh={class:"panel-heading timeline-heading base02-background"},Gh={class:"title"},Yh={class:"panel-body"},Jh={class:"mrf-section"},Qh=["textContent"],Xh={key:0},ef={key:1},tf={key:0},nf={key:1},of={key:2},rf={key:0},sf={key:1},af={key:3},uf={key:0},cf={key:1},lf={key:4},df={key:0},pf={key:1},mf={key:5},hf={key:0},ff={key:1},gf={key:6},vf={key:0},wf={key:1},bf={key:7},yf={key:8},Df=["textContent"],_f={key:9},kf=["textContent"],Cf={key:10};function Sf(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function jf(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Sf(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Sf(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var Ff=function(e,t,n){return e.map((function(e){return t[n]&&t[n][e]&&t[n][e].reason?{instance:e,reason:t[n][e].reason}:{instance:e,reason:""}}))};const Af={computed:jf(jf({},(0,s.rn)({federationPolicy:function(e){return Dt()(e,"instance.federationPolicy")},mrfPolicies:function(e){return Dt()(e,"instance.federationPolicy.mrf_policies",[])},quarantineInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.quarantined_instances",[]),Dt()(e,"instance.federationPolicy.quarantined_instances_info",[]),"quarantined_instances")},acceptInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.accept",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"accept")},rejectInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.reject",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"reject")},ftlRemovalInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.federated_timeline_removal",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"federated_timeline_removal")},mediaNsfwInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.media_nsfw",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"media_nsfw")},mediaRemovalInstances:function(e){return Ff(Dt()(e,"instance.federationPolicy.mrf_simple.media_removal",[]),Dt()(e,"instance.federationPolicy.mrf_simple_info",[]),"media_removal")},keywordsFtlRemoval:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.federated_timeline_removal",[])},keywordsReject:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.reject",[])},keywordsReplace:function(e){return Dt()(e,"instance.federationPolicy.mrf_keyword.replace",[])}})),{},{hasInstanceSpecificPolicies:function(){return this.quarantineInstances.length||this.acceptInstances.length||this.rejectInstances.length||this.ftlRemovalInstances.length||this.mediaNsfwInstances.length||this.mediaRemovalInstances.length},hasKeywordPolicies:function(){return this.keywordsFtlRemoval.length||this.keywordsReject.length||this.keywordsReplace.length}})},Of={components:{InstanceSpecificPanel:Ai,FeaturesPanel:Ri,TermsOfServicePanel:$h,StaffPanel:Wh,MRFTransparencyPanel:(0,Jo.Z)(Af,[["render",function(e,t,n,o,r,i){return e.federationPolicy?((0,Co.wg)(),(0,Co.iD)("div",Hh,[(0,Co._)("div",Vh,[(0,Co._)("div",Kh,[(0,Co._)("div",Gh,(0,So.zw)(e.$t("about.mrf.federation")),1)]),(0,Co._)("div",Yh,[(0,Co._)("div",Jh,[(0,Co._)("h2",null,(0,So.zw)(e.$t("about.mrf.mrf_policies")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.mrf_policies_desc")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mrfPolicies,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,Qh)})),128))]),e.hasInstanceSpecificPolicies?((0,Co.wg)(),(0,Co.iD)("h2",Xh,(0,So.zw)(e.$t("about.mrf.simple.simple_policies")),1)):(0,Co.kq)("",!0),e.acceptInstances.length?((0,Co.wg)(),(0,Co.iD)("div",ef,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.accept")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.accept_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.acceptInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_accept"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",tf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",nf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.rejectInstances.length?((0,Co.wg)(),(0,Co.iD)("div",of,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.reject")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.reject_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.rejectInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_reject"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",rf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",sf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.quarantineInstances.length?((0,Co.wg)(),(0,Co.iD)("div",af,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.quarantine")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.quarantine_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.quarantineInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_quarantine"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",uf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",cf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.ftlRemovalInstances.length?((0,Co.wg)(),(0,Co.iD)("div",lf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.ftl_removal")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.ftl_removal_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.ftlRemovalInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_ftl_removal"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",df,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",pf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.mediaNsfwInstances.length?((0,Co.wg)(),(0,Co.iD)("div",mf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.media_nsfw")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.media_nsfw_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mediaNsfwInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_media_nsfw"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",hf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",ff,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.mediaRemovalInstances.length?((0,Co.wg)(),(0,Co.iD)("div",gf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.simple.media_removal")),1),(0,Co._)("p",null,(0,So.zw)(e.$t("about.mrf.simple.media_removal_desc")),1),(0,Co._)("table",null,[(0,Co._)("tr",null,[(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.instance")),1),(0,Co._)("th",null,(0,So.zw)(e.$t("about.mrf.simple.reason")),1)]),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.mediaRemovalInstances,(function(t){return(0,Co.wg)(),(0,Co.iD)("tr",{key:t.instance+"_media_removal"},[(0,Co._)("td",null,(0,So.zw)(t.instance),1),""===t.reason?((0,Co.wg)(),(0,Co.iD)("td",vf,(0,So.zw)(e.$t("about.mrf.simple.not_applicable")),1)):((0,Co.wg)(),(0,Co.iD)("td",wf,(0,So.zw)(t.reason),1))])})),128))])])):(0,Co.kq)("",!0),e.hasKeywordPolicies?((0,Co.wg)(),(0,Co.iD)("h2",bf,(0,So.zw)(e.$t("about.mrf.keyword.keyword_policies")),1)):(0,Co.kq)("",!0),e.keywordsFtlRemoval.length?((0,Co.wg)(),(0,Co.iD)("div",yf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.ftl_removal")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsFtlRemoval,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,Df)})),128))])])):(0,Co.kq)("",!0),e.keywordsReject.length?((0,Co.wg)(),(0,Co.iD)("div",_f,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.reject")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsReject,(function(e){return(0,Co.wg)(),(0,Co.iD)("li",{key:e,textContent:(0,So.zw)(e)},null,8,kf)})),128))])])):(0,Co.kq)("",!0),e.keywordsReplace.length?((0,Co.wg)(),(0,Co.iD)("div",Cf,[(0,Co._)("h4",null,(0,So.zw)(e.$t("about.mrf.keyword.replace")),1),(0,Co._)("ul",null,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.keywordsReplace,(function(t){return(0,Co.wg)(),(0,Co.iD)("li",{key:t},(0,So.zw)(t.pattern)+" "+(0,So.zw)(e.$t("about.mrf.keyword.is_replaced_by"))+" "+(0,So.zw)(t.replacement),1)})),128))])])):(0,Co.kq)("",!0)])])])])):(0,Co.kq)("",!0)}]])},computed:{showFeaturesPanel:function(){return this.$store.state.instance.showFeaturesPanel},showInstanceSpecificPanel:function(){return this.$store.state.instance.showInstanceSpecificPanel&&!this.$store.getters.mergedConfig.hideISP&&this.$store.state.instance.instanceSpecificPanelContent}}},Ef=(0,Jo.Z)(Of,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("instance-specific-panel"),a=(0,Co.up)("staff-panel"),u=(0,Co.up)("terms-of-service-panel"),c=(0,Co.up)("MRFTransparencyPanel"),l=(0,Co.up)("features-panel");return(0,Co.wg)(),(0,Co.iD)("div",zh,[e.showInstanceSpecificPanel?((0,Co.wg)(),(0,Co.j4)(s,{key:0})):(0,Co.kq)("",!0),(0,Co.Wm)(a),(0,Co.Wm)(u),(0,Co.Wm)(c),e.showFeaturesPanel?((0,Co.wg)(),(0,Co.j4)(l,{key:1})):(0,Co.kq)("",!0)])}]]);var zf={class:"panel panel-default"},Pf={class:"panel-heading"},If={class:"panel-body"},xf={key:0};const Tf={data:function(){return{error:!1}},mounted:function(){this.redirect()},methods:{redirect:function(){var e=this,t=this.$route.params.username+"@"+this.$route.params.hostname;this.$store.state.api.backendInteractor.fetchUser({id:t}).then((function(t){if(t.error)e.error=!0;else{e.$store.commit("addNewUsers",[t]);var n=t.id;e.$router.replace({name:"external-user-profile",params:{id:n}})}})).catch((function(){e.error=!0}))}}},$f=(0,Jo.Z)(Tf,[["render",function(e,t,n,o,r,i){return(0,Co.wg)(),(0,Co.iD)("div",zf,[(0,Co._)("div",Pf,(0,So.zw)(e.$t("remote_user_resolver.remote_user_resolver")),1),(0,Co._)("div",If,[(0,Co._)("p",null,(0,So.zw)(e.$t("remote_user_resolver.searching_for"))+" @"+(0,So.zw)(e.$route.params.username)+"@"+(0,So.zw)(e.$route.params.hostname),1),e.error?((0,Co.wg)(),(0,Co.iD)("p",xf,(0,So.zw)(e.$t("remote_user_resolver.error")),1)):(0,Co.kq)("",!0)])])}]]);var Bf={class:"Lists panel panel-default"},Uf={class:"panel-heading"},Mf={class:"title"},Lf={class:"panel-body"},Rf={class:"list-card"};Ht.vI.add(Vt.cNd);const qf={props:["list"]},Nf={data:function(){return{isNew:!1}},components:{ListsCard:(0,Jo.Z)(qf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",Rf,[(0,Co.Wm)(s,{to:{name:"lists-timeline",params:{id:e.list.id}},class:"list-name"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.list.title),1)]})),_:1},8,["to"]),(0,Co.Wm)(s,{to:{name:"lists-edit",params:{id:e.list.id}},class:"button-list-edit"},{default:(0,Co.w5)((function(){return[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"ellipsis-h"})]})),_:1},8,["to"])])}]])},computed:{lists:function(){return this.$store.state.lists.allLists}},methods:{cancelNewList:function(){this.isNew=!1},newList:function(){this.isNew=!0}}},Zf=(0,Jo.Z)(Nf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("router-link"),a=(0,Co.up)("ListsCard");return(0,Co.wg)(),(0,Co.iD)("div",Bf,[(0,Co._)("div",Uf,[(0,Co._)("div",Mf,(0,So.zw)(e.$t("lists.lists")),1),(0,Co.Wm)(s,{to:{name:"lists-new"},class:"button-default btn new-list-button"},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("lists.new")),1)]})),_:1})]),(0,Co._)("div",Lf,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.lists.slice().reverse(),(function(e){return(0,Co.wg)(),(0,Co.j4)(a,{key:e,list:e,class:"list-item"},null,8,["list"])})),128))])])}]]),Wf=Zf,Hf={data:function(){return{listId:null}},components:{Timeline:Vc},computed:{timeline:function(){return this.$store.state.statuses.timelines.list}},watch:{$route:function(e){"lists-timeline"===e.name&&e.params.id!==this.listId&&(this.listId=e.params.id,this.$store.dispatch("stopFetchingTimeline","list"),this.$store.commit("clearTimeline",{timeline:"list"}),this.$store.dispatch("fetchList",{listId:this.listId}),this.$store.dispatch("startFetchingTimeline",{timeline:"list",listId:this.listId}))}},created:function(){this.listId=this.$route.params.id,this.$store.dispatch("fetchList",{listId:this.listId}),this.$store.dispatch("startFetchingTimeline",{timeline:"list",listId:this.listId})},unmounted:function(){this.$store.dispatch("stopFetchingTimeline","list"),this.$store.commit("clearTimeline",{timeline:"list"})}},Vf=(0,Jo.Z)(Hf,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Timeline");return(0,Co.wg)(),(0,Co.j4)(s,{title:"list.name",timeline:e.timeline,"list-id":e.listId,"timeline-name":"list"},null,8,["timeline","list-id"])}]]);var Kf={class:"panel-default panel ListEdit"},Gf={ref:"header",class:"panel-heading list-edit-heading"},Yf={class:"title"},Jf={class:"panel-body"},Qf={class:"input-wrap"},Xf={for:"list-edit-title"},eg=["label"],tg={class:"users-list"},ng=["onClick"],og=["label"],rg={key:0,class:"loading"},ig={key:1,class:"users-list"},sg={key:0},ag=["onClick"],ug=["onClick"],cg={class:"panel-footer"},lg=(0,Co._)("span",{class:"spacer"},null,-1),dg={class:"ListsUserSearch"},pg={class:"input-wrap"},mg={class:"input-search"},hg=["placeholder"],fg={class:"input-wrap"};Ht.vI.add(Vt.wn1,Vt.A35);const gg={components:{Checkbox:wi.Z},emits:["loading","loadingDone","results"],data:function(){return{loading:!1,query:"",followingOnly:!0}},methods:{onInput:ra()((function(){this.search(this.query)}),2e3),search:function(e){var t=this;e?(this.loading=!0,this.$emit("loading"),this.userIds=[],this.$store.dispatch("search",{q:e,resolve:!0,type:"accounts",following:this.followingOnly}).then((function(e){t.$emit("results",e.accounts.map((function(e){return e.id})))})).finally((function(){t.loading=!1,t.$emit("loadingDone")}))):this.loading=!1}}},vg=(0,Jo.Z)(gg,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("Checkbox");return(0,Co.wg)(),(0,Co.iD)("div",dg,[(0,Co._)("div",pg,[(0,Co._)("div",mg,[(0,Co.Wm)(s,{class:"search-icon fa-scale-110 fa-old-padding",icon:"search"})]),(0,Co.wy)((0,Co._)("input",{ref:"search","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.query=t}),placeholder:e.$t("lists.search"),onInput:t[1]||(t[1]=function(){return e.onInput&&e.onInput.apply(e,arguments)})},null,40,hg),[[wo.nr,e.query]])]),(0,Co._)("div",fg,[(0,Co.Wm)(a,{modelValue:e.followingOnly,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.followingOnly=t}),onChange:e.onInput},{default:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.$t("lists.following_only")),1)]})),_:1},8,["modelValue","onChange"])])])}]]);var wg=n(29187);function bg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function yg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bg(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bg(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Ht.vI.add(Vt.wn1,Vt.A35);var Dg={components:{BasicUserCard:ed.Z,UserAvatar:Bl.default,ListsUserSearch:vg,TabSwitcher:fl.Z,PanelLoading:wg.Z},data:function(){return{title:"",titleDraft:"",membersUserIds:[],removedUserIds:new Set([]),searchUserIds:[],addedUserIds:new Set([]),searchLoading:!1,reallyDelete:!1}},created:function(){var e=this;this.id&&(this.$store.dispatch("fetchList",{listId:this.id}).then((function(){e.title=e.findListTitle(e.id),e.titleDraft=e.title})),this.$store.dispatch("fetchListAccounts",{listId:this.id}).then((function(){e.membersUserIds=e.findListAccounts(e.id),e.membersUserIds.forEach((function(t){e.$store.dispatch("fetchUserIfMissing",t)}))})))},computed:yg(yg({id:function(){return this.$route.params.id},membersUsers:function(){var e=this;return[].concat((0,l.Z)(this.membersUserIds),(0,l.Z)(this.addedUserIds)).map((function(t){return e.findUser(t)})).filter((function(e){return e}))},searchUsers:function(){var e=this;return this.searchUserIds.map((function(t){return e.findUser(t)})).filter((function(e){return e}))}},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),(0,s.Se)(["findUser","findListTitle","findListAccounts"])),methods:{onInput:function(){this.search(this.query)},toggleRemoveMember:function(e){this.removedUserIds.has(e.id)?(this.id&&this.addUser(e),this.removedUserIds.delete(e.id)):(this.id&&this.removeUser(e.id),this.removedUserIds.add(e.id))},toggleAddFromSearch:function(e){this.addedUserIds.has(e.id)?(this.id&&this.removeUser(e.id),this.addedUserIds.delete(e.id)):(this.id&&this.addUser(e),this.addedUserIds.add(e.id))},isRemoved:function(e){return this.removedUserIds.has(e.id)},isAdded:function(e){return this.addedUserIds.has(e.id)},addUser:function(e){this.$store.dispatch("addListAccount",{accountId:e.id,listId:this.id})},removeUser:function(e){this.$store.dispatch("removeListAccount",{accountId:e,listId:this.id})},onSearchLoading:function(e){this.searchLoading=!0},onSearchLoadingDone:function(e){this.searchLoading=!1},onSearchResults:function(e){this.searchLoading=!1,this.searchUserIds=e},updateListTitle:function(){var e=this;this.$store.dispatch("setList",{listId:this.id,title:this.titleDraft}).then((function(){e.title=e.findListTitle(e.id)}))},createList:function(){var e=this;this.$store.dispatch("createList",{title:this.titleDraft}).then((function(t){return e.$store.dispatch("setListAccounts",{listId:t.id,accountIds:(0,l.Z)(e.addedUserIds)}).then((function(){return t.id}))})).then((function(t){e.$router.push({name:"lists-timeline",params:{id:t}})})).catch((function(t){e.$store.dispatch("pushGlobalNotice",{messageKey:"lists.error",messageArgs:[t.message],level:"error"})}))},deleteList:function(){this.$store.dispatch("deleteList",{listId:this.id}),this.$router.push({name:"lists"})}}};const _g=Dg,kg=(0,Jo.Z)(_g,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("FAIcon"),a=(0,Co.up)("i18n-t"),u=(0,Co.up)("BasicUserCard"),c=(0,Co.up)("ListsUserSearch"),l=(0,Co.up)("PanelLoading"),d=(0,Co.up)("tab-switcher");return(0,Co.wg)(),(0,Co.iD)("div",Kf,[(0,Co._)("div",Gf,[(0,Co._)("button",{class:"button-unstyled go-back-button",onClick:t[0]||(t[0]=function(){var t;return e.$router.back&&(t=e.$router).back.apply(t,arguments)})},[(0,Co.Wm)(s,{size:"lg",icon:"chevron-left"})]),(0,Co._)("div",Yf,[e.id?((0,Co.wg)(),(0,Co.j4)(a,{key:0,keypath:"lists.editing_list"},{listTitle:(0,Co.w5)((function(){return[(0,Co.Uk)((0,So.zw)(e.title),1)]})),_:1})):((0,Co.wg)(),(0,Co.j4)(a,{key:1,keypath:"lists.creating_list"}))])],512),(0,Co._)("div",Jf,[(0,Co._)("div",Qf,[(0,Co._)("label",Xf,(0,So.zw)(e.$t("lists.title")),1),(0,Co.Uk)(" "+(0,So.zw)(" ")+" "),(0,Co.wy)((0,Co._)("input",{id:"list-edit-title",ref:"title","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.titleDraft=t})},null,512),[[wo.nr,e.titleDraft]]),e.id?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"btn button-default follow-button",onClick:t[2]||(t[2]=function(){return e.updateListTitle&&e.updateListTitle.apply(e,arguments)})},(0,So.zw)(e.$t("lists.update_title")),1)):(0,Co.kq)("",!0)]),(0,Co.Wm)(d,{class:"list-member-management","scrollable-tabs":!0},{default:(0,Co.w5)((function(){return[e.id||e.addedUserIds.size>0?((0,Co.wg)(),(0,Co.iD)("div",{key:0,label:e.$t("lists.manage_members"),class:"members-list"},[(0,Co._)("div",tg,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.membersUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co.Wm)(u,{user:t},{default:(0,Co.w5)((function(){return[(0,Co._)("button",{class:"btn button-default follow-button",onClick:function(n){return e.toggleRemoveMember(t)}},(0,So.zw)(e.isRemoved(t)?e.$t("general.undo"):e.$t("lists.remove_from_list")),9,ng)]})),_:2},1032,["user"])])})),128))])],8,eg)):(0,Co.kq)("",!0),(0,Co._)("div",{class:"search-list",label:e.$t("lists.add_members")},[(0,Co.Wm)(c,{onResults:e.onSearchResults,onLoading:e.onSearchLoading,onLoadingDone:e.onSearchLoadingDone},null,8,["onResults","onLoading","onLoadingDone"]),e.searchLoading?((0,Co.wg)(),(0,Co.iD)("div",rg,[(0,Co.Wm)(l)])):((0,Co.wg)(),(0,Co.iD)("div",ig,[((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.searchUsers,(function(t){return(0,Co.wg)(),(0,Co.iD)("div",{key:t.id,class:"member"},[(0,Co.Wm)(u,{user:t},{default:(0,Co.w5)((function(){return[e.membersUserIds.includes(t.id)?((0,Co.wg)(),(0,Co.iD)("span",sg,(0,So.zw)(e.$t("lists.is_in_list")),1)):(0,Co.kq)("",!0),e.membersUserIds.includes(t.id)?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"btn button-default follow-button",onClick:function(n){return e.toggleRemoveMember(t)}},(0,So.zw)(e.isRemoved(t)?e.$t("general.undo"):e.$t("lists.remove_from_list")),9,ug)):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default follow-button",onClick:function(n){return e.toggleAddFromSearch(t)}},(0,So.zw)(e.isAdded(t)?e.$t("general.undo"):e.$t("lists.add_to_list")),9,ag))]})),_:2},1032,["user"])])})),128))]))],8,og)]})),_:1})]),(0,Co._)("div",cg,[lg,e.id?e.reallyDelete?((0,Co.wg)(),(0,Co.iD)(Co.HY,{key:2},[(0,Co.Uk)((0,So.zw)(e.$t("lists.really_delete"))+" ",1),(0,Co._)("button",{class:"btn button-default footer-button",onClick:t[5]||(t[5]=function(){return e.deleteList&&e.deleteList.apply(e,arguments)})},(0,So.zw)(e.$t("general.yes")),1),(0,Co._)("button",{class:"btn button-default footer-button",onClick:t[6]||(t[6]=function(t){return e.reallyDelete=!1})},(0,So.zw)(e.$t("general.no")),1)],64)):((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default footer-button",onClick:t[4]||(t[4]=function(t){return e.reallyDelete=!0})},(0,So.zw)(e.$t("lists.delete")),1)):((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:"btn button-default footer-button",onClick:t[3]||(t[3]=function(){return e.createList&&e.createList.apply(e,arguments)})},(0,So.zw)(e.$t("lists.create")),1))])])}]]);var Cg={class:"panel panel-default announcements-page"},Sg={class:"panel-heading"},jg={class:"panel-body"},Fg={key:0},Ag={class:"post-form"},Og={class:"heading"},Eg={class:"body"},zg={class:"footer"},Pg=["disabled"],Ig={key:0,class:"alert error"},xg={class:"announcement"},Tg={class:"heading"},$g={class:"body"},Bg={class:"footer"},Ug={key:0,class:"times"},Mg={key:0},Lg={key:1},Rg={key:2},qg={key:1,class:"actions"},Ng=["disabled","title"],Zg={key:2,class:"actions"},Wg={key:0,class:"alert error"},Hg={class:"announcement-editor"},Vg=["placeholder","disabled"],Kg={class:"announcement-metadata"},Gg={for:"announcement-start-time"},Yg=["type","disabled"],Jg={class:"announcement-metadata"},Qg={for:"announcement-end-time"},Xg=["type","disabled"],ev={class:"announcement-metadata"},tv={for:"announcement-all-day"};const nv={components:{Checkbox:wi.Z},props:{announcement:Object,disabled:Boolean}},ov=(0,Jo.Z)(nv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("Checkbox");return(0,Co.wg)(),(0,Co.iD)("div",Hg,[(0,Co.wy)((0,Co._)("textarea",{ref:"textarea","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.announcement.content=t}),class:"post-textarea",rows:"1",cols:"1",placeholder:e.$t("announcements.post_placeholder"),disabled:e.disabled},null,8,Vg),[[wo.nr,e.announcement.content]]),(0,Co._)("span",Kg,[(0,Co._)("label",Gg,(0,So.zw)(e.$t("announcements.start_time_prompt")),1),(0,Co.wy)((0,Co._)("input",{id:"announcement-start-time","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.announcement.startsAt=t}),type:e.announcement.allDay?"date":"datetime-local",disabled:e.disabled},null,8,Yg),[[wo.YZ,e.announcement.startsAt]])]),(0,Co._)("span",Jg,[(0,Co._)("label",Qg,(0,So.zw)(e.$t("announcements.end_time_prompt")),1),(0,Co.wy)((0,Co._)("input",{id:"announcement-end-time","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.announcement.endsAt=t}),type:e.announcement.allDay?"date":"datetime-local",disabled:e.disabled},null,8,Xg),[[wo.YZ,e.announcement.endsAt]])]),(0,Co._)("span",ev,[(0,Co.Wm)(s,{id:"announcement-all-day",modelValue:e.announcement.allDay,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.announcement.allDay=t}),disabled:e.disabled},null,8,["modelValue","disabled"]),(0,Co._)("label",tv,(0,So.zw)(e.$t("announcements.all_day_prompt")),1)])])}]]);function rv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function iv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rv(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const sv={components:{AnnouncementEditor:ov,RichContent:Rl.Z},data:function(){return{editing:!1,editedAnnouncement:{content:"",startsAt:void 0,endsAt:void 0,allDay:void 0},editError:""}},props:{announcement:Object},computed:iv(iv({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{canEditAnnouncement:function(){return this.currentUser&&this.currentUser.privileges.includes("announcements_manage_announcements")},content:function(){return this.announcement.content},isRead:function(){return this.announcement.read},publishedAt:function(){var e=this.announcement.published_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},startsAt:function(){var e=this.announcement.starts_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},endsAt:function(){var e=this.announcement.ends_at;if(e)return this.formatTimeOrDate(e,Ad.Z.internalToBrowserLocale(this.$i18n.locale))},inactive:function(){return this.announcement.inactive}}),methods:{markAsRead:function(){if(!this.isRead)return this.$store.dispatch("markAnnouncementAsRead",this.announcement.id)},deleteAnnouncement:function(){return this.$store.dispatch("deleteAnnouncement",this.announcement.id)},formatTimeOrDate:function(e,t){var n=new Date(e);return this.announcement.all_day?n.toLocaleDateString(t):n.toLocaleString(t)},enterEditMode:function(){this.editedAnnouncement.content=this.announcement.pleroma.raw_content,this.editedAnnouncement.startsAt=this.announcement.starts_at,this.editedAnnouncement.endsAt=this.announcement.ends_at,this.editedAnnouncement.allDay=this.announcement.all_day,this.editing=!0},submitEdit:function(){var e=this;this.$store.dispatch("editAnnouncement",iv({id:this.announcement.id},this.editedAnnouncement)).then((function(){e.editing=!1})).catch((function(t){e.editError=t.error}))},cancelEdit:function(){this.editing=!1},clearError:function(){this.editError=void 0}}};function av(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function uv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?av(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):av(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const cv={components:{Announcement:(0,Jo.Z)(sv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("rich-content"),a=(0,Co.up)("announcement-editor"),u=(0,Co.up)("FAIcon");return(0,Co.wg)(),(0,Co.iD)("div",xg,[(0,Co._)("div",Tg,[(0,Co._)("h4",null,(0,So.zw)(e.$t("announcements.title")),1)]),(0,Co._)("div",$g,[e.editing?((0,Co.wg)(),(0,Co.j4)(a,{key:1,announcement:e.editedAnnouncement},null,8,["announcement"])):((0,Co.wg)(),(0,Co.j4)(s,{key:0,html:e.content,emoji:e.announcement.emojis,"handle-links":!0},null,8,["html","emoji"]))]),(0,Co._)("div",Bg,[e.editing?(0,Co.kq)("",!0):((0,Co.wg)(),(0,Co.iD)("div",Ug,[e.publishedAt?((0,Co.wg)(),(0,Co.iD)("span",Mg,(0,So.zw)(e.$t("announcements.published_time_display",{time:e.publishedAt})),1)):(0,Co.kq)("",!0),e.startsAt?((0,Co.wg)(),(0,Co.iD)("span",Lg,(0,So.zw)(e.$t("announcements.start_time_display",{time:e.startsAt})),1)):(0,Co.kq)("",!0),e.endsAt?((0,Co.wg)(),(0,Co.iD)("span",Rg,(0,So.zw)(e.$t("announcements.end_time_display",{time:e.endsAt})),1)):(0,Co.kq)("",!0)])),e.editing?((0,Co.wg)(),(0,Co.iD)("div",Zg,[(0,Co._)("button",{class:"btn button-default",onClick:t[3]||(t[3]=function(){return e.submitEdit&&e.submitEdit.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.submit_edit_action")),1),(0,Co._)("button",{class:"btn button-default",onClick:t[4]||(t[4]=function(){return e.cancelEdit&&e.cancelEdit.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.cancel_edit_action")),1),e.editing&&e.editError?((0,Co.wg)(),(0,Co.iD)("div",Wg,[(0,Co.Uk)((0,So.zw)(e.$t("announcements.edit_error",{error:e.error}))+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[5]||(t[5]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(u,{class:"fa-scale-110 fa-old-padding",icon:"times",title:e.$t("announcements.close_error")},null,8,["title"])])])):(0,Co.kq)("",!0)])):((0,Co.wg)(),(0,Co.iD)("div",qg,[e.currentUser?((0,Co.wg)(),(0,Co.iD)("button",{key:0,class:(0,So.C_)(["btn button-default",{toggled:e.isRead}]),disabled:e.inactive,title:e.inactive?e.$t("announcements.inactive_message"):"",onClick:t[0]||(t[0]=function(){return e.markAsRead&&e.markAsRead.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.mark_as_read_action")),11,Ng)):(0,Co.kq)("",!0),e.canEditAnnouncement?((0,Co.wg)(),(0,Co.iD)("button",{key:1,class:"btn button-default",onClick:t[1]||(t[1]=function(){return e.enterEditMode&&e.enterEditMode.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.edit_action")),1)):(0,Co.kq)("",!0),e.canEditAnnouncement?((0,Co.wg)(),(0,Co.iD)("button",{key:2,class:"btn button-default",onClick:t[2]||(t[2]=function(){return e.deleteAnnouncement&&e.deleteAnnouncement.apply(e,arguments)})},(0,So.zw)(e.$t("announcements.delete_action")),1)):(0,Co.kq)("",!0)]))])])}]]),AnnouncementEditor:ov},data:function(){return{newAnnouncement:{content:"",startsAt:void 0,endsAt:void 0,allDay:!1},posting:!1,error:void 0}},mounted:function(){this.$store.dispatch("fetchAnnouncements")},computed:uv(uv({},(0,s.rn)({currentUser:function(e){return e.users.currentUser}})),{},{announcements:function(){return this.$store.state.announcements.announcements},canPostAnnouncement:function(){return this.currentUser&&this.currentUser.privileges.includes("announcements_manage_announcements")}}),methods:{postAnnouncement:function(){var e=this;this.posting=!0,this.$store.dispatch("postAnnouncement",this.newAnnouncement).then((function(){e.newAnnouncement.content="",e.startsAt=void 0,e.endsAt=void 0})).catch((function(t){e.error=t.error})).finally((function(){e.posting=!1}))},clearError:function(){this.error=void 0}}},lv=(0,Jo.Z)(cv,[["render",function(e,t,n,o,r,i){var s=(0,Co.up)("announcement-editor"),a=(0,Co.up)("FAIcon"),u=(0,Co.up)("announcement");return(0,Co.wg)(),(0,Co.iD)("div",Cg,[(0,Co._)("div",Sg,[(0,Co._)("span",null,(0,So.zw)(e.$t("announcements.page_header")),1)]),(0,Co._)("div",jg,[e.canPostAnnouncement?((0,Co.wg)(),(0,Co.iD)("section",Fg,[(0,Co._)("div",Ag,[(0,Co._)("div",Og,[(0,Co._)("h4",null,(0,So.zw)(e.$t("announcements.post_form_header")),1)]),(0,Co._)("div",Eg,[(0,Co.Wm)(s,{announcement:e.newAnnouncement,disabled:e.posting},null,8,["announcement","disabled"])]),(0,Co._)("div",zg,[(0,Co._)("button",{class:"btn button-default post-button",disabled:e.posting,onClick:t[0]||(t[0]=(0,wo.iM)((function(){return e.postAnnouncement&&e.postAnnouncement.apply(e,arguments)}),["prevent"]))},(0,So.zw)(e.$t("announcements.post_action")),9,Pg),e.error?((0,Co.wg)(),(0,Co.iD)("div",Ig,[(0,Co.Uk)((0,So.zw)(e.$t("announcements.post_error",{error:e.error}))+" ",1),(0,Co._)("button",{class:"button-unstyled",onClick:t[1]||(t[1]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,Co.Wm)(a,{class:"fa-scale-110 fa-old-padding",icon:"times",title:e.$t("announcements.close_error")},null,8,["title"])])])):(0,Co.kq)("",!0)])])])):(0,Co.kq)("",!0),((0,Co.wg)(!0),(0,Co.iD)(Co.HY,null,(0,Co.Ko)(e.announcements,(function(e){return(0,Co.wg)(),(0,Co.iD)("section",{key:e.id},[(0,Co.Wm)(u,{announcement:e},null,8,["announcement"])])})),128))])])}]]),dv=function(e){var t=function(t,n,o){e.state.users.currentUser?o():o(e.state.instance.redirectRootNoLogin||"/main/all")},n=[{name:"root",path:"/",redirect:function(t){return(e.state.users.currentUser?e.state.instance.redirectRootLogin:e.state.instance.redirectRootNoLogin)||"/main/all"}},{name:"public-external-timeline",path:"/main/all",component:Jc},{name:"public-timeline",path:"/main/public",component:Gc},{name:"friends",path:"/main/friends",component:Xc,beforeEnter:t},{name:"tag-timeline",path:"/tag/:tag",component:tl},{name:"bookmarks",path:"/bookmarks",component:ol},{name:"conversation",path:"/notice/:id",component:il,meta:{dontScroll:!0}},{name:"remote-user-profile-acct",path:"/remote-users/:_(@)?:username([^/@]+)@:hostname([^/@]+)",component:$f,beforeEnter:t},{name:"remote-user-profile",path:"/remote-users/:hostname/:username",component:$f,beforeEnter:t},{name:"external-user-profile",path:"/users/$:id",component:fp},{name:"interactions",path:"/users/:username/interactions",component:wl,beforeEnter:t},{name:"dms",path:"/users/:username/dms",component:yl,beforeEnter:t},{name:"registration",path:"/registration",component:Vm},{name:"password-reset",path:"/password-reset",component:fh,props:!0},{name:"registration-token",path:"/registration/:token",component:Vm},{name:"friend-requests",path:"/friend-requests",component:kh,beforeEnter:t},{name:"notifications",path:"/:username/notifications",component:ya.default,props:function(){return{disableTeleport:!0}},beforeEnter:t},{name:"login",path:"/login",component:Pr},{name:"shout-panel",path:"/shout-panel",component:gs,props:function(){return{floating:!1}}},{name:"oauth-callback",path:"/oauth-callback",component:Sh,props:function(e){return{code:e.query.code}}},{name:"search",path:"/search",component:Wp,props:function(e){return{query:e.query.query}}},{name:"who-to-follow",path:"/who-to-follow",component:Eh,beforeEnter:t},{name:"about",path:"/about",component:Ef},{name:"announcements",path:"/announcements",component:lv},{name:"user-profile",path:"/users/:name",component:fp},{name:"legacy-user-profile",path:"/:name",component:fp},{name:"lists",path:"/lists",component:Wf},{name:"lists-timeline",path:"/lists/:id",component:Vf},{name:"lists-edit",path:"/lists/:id/edit",component:kg},{name:"lists-new",path:"/lists/new",component:kg},{name:"edit-navigation",path:"/nav-edit",component:_i,props:function(){return{forceExpand:!0,forceEditMode:!0}},beforeEnter:t}];return e.state.instance.pleromaChatMessagesAvailable&&(n=n.concat([{name:"chat",path:"/users/:username/chats/:recipient_id",component:Ld,meta:{dontScroll:!1},beforeEnter:t},{name:"chats",path:"/users/:username/chats",component:cd,meta:{dontScroll:!1},beforeEnter:t}])),n};var pv,mv,hv=n(58509),fv=new Set([]),gv=function(e){var t=window.innerWidth-document.documentElement.clientWidth;hv.Qp(e,{reserveScrollBarGap:!0}),fv.add(e),setTimeout((function(){if(fv.size<=1){if(void 0===pv){var e=document.getElementById("nav");pv=window.getComputedStyle(e).getPropertyValue("padding-right"),e.style.paddingRight=pv?"calc(".concat(pv," + ").concat(t,"px)"):"".concat(t,"px")}if(void 0===mv){var n=document.getElementById("app_bg_wrapper");mv=window.getComputedStyle(n).getPropertyValue("right"),n.style.right=mv?"calc(".concat(mv," + ").concat(t,"px)"):"".concat(t,"px")}document.body.classList.add("scroll-locked")}}))},vv=function(e){fv.delete(e),setTimeout((function(){0===fv.size&&(void 0!==pv&&(document.getElementById("nav").style.paddingRight=pv,pv=void 0),void 0!==mv&&(document.getElementById("app_bg_wrapper").style.right=mv,mv=void 0),document.body.classList.remove("scroll-locked"))})),hv.tG(e)},wv={mounted:function(e,t){t.value&&gv(e)},updated:function(e,t){t.oldValue!==t.value&&(t.value?gv(e):vv(e))},unmounted:function(e){vv(e)}};const bv=function(e){e.directive("body-scroll-lock",wv)};var yv=n(49753);function Dv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function _v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Dv(Object(n),!0).forEach((function(t){(0,d.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var kv=null,Cv=function(e){var t=atob(e),n=Uint8Array.from((0,l.Z)(t).map((function(e){return e.charCodeAt(0)})));return(new TextDecoder).decode(n)},Sv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((n=document.getElementById("initial-results")?(kv||(kv=JSON.parse(document.getElementById("initial-results").textContent)),kv):null)&&n[t]){e.next=3;break}return e.abrupt("return",window.fetch(t));case 3:return o=Cv(n[t]),r=JSON.parse(o),e.abrupt("return",{ok:!0,json:function(){return r},text:function(){return r}});case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),jv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/api/v1/instance");case 4:if(!(o=e.sent).ok){e.next=18;break}return e.next=8,o.json();case 8:r=e.sent,s=r.max_toot_chars,a=r.pleroma.vapid_public_key,n.dispatch("setInstanceOption",{name:"textlimit",value:s}),n.dispatch("setInstanceOption",{name:"accountApprovalRequired",value:r.approval_required}),n.dispatch("setInstanceOption",{name:"birthdayRequired",value:!!r.pleroma.metadata.birthday_required}),n.dispatch("setInstanceOption",{name:"birthdayMinAge",value:r.pleroma.metadata.birthday_min_age||0}),a&&n.dispatch("setInstanceOption",{name:"vapidPublicKey",value:a}),e.next=19;break;case 18:throw o;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(1),console.error("Could not load instance config, potentially fatal"),console.error(e.t0);case 25:case"end":return e.stop()}}),e,null,[[1,21]])})));return function(t){return e.apply(this,arguments)}}(),Fv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.store,e.prev=1,e.next=4,window.fetch("/api/pleroma/frontend_configurations");case 4:if(!(n=e.sent).ok){e.next=12;break}return e.next=8,n.json();case 8:return o=e.sent,e.abrupt("return",o.pleroma_fe);case 12:throw n;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.error("Could not load backend-provided frontend config, potentially fatal"),console.error(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),Av=function(){var e=(0,o.Z)(i().mark((function e(){var t;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,window.fetch("/static/config.json");case 3:if(!(t=e.sent).ok){e.next=8;break}return e.abrupt("return",t.json());case 8:throw t;case 9:e.next=16;break;case 11:return e.prev=11,e.t0=e.catch(0),console.warn("Failed to load static/config.json, continuing without it."),console.warn(e.t0),e.abrupt("return",{});case 16:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}(),Ov=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.apiConfig,o=t.staticConfig,r=t.store,s=window.___pleromafe_dev_overrides||{},a=window.___pleromafe_mode.NODE_ENV,u={},s.staticConfigPreference&&"development"===a?(console.warn("OVERRIDING API CONFIG WITH STATIC CONFIG"),u=Object.assign({},n,o)):u=Object.assign({},o,n),(c=function(e){r.dispatch("setInstanceOption",{name:e,value:u[e]})})("nsfwCensorImage"),c("background"),c("hidePostStats"),c("hideBotIndication"),c("hideUserStats"),c("hideFilteredStatuses"),c("logo"),r.dispatch("setInstanceOption",{name:"logoMask",value:void 0===u.logoMask||u.logoMask}),r.dispatch("setInstanceOption",{name:"logoMargin",value:void 0===u.logoMargin?0:u.logoMargin}),c("logoLeft"),r.commit("authFlow/setInitialStrategy",u.loginMethod),c("redirectRootNoLogin"),c("redirectRootLogin"),c("showInstanceSpecificPanel"),c("minimalScopesMode"),c("hideMutedPosts"),c("collapseMessageWithSubject"),c("scopeCopy"),c("subjectLineBehavior"),c("postContentType"),c("alwaysShowSubjectInput"),c("showFeaturesPanel"),c("hideSitename"),c("sidebarRight"),e.abrupt("return",r.dispatch("setTheme",u.theme));case 31:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Ev=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,window.fetch("/static/terms-of-service.html");case 4:if(!(o=e.sent).ok){e.next=12;break}return e.next=8,o.text();case 8:r=e.sent,n.dispatch("setInstanceOption",{name:"tos",value:r}),e.next=13;break;case 12:throw o;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.warn("Can't load TOS"),console.warn(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),zv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/instance/panel.html");case 4:if(!(o=e.sent).ok){e.next=12;break}return e.next=8,o.text();case 8:r=e.sent,n.dispatch("setInstanceOption",{name:"instanceSpecificPanelContent",value:r}),e.next=13;break;case 12:throw o;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.warn("Can't load instance panel"),console.warn(e.t0);case 19:case"end":return e.stop()}}),e,null,[[1,15]])})));return function(t){return e.apply(this,arguments)}}(),Pv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,window.fetch("/static/stickers.json");case 4:if(!(r=e.sent).ok){e.next=15;break}return e.next=8,r.json();case 8:return s=e.sent,e.next=11,Promise.all(Object.entries(s).map(function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=(0,c.Z)(t,2),o=n[0],r=n[1],e.next=3,window.fetch(r+"pack.json");case 3:if(s=e.sent,a={},!s.ok){e.next=9;break}return e.next=8,s.json();case 8:a=e.sent;case 9:return e.abrupt("return",{pack:o,path:r,meta:a});case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 11:a=e.sent.sort((function(e,t){return e.meta.title.localeCompare(t.meta.title)})),n.dispatch("setInstanceOption",{name:"stickers",value:a}),e.next=16;break;case 15:throw r;case 16:e.next=22;break;case 18:e.prev=18,e.t0=e.catch(1),console.warn("Can't load stickers"),console.warn(e.t0);case 22:case"end":return e.stop()}}),e,null,[[1,18]])})));return function(t){return e.apply(this,arguments)}}(),Iv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,o=n.state,r=n.commit,s=o.oauth,a=o.instance,e.abrupt("return",Le(_v(_v({},s),{},{instance:a.server,commit:r})).then((function(e){return Re(_v(_v({},e),{},{instance:a.server}))})).then((function(e){r("setAppToken",e.access_token),r("setBackendInteractor",xe(n.getters.getToken()))})));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),xv=function(e){var t=e.store,n=e.accounts.map((function(e){return e.split("/").pop()}));t.dispatch("setInstanceOption",{name:"staffAccounts",value:n})},Tv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c,l,d,p,m,h,f;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.prev=1,e.next=4,Sv("/nodeinfo/2.0.json");case 4:if(!(o=e.sent).ok){e.next=52;break}return e.next=8,o.json();case 8:r=e.sent,s=r.metadata,a=s.features,n.dispatch("setInstanceOption",{name:"name",value:s.nodeName}),n.dispatch("setInstanceOption",{name:"registrationOpen",value:r.openRegistrations}),n.dispatch("setInstanceOption",{name:"mediaProxyAvailable",value:a.includes("media_proxy")}),n.dispatch("setInstanceOption",{name:"safeDM",value:a.includes("safe_dm_mentions")}),n.dispatch("setInstanceOption",{name:"shoutAvailable",value:a.includes("chat")}),n.dispatch("setInstanceOption",{name:"pleromaChatMessagesAvailable",value:a.includes("pleroma_chat_messages")}),n.dispatch("setInstanceOption",{name:"pleromaCustomEmojiReactionsAvailable",value:a.includes("pleroma_custom_emoji_reactions")}),n.dispatch("setInstanceOption",{name:"gopherAvailable",value:a.includes("gopher")}),n.dispatch("setInstanceOption",{name:"pollsAvailable",value:a.includes("polls")}),n.dispatch("setInstanceOption",{name:"editingAvailable",value:a.includes("editing")}),n.dispatch("setInstanceOption",{name:"pollLimits",value:s.pollLimits}),n.dispatch("setInstanceOption",{name:"mailerEnabled",value:s.mailerEnabled}),n.dispatch("setInstanceOption",{name:"quotingAvailable",value:a.includes("quote_posting")}),u=s.uploadLimits,n.dispatch("setInstanceOption",{name:"uploadlimit",value:parseInt(u.general)}),n.dispatch("setInstanceOption",{name:"avatarlimit",value:parseInt(u.avatar)}),n.dispatch("setInstanceOption",{name:"backgroundlimit",value:parseInt(u.background)}),n.dispatch("setInstanceOption",{name:"bannerlimit",value:parseInt(u.banner)}),n.dispatch("setInstanceOption",{name:"fieldsLimits",value:s.fieldsLimits}),n.dispatch("setInstanceOption",{name:"restrictedNicknames",value:s.restrictedNicknames}),n.dispatch("setInstanceOption",{name:"postFormats",value:s.postFormats}),c=s.suggestions,n.dispatch("setInstanceOption",{name:"suggestionsEnabled",value:c.enabled}),n.dispatch("setInstanceOption",{name:"suggestionsWeb",value:c.web}),l=r.software,n.dispatch("setInstanceOption",{name:"backendVersion",value:l.version}),n.dispatch("setInstanceOption",{name:"pleromaBackend",value:"pleroma"===l.name}),d=s.private,n.dispatch("setInstanceOption",{name:"private",value:d}),p=window.___pleromafe_commit_hash,n.dispatch("setInstanceOption",{name:"frontendVersion",value:p}),m=s.federation,n.dispatch("setInstanceOption",{name:"tagPolicyAvailable",value:void 0!==m.mrf_policies&&s.federation.mrf_policies.includes("TagPolicy")}),n.dispatch("setInstanceOption",{name:"federationPolicy",value:m}),n.dispatch("setInstanceOption",{name:"federating",value:void 0===m.enabled||m.enabled}),h=s.accountActivationRequired,n.dispatch("setInstanceOption",{name:"accountActivationRequired",value:h}),f=s.staffAccounts,xv({store:n,accounts:f}),e.next=53;break;case 52:throw o;case 53:e.next=59;break;case 55:e.prev=55,e.t0=e.catch(1),console.warn("Could not load nodeinfo"),console.warn(e.t0);case 59:case"end":return e.stop()}}),e,null,[[1,55]])})));return function(t){return e.apply(this,arguments)}}(),$v=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.next=3,Promise.all([Fv({store:n}),Av()]);case 3:return o=e.sent,r=o[0],s=o[1],e.next=8,Ov({store:n,apiConfig:r,staticConfig:s}).then(Iv({store:n}));case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Bv=function(){var e=(0,o.Z)(i().mark((function e(t){var n;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,e.abrupt("return",new Promise(function(){var e=(0,o.Z)(i().mark((function e(t,o){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!n.getters.getUserToken()){e.next=9;break}return e.prev=1,e.next=4,n.dispatch("loginUser",n.getters.getUserToken());case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:t();case 10:case"end":return e.stop()}}),e,null,[[1,6]])})));return function(t,n){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();const Uv=function(){var e=(0,o.Z)(i().mark((function e(t){var n,o,r,s,a,u,c,l,d,h;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.store,o=t.i18n,n.dispatch("setLayoutWidth",Te()),n.dispatch("setLayoutHeight",$e()),yv.Z.initFaviconService(),r=window.___pleromafe_dev_overrides||{},s=void 0!==r.target?r.target:window.location.origin,n.dispatch("setInstanceOption",{name:"server",value:s}),e.next=9,$v({store:n});case 9:return a=n.state.config,u=a.customTheme,c=a.customThemeSource,l=n.state.instance.theme,c||u?c&&c.themeEngineVersion===m.we?(0,p._v)(c):(0,p._v)(u):l||console.error("Failed to load any theme!"),(0,p.mg)(n.state.config),e.next=16,Promise.all([Bv({store:n}),zv({store:n}),Tv({store:n}),jv({store:n})]);case 16:return n.dispatch("fetchMutes"),n.dispatch("startFetchingAnnouncements"),Ev({store:n}),Pv({store:n}),d=(0,bo.p7)({history:(0,bo.PO)(),routes:dv(n),scrollBehavior:function(e,t,n){return!e.matched.some((function(e){return e.meta.dontScroll}))&&(n||{left:0,top:0})}}),(h=(0,wo.ri)(Au)).use(d),h.use(n),h.use(o),h.use(Do()),h.use(bv),h.use(_o.ZP),h.component("FAIcon",ko.GN),h.component("FALayers",ko.NH),h.config.unwrapInjectedRef=!0,h.mount("#app"),e.abrupt("return",h);case 33:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();var Mv=(window.navigator.language||"en").split("-")[0],Lv=(0,so.o)({locale:"en",fallbackLocale:"en",messages:vo.Z.default});vo.Z.setLanguage(Lv.global,Mv);var Rv={paths:["serverSideStorage.cache","config","users.lastLoginName","oauth"]};(0,o.Z)(i().mark((function e(){var t,n,o,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!1,n=[go],e.prev=2,e.next=5,fo(Rv);case 5:o=e.sent,n.push(o),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),console.error(e.t0),t=!0;case 13:r=(0,s.MT)({modules:{i18n:{getters:{i18n:function(){return Lv.global}}},interface:u,instance:k,users:st,statuses:ae,lists:le,api:vt,config:f.ZP,profileConfig:Ft,serverSideStorage:ln,adminSettings:wn,shout:bn,oauth:yn,authFlow:jn,mediaViewer:En,oauthTokens:zn,reports:Tn,polls:$n,postStatus:Bn,editStatus:Un,statusHistory:Mn,chats:ro,announcements:io},plugins:n,strict:!1}),t&&r.dispatch("pushGlobalNotice",{messageKey:"errors.storage_unavailable",level:"error"}),Uv({store:r,i18n:Lv});case 16:case"end":return e.stop()}}),e,null,[[2,9]])})))(),window.___pleromafe_mode={NODE_ENV:"production"},window.___pleromafe_commit_hash="6c78b59c\n",window.___pleromafe_dev_overrides=void 0},85565:(e,t,n)=>{"use strict";n.d(t,{Oi:()=>f,W2:()=>h,ZP:()=>g});var o=n(4942),r=n(29439),i=n(36968),s=n.n(i),a=n(6258),u=n(77394),c=n(72617),l=n(39776);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var h={expertLevel:0,colors:{},theme:void 0,customTheme:void 0,customThemeSource:void 0,hideISP:!1,hideInstanceWallpaper:!1,hideShoutbox:!1,hideMutedPosts:void 0,hideMutedThreads:void 0,hideWordFilteredPosts:void 0,muteBotStatuses:void 0,collapseMessageWithSubject:void 0,padEmoji:!0,hideAttachments:!1,hideAttachmentsInConv:!1,maxThumbnails:16,hideNsfw:!0,preloadImage:!0,loopVideo:!0,loopVideoSilentOnly:!0,streaming:!1,emojiReactionsOnTimeline:!0,alwaysShowNewPostButton:!1,autohideFloatingPostButton:!1,pauseOnUnfocused:!0,stopGifs:!0,replyVisibility:"all",thirdColumnMode:"notifications",notificationVisibility:{follows:!0,mentions:!0,likes:!0,repeats:!0,moves:!0,emojiReactions:!0,followRequest:!0,reports:!0,chatMention:!0,polls:!0},webPushNotifications:!1,muteWords:[],highlight:{},interfaceLanguage:(window.navigator.language||"en").split("-")[0],hideScopeNotice:!1,useStreamingApi:!1,sidebarRight:void 0,scopeCopy:void 0,subjectLineBehavior:void 0,alwaysShowSubjectInput:void 0,postContentType:void 0,minimalScopesMode:void 0,hideFilteredStatuses:void 0,modalOnRepeat:void 0,modalOnUnfollow:void 0,modalOnBlock:void 0,modalOnMute:void 0,modalOnDelete:void 0,modalOnLogout:void 0,modalOnApproveFollow:void 0,modalOnDenyFollow:void 0,modalOnRemoveUserFromFollowers:void 0,playVideosInModal:!1,useOneClickNsfw:!1,useContainFit:!0,disableStickyHeaders:!1,showScrollbars:!1,userPopoverAvatarAction:"open",userPopoverOverlay:!1,sidebarColumnWidth:"25rem",contentColumnWidth:"45rem",notifsColumnWidth:"25rem",emojiReactionsScale:1,navbarColumnStretch:!1,greentext:void 0,useAtIcon:void 0,mentionLinkDisplay:void 0,mentionLinkShowTooltip:void 0,mentionLinkShowAvatar:void 0,mentionLinkFadeDomain:void 0,mentionLinkShowYous:void 0,mentionLinkBoldenYou:void 0,hidePostStats:void 0,hideBotIndication:void 0,hideUserStats:void 0,virtualScrolling:void 0,sensitiveByDefault:void 0,conversationDisplay:void 0,conversationTreeAdvanced:void 0,conversationOtherRepliesButton:void 0,conversationTreeFadeAncestors:void 0,maxDepthInThread:void 0,autocompleteSelect:void 0},f=Object.entries(h).filter((function(e){var t=(0,r.Z)(e,2);return t[0],void 0===t[1]})).map((function(e){var t=(0,r.Z)(e,2),n=t[0];return t[1],n}));const g={state:m({},h),getters:{defaultConfig:function(e,t,n,o){var r=n.instance;return m(m({},h),Object.fromEntries(f.map((function(e){return[e,r[e]]}))))},mergedConfig:function(e,t,n,o){return m(m({},o.defaultConfig),Object.fromEntries(Object.entries(e).filter((function(e){var t=(0,r.Z)(e,2);return t[0],void 0!==t[1]}))))}},mutations:{setOption:function(e,t){var n=t.name,o=t.value;s()(e,n,o)},setHighlight:function(e,t){var n=t.user,o=t.color,r=t.type,i=this.state.config.highlight[n];o||r?e.highlight[n]={color:o||i.color,type:r||i.type}:delete e.highlight[n]}},actions:{loadSettings:function(e,t){var n,o=e.dispatch,r=new Set(Object.keys(h)),i=new Set(Object.keys(t)),s=new Set,a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(i);try{for(a.s();!(n=a.n()).done;){var u=n.value;r.has(u)&&s.add(u)}}catch(e){a.e(e)}finally{a.f()}s.forEach((function(e){return o("setOption",{name:e,value:t[e]})}))},setHighlight:function(e,t){var n=e.commit;e.dispatch,n("setHighlight",{user:t.user,color:t.color,type:t.type})},setOption:function(e,t){var n=e.commit,o=e.dispatch,r=e.state,i=t.name,s=t.value;if(new Set(["useStreamingApi"]).has(i))"useStreamingApi"===i&&o(s?"enableMastoSockets":"disableMastoSockets").then((function(){n("setOption",{name:"useStreamingApi",value:s})})).catch((function(e){console.error("Failed starting MastoAPI Streaming socket",e),o("disableMastoSockets"),o("setOption",{name:"useStreamingApi",value:!1})}));else switch(n("setOption",{name:i,value:s}),i){case"theme":(0,u.bY)(s);break;case"sidebarColumnWidth":case"contentColumnWidth":case"notifsColumnWidth":case"emojiReactionsScale":(0,u.mg)(r);break;case"customTheme":case"customThemeSource":(0,u._v)(s);break;case"interfaceLanguage":c.Z.setLanguage(this.getters.i18n,s),o("loadUnicodeEmojiData",s),a.Z.set("userLanguage",l.Z.internalToBackendLocaleMulti(s));break;case"thirdColumnMode":o("setLayoutWidth",void 0)}}}}},77776:(e,t,n)=>{"use strict";n.d(t,{ro:()=>$e,_z:()=>Ue,ZP:()=>Me,pR:()=>Ie});var o=n(15861),r=n(44925),i=n(29439),s=n(4942),a=n(27361),u=n.n(a),c=n(10928),l=n.n(c),d=n(57043),p=n.n(d),m=n(35161),h=n.n(m),f=n(66073),g=n.n(f),v=n(64687),w=n.n(v),b=n(27742),y=n(71002),D=n(43144),_=n(15671),k=n(97326),C=n(60136),S=n(82963),j=n(61120),F=n(72407),A=n(93433),O=n(48403),E=n.n(O);function z(e,t,n,o){this.name="StatusCodeError",this.statusCode=e,this.message=e+" - "+(JSON&&JSON.stringify?JSON.stringify(t):t),this.error=t,this.options=n,this.response=o,Error.captureStackTrace&&Error.captureStackTrace(this)}z.prototype=Object.create(Error.prototype),z.prototype.constructor=z;var P=function(e){(0,C.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,o=(0,j.Z)(t);if(n){var r=(0,j.Z)(this).constructor;e=Reflect.construct(o,arguments,r)}else e=o.apply(this,arguments);return(0,S.Z)(this,e)});function r(e){var t,n;(0,_.Z)(this,r),t=o.call(this),Error.captureStackTrace&&Error.captureStackTrace((0,k.Z)(t));try{if("string"==typeof e&&(e=JSON.parse(e)).hasOwnProperty("error")&&(e=JSON.parse(e.error)),"object"===(0,y.Z)(e)){var s=JSON.parse(e.error);s.ap_id&&(s.username=s.ap_id,delete s.ap_id),t.message=(n=s,Object.entries(n).reduce((function(e,t){var n=(0,i.Z)(t,2),o=n[0],r=n[1].reduce((function(e,t){return e+[E()(o.replace(/_/g," ")),t].join(" ")+". "}),"");return[].concat((0,A.Z)(e),[r])}),[]))}else t.message=e}catch(n){t.message=e}return t}return(0,D.Z)(r)}((0,F.Z)(Error)),I=["nickname"],x=["id","credentials"];function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?T(Object(n),!0).forEach((function(t){(0,s.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var B="/api/pleroma/aliases",U="/api/pleroma/admin/users/tag",M=function(e,t){return"/api/pleroma/admin/users/".concat(e,"/permission_group/").concat(t)},L=function(e){return"/api/v1/notifications/".concat(e,"/dismiss")},R=function(e){return"/api/v1/statuses/".concat(e,"/favourite")},q=function(e){return"/api/v1/statuses/".concat(e,"/unfavourite")},N=function(e){return"/api/v1/statuses/".concat(e,"/reblog")},Z=function(e){return"/api/v1/statuses/".concat(e,"/unreblog")},W=function(e){return"/api/v1/statuses/".concat(e)},H="/api/v1/timelines/public",V=function(e){return"/api/v1/statuses/".concat(e)},K=function(e){return"/api/v1/accounts/".concat(e,"/statuses")},G=function(e){return"/api/v1/lists/".concat(e)},Y=function(e){return"/api/v1/timelines/list/".concat(e)},J=function(e){return"/api/v1/lists/".concat(e,"/accounts")},Q=function(e){return"/api/v1/timelines/tag/".concat(e)},X=function(e){return"/api/v1/accounts/".concat(e,"/mute")},ee=function(e){return"/api/v1/accounts/".concat(e,"/unmute")},te=function(e){return"/api/v1/pleroma/accounts/".concat(e,"/subscribe")},ne=function(e){return"/api/v1/pleroma/accounts/".concat(e,"/unsubscribe")},oe=function(e){return"/api/v1/accounts/".concat(e,"/note")},re=function(e){return"/api/v1/statuses/".concat(e,"/bookmark")},ie=function(e){return"/api/v1/statuses/".concat(e,"/unbookmark")},se="/api/v1/media",ae=function(e){return"/api/v1/statuses/".concat(e,"/favourited_by")},ue=function(e){return"/api/v1/statuses/".concat(e,"/reblogged_by")},ce="/api/v1/accounts/update_credentials",le=function(e){return"/api/v1/statuses/".concat(e,"/pin")},de=function(e){return"/api/v1/statuses/".concat(e,"/unpin")},pe=function(e){return"/api/v1/statuses/".concat(e,"/mute")},me=function(e){return"/api/v1/statuses/".concat(e,"/unmute")},he="/api/v1/domain_blocks",fe=function(e){return"/api/v1/announcements/".concat(e,"/dismiss")},ge=function(e){return"/api/v1/pleroma/statuses/".concat(e,"/reactions")},ve=function(e,t){return"/api/v1/pleroma/statuses/".concat(e,"/reactions/").concat(t)},we=function(e,t){return"/api/v1/pleroma/statuses/".concat(e,"/reactions/").concat(t)},be=function(e){return"/api/v1/pleroma/chats/".concat(e,"/messages")},ye=function(e){return"/api/v1/pleroma/chats/".concat(e,"/read")},De=function(e,t){return"/api/v1/pleroma/chats/".concat(e,"/messages/").concat(t)},_e="/api/v1/pleroma/backups",ke=function(e){return"/api/v1/pleroma/admin/announcements/".concat(e)},Ce=function(e){return"/api/v1/pleroma/admin/announcements/".concat(e)},Se="/api/pleroma/admin/config",je=window.fetch,Fe=function(e,t){var n=""+e;return(t=t||{}).credentials="same-origin",je(n,t)},Ae=function(e){var t=e.method,n=e.url,o=e.params,r=e.payload,s=e.credentials,a=e.headers,u={method:t,headers:$({Accept:"application/json","Content-Type":"application/json"},void 0===a?{}:a)};return o&&(n+="?"+Object.entries(o).map((function(e){var t=(0,i.Z)(e,2),n=t[0],o=t[1];return encodeURIComponent(n)+"="+encodeURIComponent(o)})).join("&")),r&&(u.body=JSON.stringify(r)),s&&(u.headers=$($({},u.headers),Oe(s))),Fe(n,u).then((function(e){return new Promise((function(t,o){return e.json().then((function(r){return e.ok?t(r):o(new z(e.status,r,{url:n,options:u},e))})).catch((function(t){return o(new z(e.status,t,{url:n,options:u},e))}))}))}))},Oe=function(e){return e?{Authorization:"Bearer ".concat(e)}:{}},Ee=function(e){var t=e.id,n=e.credentials,o="".concat("/api/v1/accounts","/").concat(t);return Ae({url:o,credentials:n}).then((function(e){return(0,b.nL)(e)}))},ze=function(e){var t=e.id,n=e.maxId,o=e.sinceId,r=e.limit,i=void 0===r?20:r,s=e.credentials,a=function(e){return"/api/v1/accounts/".concat(e,"/following")}(t),u=[n&&"max_id=".concat(n),o&&"since_id=".concat(o),i&&"limit=".concat(i),"with_relationships=true"].filter((function(e){return e})).join("&");return Fe(a+=u?"?"+u:"",{headers:Oe(s)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},Pe=function(e){var t=e.content,n=e.startsAt,o=e.endsAt,r=e.allDay,i={content:t};return void 0!==n&&(i.starts_at=n?new Date(n).toISOString():null),void 0!==o&&(i.ends_at=o?new Date(o).toISOString():null),void 0!==r&&(i.all_day=r),i},Ie=function(e){var t=e.credentials,n=e.stream,o=e.args,r=void 0===o?{}:o;return Object.entries($($({},t?{access_token:t}:{}),{},{stream:n},r)).reduce((function(e,t){var n=(0,i.Z)(t,2),o=n[0],r=n[1];return e+"".concat(o,"=").concat(r,"&")}),"/api/v1/streaming?")},xe=new Set(["update","notification","delete","filters_changed","status.update"]),Te=new Set(["pleroma:chat_update"]),$e=function(e){var t=e.url,n=e.preprocessor,o=void 0===n?Be:n,r=e.id,i=void 0===r?"Unknown":r,s=new EventTarget,a=new WebSocket(t);if(!a)throw new Error("Failed to create socket ".concat(i));var u=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e};e.addEventListener(t,(function(e){s.dispatchEvent(new CustomEvent(t,{detail:n(e)}))}))};return a.addEventListener("open",(function(e){console.debug("[WS][".concat(i,"] Socket connected"),e)})),a.addEventListener("error",(function(e){console.debug("[WS][".concat(i,"] Socket errored"),e)})),a.addEventListener("close",(function(e){console.debug("[WS][".concat(i,"] Socket disconnected with code ").concat(e.code),e)})),u(a,"open"),u(a,"close"),u(a,"message",o),u(a,"error"),s.close=function(){a.close(1e3,"Shutting down socket")},s.getState=function(){return a.readyState},s},Be=function(e){var t=e.data;if(t){var n=JSON.parse(t),o=n.event,r=n.payload;if(!xe.has(o)&&!Te.has(o))return console.warn("Unknown event",e),null;if("delete"===o)return{event:o,id:r};var i=r?JSON.parse(r):null;return"update"===o||"status.update"===o?{event:o,status:(0,b.Wn)(i)}:"notification"===o?{event:o,notification:(0,b.eM)(i)}:"pleroma:chat_update"===o?{event:o,chatUpdate:(0,b._J)(i)}:void 0}},Ue=Object.freeze({JOINED:1,CLOSED:2,ERROR:3,DISABLED:4,STARTING:5,STARTING_INITIAL:6});const Me={verifyCredentials:function(e){return Fe("/api/v1/accounts/verify_credentials",{headers:Oe(e)}).then((function(e){return e.ok?e.json():{error:e}})).then((function(e){return e.error?e:(0,b.nL)(e)}))},fetchTimeline:function(e){var t=e.timeline,n=e.credentials,r=e.since,i=void 0!==r&&r,s=e.until,a=void 0!==s&&s,u=e.userId,c=void 0!==u&&u,l=e.listId,d=void 0!==l&&l,p=e.tag,m=void 0!==p&&p,f=e.withMuted,g=void 0!==f&&f,v=e.replyVisibility,y=void 0===v?"all":v,D=e.includeTypes,_=void 0===D?[]:D,k="notifications"===t,C=[],S={public:H,friends:"/api/v1/timelines/home",dms:"/api/v1/timelines/direct",notifications:"/api/v1/notifications",publicAndExternal:H,user:K,media:K,list:Y,favorites:"/api/v1/favourites",tag:Q,bookmarks:"/api/v1/bookmarks"}[t];"user"!==t&&"media"!==t||(S=S(c)),"list"===t&&(S=S(d)),i&&C.push(["since_id",i]),a&&C.push(["max_id",a]),m&&(S=S(m)),"media"===t&&C.push(["only_media",1]),"public"===t&&C.push(["local",!0]),"public"!==t&&"publicAndExternal"!==t||C.push(["only_media",!1]),"favorites"!==t&&"bookmarks"!==t&&C.push(["with_muted",g]),"all"!==y&&C.push(["reply_visibility",y]),_.length>0&&_.forEach((function(e){C.push(["include_types[]",e])})),C.push(["limit",20]);var j=h()(C,(function(e){return"".concat(e[0],"=").concat(e[1])})).join("&");return S+="?".concat(j),Fe(S,{headers:Oe(n)}).then(function(){var e=(0,o.Z)(w().mark((function e(n){var o,r,i;return w().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=n.ok,e.next=3,n.json();case 3:if(r=e.sent,!o||r.errors){e.next=9;break}return i=(0,b.Nw)(n.headers.get("Link"),{flakeId:"bookmarks"!==t&&"notifications"!==t}),e.abrupt("return",{data:r.map(k?b.eM:b.Wn),pagination:i});case 9:return r.errors||(r.errors=[]),r.status=n.status,r.statusText=n.statusText,e.abrupt("return",r);case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())},fetchPinnedStatuses:function(e){var t=e.id,n=e.credentials,o=K(t)+"?pinned=true";return Ae({url:o,credentials:n}).then((function(e){return e.map(b.Wn)}))},fetchConversation:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/statuses/".concat(e,"/context")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching timeline",e)})).then((function(e){return e.json()})).then((function(e){var t=e.ancestors,n=e.descendants;return{ancestors:t.map(b.Wn),descendants:n.map(b.Wn)}}))},fetchStatus:function(e){var t=e.id,n=e.credentials,o=V(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching timeline",e)})).then((function(e){return e.json()})).then((function(e){return(0,b.Wn)(e)}))},fetchStatusSource:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/statuses/".concat(e,"/source")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching source",e)})).then((function(e){return e.json()})).then((function(e){return(0,b.P7)(e)}))},fetchStatusHistory:function(e){var t,n=e.status,o=e.credentials,r=(t=n.id,"/api/v1/statuses/".concat(t,"/history"));return Ae({url:r,credentials:o}).then((function(e){return e.reverse(),e.map((function(e){return e.originalStatus=n,(0,b.Wn)(e)}))}))},fetchFriends:ze,exportFriends:function(e){var t=e.id,n=e.credentials;return new Promise(function(){var e=(0,o.Z)(w().mark((function e(o,r){var i,s,a,u;return w().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:e.prev=0,i=[],s=!0;case 3:if(!s){e.next=12;break}return a=i.length>0?l()(i).id:void 0,e.next=7,ze({id:t,maxId:a,credentials:n});case 7:u=e.sent,i=p()(i,u),0===u.length&&(s=!1),e.next=3;break;case 12:o(i),e.next=18;break;case 15:e.prev=15,e.t0=e.catch(0),r(e.t0);case 18:case"end":return e.stop()}}),e,null,[[0,15]])})));return function(t,n){return e.apply(this,arguments)}}())},fetchFollowers:function(e){var t=e.id,n=e.maxId,o=e.sinceId,r=e.limit,i=void 0===r?20:r,s=e.credentials,a=function(e){return"/api/v1/accounts/".concat(e,"/followers")}(t),u=[n&&"max_id=".concat(n),o&&"since_id=".concat(o),i&&"limit=".concat(i),"with_relationships=true"].filter((function(e){return e})).join("&");return Fe(a+=u?"?"+u:"",{headers:Oe(s)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},followUser:function(e){var t=e.id,n=e.credentials,o=(0,r.Z)(e,x),i=function(e){return"/api/v1/accounts/".concat(e,"/follow")}(t),s={};return void 0!==o.reblogs&&(s.reblogs=o.reblogs),Fe(i,{body:JSON.stringify(s),headers:$($({},Oe(n)),{},{"Content-Type":"application/json"}),method:"POST"}).then((function(e){return e.json()}))},unfollowUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/accounts/".concat(e,"/unfollow")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},pinOwnStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:le(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},unpinOwnStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:de(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},muteConversation:function(e){var t=e.id,n=e.credentials;return Ae({url:pe(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},unmuteConversation:function(e){var t=e.id,n=e.credentials;return Ae({url:me(t),credentials:n,method:"POST"}).then((function(e){return(0,b.Wn)(e)}))},blockUser:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/block")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},unblockUser:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/unblock")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},removeUserFromFollowers:function(e){var t=e.id,n=e.credentials;return Fe(function(e){return"/api/v1/accounts/".concat(e,"/remove_from_followers")}(t),{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},editUserNote:function(e){var t=e.id,n=e.credentials,o=e.comment;return Ae({url:oe(t),credentials:n,payload:{comment:o},method:"POST"})},fetchUser:Ee,fetchUserByName:function(e){var t=e.name,n=e.credentials;return Ae({url:"/api/v1/accounts/lookup",credentials:n,params:{acct:t}}).then((function(e){return e.id})).catch((function(e){if(e&&404===e.statusCode)return t;throw e})).then((function(e){return Ee({id:e,credentials:n})}))},fetchUserRelationship:function(e){var t=e.id,n=e.credentials,o="".concat("/api/v1/accounts/relationships","/?id=").concat(t);return Fe(o,{headers:Oe(n)}).then((function(e){return new Promise((function(t,n){return e.json().then((function(r){return e.ok?t(r):n(new z(e.status,r,{url:o},e))}))}))}))},favorite:function(e){var t=e.id,n=e.credentials;return Ae({url:R(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},unfavorite:function(e){var t=e.id,n=e.credentials;return Ae({url:q(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},retweet:function(e){var t=e.id,n=e.credentials;return Ae({url:N(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},unretweet:function(e){var t=e.id,n=e.credentials;return Ae({url:Z(t),method:"POST",credentials:n}).then((function(e){return(0,b.Wn)(e)}))},bookmarkStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:re(t),headers:Oe(n),method:"POST"})},unbookmarkStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:ie(t),headers:Oe(n),method:"POST"})},postStatus:function(e){var t=e.credentials,n=e.status,o=e.spoilerText,r=e.visibility,i=e.sensitive,s=e.poll,a=e.mediaIds,u=void 0===a?[]:a,c=e.inReplyToStatusId,l=e.quoteId,d=e.contentType,p=e.preview,m=e.idempotencyKey,h=new FormData,f=s.options||[];if(h.append("status",n),h.append("source","Pleroma FE"),o&&h.append("spoiler_text",o),r&&h.append("visibility",r),i&&h.append("sensitive",i),d&&h.append("content_type",d),u.forEach((function(e){h.append("media_ids[]",e)})),f.some((function(e){return""!==e}))){var g={expires_in:parseInt(s.expiresIn,10),multiple:s.multiple};Object.keys(g).forEach((function(e){h.append("poll[".concat(e,"]"),g[e])})),f.forEach((function(e){h.append("poll[options][]",e)}))}c&&h.append("in_reply_to_id",c),l&&h.append("quote_id",l),p&&h.append("preview","true");var v=Oe(t);return m&&(v["idempotency-key"]=m),Fe("/api/v1/statuses",{body:h,method:"POST",headers:v}).then((function(e){return e.json()})).then((function(e){return e.error?e:(0,b.Wn)(e)}))},editStatus:function(e){var t=e.id,n=e.credentials,o=e.status,r=e.spoilerText,i=e.sensitive,s=e.poll,a=e.mediaIds,u=void 0===a?[]:a,c=e.contentType,l=new FormData,d=s.options||[];if(l.append("status",o),r&&l.append("spoiler_text",r),i&&l.append("sensitive",i),c&&l.append("content_type",c),u.forEach((function(e){l.append("media_ids[]",e)})),d.some((function(e){return""!==e}))){var p={expires_in:parseInt(s.expiresIn,10),multiple:s.multiple};Object.keys(p).forEach((function(e){l.append("poll[".concat(e,"]"),p[e])})),d.forEach((function(e){l.append("poll[options][]",e)}))}var m=Oe(n);return Fe(V(t),{body:l,method:"PUT",headers:m}).then((function(e){return e.json()})).then((function(e){return e.error?e:(0,b.Wn)(e)}))},deleteStatus:function(e){var t=e.id,n=e.credentials;return Ae({url:W(t),credentials:n,method:"DELETE"})},uploadMedia:function(e){var t=e.formData,n=e.credentials;return Fe(se,{body:t,method:"POST",headers:Oe(n)}).then((function(e){return e.json()})).then((function(e){return(0,b.cO)(e)}))},setMediaDescription:function(e){var t=e.id,n=e.description,o=e.credentials;return Ae({url:"".concat(se,"/").concat(t),method:"PUT",headers:Oe(o),payload:{description:n}}).then((function(e){return(0,b.cO)(e)}))},fetchMutes:function(e){var t=e.maxId,n=e.credentials,o=new URLSearchParams({with_relationships:!0});return t&&o.append("max_id",t),Ae({url:"".concat("/api/v1/mutes/","?").concat(o.toString()),credentials:n}).then((function(e){return e.map(b.nL)}))},muteUser:function(e){var t=e.id,n=e.expiresIn,o=e.credentials,r={};return n&&(r.expires_in=n),Ae({url:X(t),credentials:o,method:"POST",payload:r})},unmuteUser:function(e){var t=e.id,n=e.credentials;return Ae({url:ee(t),credentials:n,method:"POST"})},subscribeUser:function(e){var t=e.id,n=e.credentials;return Ae({url:te(t),credentials:n,method:"POST"})},unsubscribeUser:function(e){var t=e.id,n=e.credentials;return Ae({url:ne(t),credentials:n,method:"POST"})},fetchBlocks:function(e){var t=e.maxId,n=e.credentials,o=new URLSearchParams({with_relationships:!0});return t&&o.append("max_id",t),Ae({url:"".concat("/api/v1/blocks/","?").concat(o.toString()),credentials:n}).then((function(e){return e.map(b.nL)}))},fetchOAuthTokens:function(e){var t=e.credentials;return Fe("/api/oauth_tokens.json",{headers:Oe(t)}).then((function(e){if(e.ok)return e.json();throw new Error("Error fetching auth tokens",e)}))},revokeOAuthToken:function(e){var t=e.id,n=e.credentials,o="/api/oauth_tokens/".concat(t);return Fe(o,{headers:Oe(n),method:"DELETE"})},tagUser:function(e){var t=e.tag,n=e.credentials,o={nicknames:[e.user.screen_name],tags:[t]},r=Oe(n);return r["Content-Type"]="application/json",Fe(U,{method:"PUT",headers:r,body:JSON.stringify(o)})},untagUser:function(e){var t=e.tag,n=e.credentials,o={nicknames:[e.user.screen_name],tags:[t]},r=Oe(n);return r["Content-Type"]="application/json",Fe(U,{method:"DELETE",headers:r,body:JSON.stringify(o)})},deleteUser:function(e){var t=e.credentials,n=e.user.screen_name,o=Oe(t);return Fe("".concat("/api/pleroma/admin/users","?nickname=").concat(n),{method:"DELETE",headers:o})},addRight:function(e){var t=e.right,n=e.credentials,o=e.user.screen_name;return Fe(M(o,t),{method:"POST",headers:Oe(n),body:{}})},deleteRight:function(e){var t=e.right,n=e.credentials,o=e.user.screen_name;return Fe(M(o,t),{method:"DELETE",headers:Oe(n),body:{}})},activateUser:function(e){var t=e.credentials,n=e.user.screen_name;return Ae({url:"/api/pleroma/admin/users/activate",method:"PATCH",credentials:t,payload:{nicknames:[n]}}).then((function(e){return u()(e,"users.0")}))},deactivateUser:function(e){var t=e.credentials,n=e.user.screen_name;return Ae({url:"/api/pleroma/admin/users/deactivate",method:"PATCH",credentials:t,payload:{nicknames:[n]}}).then((function(e){return u()(e,"users.0")}))},register:function(e){var t=e.params,n=e.credentials,o=t.nickname,i=(0,r.Z)(t,I);return Fe("/api/v1/accounts",{method:"POST",headers:$($({},Oe(n)),{},{"Content-Type":"application/json"}),body:JSON.stringify($({nickname:o,locale:"en_US",agreement:!0},i))}).then((function(e){return e.ok?e.json():e.json().then((function(e){throw new P(e)}))}))},getCaptcha:function(){return Fe("/api/pleroma/captcha").then((function(e){return e.json()}))},updateProfileImages:function(e){var t=e.credentials,n=e.avatar,o=void 0===n?null:n,r=e.avatarName,i=void 0===r?null:r,s=e.banner,a=void 0===s?null:s,u=e.background,c=void 0===u?null:u,l=new FormData;return null!==o&&(null!==i?l.append("avatar",o,i):l.append("avatar",o)),null!==a&&l.append("header",a),null!==c&&l.append("pleroma_background_image",c),Fe(ce,{headers:Oe(t),method:"PATCH",body:l}).then((function(e){return e.json()})).then((function(e){if(e.error)throw new Error(e.error);return(0,b.nL)(e)}))},updateProfile:function(e){var t=e.credentials,n=e.params;return Ae({url:ce,method:"PATCH",payload:n,credentials:t}).then((function(e){return(0,b.nL)(e)}))},importMutes:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/mutes_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},importBlocks:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/blocks_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},importFollows:function(e){var t=e.file,n=e.credentials,o=new FormData;return o.append("list",t),Fe("/api/pleroma/follow_import",{body:o,method:"POST",headers:Oe(n)}).then((function(e){return e.ok}))},deleteAccount:function(e){var t=e.credentials,n=e.password,o=new FormData;return o.append("password",n),Fe("/api/pleroma/delete_account",{body:o,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},changeEmail:function(e){var t=e.credentials,n=e.email,o=e.password,r=new FormData;return r.append("email",n),r.append("password",o),Fe("/api/pleroma/change_email",{body:r,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},moveAccount:function(e){var t=e.credentials,n=e.password,o=e.targetAccount,r=new FormData;return r.append("password",n),r.append("target_account",o),Fe("/api/pleroma/move_account",{body:r,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},addAlias:function(e){var t=e.credentials,n=e.alias;return Ae({url:B,method:"PUT",credentials:t,payload:{alias:n}})},deleteAlias:function(e){var t=e.credentials,n=e.alias;return Ae({url:B,method:"DELETE",credentials:t,payload:{alias:n}})},listAliases:function(e){var t=e.credentials;return Ae({url:B,method:"GET",credentials:t,params:{_cacheBooster:(new Date).getTime()}})},changePassword:function(e){var t=e.credentials,n=e.password,o=e.newPassword,r=e.newPasswordConfirmation,i=new FormData;return i.append("password",n),i.append("new_password",o),i.append("new_password_confirmation",r),Fe("/api/pleroma/change_password",{body:i,method:"POST",headers:Oe(t)}).then((function(e){return e.json()}))},settingsMFA:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaDisableOTP:function(e){var t=e.credentials,n=e.password,o=new FormData;return o.append("password",n),Fe("/api/pleroma/accounts/mfa/totp",{body:o,method:"DELETE",headers:Oe(t)}).then((function(e){return e.json()}))},generateMfaBackupCodes:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa/backup_codes",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaSetupOTP:function(e){var t=e.credentials;return Fe("/api/pleroma/accounts/mfa/setup/totp",{headers:Oe(t),method:"GET"}).then((function(e){return e.json()}))},mfaConfirmOTP:function(e){var t=e.credentials,n=e.password,o=e.token,r=new FormData;return r.append("password",n),r.append("code",o),Fe("/api/pleroma/accounts/mfa/confirm/totp",{body:r,headers:Oe(t),method:"POST"}).then((function(e){return e.json()}))},addBackup:function(e){var t=e.credentials;return Ae({url:_e,method:"POST",credentials:t})},listBackups:function(e){var t=e.credentials;return Ae({url:_e,method:"GET",credentials:t,params:{_cacheBooster:(new Date).getTime()}})},fetchFollowRequests:function(e){var t=e.credentials;return Fe("/api/v1/follow_requests",{headers:Oe(t)}).then((function(e){return e.json()})).then((function(e){return e.map(b.nL)}))},fetchLists:function(e){var t=e.credentials;return Fe("/api/v1/lists",{headers:Oe(t)}).then((function(e){return e.json()}))},createList:function(e){var t=e.title,n=e.credentials,o=Oe(n);return o["Content-Type"]="application/json",Fe("/api/v1/lists",{headers:o,method:"POST",body:JSON.stringify({title:t})}).then((function(e){return e.json()}))},getList:function(e){var t=e.listId,n=e.credentials,o=G(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()}))},updateList:function(e){var t=e.listId,n=e.title,o=e.credentials,r=G(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"PUT",body:JSON.stringify({title:n})})},getListAccounts:function(e){var t=e.listId,n=e.credentials,o=J(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()})).then((function(e){return e.map((function(e){return e.id}))}))},addAccountsToList:function(e){var t=e.listId,n=e.accountIds,o=e.credentials,r=J(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"POST",body:JSON.stringify({account_ids:n})})},removeAccountsFromList:function(e){var t=e.listId,n=e.accountIds,o=e.credentials,r=J(t),i=Oe(o);return i["Content-Type"]="application/json",Fe(r,{headers:i,method:"DELETE",body:JSON.stringify({account_ids:n})})},deleteList:function(e){var t=e.listId,n=e.credentials,o=G(t);return Fe(o,{method:"DELETE",headers:Oe(n)})},approveUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/follow_requests/".concat(e,"/authorize")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},denyUser:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/follow_requests/".concat(e,"/reject")}(t);return Fe(o,{headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},suggestions:function(e){var t=e.credentials;return Fe("/api/v1/suggestions",{headers:Oe(t)}).then((function(e){return e.json()}))},markNotificationsAsSeen:function(e){var t=e.id,n=e.credentials,o=e.single,r=void 0!==o&&o,i=new FormData;return r?i.append("id",t):i.append("max_id",t),Fe("/api/v1/pleroma/notifications/read",{body:i,headers:Oe(n),method:"POST"}).then((function(e){return e.json()}))},dismissNotification:function(e){var t=e.credentials,n=e.id;return Ae({url:L(n),method:"POST",payload:{id:n},credentials:t})},vote:function(e){var t,n=e.pollId,o=e.choices,r=e.credentials;return(new FormData).append("choices",o),Ae({url:(t=encodeURIComponent(n),"/api/v1/polls/".concat(t,"/votes")),method:"POST",credentials:r,payload:{choices:o}})},fetchPoll:function(e){var t,n=e.pollId,o=e.credentials;return Ae({url:(t=encodeURIComponent(n),"/api/v1/polls/".concat(t)),method:"GET",credentials:o})},fetchFavoritedByUsers:function(e){var t=e.id,n=e.credentials;return Ae({url:ae(t),method:"GET",credentials:n}).then((function(e){return e.map(b.nL)}))},fetchRebloggedByUsers:function(e){var t=e.id,n=e.credentials;return Ae({url:ue(t),method:"GET",credentials:n}).then((function(e){return e.map(b.nL)}))},fetchEmojiReactions:function(e){var t=e.id,n=e.credentials;return Ae({url:ge(t),credentials:n}).then((function(e){return e.map((function(e){return e.accounts=e.accounts.map(b.nL),e}))}))},reactWithEmoji:function(e){var t=e.id,n=e.emoji,o=e.credentials;return Ae({url:ve(t,n),method:"PUT",credentials:o}).then(b.Wn)},unreactWithEmoji:function(e){var t=e.id,n=e.emoji,o=e.credentials;return Ae({url:we(t,n),method:"DELETE",credentials:o}).then(b.Wn)},reportUser:function(e){var t=e.credentials,n=e.userId,o=e.statusIds,r=e.comment,i=e.forward;return Ae({url:"/api/v1/reports",method:"POST",payload:{account_id:n,status_ids:o,comment:r,forward:i},credentials:t})},updateNotificationSettings:function(e){var t=e.credentials,n=e.settings,o=new FormData;return g()(n,(function(e,t){o.append(t,e)})),Fe("".concat("/api/pleroma/notification_settings","?").concat(new URLSearchParams(n)),{headers:Oe(t),method:"PUT",body:o}).then((function(e){return e.json()}))},search2:function(e){var t=e.credentials,n=e.q,o=e.resolve,r=e.limit,i=e.offset,s=e.following,a=e.type,u="/api/v2/search",c=[];n&&c.push(["q",encodeURIComponent(n)]),o&&c.push(["resolve",o]),r&&c.push(["limit",r]),i&&c.push(["offset",i]),s&&c.push(["following",!0]),a&&c.push(["following",a]),c.push(["with_relationships",!0]);var l=h()(c,(function(e){return"".concat(e[0],"=").concat(e[1])})).join("&");return u+="?".concat(l),Fe(u,{headers:Oe(t)}).then((function(e){if(e.ok)return e;throw new Error("Error fetching search result",e)})).then((function(e){return e.json()})).then((function(e){return e.accounts=e.accounts.slice(0,r).map((function(e){return(0,b.nL)(e)})),e.statuses=e.statuses.slice(0,r).map((function(e){return(0,b.Wn)(e)})),e}))},searchUsers:function(e){var t=e.credentials,n=e.query;return Ae({url:"/api/v1/accounts/search",params:{q:n,resolve:!0},credentials:t}).then((function(e){return e.map(b.nL)}))},fetchKnownDomains:function(e){var t=e.credentials;return Ae({url:"/api/v1/instance/peers",credentials:t})},fetchDomainMutes:function(e){var t=e.credentials;return Ae({url:he,credentials:t})},muteDomain:function(e){var t=e.domain,n=e.credentials;return Ae({url:he,method:"POST",payload:{domain:t},credentials:n})},unmuteDomain:function(e){var t=e.domain,n=e.credentials;return Ae({url:he,method:"DELETE",payload:{domain:t},credentials:n})},chats:function(e){var t=e.credentials;return Fe("/api/v1/pleroma/chats",{headers:Oe(t)}).then((function(e){return e.json()})).then((function(e){return{chats:e.map(b._J).filter((function(e){return e}))}}))},getOrCreateChat:function(e){var t,n=e.accountId,o=e.credentials;return Ae({url:(t=n,"/api/v1/pleroma/chats/by-account-id/".concat(t)),method:"POST",credentials:o})},chatMessages:function(e){var t=e.id,n=e.credentials,o=e.maxId,r=e.sinceId,i=e.limit,s=void 0===i?20:i,a=be(t),u=[o&&"max_id=".concat(o),r&&"since_id=".concat(r),s&&"limit=".concat(s)].filter((function(e){return e})).join("&");return Ae({url:a+=u?"?"+u:"",method:"GET",credentials:n})},sendChatMessage:function(e){var t=e.id,n=e.content,o=e.mediaId,r=void 0===o?null:o,i=e.idempotencyKey,s=e.credentials,a={content:n};r&&(a.media_id=r);var u={};return i&&(u["idempotency-key"]=i),Ae({url:be(t),method:"POST",payload:a,credentials:s,headers:u})},readChat:function(e){var t=e.id,n=e.lastReadId,o=e.credentials;return Ae({url:ye(t),method:"POST",payload:{last_read_id:n},credentials:o})},deleteChatMessage:function(e){var t=e.chatId,n=e.messageId,o=e.credentials;return Ae({url:De(t,n),method:"DELETE",credentials:o})},setReportState:function(e){var t=e.id,n=e.state,o=e.credentials;return Fe("/api/pleroma/admin/reports",{headers:$($({},Oe(o)),{},{Accept:"application/json","Content-Type":"application/json"}),method:"PATCH",body:JSON.stringify({reports:[{id:t,state:n}]})}).then((function(e){if(e.status>=500)throw Error(e.statusText);return e.status>=400?e.json():e})).then((function(e){if(e.errors)throw Error(e.errors[0].message)}))},fetchUserInLists:function(e){var t=e.id,n=e.credentials,o=function(e){return"/api/v1/accounts/".concat(e,"/lists")}(t);return Fe(o,{headers:Oe(n)}).then((function(e){return e.json()}))},fetchAnnouncements:function(e){var t=e.credentials;return Ae({url:"/api/v1/announcements",credentials:t})},dismissAnnouncement:function(e){var t=e.id,n=e.credentials;return Ae({url:fe(t),credentials:n,method:"POST"})},postAnnouncement:function(e){var t=e.credentials,n=e.content,o=e.startsAt,r=e.endsAt,i=e.allDay;return Ae({url:"/api/v1/pleroma/admin/announcements",credentials:t,method:"POST",payload:Pe({content:n,startsAt:o,endsAt:r,allDay:i})})},editAnnouncement:function(e){var t=e.id,n=e.credentials,o=e.content,r=e.startsAt,i=e.endsAt,s=e.allDay;return Ae({url:ke(t),credentials:n,method:"PATCH",payload:Pe({content:o,startsAt:r,endsAt:i,allDay:s})})},deleteAnnouncement:function(e){var t=e.id,n=e.credentials;return Ae({url:Ce(t),credentials:n,method:"DELETE"})},adminFetchAnnouncements:function(e){var t=e.credentials;return Ae({url:"/api/v1/pleroma/admin/announcements",credentials:t})},fetchInstanceDBConfig:function(e){var t=e.credentials;return Fe(Se,{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},fetchInstanceConfigDescriptions:function(e){var t=e.credentials;return Fe("/api/pleroma/admin/config/descriptions",{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},fetchAvailableFrontends:function(e){var t=e.credentials;return Fe("/api/pleroma/admin/frontends",{headers:Oe(t)}).then((function(e){return e.ok?e.json():{error:e}}))},pushInstanceDBConfig:function(e){var t=e.credentials,n=e.payload;return Fe(Se,{headers:$({Accept:"application/json","Content-Type":"application/json"},Oe(t)),method:"POST",body:JSON.stringify(n)}).then((function(e){return e.ok?e.json():{error:e}}))},installFrontend:function(e){var t=e.credentials,n=e.payload;return Fe("/api/pleroma/admin/frontends/install",{headers:$({Accept:"application/json","Content-Type":"application/json"},Oe(t)),method:"POST",body:JSON.stringify(n)}).then((function(e){return e.ok?e.json():{error:e}}))}}},37230:(e,t,n)=>{"use strict";n.d(t,{X:()=>i});var o=n(21804),r=n.n(o),i=function(e){return Object.keys(e).reduce((function(t,n){return t[r()(n)]=e[n],t}),{})}},21865:(e,t,n)=>{"use strict";n.d(t,{CO:()=>c,Rx:()=>h,Tj:()=>m,_I:()=>v,a4:()=>g,aj:()=>p,ov:()=>l,pP:()=>b,uu:()=>w,wK:()=>f});var o=n(4942),r=n(29439),i=n(71002),s=n(97332);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var c=function(e,t,n){if(null!=e){if("#"===e[0]||"transparent"===e)return e;if("object"===(0,i.Z)(e)){var o=e;e=o.r,t=o.g,n=o.b}var s=[e,t,n].map((function(e){return(e=(e=Math.ceil(e))<0?0:e)>255?255:e})),a=(0,r.Z)(s,3);return e=a[0],t=a[1],n=a[2],"#".concat(((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1))}},l=function(e){var t=function(e){return"rgb".split("").reduce((function(t,n){return t[n]=function(e){var t=e/255;return t<.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}(e[n]),t}),{})}(e);return.2126*t.r+.7152*t.g+.0722*t.b},d=function(e,t){var n=l(e),o=l(t),i=n>o?[n,o]:[o,n],s=(0,r.Z)(i,2);return(s[0]+.05)/(s[1]+.05)},p=function(e,t,n){return d(h(n,t),e)},m=function(e,t,n){return 1===t||void 0===t?e:"rgb".split("").reduce((function(o,r){return o[r]=e[r]*t+n[r]*(1-t),o}),{})},h=function(e,t){return t.reduce((function(e,t){var n=(0,r.Z)(t,2),o=n[0],i=n[1];return m(o,i,e)}),e)},f=function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},g=function(e,t){return"rgb".split("").reduce((function(n,o){return n[o]=(e[o]+t[o])/2,n}),{})},v=function(e){return"rgba(".concat(Math.floor(e.r),", ").concat(Math.floor(e.g),", ").concat(Math.floor(e.b),", ").concat(e.a,")")},w=function(e,t,n){if(d(e,t)<4.5){var o=void 0!==t.a?{a:t.a}:{},r=Object.assign(o,(0,s.Xp)(t).rgb);return!n&&d(e,r)<4.5?(0,s.wo)(e,t).rgb:r}return t},b=function(e,t){var n={};if("object"===(0,i.Z)(e))n=e;else if("string"==typeof e){if(!e.startsWith("#"))return e;n=f(e)}return v(u(u({},n),{},{a:t}))}},13562:(e,t,n)=>{"use strict";n.d(t,{g:()=>i});var o=n(23560),r=n.n(o),i=function(e){return function(e){return r()(e)?e.options:e}(e).props}},27483:(e,t,n)=>{"use strict";n.d(t,{GV:()=>l,_F:()=>d,cC:()=>p,dX:()=>m,x4:()=>s});var o=1e3,r=6e4,i=36e5,s=24*i,a=7*s,u=30*s,c=365.25*s,l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;"string"==typeof e&&(e=Date.parse(e));var n=Date.now()>e?Math.floor:Math.ceil,l=Math.abs(Date.now()-e),d={num:n(l/c),key:"time.unit.years"};return l<t*o?(d.num=0,d.key="time.now"):l<r?(d.num=n(l/o),d.key="time.unit.seconds"):l<i?(d.num=n(l/r),d.key="time.unit.minutes"):l<s?(d.num=n(l/i),d.key="time.unit.hours"):l<a?(d.num=n(l/s),d.key="time.unit.days"):l<u?(d.num=n(l/a),d.key="time.unit.weeks"):l<c&&(d.num=n(l/u),d.key="time.unit.months"),d},d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=l(e,t);return n.key+="_short",n},p=function(e,t){switch(e){case"minutes":return.001*t*r;case"hours":return.001*t*i;case"days":return.001*t*s}},m=function(e,t){switch(e){case"minutes":return 1e3*t/r;case"hours":return 1e3*t/i;case"days":return 1e3*t/s}}},64689:(e,t,n)=>{"use strict";n.d(t,{w:()=>o});var o=function(e,t){if("Notification"in window&&"granted"===window.Notification.permission&&!e.statuses.notifications.desktopNotificationSilence){var n=new window.Notification(t.title,t);setTimeout(n.close.bind(n),5e3)}}},27742:(e,t,n)=>{"use strict";n.d(t,{Nw:()=>w,P7:()=>h,UB:()=>y,Wn:()=>f,_J:()=>b,cO:()=>m,eM:()=>g,nL:()=>p});var o=n(4942),r=n(95573),i=n.n(r),s=n(28490),a=n.n(s),u=n(52230),c=n(35748);function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var p=function(e){var t={},n=Object.prototype.hasOwnProperty.call(e,"acct"),o=n&&!Object.prototype.hasOwnProperty.call(e,"avatar");if(t.inLists=null,t.id=String(e.id),t._original=e,n){if(t.screen_name=e.acct,t.fqn=e.fqn,t.statusnet_profile_url=e.url,o)return t;if(t.emoji=e.emojis,t.name=i()(e.display_name),t.name_html=t.name,t.name_unescaped=e.display_name,t.description=e.note,t.description_html=e.note,t.fields=e.fields,t.fields_html=e.fields.map((function(e){return{name:i()(e.name),value:e.value}})),t.fields_text=e.fields.map((function(e){return{name:unescape(e.name.replace(/<[^>]*>/g,"")),value:unescape(e.value.replace(/<[^>]*>/g,""))}})),t.profile_image_url=e.avatar,t.profile_image_url_original=e.avatar,t.cover_photo=e.header,t.friends_count=e.following_count,t.bot=e.bot,e.pleroma){e.pleroma.settings_store&&(t.storage=e.pleroma.settings_store["pleroma-fe"]);var r=e.pleroma.relationship;t.background_image=e.pleroma.background_image,t.favicon=e.pleroma.favicon,t.token=e.pleroma.chat_token,r&&(t.relationship=r),t.allow_following_move=e.pleroma.allow_following_move,t.hide_follows=e.pleroma.hide_follows,t.hide_followers=e.pleroma.hide_followers,t.hide_follows_count=e.pleroma.hide_follows_count,t.hide_followers_count=e.pleroma.hide_followers_count,t.rights={moderator:e.pleroma.is_moderator,admin:e.pleroma.is_admin},t.rights.admin?t.role="admin":t.rights.moderator?t.role="moderator":t.role="member",t.birthday=e.pleroma.birthday,e.pleroma.privileges?t.privileges=e.pleroma.privileges:e.pleroma.is_admin?t.privileges=["users_read","users_manage_invites","users_manage_activation_state","users_manage_tags","users_manage_credentials","users_delete","messages_read","messages_delete","instances_delete","reports_manage_reports","moderation_log_read","announcements_manage_announcements","emoji_manage_emoji","statistics_read"]:e.pleroma.is_moderator?t.privileges=["messages_delete","reports_manage_reports"]:t.privileges=[]}e.source&&(t.description=e.source.note,t.default_scope=e.source.privacy,t.fields=e.source.fields,e.source.pleroma&&(t.no_rich_text=e.source.pleroma.no_rich_text,t.show_role=e.source.pleroma.show_role,t.discoverable=e.source.pleroma.discoverable,t.show_birthday=e.pleroma.show_birthday)),t.is_local=!t.screen_name.includes("@")}else t.screen_name=e.screen_name,t.name=e.name,t.name_html=e.name_html,t.description=e.description,t.description_html=e.description_html,t.profile_image_url=e.profile_image_url,t.profile_image_url_original=e.profile_image_url_original,t.cover_photo=e.cover_photo,t.friends_count=e.friends_count,t.statusnet_profile_url=e.statusnet_profile_url,t.is_local=e.is_local,t.role=e.role,t.show_role=e.show_role,e.rights&&(t.rights={moderator:e.rights.delete_others_notice,admin:e.rights.admin}),t.no_rich_text=e.no_rich_text,t.default_scope=e.default_scope,t.hide_follows=e.hide_follows,t.hide_followers=e.hide_followers,t.hide_follows_count=e.hide_follows_count,t.hide_followers_count=e.hide_followers_count,t.background_image=e.background_image,t.token=e.token,t.relationship={muting:e.muted,blocking:e.statusnet_blocking,followed_by:e.follows_you,following:e.following};if(t.created_at=new Date(e.created_at),t.locked=e.locked,t.followers_count=e.followers_count,t.statuses_count=e.statuses_count,e.pleroma&&(t.follow_request_count=e.pleroma.follow_request_count,t.tags=e.pleroma.tags,t.deactivated=void 0!==e.pleroma.is_active?!e.pleroma.is_active:e.pleroma.deactivated,t.notification_settings=e.pleroma.notification_settings,t.unread_chat_count=e.pleroma.unread_chat_count),t.tags=t.tags||[],t.rights=t.rights||{},t.notification_settings=t.notification_settings||{},t.screen_name_ui=t.screen_name,t.screen_name&&t.screen_name.includes("@")){var s=t.screen_name.split("@"),a=c.ZP.toUnicode(s[1]);a!==s[1]?(t.screen_name_ui_contains_non_ascii=!0,t.screen_name_ui=[s[0],a].join("@")):t.screen_name_ui_contains_non_ascii=!1}return t},m=function(e){var t={};return Object.prototype.hasOwnProperty.call(e,"oembed")?t.mimetype=e.mimetype:(t.mimetype=e.pleroma?e.pleroma.mime_type:e.type,t.meta=e.meta,t.id=e.id),t.url=e.url,t.large_thumb_url=e.preview_url,t.description=e.description,t},h=function(e){var t={};return t.text=e.text,t.spoiler_text=e.spoiler_text,t.content_type=e.content_type,t},f=function e(t){var n={},o=Object.prototype.hasOwnProperty.call(t,"account");if(o){if(n.favorited=t.favourited,n.fave_num=t.favourites_count,n.repeated=t.reblogged,n.repeat_num=t.reblogs_count,n.bookmarked=t.bookmarked,n.type=t.reblog?"retweet":"status",n.nsfw=t.sensitive,n.raw_html=t.content,n.emojis=t.emojis,n.tags=t.tags,n.edited_at=t.edited_at,t.pleroma){var r=t.pleroma;n.text=r.content?t.pleroma.content["text/plain"]:t.content,n.summary=r.spoiler_text?t.pleroma.spoiler_text["text/plain"]:t.spoiler_text,n.statusnet_conversation_id=t.pleroma.conversation_id,n.is_local=r.local,n.in_reply_to_screen_name=t.pleroma.in_reply_to_account_acct,n.thread_muted=r.thread_muted,n.emoji_reactions=r.emoji_reactions,n.parent_visible=void 0===r.parent_visible||r.parent_visible,n.quote=r.quote?e(r.quote):void 0,n.quote_id=r.quote_id?r.quote_id:n.quote?n.quote.id:void 0,n.quote_url=r.quote_url,n.quote_visible=r.quote_visible}else n.text=t.content,n.summary=t.spoiler_text;n.in_reply_to_status_id=t.in_reply_to_id,n.in_reply_to_user_id=t.in_reply_to_account_id,n.replies_count=t.replies_count,"retweet"===n.type&&(n.retweeted_status=e(t.reblog)),n.summary_raw_html=i()(t.spoiler_text),n.external_url=t.url,n.poll=t.poll,n.poll&&(n.poll.options=(n.poll.options||[]).map((function(e){return d(d({},e),{},{title_html:i()(e.title)})}))),n.pinned=t.pinned,n.muted=t.muted}else n.favorited=t.favorited,n.fave_num=t.fave_num,n.repeated=t.repeated,n.repeat_num=t.repeat_num,n.type=function(e){return e.is_post_verb?"status":e.retweeted_status?"retweet":"string"==typeof e.uri&&e.uri.match(/(fave|objectType=Favourite)/)||"string"==typeof e.text&&e.text.match(/favorited/)?"favorite":e.text.match(/deleted notice {{tag/)||e.qvitter_delete_notice?"deletion":e.text.match(/started following/)||"follow"===e.activity_type?"follow":"unknown"}(t),void 0===t.nsfw?(n.nsfw=v(t),t.retweeted_status&&(n.nsfw=t.retweeted_status.nsfw)):n.nsfw=t.nsfw,n.raw_html=t.statusnet_html,n.text=t.text,n.in_reply_to_status_id=t.in_reply_to_status_id,n.in_reply_to_user_id=t.in_reply_to_user_id,n.in_reply_to_screen_name=t.in_reply_to_screen_name,n.statusnet_conversation_id=t.statusnet_conversation_id,"retweet"===n.type&&(n.retweeted_status=e(t.retweeted_status)),n.summary=t.summary,n.summary_html=t.summary_html,n.external_url=t.external_url,n.is_local=t.is_local;n.id=String(t.id),n.visibility=t.visibility,n.card=t.card,n.created_at=new Date(t.created_at),n.in_reply_to_status_id=n.in_reply_to_status_id?String(n.in_reply_to_status_id):null,n.in_reply_to_user_id=n.in_reply_to_user_id?String(n.in_reply_to_user_id):null,n.user=p(o?t.account:t.user),n.attentions=((o?t.mentions:t.attentions)||[]).map(p),n.attachments=((o?t.media_attachments:t.attachments)||[]).map(m);var s=o?t.reblog:t.retweeted_status;return s&&(n.retweeted_status=e(s)),n.favoritedBy=[],n.rebloggedBy=[],Object.prototype.hasOwnProperty.call(t,"originalStatus")&&Object.assign(n,t.originalStatus),n},g=function(e){var t={};if(Object.prototype.hasOwnProperty.call(e,"ntype")){var n=f(e.notice);t.type=e.ntype,t.seen=Boolean(e.is_seen),t.status="like"===t.type?f(e.notice.favorited_status):n,t.action=n,t.from_profile="pleroma:chat_mention"===t.type?p(e.account):p(e.from_profile)}else t.type={favourite:"like",reblog:"repeat"}[e.type]||e.type,t.seen=e.pleroma.is_seen,t.status=(0,u.Gr)(t.type)?f(e.status):null,t.action=t.status,t.target="move"!==t.type?null:p(e.target),t.from_profile=p(e.account),t.emoji=e.emoji,t.emoji_url=e.emoji_url,e.report&&(t.report=e.report,t.report.content=e.report.content,t.report.acct=p(e.report.account),t.report.actor=p(e.report.actor),t.report.statuses=e.report.statuses.map(f));return t.created_at=new Date(e.created_at),t.id=parseInt(e.id),t},v=function(e){return(e.tags||[]).includes("nsfw")||!!(e.text||"").match(/#nsfw/i)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.flakeId,o=a()(e);if(o){var r=o.next.max_id,i=o.prev.min_id;return{maxId:n?r:parseInt(r,10),minId:n?i:parseInt(i,10)}}},b=function(e){var t={};return t.id=e.id,t.account=p(e.account),t.unread=e.unread,t.lastMessage=y(e.last_message),t.updated_at=new Date(e.updated_at),t},y=function(e){if(e){if(e.isNormalized)return e;var t=e;return t.id=e.id,t.created_at=new Date(e.created_at),t.chat_id=e.chat_id,t.emojis=e.emojis,t.content=e.content,e.attachment?t.attachments=[m(e.attachment)]:t.attachments=[],t.pending=!!e.pending,t.error=!1,t.idempotency_key=e.idempotency_key,t.isNormalized=!0,t}}},49753:(e,t,n)=>{"use strict";var o,r,i,s,a;n.d(t,{Z:()=>u});const u=(o=[],r=128,i=128,s=function(e){return e.complete&&0!==e.naturalHeight},{initFaviconService:function(){document.querySelectorAll('link[rel="icon"]').forEach((function(e){if(e){var t=document.createElement("canvas");t.width=r,t.height=i;var n=new Image;n.crossOrigin="anonymous",n.src=e.href;var s=t.getContext("2d");o.push({favcanvas:t,favimg:n,favcontext:s,favicon:e})}}))},clearFaviconBadge:a=function(){0!==o.length&&o.forEach((function(e){var t=e.favimg,n=e.favcanvas,o=e.favcontext,a=e.favicon;t&&o&&a&&(o.clearRect(0,0,r,i),s(t)&&o.drawImage(t,0,0,t.width,t.height,0,0,r,i),a.href=n.toDataURL("image/png"))}))},drawFaviconBadge:function(){0!==o.length&&(a(),o.forEach((function(e){var t=e.favimg,n=e.favcanvas,o=e.favcontext,a=e.favicon;if(t&&o&&o){var u=getComputedStyle(document.body),c="".concat(u.getPropertyValue("--badgeNotification")||"rgb(240, 100, 100)");s(t)&&o.drawImage(t,0,0,t.width,t.height,0,0,r,i),o.fillStyle=c,o.beginPath(),o.arc(96,32,32,0,2*Math.PI,!1),o.fill(),a.href=n.toDataURL("image/png")}})))}})},65079:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o={fileSizeFormat:function(e){var t=["B","KiB","MiB","GiB","TiB"],n=e;if(n<1)return n+" "+t[0];var o=Math.min(Math.floor(Math.log(n)/Math.log(1024)),t.length-1);return{num:n=1*(n/Math.pow(1024,o)).toFixed(2),unit:t[o]}}}},58394:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>i,iL:()=>r});var o=function(e){return e.match(/flash/)?"flash":e.match(/text\/html/)?"html":e.match(/image/)?"image":e.match(/video/)?"video":e.match(/audio/)?"audio":"unknown"},r=function(e){return e.match(/\.(png|jpe?g|gif|webp|avif)$/)?"image":e.match(/\.(ogv|mp4|webm|mov)$/)?"video":e.match(/\.(it|s3m|mod|umx|mp3|aac|m4a|flac|alac|ogg|oga|opus|wav|ape|midi?)$/)?"audio":"unknown"};const i={fileType:o,fileTypeExt:r,fileMatchesSomeType:function(e,t){return e.some((function(e){return o(t.mimetype)===e}))}}},39776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(35161),r=n.n(o),i=n(72617),s=n(2900),a={ja_easy:"ja",zh_Hant:"zh-HANT",zh:"zh-Hans"},u=function(e){return a[e]||e},c=function(e){return u(e).replace("_","-")},l=function(e){var t={ja_easy:"やさしいにほんご","nan-TW":"臺語(閩南語)",zh:"简体中文",zh_Hant:"繁體中文"}[e]||s.Z.getNativeName(e),n=u(e);return t.charAt(0).toLocaleUpperCase(n)+t.slice(1)},d=r()(i.Z.languages,(function(e){return{code:e,name:l(e)}})).sort((function(e,t){return e.name.localeCompare(t.name)}));const p={internalToBrowserLocale:u,internalToBackendLocale:c,internalToBackendLocaleMulti:function(e){return(Array.isArray(e)?e:[e]).map(c).join(",")},languages:d,getLanguageName:l}},52230:(e,t,n)=>{"use strict";n.d(t,{Bt:()=>d,G2:()=>w,Gr:()=>h,Km:()=>b,nJ:()=>v,nU:()=>f});var o=n(64721),r=n.n(o),i=n(89734),s=n.n(i),a=n(63105),u=n.n(a),c=n(67828),l=n(64689),d=function(e){return e.state.statuses.notifications.data},p=function(e){var t=e.rootState||e.state;return[t.config.notificationVisibility.likes&&"like",t.config.notificationVisibility.mentions&&"mention",t.config.notificationVisibility.repeats&&"repeat",t.config.notificationVisibility.follows&&"follow",t.config.notificationVisibility.followRequest&&"follow_request",t.config.notificationVisibility.moves&&"move",t.config.notificationVisibility.emojiReactions&&"pleroma:emoji_reaction",t.config.notificationVisibility.reports&&"pleroma:report",t.config.notificationVisibility.polls&&"poll"].filter((function(e){return e}))},m=["like","mention","repeat","pleroma:emoji_reaction","poll"],h=function(e){return r()(m,e)},f=function(e){return!(h(e.type)&&!e.status)},g=function(e,t){var n=Number(e.id),o=Number(t.id),r=!Number.isNaN(n),i=!Number.isNaN(o);return r&&i?n>o?-1:1:r&&!i?1:!r&&i||e.id>t.id?-1:1},v=function(e,t){var n=e.rootState||e.state;if(!t.seen&&p(e).includes(t.type)&&("mention"!==t.type||!function(e,t){if(t.status)return t.status.muted||(0,c.u)(t.status,e.rootGetters.mergedConfig.muteWords).length>0}(e,t))){var o=y(t,e.rootGetters.i18n);(0,l.w)(n,o)}},w=function(e,t){var n=d(e).map((function(e){return e})).sort(g);return(n=s()(n,"seen")).filter((function(n){return(t||p(e)).includes(n.type)}))},b=function(e){return u()(w(e),(function(e){return!e.seen}))},y=function(e,t){var n,o={tag:e.id},r=e.status,i=e.from_profile.name;switch(o.title=i,o.icon=e.from_profile.profile_image_url,e.type){case"like":n="favorited_you";break;case"repeat":n="repeated_you";break;case"follow":n="followed_you";break;case"move":n="migrated_to";break;case"follow_request":n="follow_request";break;case"pleroma:report":n="submitted_report";break;case"poll":n="poll_ended"}return"pleroma:emoji_reaction"===e.type?o.body=t.t("notifications.reacted_with",[e.emoji]):n?o.body=t.t("notifications."+n):h(e.type)&&(o.body=e.status.text),r&&r.attachments&&r.attachments.length>0&&!r.nsfw&&r.attachments[0].mimetype.startsWith("image/")&&(o.image=r.attachments[0].url),o}},15568:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(93433),r=n(77776),i=n(22626),s=["mention","favourite","reblog","follow","move","pleroma:emoji_reaction","pleroma:report"],a=function(e){var t=e.store,n=e.credentials,r=e.older,i=void 0!==r&&r,a=e.since,c={credentials:n},l=t.getters,d=(t.rootState||t.state).statuses.notifications,p=l.mergedConfig.hideMutedPosts;if(c.includeTypes=s,c.withMuted=!p,c.timeline="notifications",i)return d.minId!==Number.POSITIVE_INFINITY&&(c.until=d.minId),u({store:t,args:c,older:i});void 0===a&&d.maxId!==Number.POSITIVE_INFINITY?c.since=d.maxId:null!==a&&(c.since=a);var m=u({store:t,args:c,older:i}),h=d.data,f=h.filter((function(e){return e.seen})).map((function(e){return e.id}));return h.length-f.length>0&&f.length>0&&(c.since=Math.max.apply(Math,(0,o.Z)(f)),u({store:t,args:c,older:i})),m},u=function(e){var t=e.store,n=e.args,o=e.older;return r.ZP.fetchTimeline(n).then((function(e){if(e.errors)throw new Error("".concat(e.status," ").concat(e.statusText));var n=e.data;return function(e){var t=e.notifications,n=e.older;e.store.dispatch("addNewNotifications",{notifications:t,older:n})}({store:t,notifications:n,older:o}),n})).catch((function(e){t.dispatch("pushGlobalNotice",{level:"error",messageKey:"notifications.error",messageArgs:[e.message],timeout:5e3}),console.error(e)}))};const c={fetchAndUpdate:a,startFetching:function(e){var t=e.credentials,n=e.store;setTimeout((function(){return n.dispatch("setNotificationsSilence",!1)}),1e4);var o=function(){return a({credentials:t,store:n})};return o(),(0,i.F)(o,1e4)}}},67952:(e,t,n)=>{"use strict";n.d(t,{y:()=>o});var o=function e(t,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=o.top,s=void 0===i?0:i,a=o.left,u=void 0===a?0:a,c=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],l={top:s+t.offsetTop,left:u+t.offsetLeft};if(!c&&t!==window){var d=r(t),p=d.topPadding,m=d.leftPadding;l.top+=c?0:p,l.left+=c?0:m}if(t.offsetParent&&"sticky"!==window.getComputedStyle(t.offsetParent).position&&(n===window||n.contains(t.offsetParent)||n===t.offsetParent))return e(t.offsetParent,n,l,!1);if(n!==window){var h=r(n),f=h.topPadding,g=h.leftPadding;l.top+=f,l.left+=g}return l},r=function(e){var t=window.getComputedStyle(e)["padding-top"],n=Number(t.substring(0,t.length-2)),o=window.getComputedStyle(e)["padding-left"];return{topPadding:n,leftPadding:Number(o.substring(0,o.length-2))}}},22626:(e,t,n)=>{"use strict";n.d(t,{F:()=>o});var o=function(e,t){var n=!1,o=null;return o=window.setTimeout((function r(){var i=e();i&&i.finally?i.finally((function(){n||(o=window.setTimeout(r,t))})):console.warn("promiseInterval: promise call did not return a promise, stopping interval.")}),t),{stop:function(){n=!0,window.clearTimeout(o)}}}},53599:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o=function(){return"".concat(Math.random()).replace(".","-")}},67828:(e,t,n)=>{"use strict";n.d(t,{u:()=>i});var o=n(63105),r=n.n(o),i=function(e,t){var n=e.text.toLowerCase(),o=e.summary.toLowerCase();return r()(t,(function(e){return n.includes(e.toLowerCase())||o.includes(e.toLowerCase())}))}},7257:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(35161),r=n.n(o),i=n(77776);const s={postStatus:function(e){var t=e.store,n=e.status,o=e.spoilerText,s=e.visibility,a=e.sensitive,u=e.poll,c=e.media,l=void 0===c?[]:c,d=e.inReplyToStatusId,p=void 0===d?void 0:d,m=e.quoteId,h=void 0===m?void 0:m,f=e.contentType,g=void 0===f?"text/plain":f,v=e.preview,w=void 0!==v&&v,b=e.idempotencyKey,y=void 0===b?"":b,D=r()(l,"id");return i.ZP.postStatus({credentials:t.state.users.currentUser.credentials,status:n,spoilerText:o,visibility:s,sensitive:a,mediaIds:D,inReplyToStatusId:p,quoteId:h,contentType:g,poll:u,preview:w,idempotencyKey:y}).then((function(e){return e.error||w||t.dispatch("addNewStatuses",{statuses:[e],timeline:"friends",showImmediately:!0,noIdUpdate:!0}),e})).catch((function(e){return{error:e.message}}))},editStatus:function(e){var t=e.store,n=e.statusId,o=e.status,s=e.spoilerText,a=e.sensitive,u=e.poll,c=e.media,l=void 0===c?[]:c,d=e.contentType,p=void 0===d?"text/plain":d,m=r()(l,"id");return i.ZP.editStatus({id:n,credentials:t.state.users.currentUser.credentials,status:o,spoilerText:s,sensitive:a,poll:u,mediaIds:m,contentType:p}).then((function(e){return e.error||t.dispatch("addNewStatuses",{statuses:[e],timeline:"friends",showImmediately:!0,noIdUpdate:!0}),e})).catch((function(e){return console.error("Error editing status",e),{error:e.message}}))},uploadMedia:function(e){var t=e.store,n=e.formData,o=t.state.users.currentUser.credentials;return i.ZP.uploadMedia({credentials:o,formData:n})},setMediaDescription:function(e){var t=e.store,n=e.id,o=e.description,r=t.state.users.currentUser.credentials;return i.ZP.setMediaDescription({credentials:r,id:n,description:o})}}},77394:(e,t,n)=>{"use strict";n.d(t,{H2:()=>F,I3:()=>I,LP:()=>b,Ot:()=>v,RC:()=>E,_v:()=>m,bY:()=>x,dE:()=>z,gm:()=>A,l9:()=>P,lD:()=>y,m:()=>D,mg:()=>g,vp:()=>j});var o=n(71002),r=n(93433),i=n(4942),s=n(29439),a=n(97332),u=n(21865),c=n(40454),l=n(85565);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,i.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m=function(e){var t=O(e).rules,n=document.head,o=document.body;o.classList.add("hidden");var r=document.createElement("style");n.appendChild(r);var i=r.sheet;i.toString(),i.insertRule(":root { ".concat(t.radii," }"),"index-max"),i.insertRule(":root { ".concat(t.colors," }"),"index-max"),i.insertRule(":root { ".concat(t.shadows," }"),"index-max"),i.insertRule(":root { ".concat(t.fonts," }"),"index-max"),o.classList.remove("hidden")},h=function(e){return{sidebarColumnWidth:e.sidebarColumnWidth,contentColumnWidth:e.contentColumnWidth,notifsColumnWidth:e.notifsColumnWidth,emojiReactionsScale:e.emojiReactionsScale}},f=h(l.W2),g=function(e){var t=h(e);if(t!==f){var n=document.head,o=document.body;o.classList.add("hidden");var r=Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,": ").concat(o)})).join(";"),i=document.createElement("style");n.appendChild(i);var a=i.sheet;a.toString(),a.insertRule(":root { ".concat(r," }"),"index-max"),o.classList.remove("hidden")}},v=function(e,t){return 0===e.length?"none":e.filter((function(e){return t?e.inset:e})).map((function(e){return[e.x,e.y,e.blur,e.spread].map((function(e){return e+"px"})).concat([(0,u.pP)(e.color,e.alpha),e.inset?"inset":""]).join(" ")})).join(", ")},w=function(e){return 0===e.length?"none":e.filter((function(e){return!e.inset&&0===Number(e.spread)})).map((function(e){return[e.x,e.y,e.blur/2].map((function(e){return e+"px"})).concat([(0,u.pP)(e.color,e.alpha)]).join(" ")})).map((function(e){return"drop-shadow(".concat(e,")")})).join(" ")},b=function(e){var t=e.themeEngineVersion?e.colors||e:z(e.colors||e),n=(0,c.EC)(t,e.opacity||{}),o=n.colors,r=n.opacity,i=Object.entries(o).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return r?(e.solid[o]=(0,u.CO)(r),e.complete[o]=void 0===r.a?(0,u.CO)(r):(0,u._I)(r),e):e}),{complete:{},solid:{}});return{rules:{colors:Object.entries(i.complete).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,": ").concat(o)})).join(";")},theme:{colors:i.solid,opacity:r}}},y=function(e){var t=e.radii||{};void 0!==e.btnRadius&&(t=Object.entries(e).filter((function(e){var t=(0,s.Z)(e,2),n=t[0];return t[1],n.endsWith("Radius")})).reduce((function(e,t){return e[t[0].split("Radius")[0]]=t[1],e}),{}));var n=Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),{btn:4,input:4,checkbox:2,panel:10,avatar:5,avatarAlt:50,tooltip:2,attachment:5,chatMessage:t.panel});return{rules:{radii:Object.entries(n).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,"Radius: ").concat(o,"px")})).join(";")},theme:{radii:n}}},D=function(e){var t=Object.entries(e.fonts||{}).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=Object.entries(r).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),e[o]),e}),{interface:{family:"sans-serif"},input:{family:"inherit"},post:{family:"inherit"},postCode:{family:"monospace"}});return{rules:{fonts:Object.entries(t).filter((function(e){var t=(0,s.Z)(e,2);return t[0],t[1]})).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return"--".concat(n,"Font: ").concat(o.family)})).join(";")},theme:{fonts:t}}},_=function(e,t){return{x:0,y:e?1:-1,blur:0,spread:0,color:t?"#000000":"#FFFFFF",alpha:.2,inset:!0}},k=[_(!0,!1),_(!1,!0)],C=[_(!0,!0),_(!1,!1)],S={x:0,y:0,blur:4,spread:0,color:"--faint",alpha:1},j={panel:[{x:1,y:1,blur:4,spread:0,color:"#000000",alpha:.6}],topBar:[{x:0,y:0,blur:4,spread:0,color:"#000000",alpha:.6}],popup:[{x:2,y:2,blur:3,spread:0,color:"#000000",alpha:.5}],avatar:[{x:0,y:1,blur:8,spread:0,color:"#000000",alpha:.7}],avatarStatus:[],panelHeader:[],button:[{x:0,y:0,blur:2,spread:0,color:"#000000",alpha:1}].concat(k),buttonHover:[S].concat(k),buttonPressed:[S].concat(C),input:[].concat(C,[{x:0,y:0,blur:2,inset:!0,spread:0,color:"#000000",alpha:1}])},F=function(e,t){var n={button:"btn",panel:"bg",top:"topBar",popup:"popover",avatar:"bg",panelHeader:"panel",input:"input"},o=Object.fromEntries(Object.entries(e.shadows||{}).map((function(e){var t=(0,s.Z)(e,2);return[t[0],t[1].map((function(e){return p({color:"#000000"},e)}))]}))),l=o&&!e.themeEngineVersion?P(o,e.opacity):o||{},d=Object.entries(p(p({},j),l)).reduce((function(e,o){var l=(0,s.Z)(o,2),d=l[0],m=l[1],h=d.replace(/[A-Z].*$/,""),f=n[h],g=(0,u.ov)((0,a.OQ)(t[f]).rgb)<.5?1:-1,v=m.reduce((function(e,n){return[].concat((0,r.Z)(e),[p(p({},n),{},{color:(0,u.CO)((0,c.NI)(n.color,(function(e){return(0,a.OQ)(t[e]).rgb}),g))})])}),[]);return p(p({},e),{},(0,i.Z)({},d,v))}),{});return{rules:{shadows:Object.entries(d).map((function(e){var t=(0,s.Z)(e,2),n=t[0],o=t[1];return["--".concat(n,"Shadow: ").concat(v(o)),"--".concat(n,"ShadowFilter: ").concat(w(o)),"--".concat(n,"ShadowInset: ").concat(v(o,!0))].join(";")})).join(";")},theme:{shadows:d}}},A=function(e,t,n,o){return{rules:p(p(p(p({},n.rules),e.rules),t.rules),o.rules),theme:p(p(p(p({},n.theme),e.theme),t.theme),o.theme)}},O=function(e){var t=b(e);return A(t,y(e),F(e,t.theme.colors,t.mod),D(e))},E=function(){var e="no-store";return window.fetch("/static/styles.json",{cache:e}).then((function(e){return e.json()})).then((function(t){return Object.entries(t).map((function(t){var n=(0,s.Z)(t,2),r=n[0],i=n[1],a=null;return"object"===(0,o.Z)(i)?a=Promise.resolve(i):"string"==typeof i&&(a=window.fetch(i,{cache:e}).then((function(e){return e.json()})).catch((function(e){return console.error(e),null}))),[r,a]}))})).then((function(e){return e.reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];return e[o]=r,e}),{})}))},z=function(e){return Object.entries(e).reduce((function(e,t){var n=(0,s.Z)(t,2),o=n[0],r=n[1];switch(o){case"lightBg":return p(p({},e),{},{highlight:r});case"btnText":return p(p({},e),["","Panel","TopBar"].reduce((function(e,t){return p(p({},e),{},(0,i.Z)({},"btn"+t+"Text",r))}),{}));default:return p(p({},e),{},(0,i.Z)({},o,r))}}),{})},P=function(e,t){return Object.entries(e).reduce((function(e,n){var o=(0,s.Z)(n,2),a=o[0],u=o[1].reduce((function(e,n){return[].concat((0,r.Z)(e),[p(p({},n),{},{alpha:(s=n,a=s.color,(void 0===a?"#000000":a).startsWith("--")?(o=n,i=o.color,t[(0,c.AV)(i.substring(2).split(",")[0])]||1):n.alpha)})]);var o,i,s,a}),[]);return p(p({},e),{},(0,i.Z)({},a,u))}),{})},I=function(e){return E().then((function(t){return t[e]?t[e]:t["pleroma-dark"]})).then((function(e){var t=Array.isArray(e),n=t?{}:e.theme;if(t){var o=(0,u.wK)(e[1]),r=(0,u.wK)(e[2]),i=(0,u.wK)(e[3]),s=(0,u.wK)(e[4]),a=(0,u.wK)(e[5]||"#FF0000"),c=(0,u.wK)(e[6]||"#00FF00"),l=(0,u.wK)(e[7]||"#0000FF"),d=(0,u.wK)(e[8]||"#E3FF00");n.colors={bg:o,fg:r,text:i,link:s,cRed:a,cBlue:l,cGreen:c,cOrange:d}}return{theme:n,source:e.source}}))},x=function(e){return I(e).then((function(e){return m(e.theme)}))}},44551:(e,t,n)=>{"use strict";n.d(t,{em:()=>a,k0:()=>i,wB:()=>s});var o=n(97332),r=n(21865),i={undelay:null,topBar:null,badge:null,profileTint:null,fg:null,bg:"underlay",highlight:"bg",panel:"bg",popover:"bg",selectedMenu:"popover",btn:"bg",btnPanel:"panel",btnTopBar:"topBar",input:"bg",inputPanel:"panel",inputTopBar:"topBar",alert:"bg",alertPanel:"panel",poll:"bg",chatBg:"underlay",chatMessage:"chatBg"},s={profileTint:.5,alert:.5,input:.5,faint:.5,underlay:.15,alertPopup:.95},a={bg:{depends:[],opacity:"bg",priority:1},wallpaper:{depends:["bg"],color:function(e,t){return(0,o.Xu)(-2*e,t).rgb}},fg:{depends:[],priority:1},text:{depends:[],layer:"bg",opacity:null,priority:1},underlay:{default:"#000000",opacity:"underlay"},link:{depends:["accent"],priority:1},accent:{depends:["link"],priority:1},faint:{depends:["text"],opacity:"faint"},faintLink:{depends:["link"],opacity:"faint"},postFaintLink:{depends:["postLink"],opacity:"faint"},cBlue:"#0000ff",cRed:"#FF0000",cGreen:"#00FF00",cOrange:"#E3FF00",profileBg:{depends:["bg"],color:function(e,t){return{r:Math.floor(.53*t.r),g:Math.floor(.56*t.g),b:Math.floor(.59*t.b)}}},profileTint:{depends:["bg"],layer:"profileTint",opacity:"profileTint"},highlight:{depends:["bg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},highlightLightText:{depends:["lightText"],layer:"highlight",textColor:!0},highlightPostLink:{depends:["postLink"],layer:"highlight",textColor:"preserve"},highlightFaintText:{depends:["faint"],layer:"highlight",textColor:!0},highlightFaintLink:{depends:["faintLink"],layer:"highlight",textColor:"preserve"},highlightPostFaintLink:{depends:["postFaintLink"],layer:"highlight",textColor:"preserve"},highlightText:{depends:["text"],layer:"highlight",textColor:!0},highlightLink:{depends:["link"],layer:"highlight",textColor:"preserve"},highlightIcon:{depends:["highlight","highlightText"],color:function(e,t,n){return(0,r.a4)(t,n)}},popover:{depends:["bg"],opacity:"popover"},popoverLightText:{depends:["lightText"],layer:"popover",textColor:!0},popoverPostLink:{depends:["postLink"],layer:"popover",textColor:"preserve"},popoverFaintText:{depends:["faint"],layer:"popover",textColor:!0},popoverFaintLink:{depends:["faintLink"],layer:"popover",textColor:"preserve"},popoverPostFaintLink:{depends:["postFaintLink"],layer:"popover",textColor:"preserve"},popoverText:{depends:["text"],layer:"popover",textColor:!0},popoverLink:{depends:["link"],layer:"popover",textColor:"preserve"},popoverIcon:{depends:["popover","popoverText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedPost:"--highlight",selectedPostFaintText:{depends:["highlightFaintText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostLightText:{depends:["highlightLightText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostPostLink:{depends:["highlightPostLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostFaintLink:{depends:["highlightFaintLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostText:{depends:["highlightText"],layer:"highlight",variant:"selectedPost",textColor:!0},selectedPostLink:{depends:["highlightLink"],layer:"highlight",variant:"selectedPost",textColor:"preserve"},selectedPostIcon:{depends:["selectedPost","selectedPostText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedMenu:{depends:["bg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},selectedMenuLightText:{depends:["highlightLightText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuFaintText:{depends:["highlightFaintText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuFaintLink:{depends:["highlightFaintLink"],layer:"selectedMenu",variant:"selectedMenu",textColor:"preserve"},selectedMenuText:{depends:["highlightText"],layer:"selectedMenu",variant:"selectedMenu",textColor:!0},selectedMenuLink:{depends:["highlightLink"],layer:"selectedMenu",variant:"selectedMenu",textColor:"preserve"},selectedMenuIcon:{depends:["selectedMenu","selectedMenuText"],color:function(e,t,n){return(0,r.a4)(t,n)}},selectedMenuPopover:{depends:["popover"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},selectedMenuPopoverLightText:{depends:["selectedMenuLightText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverFaintText:{depends:["selectedMenuFaintText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverFaintLink:{depends:["selectedMenuFaintLink"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:"preserve"},selectedMenuPopoverText:{depends:["selectedMenuText"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:!0},selectedMenuPopoverLink:{depends:["selectedMenuLink"],layer:"selectedMenuPopover",variant:"selectedMenuPopover",textColor:"preserve"},selectedMenuPopoverIcon:{depends:["selectedMenuPopover","selectedMenuText"],color:function(e,t,n){return(0,r.a4)(t,n)}},lightText:{depends:["text"],layer:"bg",textColor:"preserve",color:function(e,t){return(0,o.Xu)(20*e,t).rgb}},postLink:{depends:["link"],layer:"bg",textColor:"preserve"},postGreentext:{depends:["cGreen"],layer:"bg",textColor:"preserve"},postCyantext:{depends:["cBlue"],layer:"bg",textColor:"preserve"},border:{depends:["fg"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}},poll:{depends:["accent","bg"],copacity:"poll",color:function(e,t,n){return(0,r.Tj)(t,.4,n)}},pollText:{depends:["text"],layer:"poll",textColor:!0},icon:{depends:["bg","text"],inheritsOpacity:!1,color:function(e,t,n){return(0,r.a4)(t,n)}},fgText:{depends:["text"],layer:"fg",textColor:!0},fgLink:{depends:["link"],layer:"fg",textColor:"preserve"},panel:{depends:["fg"],opacity:"panel"},panelText:{depends:["text"],layer:"panel",textColor:!0},panelFaint:{depends:["fgText"],layer:"panel",opacity:"faint",textColor:!0},panelLink:{depends:["fgLink"],layer:"panel",textColor:"preserve"},topBar:"--fg",topBarText:{depends:["fgText"],layer:"topBar",textColor:!0},topBarLink:{depends:["fgLink"],layer:"topBar",textColor:"preserve"},tab:{depends:["btn"]},tabText:{depends:["btnText"],layer:"btn",textColor:!0},tabActiveText:{depends:["text"],layer:"bg",textColor:!0},btn:{depends:["fg"],variant:"btn",opacity:"btn"},btnText:{depends:["fgText"],layer:"btn",textColor:!0},btnPanelText:{depends:["btnText"],layer:"btnPanel",variant:"btn",textColor:!0},btnTopBarText:{depends:["btnText"],layer:"btnTopBar",variant:"btn",textColor:!0},btnPressed:{depends:["btn"],layer:"btn"},btnPressedText:{depends:["btnText"],layer:"btn",variant:"btnPressed",textColor:!0},btnPressedPanel:{depends:["btnPressed"],layer:"btn"},btnPressedPanelText:{depends:["btnPanelText"],layer:"btnPanel",variant:"btnPressed",textColor:!0},btnPressedTopBar:{depends:["btnPressed"],layer:"btn"},btnPressedTopBarText:{depends:["btnTopBarText"],layer:"btnTopBar",variant:"btnPressed",textColor:!0},btnToggled:{depends:["btn"],layer:"btn",color:function(e,t){return(0,o.Xu)(20*e,t).rgb}},btnToggledText:{depends:["btnText"],layer:"btn",variant:"btnToggled",textColor:!0},btnToggledPanelText:{depends:["btnPanelText"],layer:"btnPanel",variant:"btnToggled",textColor:!0},btnToggledTopBarText:{depends:["btnTopBarText"],layer:"btnTopBar",variant:"btnToggled",textColor:!0},btnDisabled:{depends:["btn","bg"],color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledText:{depends:["btnText","btnDisabled"],layer:"btn",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledPanelText:{depends:["btnPanelText","btnDisabled"],layer:"btnPanel",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},btnDisabledTopBarText:{depends:["btnTopBarText","btnDisabled"],layer:"btnTopBar",variant:"btnDisabled",color:function(e,t,n){return(0,r.Tj)(t,.25,n)}},input:{depends:["fg"],opacity:"input"},inputText:{depends:["text"],layer:"input",textColor:!0},inputPanelText:{depends:["panelText"],layer:"inputPanel",variant:"input",textColor:!0},inputTopbarText:{depends:["topBarText"],layer:"inputTopBar",variant:"input",textColor:!0},alertError:{depends:["cRed"],opacity:"alert"},alertErrorText:{depends:["text"],layer:"alert",variant:"alertError",textColor:!0},alertErrorPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertError",textColor:!0},alertWarning:{depends:["cOrange"],opacity:"alert"},alertWarningText:{depends:["text"],layer:"alert",variant:"alertWarning",textColor:!0},alertWarningPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertWarning",textColor:!0},alertSuccess:{depends:["cGreen"],opacity:"alert"},alertSuccessText:{depends:["text"],layer:"alert",variant:"alertSuccess",textColor:!0},alertSuccessPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertSuccess",textColor:!0},alertNeutral:{depends:["text"],opacity:"alert"},alertNeutralText:{depends:["text"],layer:"alert",variant:"alertNeutral",color:function(e,t){return(0,o.Xp)(t).rgb},textColor:!0},alertNeutralPanelText:{depends:["panelText"],layer:"alertPanel",variant:"alertNeutral",textColor:!0},alertPopupError:{depends:["alertError"],opacity:"alertPopup"},alertPopupErrorText:{depends:["alertErrorText"],layer:"popover",variant:"alertPopupError",textColor:!0},alertPopupWarning:{depends:["alertWarning"],opacity:"alertPopup"},alertPopupWarningText:{depends:["alertWarningText"],layer:"popover",variant:"alertPopupWarning",textColor:!0},alertPopupSuccess:{depends:["alertSuccess"],opacity:"alertPopup"},alertPopupSuccessText:{depends:["alertSuccessText"],layer:"popover",variant:"alertPopupSuccess",textColor:!0},alertPopupNeutral:{depends:["alertNeutral"],opacity:"alertPopup"},alertPopupNeutralText:{depends:["alertNeutralText"],layer:"popover",variant:"alertPopupNeutral",textColor:!0},badgeNotification:"--cRed",badgeNotificationText:{depends:["text","badgeNotification"],layer:"badge",variant:"badgeNotification",textColor:"bw"},badgeNeutral:"--cGreen",badgeNeutralText:{depends:["text","badgeNeutral"],layer:"badge",variant:"badgeNeutral",textColor:"bw"},chatBg:{depends:["bg"]},chatMessageIncomingBg:{depends:["chatBg"]},chatMessageIncomingText:{depends:["text"],layer:"chatMessage",variant:"chatMessageIncomingBg",textColor:!0},chatMessageIncomingLink:{depends:["link"],layer:"chatMessage",variant:"chatMessageIncomingBg",textColor:"preserve"},chatMessageIncomingBorder:{depends:["border"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}},chatMessageOutgoingBg:{depends:["chatMessageIncomingBg"],color:function(e,t){return(0,o.Xu)(5*e,t).rgb}},chatMessageOutgoingText:{depends:["text"],layer:"chatMessage",variant:"chatMessageOutgoingBg",textColor:!0},chatMessageOutgoingLink:{depends:["link"],layer:"chatMessage",variant:"chatMessageOutgoingBg",textColor:"preserve"},chatMessageOutgoingBorder:{depends:["chatMessageOutgoingBg"],opacity:"border",color:function(e,t){return(0,o.Xu)(2*e,t).rgb}}}},40454:(e,t,n)=>{"use strict";n.d(t,{AQ:()=>y,AV:()=>v,EC:()=>_,NI:()=>D,we:()=>p,xb:()=>h});var o=n(4942),r=n(29439),i=n(71002),s=n(93433),a=n(97332),u=n(21865),c=n(44551);function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var p=3,m=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.k0,n=[e],o=t[e];o;)n.unshift(o),o=t[o];return n},h=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;return m(e).map((function(i){return[i===e?o[t]:o[i],i===e?r[n]||1:r[i]]}))},f=function(e,t){var n=t[e];if("string"==typeof n&&n.startsWith("--"))return[n.substring(2)];if(null===n)return[];var o=n.depends,r=n.layer,i=n.variant,a=r?m(r).map((function(e){return e===r?i||r:e})):[];return Array.isArray(o)?[].concat((0,s.Z)(o),(0,s.Z)(a)):(0,s.Z)(a)},g=function(e){return"object"===(0,i.Z)(e)?e:{depends:e.startsWith("--")?[e.substring(2)]:[],default:e.startsWith("#")?e:void 0}},v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.em,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f,o=g(t[e]);if(null!==o.opacity){if(o.opacity)return o.opacity;var r=function o(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e],a=n(r,t)[0];if(void 0!==a){var u=t[a];if(void 0!==u)return u.opacity||null===u?u.opacity:u.depends&&i.includes(a)?o(a,[].concat((0,s.Z)(i),[a])):null}};return o.depends?r(e):void 0}},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.em,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f,o=g(t[e]);if(c.k0[e])return e;if(null!==o.layer){if(o.layer)return o.layer;var r=function o(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e],a=n(r,t)[0];if(void 0!==a){var u=t[a];if(void 0!==u)return u.layer||null===u?u.layer:u.depends?o(u,[].concat((0,s.Z)(i),[a])):null}};return o.depends?r(e):void 0}},b=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c.em,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f,n=Object.keys(e),o=new Set(n),r=new Set,i=new Set,s=[].concat(n),a=[],u=function n(s){if(o.has(s))o.delete(s),r.add(s),t(s,e).forEach(n),r.delete(s),i.add(s),a.push(s);else if(r.has(s))console.debug("Cyclic depenency in topoSort, ignoring"),a.push(s);else if(!i.has(s))throw new Error("Unintended condition in topoSort!")};s.length>0;)u(s.pop());return a.map((function(e,t){return{data:e,index:t}})).sort((function(n,o){var r=n.data,i=n.index,s=o.data,a=o.index,u=t(r,e).length,c=t(s,e).length;return u===c||0!==c&&0!==u?i-a:0===u&&0!==c?-1:0===c&&0!==u?1:0})).map((function(e){return e.data}))}(Object.entries(c.em).sort((function(e,t){var n=(0,r.Z)(e,2),o=(n[0],n[1]),i=(0,r.Z)(t,2),s=(i[0],i[1]);return(o&&o.priority||0)-(s&&s.priority||0)})).reduce((function(e,t){var n=(0,r.Z)(t,2),i=n[0],s=n[1];return d(d({},e),{},(0,o.Z)({},i,s))}),{})),y=Object.entries(c.em).reduce((function(e,t){var n=(0,r.Z)(t,2),i=n[0],a=(n[1],v(i,c.em,f));return a?d(d({},e),{},(0,o.Z)({},a,{defaultValue:c.wB[a]||1,affectedSlots:[].concat((0,s.Z)(e[a]&&e[a].affectedSlots||[]),[i])})):e}),{}),D=function(e,t,n){if("string"!=typeof e||!e.startsWith("--"))return e;var o=null,i=e.split(/,/g).map((function(e){return e.trim()})),s=(0,r.Z)(i,2),u=s[0],c=s[1];return o=t(u.substring(2)),c&&(o=(0,a.Xu)(Number.parseFloat(c)*n,o).rgb),o},_=function(e,t){return b.reduce((function(n,r){var i,l=n.colors,p=n.opacity,m=e[r],b=g(c.em[r]),_=f(r,c.em),k=!!b.textColor,C=b.variant||b.layer;i=k?(0,u.Rx)(d({},l[_[0]]||(0,a.OQ)(e[r]||"#FF00FF").rgb),h(w(r)||"bg",C||"bg",v(C),l,p)):C&&C!==r?l[C]||(0,a.OQ)(e[C]).rgb:l.bg||(0,a.OQ)(e.bg);var S=(0,u.ov)(i)<.5?1:-1,j=null;if(m){var F=m;if("transparent"===F){var A=h(w(r),r,v(r)||r,l,p).slice(0,-1);F=d(d({},(0,u.Rx)((0,a.OQ)("#FF00FF").rgb,A)),{},{a:0})}else"string"==typeof m&&m.startsWith("--")?F=D(m,(function(t){return l[t]||e[t]}),S):"string"==typeof m&&m.startsWith("#")&&(F=(0,a.OQ)(F).rgb);j=d({},F)}else if(b.default)j=(0,a.OQ)(b.default).rgb;else{var O=b.color||function(e,t){return d({},t)};if(b.textColor)if("bw"===b.textColor)j=(0,a.wo)(i).rgb;else{var E=d({},l[_[0]]);b.color&&(E=O.apply(void 0,[S].concat((0,s.Z)(_.map((function(e){return d({},l[e])})))))),j=(0,u.uu)(i,d({},E),"preserve"===b.textColor)}else j=O.apply(void 0,[S].concat((0,s.Z)(_.map((function(e){return d({},l[e])})))))}if(!j)throw new Error("Couldn't generate color for "+r);var z=b.opacity||v(r),P=b.opacity;if(null===P)j.a=1;else if("transparent"===m)j.a=0;else{var I=P&&void 0!==t[z],x=_[0],T=x&&l[x];P||!T||b.textColor||null===P?T||z?T&&0===T.a?j.a=0:j.a=Number(I?t[z]:(y[z]||{}).defaultValue):delete j.a:j.a=T.a}return(Number.isNaN(j.a)||void 0===j.a)&&(j.a=1),z?{colors:d(d({},l),{},(0,o.Z)({},r,j)),opacity:d(d({},p),{},(0,o.Z)({},z,j.a))}:{colors:d(d({},l),{},(0,o.Z)({},r,j)),opacity:p}}),{colors:{},opacity:{}})}},95052:(e,t,n)=>{"use strict";n.d(t,{M:()=>u,q:()=>a});var o=n(4942),r=n(21865);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){(0,o.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var a=function(e){if(void 0!==e){var t=e.color,n=e.type;if("string"==typeof t){var o=(0,r.wK)(t);if(null!=o){var i="rgb(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),")"),a="rgba(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),", .1)"),u="rgba(".concat(Math.floor(o.r),", ").concat(Math.floor(o.g),", ").concat(Math.floor(o.b),", .2)"),c={"--____highlight-solidColor":i,"--____highlight-tintColor":a,"--____highlight-tintColor2":u};return"striped"===n?s({backgroundImage:["repeating-linear-gradient(135deg,","".concat(a," ,"),"".concat(a," 20px,"),"".concat(u," 20px,"),"".concat(u," 40px")].join(" "),backgroundPosition:"0 0"},c):"solid"===n?s({backgroundColor:u},c):"side"===n?s({backgroundImage:["linear-gradient(to right,","".concat(i," ,"),"".concat(i," 2px,"),"transparent 6px"].join(" "),backgroundPosition:"0 0"},c):void 0}}}},u=function(e){return"USER____"+e.screen_name.replace(/\./g,"_").replace(/@/g,"_AT_")}},4493:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(64721),r=n.n(o);const i=function(e,t,n){var o=!t||function(e){return e&&e.includes("@")}(t)||r()(n,t);return{name:o?"external-user-profile":"user-profile",params:o?{id:e}:{name:t}}}},66596:(e,t,n)=>{"use strict";n.d(t,{Z:()=>W});var o=n(66252),r=n(3577),i=n(49963),s=["href","alt","title"],a={key:1,class:"attachment-buttons"},u=["placeholder"],c={key:1},l={class:"attachment-wrapper"},d=["href","alt","title"],p=["src"],m={key:1,class:"attachment-buttons"},h=["title"],f=["title"],g=["title"],v=["title"],w=["title"],b=["title"],y=["title"],D=["href"],_=["href"],k={key:0},C=["href"],S=["src","alt","title"],j={key:0,class:"image"},F=["src"],A={class:"text"},O=["href"],E=["innerHTML"],z=["href"],P=["placeholder"],I={key:1},x=n(4942),T=n(32140),$=n(72884),B=n(34133);const U=n.p+"static/img/nsfw.2958239.png";var M=n(58394),L=n(989),R=n(9382),q=n(84131);function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}R.vI.add(q.gMD,q.Xig,q.VmB,q.IyC,q.aQp,q.NBC,q.Bg$,q.N7g,q.I7k,q.UJf,q.S3c);const Z={props:["attachment","compact","description","hideDescription","nsfw","size","setMedia","remove","shiftUp","shiftDn","edit"],data:function(){return{localDescription:this.description||this.attachment.description,nsfwImage:this.$store.state.instance.nsfwCensorImage||U,hideNsfwLocal:this.$store.getters.mergedConfig.hideNsfw,preloadImage:this.$store.getters.mergedConfig.preloadImage,loading:!1,img:"image"===M.ZP.fileType(this.attachment.mimetype)&&document.createElement("img"),modalOpen:!1,showHidden:!1,flashLoaded:!1,showDescription:!1}},components:{Flash:$.Z,StillImage:T.Z,VideoAttachment:B.Z},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){(0,x.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({classNames:function(){return[{"-loading":this.loading,"-nsfw-placeholder":this.hidden,"-editable":void 0!==this.edit,"-compact":this.compact},"-type-"+this.type,this.size&&"-size-"+this.size,"-".concat(this.useContainFit?"contain":"cover","-fit")]},usePlaceholder:function(){return"hide"===this.size},useContainFit:function(){return this.$store.getters.mergedConfig.useContainFit},placeholderName:function(){return""!==this.attachment.description&&this.attachment.description?this.attachment.description:this.type.toUpperCase()},placeholderIconClass:function(){return"image"===this.type?"image":"video"===this.type?"video":"audio"===this.type?"music":"file"},referrerpolicy:function(){return this.$store.state.instance.mediaProxyAvailable?"":"no-referrer"},type:function(){return M.ZP.fileType(this.attachment.mimetype)},hidden:function(){return this.nsfw&&this.hideNsfwLocal&&!this.showHidden},isEmpty:function(){return"html"===this.type&&!this.attachment.oembed},useModal:function(){var e=[];switch(this.size){case"hide":case"small":e=["image","video","audio","flash"];break;default:e=this.mergedConfig.playVideosInModal?["image","video","flash"]:["image"]}return e.includes(this.type)},videoTag:function(){return this.useModal?"button":"span"}},(0,L.Se)(["mergedConfig"])),watch:{"attachment.description":function(e){this.localDescription=e},localDescription:function(e){this.onEdit(e)}},methods:{linkClicked:function(e){var t=e.target;"A"===t.tagName&&window.open(t.href,"_blank")},openModal:function(e){this.useModal?(this.$emit("setMedia"),this.$store.dispatch("setCurrentMedia",this.attachment)):"unknown"===this.type&&window.open(this.attachment.url)},openModalForce:function(e){this.$emit("setMedia"),this.$store.dispatch("setCurrentMedia",this.attachment)},onEdit:function(e){this.edit&&this.edit(this.attachment,e)},onRemove:function(){this.remove&&this.remove(this.attachment)},onShiftUp:function(){this.shiftUp&&this.shiftUp(this.attachment)},onShiftDn:function(){this.shiftDn&&this.shiftDn(this.attachment)},stopFlash:function(){this.$refs.flash.closePlayer()},setFlashLoaded:function(e){this.flashLoaded=e},toggleDescription:function(){this.showDescription=!this.showDescription},toggleHidden:function(e){var t=this;!this.mergedConfig.useOneClickNsfw||this.showHidden||"video"===this.type&&!this.mergedConfig.playVideosInModal?this.img&&!this.preloadImage?this.img.onload?this.img.onload():(this.loading=!0,this.img.src=this.attachment.url,this.img.onload=function(){t.loading=!1,t.showHidden=!t.showHidden}):this.showHidden=!this.showHidden:this.openModal(e)},onImageLoad:function(e){var t=e.naturalWidth,n=e.naturalHeight;this.$emit("naturalSizeLoad",{id:this.attachment.id,width:t,height:n})}}},W=(0,n(83744).Z)(Z,[["render",function(e,t,n,x,T,$){var B=(0,o.up)("FAIcon"),U=(0,o.up)("StillImage"),M=(0,o.up)("VideoAttachment"),L=(0,o.up)("Flash");return e.usePlaceholder?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["Attachment -placeholder button-unstyled",e.classNames]),onClick:t[4]||(t[4]=function(){return e.openModal&&e.openModal.apply(e,arguments)})},["html"!==e.type?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"placeholder",target:"_blank",href:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,onClick:t[0]||(t[0]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(B,{icon:e.placeholderIconClass},null,8,["icon"]),(0,o._)("b",null,(0,r.zw)(e.nsfw?"NSFW / ":""),1),(0,o.Uk)((0,r.zw)(e.edit?"":e.placeholderName),1)],8,s)):(0,o.kq)("",!0),e.edit||e.remove?((0,o.wg)(),(0,o.iD)("div",a,[e.remove?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled attachment-button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.onRemove&&e.onRemove.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"trash-alt"})])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),"hide"!==e.size&&!e.hideDescription&&(e.edit||e.localDescription||e.showDescription)?((0,o.wg)(),(0,o.iD)("div",{key:2,class:(0,r.C_)(["description-container",{"-static":!e.edit}])},[e.edit?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.localDescription=t}),type:"text",class:"description-field",placeholder:e.$t("post_status.media_description"),onKeydown:t[3]||(t[3]=(0,i.D2)((0,i.iM)((function(){}),["prevent"]),["enter"]))},null,40,u)),[[i.nr,e.localDescription]]):((0,o.wg)(),(0,o.iD)("p",c,(0,r.zw)(e.localDescription),1))],2)):(0,o.kq)("",!0)],2)):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["Attachment",e.classNames])},[(0,o.wy)((0,o._)("div",l,[e.hidden?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"image-container",href:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,onClick:t[5]||(t[5]=(0,i.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent","stop"]))},[((0,o.wg)(),(0,o.iD)("img",{key:e.nsfwImage,class:"nsfw",src:e.nsfwImage},null,8,p)),"video"===e.type?((0,o.wg)(),(0,o.j4)(B,{key:0,class:"play-icon",icon:"play-circle"})):(0,o.kq)("",!0)],8,d)):(0,o.kq)("",!0),e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",m,["flash"===e.type&&e.flashLoaded?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled attachment-button",title:e.$t("status.attachment_stop_flash"),onClick:t[6]||(t[6]=(0,i.iM)((function(){return e.stopFlash&&e.stopFlash.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"stop"})],8,h)):(0,o.kq)("",!0),e.attachment.description&&"small"!==e.size&&!e.edit&&"unknown"!==e.type?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled attachment-button",title:e.$t("status.show_attachment_description"),onClick:t[7]||(t[7]=(0,i.iM)((function(){return e.toggleDescription&&e.toggleDescription.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"align-right"})],8,f)):(0,o.kq)("",!0),e.useModal||"unknown"===e.type?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled attachment-button",title:e.$t("status.show_attachment_in_modal"),onClick:t[8]||(t[8]=(0,i.iM)((function(){return e.openModalForce&&e.openModalForce.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"search-plus"})],8,g)),e.nsfw&&e.hideNsfwLocal?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-unstyled attachment-button",title:e.$t("status.hide_attachment"),onClick:t[9]||(t[9]=(0,i.iM)((function(){return e.toggleHidden&&e.toggleHidden.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"times"})],8,v)):(0,o.kq)("",!0),e.shiftUp?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled attachment-button",title:e.$t("status.move_up"),onClick:t[10]||(t[10]=(0,i.iM)((function(){return e.onShiftUp&&e.onShiftUp.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"chevron-left"})],8,w)):(0,o.kq)("",!0),e.shiftDn?((0,o.wg)(),(0,o.iD)("button",{key:5,class:"button-unstyled attachment-button",title:e.$t("status.move_down"),onClick:t[11]||(t[11]=(0,i.iM)((function(){return e.onShiftDn&&e.onShiftDn.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"chevron-right"})],8,b)):(0,o.kq)("",!0),e.remove?((0,o.wg)(),(0,o.iD)("button",{key:6,class:"button-unstyled attachment-button",title:e.$t("status.remove_attachment"),onClick:t[12]||(t[12]=(0,i.iM)((function(){return e.onRemove&&e.onRemove.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(B,{icon:"trash-alt"})],8,y)):(0,o.kq)("",!0)])),"image"!==e.type||e.hidden&&!e.preloadImage?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:2,class:(0,r.C_)(["image-container",{"-hidden":e.hidden&&e.preloadImage}]),href:e.attachment.url,target:"_blank",onClick:t[13]||(t[13]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(U,{class:"image",referrerpolicy:e.referrerpolicy,mimetype:e.attachment.mimetype,src:e.attachment.large_thumb_url||e.attachment.url,"image-load-handler":e.onImageLoad,alt:e.attachment.description},null,8,["referrerpolicy","mimetype","src","image-load-handler","alt"])],10,D)),"unknown"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:3,class:"placeholder-container",href:e.attachment.url,target:"_blank"},[(0,o.Wm)(B,{size:e.compact?"2x":"5x",icon:e.placeholderIconClass,title:e.localDescription},null,8,["size","icon","title"]),e.compact?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",k,(0,r.zw)(e.localDescription),1))],8,_)),"video"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)((0,o.LL)(e.videoTag),{key:4,class:(0,r.C_)(["video-container",{"button-unstyled":"isModal"}]),href:e.attachment.url,onClick:(0,i.iM)(e.openModal,["stop","prevent"])},{default:(0,o.w5)((function(){return[(0,o.Wm)(M,{class:"video",attachment:e.attachment,controls:!e.useModal,onPlay:t[14]||(t[14]=function(t){return e.$emit("play")}),onPause:t[15]||(t[15]=function(t){return e.$emit("pause")})},null,8,["attachment","controls"]),e.useModal?((0,o.wg)(),(0,o.j4)(B,{key:0,class:"play-icon",icon:"play-circle"})):(0,o.kq)("",!0)]})),_:1},8,["href","onClick"])),"audio"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",{key:5,class:"audio-container",href:e.attachment.url,onClick:t[18]||(t[18]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},["audio"===e.type?((0,o.wg)(),(0,o.iD)("audio",{key:0,src:e.attachment.url,alt:e.attachment.description,title:e.attachment.description,controls:"",onPlay:t[16]||(t[16]=function(t){return e.$emit("play")}),onPause:t[17]||(t[17]=function(t){return e.$emit("pause")})},null,40,S)):(0,o.kq)("",!0)],8,C)),"html"===e.type&&e.attachment.oembed?((0,o.wg)(),(0,o.iD)("div",{key:6,class:"oembed-container",onClick:t[19]||(t[19]=(0,i.iM)((function(){return e.linkClicked&&e.linkClicked.apply(e,arguments)}),["prevent"]))},[e.attachment.thumb_url?((0,o.wg)(),(0,o.iD)("div",j,[(0,o._)("img",{src:e.attachment.thumb_url},null,8,F)])):(0,o.kq)("",!0),(0,o._)("div",A,[(0,o._)("h1",null,[(0,o._)("a",{href:e.attachment.url},(0,r.zw)(e.attachment.oembed.title),9,O)]),(0,o._)("div",{innerHTML:e.attachment.oembed.oembedHTML},null,8,E)])])):(0,o.kq)("",!0),"flash"!==e.type||e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",{key:7,class:"flash-container",href:e.attachment.url,onClick:t[22]||(t[22]=(0,i.iM)((function(){return e.openModal&&e.openModal.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(L,{ref:"flash",class:"flash",src:e.attachment.large_thumb_url||e.attachment.url,onPlayerOpened:t[20]||(t[20]=function(t){return e.setFlashLoaded(!0)}),onPlayerClosed:t[21]||(t[21]=function(t){return e.setFlashLoaded(!1)})},null,8,["src"])],8,z))],512),[[i.F8,!e.isEmpty]]),"hide"!==e.size&&!e.hideDescription&&(e.edit||e.localDescription&&e.showDescription)?((0,o.wg)(),(0,o.iD)("div",{key:0,class:(0,r.C_)(["description-container",{"-static":!e.edit}])},[e.edit?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,"onUpdate:modelValue":t[23]||(t[23]=function(t){return e.localDescription=t}),type:"text",class:"description-field",placeholder:e.$t("post_status.media_description"),onKeydown:t[24]||(t[24]=(0,i.D2)((0,i.iM)((function(){}),["prevent"]),["enter"]))},null,40,P)),[[i.nr,e.localDescription]]):((0,o.wg)(),(0,o.iD)("p",I,(0,r.zw)(e.localDescription),1))],2)):(0,o.kq)("",!0)],2))}]])},19066:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r={class:"avatars"},i=n(48173),s=n(4493);const a={props:["users"],computed:{slicedUsers:function(){return this.users?this.users.slice(0,15):[]}},components:{UserAvatar:i.default},methods:{userProfileLink:function(e){return(0,s.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserAvatar"),c=(0,o.up)("router-link");return(0,o.wg)(),(0,o.iD)("div",r,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.slicedUsers,(function(t){return(0,o.wg)(),(0,o.j4)(c,{key:t.id,to:e.userProfileLink(t),class:"avatars-item"},{default:(0,o.w5)((function(){return[(0,o.Wm)(u,{user:t,class:"avatar-small"},null,8,["user"])]})),_:2},1032,["to"])})),128))])}]])},29076:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o=n(66252),r=n(49963),i={class:"basic-user-card"},s={class:"basic-user-card-collapsed-content"},a=["title"],u=n(22588),c=n(48173),l=n(12061),d=n(92820),p=n(4493);const m={props:["user"],components:{UserPopover:u.default,UserAvatar:c.default,RichContent:d.Z,UserLink:l.Z},methods:{userProfileLink:function(e){return(0,p.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("UserAvatar"),p=(0,o.up)("UserPopover"),m=(0,o.up)("router-link"),h=(0,o.up)("RichContent"),f=(0,o.up)("user-link");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o.Wm)(m,{to:e.userProfileLink(e.user),onClick:t[1]||(t[1]=(0,r.iM)((function(){}),["prevent"]))},{default:(0,o.w5)((function(){return[(0,o.Wm)(p,{"user-id":e.user.id,"overlay-centers":!0,"overlay-centers-selector":".avatar"},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{class:"user-avatar avatar",user:e.user,onClick:t[0]||(t[0]=(0,r.iM)((function(){}),["prevent"]))},null,8,["user"])]})),_:1},8,["user-id"])]})),_:1},8,["to"]),(0,o._)("div",s,[(0,o._)("div",{title:e.user.name,class:"basic-user-card-user-name"},[(0,o.Wm)(h,{class:"basic-user-card-user-name-value",html:e.user.name,emoji:e.user.emoji},null,8,["html","emoji"])],8,a),(0,o._)("div",null,[(0,o.Wm)(f,{class:"basic-user-card-screen-name",user:e.user},null,8,["user"])]),(0,o.WI)(e.$slots,"default")])])}]])},66141:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i=["disabled","checked","indeterminate"],s={key:0,class:"label"};const a={props:["modelValue","indeterminate","disabled"],emits:["update:modelValue"],data:function(e){return{indeterminateTransitionFix:e.indeterminate}},watch:{indeterminate:function(e){e&&(this.indeterminateTransitionFix=!0)}},methods:{onTransitionEnd:function(e){this.indeterminate||(this.indeterminateTransitionFix=!1)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,a,u,c){return(0,o.wg)(),(0,o.iD)("label",{class:(0,r.C_)(["checkbox",{disabled:n.disabled,indeterminate:n.indeterminate,"indeterminate-fix":e.indeterminateTransitionFix}])},[(0,o._)("input",{type:"checkbox",class:"visible-for-screenreader-only",disabled:n.disabled,checked:n.modelValue,indeterminate:n.indeterminate,onChange:t[0]||(t[0]=function(t){return e.$emit("update:modelValue",t.target.checked)})},null,40,i),(0,o._)("i",{class:"checkbox-indicator","aria-hidden":!0,onTransitionendCapture:t[1]||(t[1]=function(){return c.onTransitionEnd&&c.onTransitionEnd.apply(c,arguments)})},null,32),e.$slots.default?((0,o.wg)(),(0,o.iD)("span",s,[(0,o.WI)(e.$slots,"default")])):(0,o.kq)("",!0)],2)}]])},1447:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(66252),r=n(3577),i=n(49963),s=["textContent"],a=["textContent"],u=["textContent"];const c={components:{DialogModal:n(71113).Z},props:{title:{type:String},cancelText:{type:String},confirmText:{type:String}},computed:{},methods:{onCancel:function(){this.$emit("cancelled")},onAccept:function(){this.$emit("accepted")}}},l=(0,n(83744).Z)(c,[["render",function(e,t,n,c,l,d){var p=(0,o.up)("dialog-modal"),m=(0,o.Q2)("body-scroll-lock");return(0,o.wy)(((0,o.wg)(),(0,o.j4)(p,{class:"confirm-modal","on-cancel":e.onCancel},{header:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.title)},null,8,s)]})),footer:(0,o.w5)((function(){return[(0,o._)("button",{class:"btn button-default",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.onAccept&&e.onAccept.apply(e,arguments)}),["prevent"])),textContent:(0,r.zw)(e.confirmText)},null,8,a),(0,o._)("button",{class:"btn button-default",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.onCancel&&e.onCancel.apply(e,arguments)}),["prevent"])),textContent:(0,r.zw)(e.cancelText)},null,8,u)]})),default:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),_:3},8,["on-cancel"])),[[m,!0]])}]])},71113:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(66252),r=n(3577),i=n(49963),s={class:"panel-heading dialog-modal-heading"},a={class:"title"},u={class:"dialog-modal-content"},c={class:"dialog-modal-footer user-interactions panel-footer"};const l={props:{darkOverlay:{default:!0,type:Boolean},onCancel:{default:function(){},type:Function}}},d=(0,n(83744).Z)(l,[["render",function(e,t,n,l,d,p){return(0,o.wg)(),(0,o.iD)("span",{class:(0,r.C_)({"dark-overlay":e.darkOverlay}),onClick:t[1]||(t[1]=(0,i.iM)((function(t){return e.onCancel()}),["self","stop"]))},[(0,o._)("div",{class:"dialog-modal panel panel-default",onClick:t[0]||(t[0]=(0,i.iM)((function(){}),["stop"]))},[(0,o._)("div",s,[(0,o._)("div",a,[(0,o.WI)(e.$slots,"header")])]),(0,o._)("div",u,[(0,o.WI)(e.$slots,"default")]),(0,o._)("div",c,[(0,o.WI)(e.$slots,"footer")])])],2)}]])},88671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>J});var o=n(66252),r=n(3577),i=n(49963),s={ref:"hiddenOverlayCaret",class:"caret"},a=["title"],u=["id"],c=["id","aria-label","aria-selected","onClick"],l={class:"image"},d=["src"],p={key:1},m={class:"label"},h={key:0,class:"displayText"},f={key:1,class:"displayText"},g={class:"detailText"},v=n(4942),w=n(44925),b=n(15861),y=n(93433),D=n(69572),_=n.n(D),k=n(64687),C=n.n(k),S=n(13311),j=n.n(S),F=n(54061),A=n.n(F),O=function(e){return A()(e,(function(e,t){var n={word:t,start:0,end:t.length};if(e.length>0){var o=e.pop();n.start+=o.end,n.end+=o.end,e.push(o)}return e.push(n),e}),[])},E=function(e){for(var t=[],n="",o=0;o<e.length;o++){var r=e[o];n?!!r.trim()==!!n.trim()?n+=r:(t.push(n),n=r):n=r}return n&&t.push(n),t};const z=function(e,t){var n=E(e),o=O(n);return j()(o,(function(e){var n=e.start,o=e.end;return n<=t&&o>t}))},P=function(e,t,n){return e.slice(0,t.start)+n+e.slice(t.end)};var I=n(53599),x=n(91300),T=n(84535),$=["aria-live"];const B={props:{ariaLive:{type:String,defualt:"assertive"}},data:function(){return{currentText:""}},methods:{announce:function(e){var t=this;this.currentText=e,setTimeout((function(){t.currentText=""}),1e3)}}};var U=n(83744);const M=(0,U.Z)(B,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("div",{class:"visible-for-screenreader-only","aria-live":e.ariaLive},(0,r.zw)(e.currentText),9,$)}]]);var L,R=n(42262),q=n(67952),N=n(8312),Z=n(9382),W=n(5737),H=["imageUrl"];function V(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function K(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?V(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):V(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}Z.vI.add(W.RKn);const Y={emits:["update:modelValue","shown"],props:{suggest:{required:!0,type:Function},modelValue:{required:!0,type:String},enableEmojiPicker:{required:!1,type:Boolean,default:!1},hideEmojiButton:{required:!1,type:Boolean,default:!1},enableStickerPicker:{required:!1,type:Boolean,default:!1},placement:{required:!1,type:String,default:"auto"},newlineOnCtrlEnter:{required:!1,type:Boolean,default:!1}},data:function(){return{randomSeed:(0,I.Z)(),input:void 0,caretEl:void 0,highlighted:-1,caret:0,focused:!1,blurTimeout:null,temporarilyHideSuggestions:!1,disableClickOutside:!1,suggestions:[],overlayStyle:{},pickerShown:!1}},components:{Popover:T.default,EmojiPicker:x.Z,UnicodeDomainIndicator:R.Z,ScreenReaderNotice:M},computed:{padEmoji:function(){return this.$store.getters.mergedConfig.padEmoji},defaultCandidateIndex:function(){return this.$store.getters.mergedConfig.autocompleteSelect?0:-1},preText:function(){return this.modelValue.slice(0,this.caret)},postText:function(){return this.modelValue.slice(this.caret)},showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length>0&&!this.pickerShown&&!this.temporarilyHideSuggestions},textAtCaret:function(){var e;return null===(e=this.wordAtCaret)||void 0===e?void 0:e.word},wordAtCaret:function(){if(this.modelValue&&this.caret)return z(this.modelValue,this.caret-1)||{}},languages:function(){return(0,N.ensureFinalFallback)(this.$store.getters.mergedConfig.interfaceLanguage)},maybeLocalizedEmojiNamesAndKeywords:function(){var e=this;return function(t){var n=[t.displayText],o=[];return t.displayTextI18n&&n.push(e.$t(t.displayTextI18n.key,t.displayTextI18n.args)),t.annotations&&e.languages.forEach((function(e){var r,i;n.push(null===(r=t.annotations[e])||void 0===r?void 0:r.name),o.push.apply(o,(0,y.Z)((null===(i=t.annotations[e])||void 0===i?void 0:i.keywords)||[]))})),{names:n.filter((function(e){return e})),keywords:o.filter((function(e){return e}))}}},maybeLocalizedEmojiName:function(){var e=this;return function(t){if(!t.annotations)return t.displayText;if(t.displayTextI18n)return e.$t(t.displayTextI18n.key,t.displayTextI18n.args);var n,o=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return G(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?G(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(e.languages);try{for(o.s();!(n=o.n()).done;){var r,i=n.value;if(null!==(r=t.annotations[i])&&void 0!==r&&r.name)return t.annotations[i].name}}catch(e){o.e(e)}finally{o.f()}return t.displayText}},onInputScroll:function(){this.$refs.hiddenOverlay.scrollTo({top:this.input.scrollTop,left:this.input.scrollLeft})},suggestionListId:function(){return"suggestions-".concat(this.randomSeed)},suggestionItemId:function(){var e=this;return function(t){return"suggestion-item-".concat(t,"-").concat(e.randomSeed)}}},mounted:function(){var e=this.$refs,t=e.root,n=e.hiddenOverlayCaret,o=e.suggestorPopover,r=t.querySelector(".emoji-input > input")||t.querySelector(".emoji-input > textarea");if(r){this.input=r,this.caretEl=n,o.setAnchorEl?(o.setAnchorEl(this.caretEl),this.$refs.picker.setAnchorEl(this.caretEl)):console.warn("setAnchorEl not found, are we in a unit test?");var i=getComputedStyle(this.input);this.overlayStyle.padding=i.padding,this.overlayStyle.border=i.border,this.overlayStyle.margin=i.margin,this.overlayStyle.lineHeight=i.lineHeight,this.overlayStyle.fontFamily=i.fontFamily,this.overlayStyle.fontSize=i.fontSize,this.overlayStyle.wordWrap=i.wordWrap,this.overlayStyle.whiteSpace=i.whiteSpace,this.resize(),r.addEventListener("blur",this.onBlur),r.addEventListener("focus",this.onFocus),r.addEventListener("paste",this.onPaste),r.addEventListener("keyup",this.onKeyUp),r.addEventListener("keydown",this.onKeyDown),r.addEventListener("click",this.onClickInput),r.addEventListener("transitionend",this.onTransition),r.addEventListener("input",this.onInput),r.addEventListener("scroll",this.onInputScroll)}},unmounted:function(){var e=this.input;e&&(e.removeEventListener("blur",this.onBlur),e.removeEventListener("focus",this.onFocus),e.removeEventListener("paste",this.onPaste),e.removeEventListener("keyup",this.onKeyUp),e.removeEventListener("keydown",this.onKeyDown),e.removeEventListener("click",this.onClickInput),e.removeEventListener("transitionend",this.onTransition),e.removeEventListener("input",this.onInput),e.removeEventListener("scroll",this.onInputScroll))},watch:{showSuggestions:function(e,t){this.$emit("shown",e),e?this.$refs.suggestorPopover.showPopover():this.$refs.suggestorPopover.hidePopover()},textAtCaret:(L=(0,b.Z)(C().mark((function e(t){var n,o;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0!==t){e.next=2;break}return e.abrupt("return");case 2:if(n=t.charAt(0),t!==n){e.next=6;break}return this.suggestions=[],e.abrupt("return");case 6:return e.next=8,this.suggest(t,this.maybeLocalizedEmojiNamesAndKeywords);case 8:if(o=e.sent,!(this.textAtCaret!==t||o.length<=0)){e.next=12;break}return this.suggestions=[],e.abrupt("return");case 12:this.suggestions=_()(o,5).map((function(e){var t=e.imageUrl;return K(K({},(0,w.Z)(e,H)),{},{img:t||""})})),this.highlighted=this.defaultCandidateIndex,this.$refs.screenReaderNotice.announce(this.$tc("tool_tip.autocomplete_available",this.suggestions.length,{number:this.suggestions.length}));case 15:case"end":return e.stop()}}),e,this)}))),function(e){return L.apply(this,arguments)})},methods:{triggerShowPicker:function(){var e=this;this.$nextTick((function(){e.$refs.picker.showPicker(),e.scrollIntoView()})),this.disableClickOutside=!0,setTimeout((function(){e.disableClickOutside=!1}),0)},togglePicker:function(){this.input.focus(),this.pickerShown?this.$refs.picker.hidePicker():(this.scrollIntoView(),this.$refs.picker.showPicker(),this.$refs.picker.startEmojiLoad())},replace:function(e){var t=P(this.modelValue,this.wordAtCaret,e);this.$emit("update:modelValue",t),this.caret=0},insert:function(e){var t=e.insertion,n=e.keepOpen,o=e.surroundingSpace,r=void 0===o||o,i=this.modelValue.substring(0,this.caret)||"",s=this.modelValue.substring(this.caret)||"",a=/\s/,u=r&&!a.exec(i.slice(-1))&&i.length&&this.padEmoji>0?" ":"",c=r&&!a.exec(s[0])&&this.padEmoji?" ":"",l=[i,u,t,c,s].join("");this.$emit("update:modelValue",l);var d=this.caret+(t+c+u).length;n||this.input.focus(),this.$nextTick((function(){this.input.setSelectionRange(d,d),this.caret=d}))},replaceText:function(e,t){var n=this.suggestions.length||0;if(1!==this.textAtCaret.length&&(n>0||t)){var o=(t||this.suggestions[this.highlighted]).replacement,r=P(this.modelValue,this.wordAtCaret,o);this.$emit("update:modelValue",r),this.highlighted=0;var i=this.wordAtCaret.start+o.length;this.$nextTick((function(){this.input.focus(),this.input.setSelectionRange(i,i),this.caret=i})),e.preventDefault()}},cycleBackward:function(e){var t=this.suggestions.length||0;this.highlighted-=1,-1===this.highlighted?this.input.focus():this.highlighted<-1&&(this.highlighted=t-1),t>0&&e.preventDefault()},cycleForward:function(e){var t=this.suggestions.length||0;this.highlighted+=1,this.highlighted>=t&&(this.highlighted=-1,this.input.focus()),t>0&&e.preventDefault()},scrollIntoView:function(){var e=this,t=this.$refs.picker.$el,n=this.$el.closest(".sidebar-scroller")||this.$el.closest(".post-form-modal-view")||window,o=n===window?n.scrollY:n.scrollTop,r=o+(n===window?n.innerHeight:n.offsetHeight),i=t.offsetHeight+(0,q.y)(t,n).top,s=o+Math.max(0,i-r);n===window?n.scroll(0,s):n.scrollTop=s,this.$nextTick((function(){var t=e.input.offsetHeight,n=e.$refs.picker;n.$el.getBoundingClientRect().bottom>window.innerHeight&&(n.$el.style.top="auto",n.$el.style.bottom=t+"px")}))},onPickerShown:function(){this.pickerShown=!0},onPickerClosed:function(){this.pickerShown=!1},onBlur:function(e){var t=this;this.blurTimeout=setTimeout((function(){t.focused=!1,t.setCaret(e)}),200)},onClick:function(e,t){this.replaceText(e,t)},onFocus:function(e){this.blurTimeout&&(clearTimeout(this.blurTimeout),this.blurTimeout=null),this.focused=!0,this.setCaret(e),this.temporarilyHideSuggestions=!1},onKeyUp:function(e){var t=e.key;this.setCaret(e),this.temporarilyHideSuggestions="Escape"===t},onPaste:function(e){this.setCaret(e)},onKeyDown:function(e){var t=this,n=e.ctrlKey,o=e.shiftKey,r=e.key;this.newlineOnCtrlEnter&&n&&"Enter"===r&&(this.insert({insertion:"\n",surroundingSpace:!1}),e.stopPropagation(),e.preventDefault(),this.$nextTick((function(){t.input.blur(),t.input.focus()}))),this.temporarilyHideSuggestions||("Tab"===r&&(o?this.cycleBackward(e):this.cycleForward(e)),"ArrowUp"===r?this.cycleBackward(e):"ArrowDown"===r&&this.cycleForward(e),"Enter"===r&&(n||this.replaceText(e))),"Escape"===r&&(this.temporarilyHideSuggestions||this.input.focus())},onInput:function(e){this.setCaret(e),this.$emit("update:modelValue",e.target.value)},onStickerUploaded:function(e){this.$emit("sticker-uploaded",e)},onStickerUploadFailed:function(e){this.$emit("sticker-upload-Failed",e)},setCaret:function(e){var t=this,n=e.target.selectionStart;this.caret=n,this.$nextTick((function(){t.$refs.suggestorPopover.updateStyles()}))},resize:function(){},autoCompleteItemLabel:function(e){return e.user?e.displayText+" "+e.detailText:this.maybeLocalizedEmojiName(e)}}},J=(0,U.Z)(Y,[["render",function(e,t,n,v,w,b){var y=(0,o.up)("screen-reader-notice"),D=(0,o.up)("FAIcon"),_=(0,o.up)("EmojiPicker"),k=(0,o.up)("UnicodeDomainIndicator"),C=(0,o.up)("Popover");return(0,o.wg)(),(0,o.iD)("div",{ref:"root",class:(0,r.C_)(["emoji-input",{"with-picker":!e.hideEmojiButton}])},[(0,o.WI)(e.$slots,"default",{id:"textbox-"+e.randomSeed,ariaOwns:e.suggestionListId,ariaAutocomplete:"both",ariaExpanded:e.showSuggestions,ariaActivedescendant:e.showSuggestions&&-1!==e.highlighted?e.suggestionItemId(e.highlighted):""}),(0,o._)("div",{ref:"hiddenOverlay",class:"hidden-overlay",style:(0,r.j5)(e.overlayStyle),"aria-hidden":!0},[(0,o._)("span",null,(0,r.zw)(e.preText),1),(0,o._)("span",s,"x",512),(0,o._)("span",null,(0,r.zw)(e.postText),1)],4),(0,o.Wm)(y,{ref:"screenReaderNotice","aria-live":"assertive"},null,512),e.enableEmojiPicker?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.hideEmojiButton?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled emoji-picker-icon",type:"button",title:e.$t("emoji.add_emoji"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.togglePicker&&e.togglePicker.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(D,{icon:["far","smile-beam"]})],8,a)),e.enableEmojiPicker?((0,o.wg)(),(0,o.j4)(_,{key:1,ref:"picker","enable-sticker-picker":e.enableStickerPicker,class:"emoji-picker-panel",onEmoji:e.insert,onStickerUploaded:e.onStickerUploaded,onStickerUploadFailed:e.onStickerUploadFailed,onShow:e.onPickerShown,onClose:e.onPickerClosed},null,8,["enable-sticker-picker","onEmoji","onStickerUploaded","onStickerUploadFailed","onShow","onClose"])):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),(0,o.Wm)(C,{ref:"suggestorPopover",class:"autocomplete-panel",placement:"bottom","trigger-attrs":{"aria-hidden":!0}},{content:(0,o.w5)((function(){return[(0,o._)("div",{id:e.suggestionListId,ref:"panel-body",class:"autocomplete-panel-body",role:"listbox"},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.suggestions,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{id:e.suggestionItemId(n),key:n,class:(0,r.C_)(["autocomplete-item",{highlighted:n===e.highlighted}]),role:"option","aria-label":e.autoCompleteItemLabel(t),"aria-selected":n===e.highlighted,onClick:(0,i.iM)((function(n){return e.onClick(n,t)}),["stop","prevent"])},[(0,o._)("span",l,[t.img?((0,o.wg)(),(0,o.iD)("img",{key:0,src:t.img},null,8,d)):((0,o.wg)(),(0,o.iD)("span",p,(0,r.zw)(t.replacement),1))]),(0,o._)("div",m,[t.user?((0,o.wg)(),(0,o.iD)("span",h,[(0,o.Uk)((0,r.zw)(t.displayText),1),(0,o.Wm)(k,{user:t.user,at:!1},null,8,["user"])])):(0,o.kq)("",!0),t.user?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",f,(0,r.zw)(e.maybeLocalizedEmojiName(t)),1)),(0,o._)("span",g,(0,r.zw)(t.detailText),1)])],10,c)})),128))],8,u)]})),_:1},512)],2)}]])},91300:(e,t,n)=>{"use strict";n.d(t,{Z:()=>N});var o=n(66252),r=n(3577),i=n(49963),s={class:"heading"},a={ref:"header",class:"emoji-tabs"},u=["title","onClick"],c={key:0,class:"emoji-picker-header-image"},l={key:0,class:"additional-tabs"},d=["title"],p={key:0,class:"content"},m={class:"emoji-search"},h=["placeholder"],f={class:"emoji-group"},g={key:0,class:"emoji-group-title"},v=["title","onClick"],w={key:0,class:"emoji-picker-emoji -unicode"},b={class:"keep-open"},y={key:0,class:"stickers-content"},D=n(29439),_=n(4942),k=n(93433),C=n(8400),S=n.n(C),j=n(92742),F=n.n(j),A=n(23279),O=n.n(A),E=n(66141),z=n(84535),P=n(32140),I=n(8312),x=n(9382),T=n(84131);function $(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$(Object(n),!0).forEach((function(t){(0,_.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return M(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?M(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}x.vI.add(T.IA$,T.L4e,T.RKn,T.ctA,T.ILF,T.kQp,T.E1P,T.k0d,T.Elv,T.X8G,T.dT$,T.RrC);var L={"smileys-and-emotion":"smile","people-and-body":"user","animals-and-nature":"paw","food-and-drink":"ice-cream","travel-and-places":"bus",activities:"basketball-ball",objects:"lightbulb",symbols:"code",flags:"flag"},R=function(e,t,n){var o=[e.displayText,n(e)];return e.annotations&&t.forEach((function(t){var n,r,i=(null===(n=e.annotations[t])||void 0===n?void 0:n.keywords)||[],s=null===(r=e.annotations[t])||void 0===r?void 0:r.name;o.push.apply(o,(0,k.Z)(i.concat([s]).filter((function(e){return e}))))})),o};const q={props:{enableStickerPicker:{required:!1,type:Boolean,default:!1},hideCustomEmoji:{required:!1,type:Boolean,default:!1}},inject:["popoversZLayer"],data:function(){return{keyword:"",activeGroup:"custom",showingStickers:!1,groupsScrolledClass:"scrolled-top",keepOpen:!1,customEmojiTimeout:null,contentLoaded:!1,groupRefs:{},emojiRefs:{},filteredEmojiGroups:[],width:0}},components:{StickerPicker:(0,o.RC)((function(){return n.e(159).then(n.bind(n,30159))})),Checkbox:E.Z,StillImage:P.Z,Popover:z.default},methods:{showPicker:function(){this.$refs.popover.showPopover(),this.onShowing()},hidePicker:function(){this.$refs.popover.hidePopover()},setAnchorEl:function(e){this.$refs.popover.setAnchorEl(e)},setGroupRef:function(e){var t=this;return function(n){t.groupRefs[e]=n}},onPopoverShown:function(){this.$emit("show")},onPopoverClosed:function(){this.$emit("close")},onStickerUploaded:function(e){this.$emit("sticker-uploaded",e)},onStickerUploadFailed:function(e){this.$emit("sticker-upload-failed",e)},onEmoji:function(e){var t=e.imageUrl?":".concat(e.displayText,":"):e.replacement;this.keepOpen||this.$refs.popover.hidePopover(),this.$emit("emoji",{insertion:t,keepOpen:this.keepOpen})},onScroll:function(e,t,n,o){var r=this.$refs["emoji-groups"].$el;this.scrolledGroup(r,n,o)},scrolledGroup:function(e,t,n){var o=this,r=e.scrollTop+5;this.$nextTick((function(){o.emojiItems.slice(t,n+1).forEach((function(e){var t=e.id.replace(/^row-\d+-/,""),n=o.groupRefs["group-"+e.id];if(n){var i=n.$el.parentElement;i&&i&&function(e){var t=e.style.transform,n=/translateY\((\d+)px\)/.exec(t);return n?n[1]:0}(i)<=r&&(o.activeGroup=t)}})),o.scrollHeader()}))},scrollHeader:function(){var e=this.groupRefs["group-header-"+this.activeGroup],t=e.offsetLeft,n=t+e.offsetWidth,o=this.$refs.header,r=o.scrollLeft,i=r+o.clientWidth,s=function(e){o.scrollLeft=e};t-7<r?s(t-7):n+7>i&&s(n+7-o.clientWidth)},highlight:function(e){this.setShowStickers(!1);var t=this.emojiItems.findIndex((function(t){return t.id===e}));this.$refs["emoji-groups"].scrollToItem(t)},updateScrolledClass:function(e){e.scrollTop<=5?this.groupsScrolledClass="scrolled-top":e.scrollTop>=e.scrollTopMax-5?this.groupsScrolledClass="scrolled-bottom":this.groupsScrolledClass="scrolled-middle"},toggleStickers:function(){this.showingStickers=!this.showingStickers},setShowStickers:function(e){this.showingStickers=e},filterByKeyword:function(e,t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0;if(""===t)return e;var r,i=t.toLowerCase(),s=[],a=U(e);try{for(a.s();!(r=a.n()).done;){var u=r.value,c=R(u,n,o).map((function(e){return e.toLowerCase().indexOf(i)})).filter((function(e){return e>-1})),l=c.length?Math.min.apply(Math,(0,k.Z)(c)):-1;l>-1&&(Array.isArray(s[l])||(s[l]=[]),s[l].push(u))}}catch(e){a.e(e)}finally{a.f()}return s.flat()}(e,t,this.languages,this.maybeLocalizedEmojiName)},onShowing:function(){var e=this,t=this.contentLoaded;this.recalculateItemPerRow(),this.$nextTick((function(){e.$refs.search.focus()})),this.contentLoaded=!0,this.filteredEmojiGroups=this.getFilteredEmojiGroups(),t||this.$nextTick((function(){e.defaultGroup&&e.highlight(e.defaultGroup)}))},getFilteredEmojiGroups:function(){var e=this;return this.allEmojiGroups.map((function(t){return B(B({},t),{},{emojis:e.filterByKeyword(t.emojis,F()(e.keyword))})})).filter((function(e){return e.emojis.length>0}))},recalculateItemPerRow:function(){var e=this;this.$nextTick((function(){e.$refs["emoji-groups"]&&(e.width=e.$refs["emoji-groups"].$el.clientWidth)}))}},watch:{keyword:function(){this.onScroll(),this.debouncedHandleKeywordChange()},allCustomGroups:function(){this.filteredEmojiGroups=this.getFilteredEmojiGroups()}},computed:{minItemSize:function(){return this.emojiHeight},emojiHeight:function(){return 36},emojiWidth:function(){return 36},itemPerRow:function(){return this.width?Math.floor(this.width/this.emojiWidth-1):6},activeGroupView:function(){return this.showingStickers?"":this.activeGroup},stickersAvailable:function(){return this.$store.state.instance.stickers?this.$store.state.instance.stickers.length>0:0},allCustomGroups:function(){if(this.hideCustomEmoji)return{};var e=this.$store.getters.groupedCustomEmojis;return e.unpacked&&(e.unpacked.text=this.$t("emoji.unpacked")),e},defaultGroup:function(){return Object.keys(this.allCustomGroups)[0]},unicodeEmojiGroups:function(){var e=this;return this.$store.getters.standardEmojiGroupList.map((function(t){return{id:"standard-".concat(t.id),text:e.$t("emoji.unicode_groups.".concat(t.id)),icon:L[t.id],emojis:t.emojis}}))},allEmojiGroups:function(){return Object.entries(this.allCustomGroups).map((function(e){var t=(0,D.Z)(e,2);return t[0],t[1]})).concat(this.unicodeEmojiGroups)},stickerPickerEnabled:function(){return 0!==(this.$store.state.instance.stickers||[]).length},debouncedHandleKeywordChange:function(){var e=this;return O()((function(){e.filteredEmojiGroups=e.getFilteredEmojiGroups()}),500)},emojiItems:function(){var e=this;return this.filteredEmojiGroups.map((function(t){return S()(t.emojis,e.itemPerRow).map((function(e,n){return B(B({},t),{},{id:0===n?t.id:"row-".concat(n,"-").concat(t.id),emojis:e,isFirstRow:0===n})}))})).reduce((function(e,t){return e.concat(t)}),[])},languages:function(){return(0,I.ensureFinalFallback)(this.$store.getters.mergedConfig.interfaceLanguage)},maybeLocalizedEmojiName:function(){var e=this;return function(t){if(!t.annotations)return t.displayText;if(t.displayTextI18n)return e.$t(t.displayTextI18n.key,t.displayTextI18n.args);var n,o=U(e.languages);try{for(o.s();!(n=o.n()).done;){var r,i=n.value;if(null!==(r=t.annotations[i])&&void 0!==r&&r.name)return t.annotations[i].name}}catch(e){o.e(e)}finally{o.f()}return t.displayText}},isInModal:function(){return"modals"===this.popoversZLayer}}},N=(0,n(83744).Z)(q,[["render",function(e,t,n,D,_,k){var C=(0,o.up)("still-image"),S=(0,o.up)("FAIcon"),j=(0,o.up)("DynamicScrollerItem"),F=(0,o.up)("DynamicScroller"),A=(0,o.up)("Checkbox"),O=(0,o.up)("sticker-picker"),E=(0,o.up)("Popover"),z=(0,o.Q2)("body-scroll-lock");return(0,o.wg)(),(0,o.j4)(E,{ref:"popover",trigger:"click","popover-class":"emoji-picker popover-default","trigger-attrs":{"aria-hidden":!0,tabindex:-1},onShow:e.onPopoverShown,onClose:e.onPopoverClosed},{content:(0,o.w5)((function(){return[(0,o._)("div",s,[(0,o.wy)(((0,o.wg)(),(0,o.iD)("span",a,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.filteredEmojiGroups,(function(t){return(0,o.wg)(),(0,o.iD)("span",{ref_for:!0,ref:e.setGroupRef("group-header-"+t.id),key:t.id,class:(0,r.C_)(["emoji-tabs-item",{active:e.activeGroupView===t.id}]),title:t.text,role:"button",onClick:(0,i.iM)((function(n){return e.highlight(t.id)}),["prevent"])},[t.image?((0,o.wg)(),(0,o.iD)("span",c,[(0,o.Wm)(C,{alt:t.text,src:t.image},null,8,["alt","src"])])):((0,o.wg)(),(0,o.j4)(S,{key:1,icon:t.icon,"fixed-width":""},null,8,["icon"]))],10,u)})),128))])),[[z,e.isInModal]]),e.stickerPickerEnabled?((0,o.wg)(),(0,o.iD)("span",l,[(0,o._)("span",{class:(0,r.C_)(["stickers-tab-icon additional-tabs-item",{active:e.showingStickers}]),title:e.$t("emoji.stickers"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.toggleStickers&&e.toggleStickers.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(S,{icon:"sticky-note","fixed-width":""})],10,d)])):(0,o.kq)("",!0)]),e.contentLoaded?((0,o.wg)(),(0,o.iD)("div",p,[(0,o._)("div",{class:(0,r.C_)(["emoji-content",{hidden:e.showingStickers}])},[(0,o._)("div",m,[(0,o.wy)((0,o._)("input",{ref:"search","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.keyword=t}),type:"text",class:"form-control",placeholder:e.$t("emoji.search_emoji"),onInput:t[2]||(t[2]=function(e){return e.target.composing=!1})},null,40,h),[[i.nr,e.keyword]])]),(0,o.wy)(((0,o.wg)(),(0,o.j4)(F,{ref:"emoji-groups",class:(0,r.C_)(["emoji-groups",e.groupsScrolledClass]),"min-item-size":e.minItemSize,items:e.emojiItems,"emit-update":!0,onUpdate:e.onScroll,onVisible:e.recalculateItemPerRow,onResize:e.recalculateItemPerRow},{default:(0,o.w5)((function(t){var n=t.item,s=t.index,a=t.active;return[(0,o.Wm)(j,{ref:e.setGroupRef("group-"+n.id),item:n,active:a,"data-index":s,"size-dependencies":[n.emojis.length]},{default:(0,o.w5)((function(){return[(0,o._)("div",f,[n.isFirstRow?((0,o.wg)(),(0,o.iD)("h6",g,(0,r.zw)(n.text),1)):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.emojis,(function(t){return(0,o.wg)(),(0,o.iD)("span",{key:n.id+t.displayText,title:e.maybeLocalizedEmojiName(t),class:"emoji-item",role:"button",onClick:(0,i.iM)((function(n){return e.onEmoji(t)}),["stop","prevent"])},[t.imageUrl?((0,o.wg)(),(0,o.j4)(C,{key:1,class:"emoji-picker-emoji -custom",loading:"lazy",alt:e.maybeLocalizedEmojiName(t),src:t.imageUrl,"data-emoji-name":n.id+t.displayText},null,8,["alt","src","data-emoji-name"])):((0,o.wg)(),(0,o.iD)("span",w,(0,r.zw)(t.replacement),1))],8,v)})),128))])]})),_:2},1032,["item","active","data-index","size-dependencies"])]})),_:1},8,["class","min-item-size","items","onUpdate","onVisible","onResize"])),[[z,e.isInModal]]),(0,o._)("div",b,[(0,o.Wm)(A,{modelValue:e.keepOpen,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.keepOpen=t})},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("emoji.keep_open")),1)]})),_:1},8,["modelValue"])])],2),e.showingStickers?((0,o.wg)(),(0,o.iD)("div",y,[(0,o.Wm)(O,{onUploaded:e.onStickerUploaded,onUploadFailed:e.onStickerUploadFailed},null,8,["onUploaded","onUploadFailed"])])):(0,o.kq)("",!0)])):(0,o.kq)("",!0)]})),_:1},8,["onShow","onClose"])}]])},72884:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var o,r=n(66252),i=n(3577),s={class:"Flash"},a={key:0,class:"label"},u={key:1,class:"label"},c={key:2,class:"label"};const l=(o=null,{getRuffle:function(){return new Promise((function(e,t){if(o)e(o);else{window.RufflePlayer={},window.RufflePlayer.config={polyfills:!1,publicPath:"/static/ruffle"};var n=document.createElement("script");n.src="/static/ruffle/ruffle.js",n.type="text/javascript",n.onerror=function(e){t(e)},n.onabort=function(e){t(e)},n.oncancel=function(e){t(e)},n.onload=function(){o=window.RufflePlayer,e(o)},document.body.appendChild(n)}}))}});var d=n(9382),p=n(84131);d.vI.add(p.Bg$,p.eHv);const m={props:["src"],data:function(){return{player:!1,loaded:!1,ruffleInstance:null}},methods:{openPlayer:function(){var e=this;this.player||(this.player="hidden",l.getRuffle().then((function(t){var n=t.newest().createPlayer();n.config={letterbox:"on"},e.$refs.container.appendChild(n),n.style.width="100%",n.style.height="100%",n.load(e.src).then((function(){e.player=!0})).catch((function(t){console.error("Error loading ruffle",t),e.player="error"})),e.ruffleInstance=n,e.$emit("playerOpened")})))},closePlayer:function(){this.ruffleInstance&&this.ruffleInstance.remove(),this.player=!1,this.$emit("playerClosed")}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,o,l,d){var p=(0,r.up)("FAIcon");return(0,r.wg)(),(0,r.iD)("div",s,[!0===e.player||"hidden"===e.player?((0,r.wg)(),(0,r.iD)("div",{key:0,ref:"container",class:(0,i.C_)(["player",{hidden:"hidden"===e.player}])},null,2)):(0,r.kq)("",!0),!0!==e.player?((0,r.wg)(),(0,r.iD)("button",{key:1,class:"button-unstyled placeholder",onClick:t[0]||(t[0]=function(){return e.openPlayer&&e.openPlayer.apply(e,arguments)})},["hidden"===e.player?((0,r.wg)(),(0,r.iD)("span",a,(0,i.zw)(e.$t("general.loading")),1)):(0,r.kq)("",!0),"error"===e.player?((0,r.wg)(),(0,r.iD)("span",u,(0,i.zw)(e.$t("general.flash_fail")),1)):((0,r.wg)(),(0,r.iD)("span",c,[(0,r._)("p",null,(0,i.zw)(e.$t("general.flash_content")),1),(0,r._)("p",null,[(0,r.Wm)(p,{icon:"exclamation-triangle"}),(0,r.Uk)(" "+(0,i.zw)(e.$t("general.flash_security")),1)])]))])):(0,r.kq)("",!0)])}]])},34837:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(66252),r=n(3577),i=["disabled","title"],s=["textContent"],a=n(1447),u=n(29439),c=function e(t,n,o){return new Promise((function(e,r){setTimeout((function(){o.state.api.backendInteractor.fetchUserRelationship({id:n}).then((function(e){return o.commit("updateUserRelationship",[e]),e})).then((function(n){return e([n.following,n.requested,n.locked,t])})).catch((function(e){return r(e)}))}),500)})).then((function(t){var r=(0,u.Z)(t,4),i=r[0],s=r[1],a=r[2],c=r[3];i||a&&s||!(c<=3)||e(++c,n,o)}))},l=function(e,t){return new Promise((function(n,o){t.state.api.backendInteractor.followUser({id:e}).then((function(e){if(t.commit("updateUserRelationship",[e]),!(e.following||e.locked&&e.requested))return c(1,e,t).then((function(){n()}));n()}))}))};const d={props:["relationship","user","labelFollowing","buttonClass"],components:{ConfirmModal:a.Z},data:function(){return{inProgress:!1,showingConfirmUnfollow:!1}},computed:{shouldConfirmUnfollow:function(){return this.$store.getters.mergedConfig.modalOnUnfollow},isPressed:function(){return this.inProgress||this.relationship.following},title:function(){return this.inProgress||this.relationship.following?this.$t("user_card.follow_unfollow"):this.relationship.requested?this.$t("user_card.follow_cancel"):this.$t("user_card.follow")},label:function(){return this.inProgress?this.$t("user_card.follow_progress"):this.relationship.following?this.labelFollowing||this.$t("user_card.following"):this.relationship.requested?this.$t("user_card.follow_sent"):this.$t("user_card.follow")},disabled:function(){return this.inProgress||this.user.deactivated}},methods:{showConfirmUnfollow:function(){this.showingConfirmUnfollow=!0},hideConfirmUnfollow:function(){this.showingConfirmUnfollow=!1},onClick:function(){this.relationship.following||this.relationship.requested?this.unfollow():this.follow()},follow:function(){var e=this;this.inProgress=!0,l(this.relationship.id,this.$store).then((function(){e.inProgress=!1}))},unfollow:function(){this.shouldConfirmUnfollow?this.showConfirmUnfollow():this.doUnfollow()},doUnfollow:function(){var e=this,t=this.$store;this.inProgress=!0,function(e,t){return new Promise((function(n,o){t.state.api.backendInteractor.unfollowUser({id:e}).then((function(e){t.commit("updateUserRelationship",[e]),n({updated:e})}))}))}(this.relationship.id,t).then((function(){e.inProgress=!1,t.commit("removeStatus",{timeline:"friends",userId:e.relationship.id})})),this.hideConfirmUnfollow()}}},p=(0,n(83744).Z)(d,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("i18n-t"),d=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("button",{class:(0,r.C_)(["btn button-default follow-button",{toggled:e.isPressed}]),disabled:e.disabled,title:e.title,onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[(0,o.Uk)((0,r.zw)(e.label)+" ",1),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmUnfollow?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("user_card.unfollow_confirm_title"),"confirm-text":e.$t("user_card.unfollow_confirm_accept_button"),"cancel-text":e.$t("user_card.unfollow_confirm_cancel_button"),onAccepted:e.doUnfollow,onCancelled:e.hideConfirmUnfollow},{default:(0,o.w5)((function(){return[(0,o.Wm)(l,{keypath:"user_card.unfollow_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,s)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))],10,i)}]])},67671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>w});var o=n(66252),r=n(3577),i={class:"gallery-rows"},s={key:0,class:"many-attachments"},a={class:"many-attachments-text"},u={class:"many-attachments-buttons"},c={key:0,class:"many-attachments-button"},l={key:1,class:"many-attachments-button"},d={key:2,class:"many-attachments-button"},p=n(93433),m=n(36968),h=n.n(m),f=n(73303),g=n.n(f);const v={props:["attachments","compact","limitRows","descriptions","limit","nsfw","setMedia","size","editable","removeAttachment","shiftUpAttachment","shiftDnAttachment","editAttachment","grid"],data:function(){return{sizes:{},hidingLong:!0}},components:{Attachment:n(66596).Z},computed:{rows:function(){var e=this;if(!this.attachments)return[];var t=this.limit>0?this.attachments.slice(0,this.limit):this.attachments;return"hide"===this.size?t.map((function(e){return{minimal:!0,items:[e]}})):this.grid?[{grid:!0,items:t}]:t.reduce((function(t,n,o){if(n.mimetype.includes("audio"))return[].concat((0,p.Z)(t),[{audio:!0,items:[n]},{items:[]}]);if(!(n.mimetype.includes("image")||n.mimetype.includes("video")||n.mimetype.includes("flash")))return[].concat((0,p.Z)(t),[{minimal:!0,items:[n]},{items:[]}]);var r=e.attachments.length-o+1,i=t[t.length-1].items;return i.push(n),i.length>=3&&r>3?[].concat((0,p.Z)(t),[{items:[]}]):t}),[{items:[]}]).filter((function(e){return e.items.length>0}))},attachmentsDimensionalScore:function(){return this.rows.reduce((function(e,t){var n=0;return t.minimal?n+=1/8:t.audio?n+=1/4:n+=1/(t.items.length+.6),e+n}),0)},tooManyAttachments:function(){return!this.editable&&"small"!==this.size&&("hide"===this.size?this.attachments.length>8:this.attachmentsDimensionalScore>1)}},methods:{onNaturalSizeLoad:function(e){var t=e.id,n=e.width,o=e.height;h()(this.sizes,t,{width:n,height:o})},rowStyle:function(e){return e.audio?{"padding-bottom":"25%"}:e.minimal||e.grid?void 0:{"padding-bottom":"".concat(100/(e.items.length+.6),"%")}},itemStyle:function(e,t){var n=this,o=g()(t,(function(e){return n.getAspectRatio(e.id)}));return{flex:"".concat(this.getAspectRatio(e)/o," 1 0%")}},getAspectRatio:function(e){var t=this.sizes[e];return t?t.width/t.height:1},toggleHidingLong:function(e){this.hidingLong=e},openGallery:function(){this.$store.dispatch("setMedia",this.attachments),this.$store.dispatch("setCurrentMedia",this.attachments[0])},onMedia:function(){this.$store.dispatch("setMedia",this.attachments)}}},w=(0,n(83744).Z)(v,[["render",function(e,t,n,p,m,h){var f=(0,o.up)("Attachment");return(0,o.wg)(),(0,o.iD)("div",{ref:"galleryContainer",class:(0,r.C_)(["Gallery",{"-long":e.tooManyAttachments&&e.hidingLong}])},[(0,o._)("div",i,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.rows,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{key:n,class:(0,r.C_)(["gallery-row",{"-audio":t.audio,"-minimal":t.minimal,"-grid":e.grid}]),style:(0,r.j5)(e.rowStyle(t))},[(0,o._)("div",{class:(0,r.C_)(["gallery-row-inner",{"-grid":e.grid}])},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(t.items,(function(i,s){return(0,o.wg)(),(0,o.j4)(f,{key:i.id,class:"gallery-item",compact:e.compact,nsfw:e.nsfw,attachment:i,size:e.size,editable:e.editable,remove:e.removeAttachment,"shift-up":!(0===s&&0===n)&&e.shiftUpAttachment,"shift-dn":!(s===t.items.length-1&&n===e.rows.length-1)&&e.shiftDnAttachment,edit:e.editAttachment,description:e.descriptions&&e.descriptions[i.id],"hide-description":"small"===e.size||e.tooManyAttachments&&e.hidingLong,style:(0,r.j5)(e.itemStyle(i.id,t.items)),onSetMedia:e.onMedia,onNaturalSizeLoad:e.onNaturalSizeLoad},null,8,["compact","nsfw","attachment","size","editable","remove","shift-up","shift-dn","edit","description","hide-description","style","onSetMedia","onNaturalSizeLoad"])})),128))],2)],6)})),128))]),e.tooManyAttachments?((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("div",a,(0,r.zw)(e.$t("status.many_attachments",{number:e.attachments.length})),1),(0,o._)("div",u,[e.hidingLong?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",c,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[0]||(t[0]=function(t){return e.toggleHidingLong(!0)})},(0,r.zw)(e.$t("status.collapse_attachments")),1)])),e.hidingLong?((0,o.wg)(),(0,o.iD)("span",l,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[1]||(t[1]=function(t){return e.toggleHidingLong(!1)})},(0,r.zw)(e.$t("status.show_all_attachments")),1)])):(0,o.kq)("",!0),e.hidingLong?((0,o.wg)(),(0,o.iD)("span",d,[(0,o._)("button",{class:"button-unstyled -link",onClick:t[2]||(t[2]=function(){return e.openGallery&&e.openGallery.apply(e,arguments)})},(0,r.zw)(e.$t("status.open_gallery")),1)])):(0,o.kq)("",!0)])])):(0,o.kq)("",!0)],2)}]])},86269:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(66252),r=n(3577),i={class:"interface-language-switcher"},s={class:"setting-list"},a=["value"],u=["onClick"],c=n(93433),l=n(39776);const d={components:{Select:n(76990).Z},props:{promptText:{type:String,required:!0},language:{type:[Array,String],required:!0},setLanguage:{type:Function,required:!0}},computed:{languages:function(){return l.Z.languages},controlledLanguage:{get:function(){return Array.isArray(this.language)?this.language:[this.language]},set:function(e){this.setLanguage(e)}}},methods:{getLanguageName:function(e){return l.Z.getLanguageName(e)},addLanguage:function(){this.controlledLanguage=[].concat((0,c.Z)(this.controlledLanguage),[""])},setLanguageAt:function(e,t){var n=(0,c.Z)(this.controlledLanguage);n[e]=t,this.controlledLanguage=n},removeLanguageAt:function(e){var t=(0,c.Z)(this.controlledLanguage);t.splice(e,1),this.controlledLanguage=t}}},p=(0,n(83744).Z)(d,[["render",function(e,t,n,c,l,d){var p=(0,o.up)("Select");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("label",null,(0,r.zw)(n.promptText),1),(0,o._)("ul",s,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(d.controlledLanguage.keys(),(function(t){return(0,o.wg)(),(0,o.iD)("li",{key:t},[(0,o._)("label",null,[(0,o.Uk)((0,r.zw)(0===t?e.$t("settings.primary_language"):e.$tc("settings.fallback_language",t,{index:t}))+" ",1),(0,o.Wm)(p,{class:"language-select","model-value":d.controlledLanguage[t],"onUpdate:modelValue":function(e){return d.setLanguageAt(t,e)}},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(d.languages,(function(e){return(0,o.wg)(),(0,o.iD)("option",{key:e.code,value:e.code},(0,r.zw)(e.name),9,a)})),128))]})),_:2},1032,["model-value","onUpdate:modelValue"])]),d.controlledLanguage.length>1&&0!==t?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default btn",onClick:function(){return d.removeLanguageAt(t)}},(0,r.zw)(e.$t("settings.remove_language")),9,u)):(0,o.kq)("",!0)])})),128)),(0,o._)("li",null,[(0,o._)("button",{class:"button-default btn",onClick:t[0]||(t[0]=function(){return d.addLanguage&&d.addLanguage.apply(d,arguments)})},(0,r.zw)(e.$t("settings.add_language")),1)])])])}]])},92798:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var o=n(66252),r=n(3577),i=["href"],s={key:0,class:"card-image"},a=["src"],u={class:"card-content"},c={class:"card-host faint"},l={key:0,class:"nsfw-alert alert warning"},d={class:"card-title"},p={key:0,class:"card-description"},m=n(4942);function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}const f={name:"LinkPreview",props:["card","size","nsfw"],data:function(){return{imageLoaded:!1}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?h(Object(n),!0).forEach((function(t){(0,m.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({useImage:function(){return this.card.image&&!this.censored&&"hide"!==this.size},censored:function(){return this.nsfw&&this.hideNsfwConfig},useDescription:function(){return this.card.description&&/\S/.test(this.card.description)},hideNsfwConfig:function(){return this.mergedConfig.hideNsfw}},(0,n(989).Se)(["mergedConfig"])),created:function(){var e=this;if(this.useImage){var t=new Image;t.onload=function(){e.imageLoaded=!0},t.src=this.card.image}}},g=(0,n(83744).Z)(f,[["render",function(e,t,n,m,h,f){return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("a",{class:"link-preview-card",href:e.card.url,target:"_blank",rel:"noopener"},[e.useImage&&e.imageLoaded?((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("img",{src:e.card.image},null,8,a)])):(0,o.kq)("",!0),(0,o._)("div",u,[(0,o._)("span",c,[e.censored?((0,o.wg)(),(0,o.iD)("span",l,(0,r.zw)(e.$t("status.nsfw")),1)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(e.card.provider_name),1)]),(0,o._)("h4",d,(0,r.zw)(e.card.title),1),e.useDescription?((0,o.wg)(),(0,o.iD)("p",p,(0,r.zw)(e.card.description),1)):(0,o.kq)("",!0)])],8,i)])}]])},88369:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r={class:"list",role:"list"},i={key:0,class:"list-empty-content faint"};const s={props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(e){return e.id}}}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("div",r,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.items,(function(t){return(0,o.wg)(),(0,o.iD)("div",{key:n.getKey(t),class:"list-item",role:"listitem"},[(0,o.WI)(e.$slots,"item",{item:t})])})),128)),0===n.items.length&&e.$slots.empty?((0,o.wg)(),(0,o.iD)("div",i,[(0,o.WI)(e.$slots,"empty")])):(0,o.kq)("",!0)])}]])},37804:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(66252),r=n(3577),i=["title"],s=["disabled","accept"],a=n(7257),u=n(65079),c=n(9382),l=n(84131);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}c.vI.add(l.cf$,l.IJ7);const p={data:function(){return{uploadCount:0,uploadReady:!0}},computed:{uploading:function(){return this.uploadCount>0}},methods:{onClick:function(){this.uploadReady&&this.$refs.input.click()},uploadFile:function(e){var t=this,n=this.$store;if(e.size>n.state.instance.uploadlimit){var o=u.Z.fileSizeFormat(e.size),r=u.Z.fileSizeFormat(n.state.instance.uploadlimit);t.$emit("upload-failed","file_too_big",{filesize:o.num,filesizeunit:o.unit,allowedsize:r.num,allowedsizeunit:r.unit})}else{var i=new FormData;i.append("file",e),t.$emit("uploading"),t.uploadCount++,a.Z.uploadMedia({store:n,formData:i}).then((function(e){t.$emit("uploaded",e),t.decreaseUploadCount()}),(function(e){console.error("Error uploading file",e),t.$emit("upload-failed","default"),t.decreaseUploadCount()}))}},decreaseUploadCount:function(){this.uploadCount--,0===this.uploadCount&&this.$emit("all-uploaded")},clearFile:function(){var e=this;this.uploadReady=!1,this.$nextTick((function(){e.uploadReady=!0}))},multiUpload:function(e){var t,n=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,r=function(){};return{s:r,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}(e);try{for(n.s();!(t=n.n()).done;){var o=t.value;this.uploadFile(o)}}catch(e){n.e(e)}finally{n.f()}},change:function(e){var t=e.target;this.multiUpload(t.files)}},props:{dropFiles:Object,disabled:Boolean,normalButton:Boolean,acceptTypes:{type:String,default:"*/*"}},watch:{dropFiles:function(e){this.uploading||this.multiUpload(e)}}},m=(0,n(83744).Z)(p,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("button",{class:(0,r.C_)(["media-upload",[e.normalButton?"button-default btn":"button-unstyled",{disabled:e.disabled}]]),title:e.$t("tool_tip.media_upload"),onClick:t[1]||(t[1]=function(){return e.onClick&&e.onClick.apply(e,arguments)})},[e.uploading?((0,o.wg)(),(0,o.j4)(l,{key:0,class:"progress-icon",icon:"circle-notch",spin:""})):(0,o.kq)("",!0),e.uploading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(l,{key:1,class:"new-icon",icon:"upload"})),e.normalButton?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Uk)((0,r.zw)(" ")+" "+(0,r.zw)(e.uploading?e.$t("general.loading"):e.$t("tool_tip.media_upload")),1)],64)):(0,o.kq)("",!0),e.uploadReady?((0,o.wg)(),(0,o.iD)("input",{key:3,ref:"input",class:"hidden-input-file",disabled:e.disabled,type:"file",multiple:"true",accept:e.acceptTypes,onChange:t[0]||(t[0]=function(){return e.change&&e.change.apply(e,arguments)})},null,40,s)):(0,o.kq)("",!0)],10,i)}]])},20460:(e,t,n)=>{"use strict";n.d(t,{Z:()=>A});var o=n(66252),r=n(3577),i=n(49963),s={class:"MentionLink"},a=["href","innerHTML"],u=["href"],c={class:"shortName"},l=["innerHTML"],d=["innerHTML"],p={ref:"full",class:"full"},m=["innerHTML"],h=["innerHTML"],f=n(44925),g=n(4942),v=n(4493),w=n(989),b=n(95052),y=n(48173),D=n(42262),_=n(9382),k=n(84131),C=["backgroundColor","backgroundPosition","backgroundImage"];function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?S(Object(n),!0).forEach((function(t){(0,g.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}_.vI.add(k.IBq);const F={name:"MentionLink",components:{UserAvatar:y.default,UnicodeDomainIndicator:D.Z,UserPopover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,22588))}))},props:{url:{required:!0,type:String},content:{required:!0,type:String},userId:{required:!1,type:String},userScreenName:{required:!1,type:String}},data:function(){return{hasSelection:!1}},methods:{onClick:function(){if(!this.shouldShowTooltip){var e=(0,v.Z)(this.userId||this.user.id,this.userScreenName||this.user.screen_name);this.$router.push(e)}},handleSelection:function(){this.hasSelection=document.getSelection().containsNode(this.$refs.full,!0)}},mounted:function(){document.addEventListener("selectionchange",this.handleSelection)},unmounted:function(){document.removeEventListener("selectionchange",this.handleSelection)},computed:j(j({user:function(){return this.url&&this.$store&&this.$store.getters.findUserByUrl(this.url)},isYou:function(){return this.user&&this.user.id===this.currentUser.id},userName:function(){return this.user&&this.userNameFullUi.split("@")[0]},serverName:function(){return this.user&&(this.userNameFullUi.split("@")[1]||this.$store.getters.instanceDomain)},userNameFull:function(){return this.user&&this.user.screen_name},userNameFullUi:function(){return this.user&&this.user.screen_name_ui},highlight:function(){return this.user&&this.mergedConfig.highlight[this.user.screen_name]},highlightType:function(){return this.highlight&&"-"+this.highlight.type},highlightClass:function(){if(this.highlight)return(0,b.M)(this.user)},style:function(){if(this.highlight){var e=(0,b.q)(this.highlight);return e.backgroundColor,e.backgroundPosition,e.backgroundImage,(0,f.Z)(e,C)}},classnames:function(){return[{"-you":this.isYou&&this.shouldBoldenYou,"-highlighted":this.highlight,"-has-selection":this.hasSelection},this.highlightType]},useAtIcon:function(){return this.mergedConfig.useAtIcon},isRemote:function(){return this.userName!==this.userNameFull},shouldShowFullUserName:function(){var e=this.mergedConfig.mentionLinkDisplay;return"short"!==e&&("full"===e||this.isRemote)},shouldShowTooltip:function(){return this.mergedConfig.mentionLinkShowTooltip},shouldShowAvatar:function(){return this.mergedConfig.mentionLinkShowAvatar},shouldShowYous:function(){return this.mergedConfig.mentionLinkShowYous},shouldBoldenYou:function(){return this.mergedConfig.mentionLinkBoldenYou},shouldFadeDomain:function(){return this.mergedConfig.mentionLinkFadeDomain}},(0,w.Se)(["mergedConfig"])),(0,w.rn)({currentUser:function(e){return e.users.currentUser}}))},A=(0,n(83744).Z)(F,[["render",function(e,t,n,f,g,v){var w=(0,o.up)("UserAvatar"),b=(0,o.up)("FAIcon"),y=(0,o.up)("UnicodeDomainIndicator"),D=(0,o.up)("UserPopover");return(0,o.wg)(),(0,o.iD)("span",s,[e.user?((0,o.wg)(),(0,o.j4)(D,{key:1,"user-id":e.user.id,disabled:!e.shouldShowTooltip},{default:(0,o.w5)((function(){return[e.user?((0,o.wg)(),(0,o.iD)("span",{key:0,class:(0,r.C_)(["new",e.classnames]),style:(0,r.j5)(e.style)},[(0,o._)("a",{class:(0,r.C_)(["short button-unstyled",{"-with-tooltip":e.shouldShowTooltip}]),href:e.url,onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.onClick&&e.onClick.apply(e,arguments)}),["prevent"]))},[e.shouldShowAvatar?((0,o.wg)(),(0,o.j4)(w,{key:0,class:"mention-avatar",user:e.user},null,8,["user"])):(0,o.kq)("",!0),(0,o._)("span",c,[e.useAtIcon?((0,o.wg)(),(0,o.j4)(b,{key:0,size:"sm",icon:"at",class:"at"})):(0,o.kq)("",!0),(0,o.Uk)((0,r.zw)(e.useAtIcon?"":"@"),1),(0,o._)("span",{class:"userName",innerHTML:e.userName},null,8,l),e.shouldShowFullUserName?((0,o.wg)(),(0,o.iD)("span",{key:1,class:(0,r.C_)(["serverName",{"-faded":e.shouldFadeDomain}]),innerHTML:"@"+e.serverName},null,10,d)):(0,o.kq)("",!0),e.shouldShowFullUserName?((0,o.wg)(),(0,o.j4)(y,{key:2,user:e.user},null,8,["user"])):(0,o.kq)("",!0)]),e.isYou&&e.shouldShowYous?((0,o.wg)(),(0,o.iD)("span",{key:1,class:(0,r.C_)({"-you":e.shouldBoldenYou})},(0,r.zw)(" "+e.$t("status.you")),3)):(0,o.kq)("",!0)],10,u),(0,o._)("span",p,[(0,o.Uk)(" @"),(0,o._)("span",{innerHTML:e.userName},null,8,m),(0,o._)("span",{innerHTML:"@"+e.serverName},null,8,h)],512)],6)):(0,o.kq)("",!0)]})),_:1},8,["user-id","disabled"])):((0,o.wg)(),(0,o.iD)("a",{key:0,href:e.url,class:"original",target:"_blank",innerHTML:e.content},null,8,a))])}]])},21268:(e,t,n)=>{"use strict";n.d(t,{d:()=>p,Z:()=>h});var o=n(66252),r=n(3577),i={class:"MentionsLine"},s={key:0,class:"extraMentions"},a={key:0,class:"fullExtraMentions"},u=n(4942),c=n(20460),l=n(989);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}var p=5;const m={name:"MentionsLine",props:{mentions:{required:!0,type:Array}},data:function(){return{expanded:!1}},components:{MentionLink:c.Z},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({mentionsComputed:function(){return this.mentions.slice(0,p)},extraMentions:function(){return this.mentions.slice(p)},manyMentions:function(){return this.extraMentions.length>0}},(0,l.Se)(["mergedConfig"])),methods:{toggleShowMore:function(){this.expanded=!this.expanded}}},h=(0,n(83744).Z)(m,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("MentionLink");return(0,o.wg)(),(0,o.iD)("span",i,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.mentionsComputed,(function(e){return(0,o.wg)(),(0,o.j4)(d,{key:e.index,class:"mention-link",content:e.content,url:e.url},null,8,["content","url"])})),128)),e.manyMentions?((0,o.wg)(),(0,o.iD)("span",s,[e.expanded?((0,o.wg)(),(0,o.iD)("span",a,[(0,o.Uk)((0,r.zw)(" ")),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.extraMentions,(function(e){return(0,o.wg)(),(0,o.j4)(d,{key:e.index,class:"mention-link",content:e.content,url:e.url},null,8,["content","url"])})),128))])):(0,o.kq)("",!0),e.expanded?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled showMoreLess",onClick:t[0]||(t[0]=function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)})},(0,r.zw)(e.$t("status.plus_more",{number:e.extraMentions.length})),1)),e.expanded?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled showMoreLess",onClick:t[1]||(t[1]=function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)})},(0,r.zw)(e.$t("general.show_less")),1)):(0,o.kq)("",!0)])):(0,o.kq)("",!0)])}]])},48328:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r=n(3577),i=n(49963);const s={provide:{popoversZLayer:"modals"},props:{isOpen:{type:Boolean,default:!0},noBackground:{type:Boolean,default:!1}},computed:{classes:function(){return{"modal-background":!this.noBackground,open:this.isOpen}}}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){var c=(0,o.Q2)("body-scroll-lock");return(0,o.wy)(((0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["modal-view",u.classes]),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.$emit("backdropClicked")}),["self"]))},[(0,o.WI)(e.$slots,"default")],2)),[[i.F8,n.isOpen],[c,n.isOpen&&!n.noBackground]])}]])},93737:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Be});var o=n(66252),r=n(3577),i=n(49963),s={key:0,class:"notifications-heading panel-heading -sticky"},a={class:"title"},u={key:0,class:"badge badge-notification unseen-count"},c={key:0,class:"rightside-button"},l=["title"],d={class:"panel-body",role:"feed"},p=(0,o._)("div",{class:"notification-overlay"},null,-1),m={class:"panel-footer"},h={key:0,class:"new-status-notification text-center faint"},f={class:"new-status-notification text-center"},g={key:2,class:"new-status-notification text-center"},v=n(4942),w=n(989),b={key:0},y={key:1},D={key:0,class:"Notification container -muted"},_=["href"],k={class:"notification-right"},C={class:"notification-details"},S={class:"name-and-action"},j={key:0},F=["title"],A={key:2},O={key:3},E={key:4},z={key:5},P={key:6},I={key:7},x=["src","alt","title"],T={key:1,class:"emoji-reaction-emoji"},$={key:8},B={key:9},U={key:0,class:"timeago"},M=["title","aria-expanded"],L={key:1,class:"timeago"},R={class:"faint"},q=["title","aria-expanded"],N={key:0,class:"follow-text"},Z={key:0,style:{"white-space":"nowrap"}},W=["title"],H=["title"],V={key:1,class:"move-text"},K=n(10252),G=n(24049),Y=n(48173),J=n(20392),Q=n(1840),X={class:"Report"},ee={class:"reported-user"},te={class:"reporter"},ne={class:"report-state"},oe=["value"],re={key:0},ie={class:"reported-status-heading"},se={class:"reported-status-name"},ae={key:1},ue=n(76990),ce=n(92820),le=n(4493);const de={props:["reportId"],components:{Select:ue.Z,StatusContent:K.Z,Timeago:Q.Z,RichContent:ce.Z},computed:{report:function(){return console.log(this.$store.state.reports.reports[this.reportId]||{}),this.$store.state.reports.reports[this.reportId]||{}},state:{get:function(){return this.report.state},set:function(e){this.setReportState(e)}}},methods:{generateUserProfileLink:function(e){return(0,le.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},setReportState:function(e){return this.$store.dispatch("setReportState",{id:this.report.id,state:e})}}};var pe=n(83744);const me=(0,pe.Z)(de,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("router-link"),c=(0,o.up)("Select"),l=(0,o.up)("RichContent"),d=(0,o.up)("Timeago"),p=(0,o.up)("status-content");return(0,o.wg)(),(0,o.iD)("div",X,[(0,o._)("div",ee,[(0,o._)("span",null,(0,r.zw)(e.$t("report.reported_user")),1),(0,o.Wm)(u,{to:e.generateUserProfileLink(e.report.acct)},{default:(0,o.w5)((function(){return[(0,o.Uk)(" @"+(0,r.zw)(e.report.acct.screen_name),1)]})),_:1},8,["to"])]),(0,o._)("div",te,[(0,o._)("span",null,(0,r.zw)(e.$t("report.reporter")),1),(0,o.Wm)(u,{to:e.generateUserProfileLink(e.report.actor)},{default:(0,o.w5)((function(){return[(0,o.Uk)(" @"+(0,r.zw)(e.report.actor.screen_name),1)]})),_:1},8,["to"])]),(0,o._)("div",ne,[(0,o._)("span",null,(0,r.zw)(e.$t("report.state")),1),(0,o.Wm)(c,{id:e.report-e.state,modelValue:e.state,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.state=t}),class:"form-control"},{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.iD)(o.HY,null,(0,o.Ko)(["open","closed","resolved"],(function(t){return(0,o._)("option",{key:t,value:t},(0,r.zw)(e.$t("report.state_"+t)),9,oe)})),64))]})),_:1},8,["id","modelValue"])]),(0,o.Wm)(l,{class:"report-content",html:e.report.content,emoji:[]},null,8,["html"]),e.report.statuses.length?((0,o.wg)(),(0,o.iD)("div",re,[(0,o._)("small",null,(0,r.zw)(e.$t("report.reported_statuses")),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.report.statuses,(function(e){return(0,o.wg)(),(0,o.j4)(u,{key:e.id,to:{name:"conversation",params:{id:e.id}},class:"reported-status"},{default:(0,o.w5)((function(){return[(0,o._)("div",ie,[(0,o._)("span",se,(0,r.zw)(e.user.name),1),(0,o.Wm)(d,{time:e.created_at,"auto-update":240,class:"faint"},null,8,["time"])]),(0,o.Wm)(p,{status:e},null,8,["status"])]})),_:2},1032,["to"])})),128))])):(0,o.kq)("",!0),e.report.notes.length?((0,o.wg)(),(0,o.iD)("div",ae,[(0,o._)("small",null,(0,r.zw)(e.$t("report.notes")),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.report.notes,(function(e){return(0,o.wg)(),(0,o.iD)("div",{key:e.id,class:"note"},[(0,o._)("span",null,(0,r.zw)(e.content),1),(0,o.Wm)(d,{time:e.created_at,"auto-update":240,class:"faint"},null,8,["time"])])})),128))])):(0,o.kq)("",!0)])}]]);var he=n(12061),fe=n(22588),ge=n(1447),ve=n(52230),we=n(95052),be=n(9382),ye=n(84131);function De(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.LEp,ye.NBC,ye.Tab,ye.x5v,ye.FKd,ye.ILF,ye.Aq,ye.gmr,ye.TTL,ye.V9$);var _e={data:function(){return{statusExpanded:!1,betterShadow:this.$store.state.interface.browserSupport.cssFilter,unmuted:!1,showingApproveConfirmDialog:!1,showingDenyConfirmDialog:!1}},props:["notification"],components:{StatusContent:K.Z,UserAvatar:Y.default,UserCard:J.Z,Timeago:Q.Z,Status:G.default,Report:me,RichContent:ce.Z,UserPopover:fe.default,UserLink:he.Z,ConfirmModal:ge.Z},methods:{toggleStatusExpanded:function(){this.statusExpanded=!this.statusExpanded},generateUserProfileLink:function(e){return(0,le.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},getUser:function(e){return this.$store.state.users.usersObject[e.from_profile.id]},toggleMute:function(){this.unmuted=!this.unmuted},showApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!0},hideApproveConfirmDialog:function(){this.showingApproveConfirmDialog=!1},showDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!0},hideDenyConfirmDialog:function(){this.showingDenyConfirmDialog=!1},approveUser:function(){this.shouldConfirmApprove?this.showApproveConfirmDialog():this.doApprove()},doApprove:function(){this.$store.state.api.backendInteractor.approveUser({id:this.user.id}),this.$store.dispatch("removeFollowRequest",this.user),this.$store.dispatch("markSingleNotificationAsSeen",{id:this.notification.id}),this.$store.dispatch("updateNotification",{id:this.notification.id,updater:function(e){e.type="follow"}}),this.hideApproveConfirmDialog()},denyUser:function(){this.shouldConfirmDeny?this.showDenyConfirmDialog():this.doDeny()},doDeny:function(){var e=this;this.$store.state.api.backendInteractor.denyUser({id:this.user.id}).then((function(){e.$store.dispatch("dismissNotificationLocal",{id:e.notification.id}),e.$store.dispatch("removeFollowRequest",e.user)})),this.hideDenyConfirmDialog()}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?De(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({userClass:function(){return(0,we.M)(this.notification.from_profile)},userStyle:function(){var e=this.$store.getters.mergedConfig.highlight,t=this.notification.from_profile;return(0,we.q)(e[t.screen_name])},user:function(){return this.$store.getters.findUser(this.notification.from_profile.id)},userProfileLink:function(){return this.generateUserProfileLink(this.user)},targetUser:function(){return this.$store.getters.findUser(this.notification.target.id)},targetUserProfileLink:function(){return this.generateUserProfileLink(this.targetUser)},needMute:function(){return this.$store.getters.relationship(this.user.id).muting},isStatusNotification:function(){return(0,ve.Gr)(this.notification.type)},mergedConfig:function(){return this.$store.getters.mergedConfig},shouldConfirmApprove:function(){return this.mergedConfig.modalOnApproveFollow},shouldConfirmDeny:function(){return this.mergedConfig.modalOnDenyFollow}},(0,w.rn)({currentUser:function(e){return e.users.currentUser}}))};const ke=_e,Ce=(0,pe.Z)(ke,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("Status"),l=(0,o.up)("user-link"),d=(0,o.up)("FAIcon"),p=(0,o.up)("UserAvatar"),m=(0,o.up)("UserPopover"),h=(0,o.up)("RichContent"),f=(0,o.up)("i18n-t"),g=(0,o.up)("Timeago"),v=(0,o.up)("router-link"),w=(0,o.up)("Report"),K=(0,o.up)("StatusContent"),G=(0,o.up)("confirm-modal");return"mention"===e.notification.type?((0,o.wg)(),(0,o.iD)("article",b,[(0,o.Wm)(c,{class:"Notification",compact:!0,statusoid:e.notification.status},null,8,["statusoid"])])):((0,o.wg)(),(0,o.iD)("article",y,[e.needMute&&!e.unmuted?((0,o.wg)(),(0,o.iD)("div",D,[(0,o._)("small",null,[(0,o.Wm)(l,{user:e.notification.from_profile,at:!1},null,8,["user"])]),(0,o._)("button",{class:"button-unstyled unmute",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110 fa-old-padding",icon:"eye-slash"})])])):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["Notification non-mention",[e.userClass,{highlighted:e.userStyle},"-type--"+e.notification.type]]),style:(0,r.j5)([e.userStyle])},[(0,o._)("a",{class:"avatar-container",href:e.$router.resolve(e.userProfileLink).href,onClick:t[1]||(t[1]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(m,{"user-id":e.notification.from_profile.id,"overlay-centers":!0},{default:(0,o.w5)((function(){return[(0,o.Wm)(p,{class:"post-avatar",bot:e.botIndicator,compact:!0,"better-shadow":e.betterShadow,user:e.notification.from_profile},null,8,["bot","better-shadow","user"])]})),_:1},8,["user-id"])],8,_),(0,o._)("div",k,[(0,o._)("span",C,[(0,o._)("div",S,[e.notification.from_profile.name_html?((0,o.wg)(),(0,o.iD)("bdi",j,[(0,o.Wm)(h,{class:"username",title:"@"+e.notification.from_profile.screen_name_ui,html:e.notification.from_profile.name_html,emoji:e.notification.from_profile.emoji},null,8,["title","html","emoji"])])):((0,o.wg)(),(0,o.iD)("span",{key:1,class:"username",title:"@"+e.notification.from_profile.screen_name_ui},(0,r.zw)(e.notification.from_profile.name),9,F)),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),"like"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",A,[(0,o.Wm)(d,{class:"type-icon",icon:"star"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.favorited_you")),1)])):(0,o.kq)("",!0),"repeat"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",O,[(0,o.Wm)(d,{class:"type-icon",icon:"retweet",title:e.$t("tool_tip.repeat")},null,8,["title"]),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.repeated_you")),1)])):(0,o.kq)("",!0),"follow"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",E,[(0,o.Wm)(d,{class:"type-icon",icon:"user-plus"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.followed_you")),1)])):(0,o.kq)("",!0),"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",z,[(0,o.Wm)(d,{class:"type-icon",icon:"user"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.follow_request")),1)])):(0,o.kq)("",!0),"move"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",P,[(0,o.Wm)(d,{class:"type-icon",icon:"suitcase-rolling"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.migrated_to")),1)])):(0,o.kq)("",!0),"pleroma:emoji_reaction"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",I,[(0,o._)("small",null,[(0,o.Wm)(f,{scope:"global",keypath:"notifications.reacted_with"},{default:(0,o.w5)((function(){return[e.notification.emoji_url?((0,o.wg)(),(0,o.iD)("img",{key:0,class:"emoji-reaction-emoji emoji-reaction-emoji-image",src:e.notification.emoji_url,alt:e.notification.emoji,title:e.notification.emoji},null,8,x)):((0,o.wg)(),(0,o.iD)("span",T,(0,r.zw)(e.notification.emoji),1))]})),_:1})])])):(0,o.kq)("",!0),"pleroma:report"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",$,[(0,o._)("small",null,(0,r.zw)(e.$t("notifications.submitted_report")),1)])):(0,o.kq)("",!0),"poll"===e.notification.type?((0,o.wg)(),(0,o.iD)("span",B,[(0,o.Wm)(d,{class:"type-icon",icon:"poll-h"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("small",null,(0,r.zw)(e.$t("notifications.poll_ended")),1)])):(0,o.kq)("",!0)]),e.isStatusNotification?((0,o.wg)(),(0,o.iD)("div",U,[e.notification.status?((0,o.wg)(),(0,o.j4)(v,{key:0,to:{name:"conversation",params:{id:e.notification.status.id}},class:"timeago-link faint-link"},{default:(0,o.w5)((function(){return[(0,o.Wm)(g,{time:e.notification.created_at,"auto-update":240},null,8,["time"])]})),_:1},8,["to"])):(0,o.kq)("",!0),(0,o._)("button",{class:"button-unstyled expand-icon",title:e.$t("tool_tip.toggle_expand"),"aria-expanded":e.statusExpanded,onClick:t[2]||(t[2]=(0,i.iM)((function(){return e.toggleStatusExpanded&&e.toggleStatusExpanded.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110","fixed-width":"",icon:e.statusExpanded?"compress-alt":"expand-alt"},null,8,["icon"])],8,M)])):((0,o.wg)(),(0,o.iD)("div",L,[(0,o._)("span",R,[(0,o.Wm)(g,{time:e.notification.created_at,"auto-update":240},null,8,["time"])])])),e.needMute?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled",title:e.$t("tool_tip.toggle_mute"),"aria-expanded":!e.unmuted,onClick:t[3]||(t[3]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(d,{class:"fa-scale-110 fa-old-padding",icon:"eye-slash"})],8,q)):(0,o.kq)("",!0)]),"follow"===e.notification.type||"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",N,[(0,o.Wm)(l,{class:"follow-name",user:e.notification.from_profile},null,8,["user"]),"follow_request"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",Z,[(0,o._)("button",{class:"button-unstyled",title:e.$t("tool_tip.accept_follow_request"),onClick:t[4]||(t[4]=function(t){return e.approveUser()})},[(0,o.Wm)(d,{icon:"check",class:"fa-scale-110 fa-old-padding follow-request-accept"})],8,W),(0,o._)("button",{class:"button-unstyled",title:e.$t("tool_tip.reject_follow_request"),onClick:t[5]||(t[5]=function(t){return e.denyUser()})},[(0,o.Wm)(d,{icon:"times",class:"fa-scale-110 fa-old-padding follow-request-reject"})],8,H)])):(0,o.kq)("",!0)])):"move"===e.notification.type?((0,o.wg)(),(0,o.iD)("div",V,[(0,o.Wm)(l,{user:e.notification.target},null,8,["user"])])):"pleroma:report"===e.notification.type?((0,o.wg)(),(0,o.j4)(w,{key:2,"report-id":e.notification.report.id},null,8,["report-id"])):((0,o.wg)(),(0,o.j4)(K,{key:3,class:(0,r.C_)({faint:!e.statusExpanded}),compact:!e.statusExpanded,status:e.notification.action},null,8,["class","compact","status"]))])],6)),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingApproveConfirmDialog?((0,o.wg)(),(0,o.j4)(G,{key:0,title:e.$t("user_card.approve_confirm_title"),"confirm-text":e.$t("user_card.approve_confirm_accept_button"),"cancel-text":e.$t("user_card.approve_confirm_cancel_button"),onAccepted:e.doApprove,onCancelled:e.hideApproveConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.approve_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0),e.showingDenyConfirmDialog?((0,o.wg)(),(0,o.j4)(G,{key:1,title:e.$t("user_card.deny_confirm_title"),"confirm-text":e.$t("user_card.deny_confirm_accept_button"),"cancel-text":e.$t("user_card.deny_confirm_cancel_button"),onAccepted:e.doDeny,onCancelled:e.hideDenyConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.deny_confirm",{user:e.user.screen_name_ui})),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))]))}]]);var Se={class:"dropdown-menu"},je={class:"filter-trigger-button button-unstyled"},Fe=n(84535);function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Oe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.G_j);const Ee={components:{Popover:Fe.default},computed:{filters:function(){return this.$store.getters.mergedConfig.notificationVisibility}},methods:{toggleNotificationFilter:function(e){this.$store.dispatch("setOption",{name:"notificationVisibility",value:Oe(Oe({},this.filters),{},(0,v.Z)({},e,!this.filters[e]))})}}},ze=(0,pe.Z)(Ee,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(c,{trigger:"click",class:"NotificationFilters",placement:"bottom","bound-to":{x:"container"}},{content:(0,o.w5)((function(){return[(0,o._)("div",Se,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[0]||(t[0]=function(e){return a.toggleNotificationFilter("likes")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.likes}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_likes")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[1]||(t[1]=function(e){return a.toggleNotificationFilter("repeats")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.repeats}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_repeats")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[2]||(t[2]=function(e){return a.toggleNotificationFilter("follows")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.follows}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_follows")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[3]||(t[3]=function(e){return a.toggleNotificationFilter("mentions")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.mentions}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_mentions")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[4]||(t[4]=function(e){return a.toggleNotificationFilter("emojiReactions")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.emojiReactions}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_emoji_reactions")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[5]||(t[5]=function(e){return a.toggleNotificationFilter("moves")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.moves}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_moves")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[6]||(t[6]=function(e){return a.toggleNotificationFilter("polls")})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":a.filters.polls}])},null,2),(0,o.Uk)((0,r.zw)(e.$t("settings.notification_visibility_polls")),1)])])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",je,[(0,o.Wm)(u,{icon:"filter"})])]})),_:1})}]]);var Pe=n(15568),Ie=n(49753);function xe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.IJ7,ye.FPD,ye.Kl4);const Te={components:{Notification:Ce,NotificationFilters:ze},props:{minimalMode:Boolean,filterMode:Array,disableTeleport:Boolean},data:function(){return{showScrollTop:!1,bottomedOut:!1,seenToDisplayCount:30}},provide:function(){var e=this;return{popoversZLayer:(0,o.Fl)((function(){return e.popoversZLayer}))}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xe(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({mainClass:function(){return this.minimalMode?"":"panel panel-default"},notifications:function(){return(0,ve.Bt)(this.$store)},error:function(){return this.$store.state.statuses.notifications.error},unseenNotifications:function(){return(0,ve.Km)(this.$store)},filteredNotifications:function(){return(0,ve.G2)(this.$store,this.filterMode)},unseenCount:function(){return this.unseenNotifications.length},unseenCountTitle:function(){return this.unseenCount+this.unreadChatCount+this.unreadAnnouncementCount},loading:function(){return this.$store.state.statuses.notifications.loading},noHeading:function(){var e=this.$store.state.interface.layoutType;return this.minimalMode||"mobile"===e},teleportTarget:function(){return{wide:"#notifs-column",mobile:"#mobile-notifications"}[this.$store.state.interface.layoutType]||"#notifs-sidebar"},popoversZLayer:function(){return"mobile"===this.$store.state.interface.layoutType?"navbar":null},notificationsToDisplay:function(){return this.filteredNotifications.slice(0,this.unseenCount+this.seenToDisplayCount)},noSticky:function(){return this.$store.getters.mergedConfig.disableStickyHeaders}},(0,w.Se)(["unreadChatCount","unreadAnnouncementCount"])),mounted:function(){this.scrollerRef=this.$refs.root.closest(".column.-scrollable"),this.scrollerRef||(this.scrollerRef=this.$refs.root.closest(".mobile-notifications")),this.scrollerRef||(this.scrollerRef=this.$refs.root.closest(".column.main")),this.scrollerRef.addEventListener("scroll",this.updateScrollPosition)},unmounted:function(){this.scrollerRef&&this.scrollerRef.removeEventListener("scroll",this.updateScrollPosition)},watch:{unseenCountTitle:function(e){e>0?(Ie.Z.drawFaviconBadge(),this.$store.dispatch("setPageTitle","(".concat(e,")"))):(Ie.Z.clearFaviconBadge(),this.$store.dispatch("setPageTitle",""))},teleportTarget:function(){var e=this;this.$nextTick((function(){e.scrollerRef.removeEventListener("scroll",e.updateScrollPosition),e.scrollerRef=e.$refs.root.closest(".column.-scrollable"),e.scrollerRef||(e.scrollerRef=e.$refs.root.closest(".mobile-notifications")),e.scrollerRef.addEventListener("scroll",e.updateScrollPosition),e.updateScrollPosition()}))}},methods:{scrollToTop:function(){this.scrollerRef.scrollTo({top:this.$refs.root.offsetTop})},updateScrollPosition:function(){this.showScrollTop=this.$refs.root.offsetTop<this.scrollerRef.scrollTop},markAsSeen:function(){this.$store.dispatch("markNotificationsAsSeen"),this.seenToDisplayCount=30},fetchOlderNotifications:function(){var e=this;if(!this.loading){var t=this.filteredNotifications.length-this.unseenCount;if(this.seenToDisplayCount<t)this.seenToDisplayCount=Math.min(this.seenToDisplayCount+20,t);else{this.seenToDisplayCount>t&&(this.seenToDisplayCount=t);var n=this.$store,o=n.state.users.currentUser.credentials;n.commit("setNotificationsLoading",{value:!0}),Pe.Z.fetchAndUpdate({store:n,credentials:o,older:!0}).then((function(t){n.commit("setNotificationsLoading",{value:!1}),0===t.length&&(e.bottomedOut=!0),e.seenToDisplayCount+=t.length}))}}}}},$e=(0,pe.Z)(Te,[["render",function(e,t,n,v,w,b){var y=(0,o.up)("FAIcon"),D=(0,o.up)("FALayers"),_=(0,o.up)("NotificationFilters"),k=(0,o.up)("notification");return(0,o.wg)(),(0,o.j4)(o.lR,{disabled:e.minimalMode||e.disableTeleport,to:e.teleportTarget},[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.noHeading?"div":"aside"),{ref:"root",class:(0,r.C_)([{minimal:e.minimalMode},"Notifications"])},{default:(0,o.w5)((function(){return[(0,o._)("div",{class:(0,r.C_)(e.mainClass)},[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("div",a,[(0,o.Uk)((0,r.zw)(e.$t("notifications.notifications"))+" ",1),e.unseenCount?((0,o.wg)(),(0,o.iD)("span",u,(0,r.zw)(e.unseenCount),1)):(0,o.kq)("",!0)]),e.showScrollTop?((0,o.wg)(),(0,o.iD)("div",c,[(0,o._)("button",{class:"button-unstyled scroll-to-top-button",type:"button",title:e.$t("general.scroll_to_top"),onClick:t[0]||(t[0]=function(){return e.scrollToTop&&e.scrollToTop.apply(e,arguments)})},[(0,o.Wm)(D,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(y,{icon:"arrow-up"}),(0,o.Wm)(y,{icon:"minus",transform:"up-7"})]})),_:1})],8,l)])):(0,o.kq)("",!0),e.unseenCount?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default read-button",type:"button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.markAsSeen&&e.markAsSeen.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("notifications.read")),1)):(0,o.kq)("",!0),(0,o.Wm)(_,{class:"rightside-button"})])),(0,o._)("div",d,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.notificationsToDisplay,(function(t){return(0,o.wg)(),(0,o.iD)("div",{key:t.id,role:"listitem",class:(0,r.C_)(["notification",{unseen:!e.minimalMode&&!t.seen}])},[p,(0,o.Wm)(k,{notification:t},null,8,["notification"])],2)})),128))]),(0,o._)("div",m,[e.bottomedOut?((0,o.wg)(),(0,o.iD)("div",h,(0,r.zw)(e.$t("notifications.no_more_notifications")),1)):e.loading?((0,o.wg)(),(0,o.iD)("div",g,[(0,o.Wm)(y,{icon:"circle-notch",spin:"",size:"lg"})])):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled -link -fullwidth",onClick:t[2]||(t[2]=(0,i.iM)((function(t){return e.fetchOlderNotifications()}),["prevent"]))},[(0,o._)("div",f,(0,r.zw)(e.minimalMode?e.$t("interactions.load_older"):e.$t("notifications.load_older")),1)]))])],2)]})),_:1},8,["class"]))],8,["disabled","to"])}]]),Be=$e},29187:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(66252),r=n(3577),i={class:"panel-loading"},s={class:"loading-text"},a=n(9382),u=n(84131);a.vI.add(u.IJ7);const c={},l=(0,n(83744).Z)(c,[["render",function(e,t,n,a,u,c){var l=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("span",s,[(0,o.Wm)(l,{icon:"circle-notch",spin:"",size:"3x"}),(0,o.Uk)(" "+(0,r.zw)(e.$t("general.loading")),1)])])}]])},84535:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var o=n(66252),r=n(49963),i=n(3577);const s={name:"Popover",props:{trigger:String,placement:String,boundTo:Object,boundToSelector:String,margin:Object,offset:Object,popoverClass:String,removePadding:Boolean,disabled:Boolean,overlayCenters:Boolean,overlayCentersSelector:String,stayOnClick:Boolean,normalButton:Boolean,triggerAttrs:{type:Object,default:{}}},inject:["popoversZLayer"],data:function(){return{anchorEl:null,teleport:!1,lockReEntry:!1,hidden:!0,styles:{},oldSize:{width:0,height:0},scrollable:null,graceTimeout:null,parentPopover:null,disableClickOutside:!1,childrenShown:new Set}},methods:{setAnchorEl:function(e){this.anchorEl=e,this.updateStyles()},containerBoundingClientRect:function(){return(this.boundToSelector?this.$el.closest(this.boundToSelector):this.$el.offsetParent).getBoundingClientRect()},updateStyles:function(){if(this.hidden)this.styles={};else{var e=this.anchorEl||this.$refs.trigger&&this.$refs.trigger.children[0]||this.$el,t=e.offsetHeight||e.clientHeight,n=e.offsetWidth||e.clientWidth,o=e.getBoundingClientRect(),r=getComputedStyle(e),i=parseFloat(r.paddingTop),s=parseFloat(r.paddingBottom),a=parseFloat(r.paddingRight),u=parseFloat(r.paddingLeft),c=o.left+.5*n,l=o.top+.5*t,d=this.$refs.content,p=this.overlayCenters?this.$refs.content.querySelector(this.overlayCentersSelector):null,m=this.boundTo&&("container"===this.boundTo.x||"container"===this.boundTo.y)&&this.containerBoundingClientRect(),h=this.margin||{},f=this.boundTo&&"container"===this.boundTo.x?{min:m.left+(h.left||0),max:m.right-(h.right||0)}:{min:0+(h.left||10),max:window.innerWidth-(h.right||10)},g=this.boundTo&&"container"===this.boundTo.y?{min:m.top+(h.top||0),max:m.bottom-(h.bottom||0)}:{min:0+(h.top||50),max:window.innerHeight-(h.bottom||5)},v=0,w=0;if(p){var b=d.getBoundingClientRect(),y=p.getBoundingClientRect(),D=y.left-b.left,_=y.top-b.top;v=-D-.5*p.offsetWidth,w=-_-.5*p.offsetHeight}else v=-.5*d.offsetWidth,w=-.5*d.offsetHeight;var k=c+v,C=k+d.offsetWidth,S=l+w,j=S+d.offsetHeight;k<f.min&&(v+=f.min-k),C>f.max&&(v-=C-f.max),S<g.min&&(w+=g.min-S),j>g.max&&(w-=j-g.max);var F=0,A=0;if(p)F=c+v,A=l+w;else if("right"!==this.placement&&"left"!==this.placement){var O="bottom"!==this.placement,E=l-.5*t+(this.removePadding?i:0),z=l+.5*t-(this.removePadding?s:0);z+d.offsetHeight>g.max&&(O=!0),E-d.offsetHeight<g.min&&(O=!1);var P=this.offset&&this.offset.y||0;A=O?E-P-d.offsetHeight:z+P,F=c+v+(this.offset&&this.offset.x||0)}else{var I="left"!==this.placement,x=c-.5*n+(this.removePadding?a:0),T=c+.5*n-(this.removePadding?u:0);T+d.offsetWidth>f.max&&(I=!0),x-d.offsetWidth<f.min&&(I=!1);var $=this.offset&&this.offset.x||0;F=I?x-$-d.offsetWidth:T+$,A=l+w+(this.offset&&this.offset.y||0)}this.styles={left:"".concat(Math.round(F),"px"),top:"".concat(Math.round(A),"px")},this.popoversZLayer&&(this.styles["--ZI_popover_override"]="var(--ZI_".concat(this.popoversZLayer,"_popovers)")),m&&(this.styles.maxWidth="".concat(Math.round(m.width),"px"))}},showPopover:function(){var e=this;if(!this.disabled){this.disableClickOutside=!0,setTimeout((function(){e.disableClickOutside=!1}),0);var t=this.hidden;this.hidden=!1,this.parentPopover&&this.parentPopover.onChildPopoverState(this,!0),("click"===this.trigger||this.stayOnClick)&&document.addEventListener("click",this.onClickOutside),this.scrollable.addEventListener("scroll",this.onScroll),this.scrollable.addEventListener("resize",this.onResize),this.$nextTick((function(){t&&e.$emit("show"),e.updateStyles()}))}},hidePopover:function(){this.disabled||(this.hidden||this.$emit("close"),this.hidden=!0,this.parentPopover&&this.parentPopover.onChildPopoverState(this,!1),"click"===this.trigger&&document.removeEventListener("click",this.onClickOutside),this.scrollable.removeEventListener("scroll",this.onScroll),this.scrollable.removeEventListener("resize",this.onResize))},onMouseenter:function(e){"hover"===this.trigger&&(this.lockReEntry=!1,clearTimeout(this.graceTimeout),this.graceTimeout=null,this.showPopover())},onMouseleave:function(e){var t=this;"hover"===this.trigger&&0===this.childrenShown.size&&(this.graceTimeout=setTimeout((function(){return t.hidePopover()}),1))},onMouseenterContent:function(e){"hover"!==this.trigger||this.lockReEntry||(this.lockReEntry=!0,clearTimeout(this.graceTimeout),this.graceTimeout=null,this.showPopover())},onMouseleaveContent:function(e){var t=this;"hover"===this.trigger&&0===this.childrenShown.size&&(this.graceTimeout=setTimeout((function(){return t.hidePopover()}),1))},onClick:function(e){"click"===this.trigger&&(this.hidden?this.showPopover():this.hidePopover())},onClickOutside:function(e){this.disableClickOutside||this.hidden||this.$refs.content&&this.$refs.content.contains(e.target)||this.$el.contains(e.target)||this.childrenShown.size>0||(this.hidePopover(),this.parentPopover&&this.parentPopover.onClickOutside(e))},onScroll:function(e){this.updateStyles()},onResize:function(e){this.updateStyles()},onChildPopoverState:function(e,t){t?this.childrenShown.add(e):this.childrenShown.delete(e)}},updated:function(){var e=this.$refs.content;e&&(this.oldSize.width===e.offsetWidth&&this.oldSize.height===e.offsetHeight||(this.updateStyles(),this.oldSize={width:e.offsetWidth,height:e.offsetHeight}))},mounted:function(){this.teleport=!0;var e=this.$refs.trigger.closest(".column.-scrollable")||this.$refs.trigger.closest(".mobile-notifications");e||(e=window),this.scrollable=e;for(var t=this.$parent;t&&"Popover"!==t.$.type.name;)t=t.$parent;this.parentPopover=t},beforeUnmount:function(){this.hidePopover()}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("span",{onMouseenter:t[4]||(t[4]=function(){return e.onMouseenter&&e.onMouseenter.apply(e,arguments)}),onMouseleave:t[5]||(t[5]=function(){return e.onMouseleave&&e.onMouseleave.apply(e,arguments)})},[(0,o._)("button",(0,o.dG)({ref:"trigger",class:["popover-trigger-button",e.normalButton?"button-default btn":"button-unstyled"],type:"button"},e.triggerAttrs,{onClick:t[0]||(t[0]=function(){return e.onClick&&e.onClick.apply(e,arguments)})}),[(0,o.WI)(e.$slots,"trigger")],16),((0,o.wg)(),(0,o.j4)(o.lR,{disabled:!e.teleport,to:"#popovers"},[(0,o.Wm)(r.uT,{name:"fade"},{default:(0,o.w5)((function(){return[e.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,ref:"content",style:(0,i.j5)(e.styles),class:(0,i.C_)(["popover",e.popoverClass||"popover-default"]),onMouseenter:t[1]||(t[1]=function(){return e.onMouseenterContent&&e.onMouseenterContent.apply(e,arguments)}),onMouseleave:t[2]||(t[2]=function(){return e.onMouseleaveContent&&e.onMouseleaveContent.apply(e,arguments)}),onClick:t[3]||(t[3]=function(){return e.onClickContent&&e.onClickContent.apply(e,arguments)})},[(0,o.WI)(e.$slots,"content",{class:"popover-inner",close:e.hidePopover})],38))]})),_:3})],8,["disabled"]))],32)}]])},45333:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Me});var o=n(66252),r=n(49963),i=n(3577),s={ref:"form",class:"post-status-form"},a={class:"form-group"},u={key:1,class:"visibility-notice notice-dismissible"},c=["title"],l={key:2,class:"visibility-notice notice-dismissible"},d=["title"],p={key:3,class:"visibility-notice notice-dismissible"},m=["title"],h={key:4,class:"visibility-notice"},f={key:0},g={key:1},v={key:5,class:"visibility-notice edit-warning"},w={key:6,class:"preview-heading faint"},b={class:"preview-spinner"},y={key:7,class:"preview-container"},D={key:0,class:"preview-status"},_={key:1,class:"preview-status preview-error"},k={key:8,role:"radiogroup",class:"btn-group reply-or-quote-selector"},C=["id","aria-labelledby","aria-checked"],S=["id","aria-labelledby","aria-checked"],j=["placeholder","disabled"],F=["placeholder","disabled"],A={key:10,class:"visibility-tray"},O={key:1,class:"text-format"},E=["value"],z={key:2,class:"text-format"},P={class:"only-format"},I={ref:"bottom",class:"form-bottom"},x={class:"form-bottom-left"},T=["title"],$=["title"],B={key:0,disabled:"",class:"btn button-default"},U={key:1,disabled:"",class:"btn button-default"},M=["disabled"],L={key:1,class:"alert error"},R={key:3,class:"upload_settings"},q=n(15861),N=n(4942),Z=n(93433),W=n(23279),H=n.n(W),V=n(45578),K=n.n(V),G=n(35161),Y=n.n(G),J=n(43063),Q=n.n(J),X=n(64687),ee=n.n(X),te=n(7257),ne=n(53599),oe=n(37804),re=n(54110),ie=n(88671),se={key:0,class:"poll-form"},ae={class:"input-container"},ue=["id","onUpdate:modelValue","placeholder","maxlength","onKeydown"],ce=["onClick"],le={class:"poll-type-expiry"},de=["title"],pe={value:"single"},me={value:"multiple"},he=["title"],fe=["min","max"],ge=["value"],ve=n(44908),we=n.n(ve),be=n(27483),ye=n(9382),De=n(76990),_e=n(84131);ye.vI.add(_e.NBC,_e.r8p);const ke={components:{Select:De.Z},name:"PollForm",props:["visible"],data:function(){return{pollType:"single",options:["",""],expiryAmount:10,expiryUnit:"minutes"}},computed:{pollLimits:function(){return this.$store.state.instance.pollLimits},maxOptions:function(){return this.pollLimits.max_options},maxLength:function(){return this.pollLimits.max_option_chars},expiryUnits:function(){var e=this,t=this.convertExpiryFromUnit;return["minutes","hours","days"].filter((function(n){return e.pollLimits.max_expiration>=t(n,1)}))},minExpirationInCurrentUnit:function(){return Math.ceil(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.min_expiration))},maxExpirationInCurrentUnit:function(){return Math.floor(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.max_expiration))}},methods:{clear:function(){this.pollType="single",this.options=["",""],this.expiryAmount=10,this.expiryUnit="minutes"},nextOption:function(e){var t=this.$el.querySelector("#poll-".concat(e+1));t?t.focus():this.addOption()&&this.$nextTick((function(){this.nextOption(e)}))},addOption:function(){return this.options.length<this.maxOptions&&(this.options.push(""),!0)},deleteOption:function(e,t){this.options.length>2&&(this.options.splice(e,1),this.updatePollToParent())},convertExpiryToUnit:function(e,t){return be.dX(e,t)},convertExpiryFromUnit:function(e,t){return be.cC(e,t)},expiryAmountChange:function(){this.expiryAmount=Math.max(this.minExpirationInCurrentUnit,this.expiryAmount),this.expiryAmount=Math.min(this.maxExpirationInCurrentUnit,this.expiryAmount),this.updatePollToParent()},updatePollToParent:function(){var e=this.convertExpiryFromUnit(this.expiryUnit,this.expiryAmount),t=we()(this.options.filter((function(e){return""!==e})));t.length<2?this.$emit("update-poll",{error:this.$t("polls.not_enough_options")}):this.$emit("update-poll",{options:t,multiple:"multiple"===this.pollType,expiresIn:e})}}};var Ce=n(83744);const Se=(0,Ce.Z)(ke,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("Select");return e.visible?((0,o.wg)(),(0,o.iD)("div",se,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.options,(function(n,i){return(0,o.wg)(),(0,o.iD)("div",{key:i,class:"poll-option"},[(0,o._)("div",ae,[(0,o.wy)((0,o._)("input",{id:"poll-".concat(i),"onUpdate:modelValue":function(t){return e.options[i]=t},size:"1",class:"poll-option-input",type:"text",placeholder:e.$t("polls.option"),maxlength:e.maxLength,onChange:t[0]||(t[0]=function(){return e.updatePollToParent&&e.updatePollToParent.apply(e,arguments)}),onKeydown:(0,r.D2)((0,r.iM)((function(t){return e.nextOption(i)}),["stop","prevent"]),["enter"])},null,40,ue),[[r.nr,e.options[i]]])]),e.options.length>2?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"delete-option button-unstyled -hover-highlight",onClick:function(t){return e.deleteOption(i)}},[(0,o.Wm)(c,{icon:"times"})],8,ce)):(0,o.kq)("",!0)])})),128)),e.options.length<e.maxOptions?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"add-option faint button-unstyled -hover-highlight",onClick:t[1]||(t[1]=function(){return e.addOption&&e.addOption.apply(e,arguments)})},[(0,o.Wm)(c,{icon:"plus",size:"sm"}),(0,o.Uk)(" "+(0,i.zw)(e.$t("polls.add_option")),1)])):(0,o.kq)("",!0),(0,o._)("div",le,[(0,o._)("div",{class:"poll-type",title:e.$t("polls.type")},[(0,o.Wm)(l,{modelValue:e.pollType,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.pollType=t}),class:"poll-type-select",unstyled:"true",onChange:e.updatePollToParent},{default:(0,o.w5)((function(){return[(0,o._)("option",pe,(0,i.zw)(e.$t("polls.single_choice")),1),(0,o._)("option",me,(0,i.zw)(e.$t("polls.multiple_choices")),1)]})),_:1},8,["modelValue","onChange"])],8,de),(0,o._)("div",{class:"poll-expiry",title:e.$t("polls.expiry")},[(0,o.wy)((0,o._)("input",{"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.expiryAmount=t}),type:"number",class:"expiry-amount hide-number-spinner",min:e.minExpirationInCurrentUnit,max:e.maxExpirationInCurrentUnit,onChange:t[4]||(t[4]=function(){return e.expiryAmountChange&&e.expiryAmountChange.apply(e,arguments)})},null,40,fe),[[r.nr,e.expiryAmount]]),(0,o.Uk)(" "+(0,i.zw)(" ")+" "),(0,o.Wm)(l,{modelValue:e.expiryUnit,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.expiryUnit=t}),unstyled:"true",class:"expiry-unit",onChange:e.expiryAmountChange},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.expiryUnits,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,i.zw)(e.$tc("time.unit.".concat(t,"_short"),e.expiryAmount,[""])),9,ge)})),128))]})),_:1},8,["modelValue","onChange"])],8,he)])])):(0,o.kq)("",!0)}]]);var je=n(66596),Fe=n(67671),Ae=n(10252),Oe=n(58394),Ee=n(67952),ze=n(37230),Pe=n(19003),Ie=n(989),xe=n(66141);function Te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Te(Object(n),!0).forEach((function(t){(0,N.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Te(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}ye.vI.add(_e.RKn,_e.Mm7,_e.cf$,_e.gPx,_e.NBC,_e.IJ7);var Be=function(e){return Number(e.substring(0,e.length-2))};const Ue={props:["statusId","statusText","statusIsSensitive","statusPoll","statusFiles","statusMediaDescriptions","statusScope","statusContentType","replyTo","repliedUser","attentions","copyMessageScope","subject","disableSubject","disableScopeSelector","disableVisibilitySelector","disableNotice","disableLockWarning","disablePolls","disableSensitivityCheckbox","disableSubmit","disablePreview","placeholder","maxHeight","postHandler","preserveFocus","autoFocus","fileLimit","submitOnEnter","emojiPickerPlacement","optimisticPosting"],emits:["posted","resize","mediaplay","mediapause"],components:{MediaUpload:oe.Z,EmojiInput:ie.Z,PollForm:Se,ScopeSelector:re.Z,Checkbox:xe.Z,Select:De.Z,Attachment:je.Z,StatusContent:Ae.Z,Gallery:Fe.Z},mounted:function(){if(this.updateIdempotencyKey(),this.resize(this.$refs.textarea),this.replyTo){var e=this.$refs.textarea.value.length;this.$refs.textarea.setSelectionRange(e,e)}(this.replyTo||this.autoFocus)&&this.$refs.textarea.focus()},data:function(){var e=this.$route.query.message||"",t=this.$store.getters.mergedConfig.scopeCopy;if(this.replyTo){var n=this.$store.state.users.currentUser;e=function(e,t){var n=e.user,o=e.attentions,r=void 0===o?[]:o,i=(0,Z.Z)(r);i.unshift(n),i=K()(i,"id"),i=Q()(i,{id:t.id});var s=Y()(i,(function(e){return"@".concat(e.screen_name)}));return s.length>0?s.join(" ")+" ":""}({user:this.repliedUser,attentions:this.attentions},n)}var o=this.copyMessageScope&&t||"direct"===this.copyMessageScope?this.copyMessageScope:this.$store.state.users.currentUser.default_scope,r=this.$store.getters.mergedConfig,i=r.postContentType,s=r.sensitiveByDefault,a={spoilerText:this.subject||"",status:e,nsfw:!!s,files:[],poll:{},mediaDescriptions:{},visibility:o,contentType:i};if(this.statusId){var u=this.statusContentType||i;a={spoilerText:this.subject||"",status:this.statusText||"",nsfw:this.statusIsSensitive||!!s,files:this.statusFiles||[],poll:this.statusPoll||{},mediaDescriptions:this.statusMediaDescriptions||{},visibility:this.statusScope||o,contentType:u,quoting:!1}}return{randomSeed:(0,ne.Z)(),dropFiles:[],uploadingFiles:!1,error:null,posting:!1,highlighted:0,newStatus:a,caret:0,pollFormVisible:!1,showDropIcon:"hide",dropStopTimeout:null,preview:null,previewLoading:!1,emojiInputShown:!1,idempotencyKey:""}},computed:$e($e({users:function(){return this.$store.state.users.users},userDefaultScope:function(){return this.$store.state.users.currentUser.default_scope},showAllScopes:function(){return!this.mergedConfig.minimalScopesMode},emojiUserSuggestor:function(){return(0,Pe.ZP)({emoji:[].concat((0,Z.Z)(this.$store.getters.standardEmojiList),(0,Z.Z)(this.$store.state.instance.customEmoji)),store:this.$store})},emojiSuggestor:function(){return(0,Pe.ZP)({emoji:[].concat((0,Z.Z)(this.$store.getters.standardEmojiList),(0,Z.Z)(this.$store.state.instance.customEmoji))})},emoji:function(){return this.$store.getters.standardEmojiList||[]},customEmoji:function(){return this.$store.state.instance.customEmoji||[]},statusLength:function(){return this.newStatus.status.length},spoilerTextLength:function(){return this.newStatus.spoilerText.length},statusLengthLimit:function(){return this.$store.state.instance.textlimit},hasStatusLengthLimit:function(){return this.statusLengthLimit>0},charactersLeft:function(){return this.statusLengthLimit-(this.statusLength+this.spoilerTextLength)},isOverLengthLimit:function(){return this.hasStatusLengthLimit&&this.charactersLeft<0},minimalScopesMode:function(){return this.$store.state.instance.minimalScopesMode},alwaysShowSubject:function(){return this.mergedConfig.alwaysShowSubjectInput},postFormats:function(){return this.$store.state.instance.postFormats||[]},safeDMEnabled:function(){return this.$store.state.instance.safeDM},pollsAvailable:function(){return this.$store.state.instance.pollsAvailable&&this.$store.state.instance.pollLimits.max_options>=2&&!0!==this.disablePolls},hideScopeNotice:function(){return this.disableNotice||this.$store.getters.mergedConfig.hideScopeNotice},pollContentError:function(){return this.pollFormVisible&&this.newStatus.poll&&this.newStatus.poll.error},showPreview:function(){return!this.disablePreview&&(!!this.preview||this.previewLoading)},emptyStatus:function(){return""===this.newStatus.status.trim()&&0===this.newStatus.files.length},uploadFileLimitReached:function(){return this.newStatus.files.length>=this.fileLimit},isEdit:function(){return void 0!==this.statusId&&""!==this.statusId.trim()},quotable:function(){if(!this.$store.state.instance.quotingAvailable)return!1;if(!this.replyTo)return!1;var e=this.$store.state.statuses.allStatusesObject[this.replyTo];return!!e&&("public"===e.visibility||"unlisted"===e.visibility||"local"===e.visibility||"private"===e.visibility&&e.user.id===this.$store.state.users.currentUser.id)}},(0,Ie.Se)(["mergedConfig"])),(0,Ie.rn)({mobileLayout:function(e){return e.interface.mobileLayout}})),watch:{newStatus:{deep:!0,handler:function(){this.statusChanged()}}},methods:{statusChanged:function(){this.autoPreview(),this.updateIdempotencyKey()},clearStatus:function(){var e=this,t=this.newStatus;this.newStatus={status:"",spoilerText:"",files:[],visibility:t.visibility,contentType:t.contentType,poll:{},mediaDescriptions:{},quoting:!1},this.pollFormVisible=!1,this.$refs.mediaUpload&&this.$refs.mediaUpload.clearFile(),this.clearPollForm(),this.preserveFocus&&this.$nextTick((function(){e.$refs.textarea.focus()}));var n=this.$el.querySelector("textarea");n.style.height="auto",n.style.height=void 0,this.error=null,this.preview&&this.previewStatus()},postStatus:function(e,t){var n=arguments,o=this;return(0,q.Z)(ee().mark((function r(){var i,s,a,u;return ee().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(n.length>2&&void 0!==n[2]&&n[2],!o.posting||o.optimisticPosting){r.next=3;break}return r.abrupt("return");case 3:if(!o.disableSubmit){r.next=5;break}return r.abrupt("return");case 5:if(!o.emojiInputShown){r.next=7;break}return r.abrupt("return");case 7:if(o.submitOnEnter&&(e.stopPropagation(),e.preventDefault()),!o.optimisticPosting||!o.emptyStatus&&!o.isOverLengthLimit){r.next=10;break}return r.abrupt("return");case 10:if(!o.emptyStatus){r.next=13;break}return o.error=o.$t("post_status.empty_status_error"),r.abrupt("return");case 13:if(s=o.pollFormVisible?o.newStatus.poll:{},!o.pollContentError){r.next=17;break}return o.error=o.pollContentError,r.abrupt("return");case 17:return o.posting=!0,r.prev=18,r.next=21,o.setAllMediaDescriptions();case 21:r.next=28;break;case 23:return r.prev=23,r.t0=r.catch(18),o.error=o.$t("post_status.media_description_error"),o.posting=!1,r.abrupt("return");case 28:a=t.quoting?"quoteId":"inReplyToStatusId",i={status:t.status,spoilerText:t.spoilerText||null,visibility:t.visibility,sensitive:t.nsfw,media:t.files,store:o.$store},(0,N.Z)(i,a,o.replyTo),(0,N.Z)(i,"contentType",t.contentType),(0,N.Z)(i,"poll",s),(0,N.Z)(i,"idempotencyKey",o.idempotencyKey),u=i,(o.postHandler?o.postHandler:te.Z.postStatus)(u).then((function(e){e.error?o.error=e.error:(o.clearStatus(),o.$emit("posted",e)),o.posting=!1}));case 32:case"end":return r.stop()}}),r,null,[[18,23]])})))()},previewStatus:function(){var e,t=this;if(this.emptyStatus&&""===this.newStatus.spoilerText.trim())return this.preview={error:this.$t("post_status.preview_empty")},void(this.previewLoading=!1);var n=this.newStatus;this.previewLoading=!0;var o=n.quoting?"quoteId":"inReplyToStatusId";te.Z.postStatus((e={status:n.status,spoilerText:n.spoilerText||null,visibility:n.visibility,sensitive:n.nsfw,media:[],store:this.$store},(0,N.Z)(e,o,this.replyTo),(0,N.Z)(e,"contentType",n.contentType),(0,N.Z)(e,"poll",{}),(0,N.Z)(e,"preview",!0),e)).then((function(e){t.previewLoading&&(e.error?t.preview={error:e.error}:t.preview=e)})).catch((function(e){t.preview={error:e}})).finally((function(){t.previewLoading=!1}))},debouncePreviewStatus:H()((function(){this.previewStatus()}),500),autoPreview:function(){this.preview&&(this.previewLoading=!0,this.debouncePreviewStatus())},closePreview:function(){this.preview=null,this.previewLoading=!1},togglePreview:function(){this.showPreview?this.closePreview():this.previewStatus()},addMediaFile:function(e){this.newStatus.files.push(e),this.$emit("resize",{delayed:!0})},removeMediaFile:function(e){var t=this.newStatus.files.indexOf(e);this.newStatus.files.splice(t,1),this.$emit("resize")},editAttachment:function(e,t){this.newStatus.mediaDescriptions[e.id]=t},shiftUpMediaFile:function(e){var t=this.newStatus.files,n=this.newStatus.files.indexOf(e);t.splice(n,1),t.splice(n-1,0,e)},shiftDnMediaFile:function(e){var t=this.newStatus.files,n=this.newStatus.files.indexOf(e);t.splice(n,1),t.splice(n+1,0,e)},uploadFailed:function(e,t){t=t||{},this.error=this.$t("upload.error.base")+" "+this.$t("upload.error."+e,t)},startedUploadingFiles:function(){this.uploadingFiles=!0},finishedUploadingFiles:function(){this.$emit("resize"),this.uploadingFiles=!1},type:function(e){return Oe.ZP.fileType(e.mimetype)},paste:function(e){this.autoPreview(),this.resize(e),e.clipboardData.files.length>0&&(e.preventDefault(),this.dropFiles=[e.clipboardData.files[0]])},fileDrop:function(e){e.dataTransfer&&e.dataTransfer.types.includes("Files")&&(e.preventDefault(),this.dropFiles=e.dataTransfer.files,clearTimeout(this.dropStopTimeout),this.showDropIcon="hide")},fileDragStop:function(e){var t=this;clearTimeout(this.dropStopTimeout),this.showDropIcon="fade",this.dropStopTimeout=setTimeout((function(){return t.showDropIcon="hide"}),500)},fileDrag:function(e){e.dataTransfer.dropEffect=this.uploadFileLimitReached?"none":"copy",e.dataTransfer&&e.dataTransfer.types.includes("Files")&&(clearTimeout(this.dropStopTimeout),this.showDropIcon="show")},onEmojiInputInput:function(e){var t=this;this.$nextTick((function(){t.resize(t.$refs.textarea)}))},resize:function(e){var t=e.target||e;if(t instanceof window.Element){if(""===t.value)return t.style.height=null,void this.$emit("resize");var n=this.$refs.form,o=this.$refs.bottom,r=window.getComputedStyle(o)["padding-bottom"],i=Be(r),s=this.$el.closest(".column.-scrollable")||this.$el.closest(".post-form-modal-view")||window,a=window.getComputedStyle(t)["padding-top"],u=window.getComputedStyle(t)["padding-bottom"],c=Be(a)+Be(u),l=Be(t.style.height),d=s===window?s.scrollY:s.scrollTop,p=s===window?s.innerHeight:s.offsetHeight,m=d+p;t.style.height="auto";var h=Math.floor(t.scrollHeight-c),f=this.maxHeight?Math.min(h,this.maxHeight):h;Math.abs(f-l)<=1&&(f=l),t.style.height="".concat(f,"px"),this.$emit("resize",f);var g=o.offsetHeight+(0,Ee.y)(o,s).top+i,v=m<g,w=p<n.offsetHeight,b=g-m,y=!v||w&&this.$refs.textarea.selectionStart!==this.$refs.textarea.value.length?0:b,D=Math.round(d+y);s===window?s.scroll(0,D):s.scrollTop=D}},showEmojiPicker:function(){this.$refs.textarea.focus(),this.$refs["emoji-input"].triggerShowPicker()},clearError:function(){this.error=null},changeVis:function(e){this.newStatus.visibility=e},togglePollForm:function(){this.pollFormVisible=!this.pollFormVisible},setPoll:function(e){this.newStatus.poll=e},clearPollForm:function(){this.$refs.pollForm&&this.$refs.pollForm.clear()},dismissScopeNotice:function(){this.$store.dispatch("setOption",{name:"hideScopeNotice",value:!0})},setMediaDescription:function(e){var t=this.newStatus.mediaDescriptions[e];if(t&&""!==t.trim())return te.Z.setMediaDescription({store:this.$store,id:e,description:t})},setAllMediaDescriptions:function(){var e=this,t=this.newStatus.files.map((function(e){return e.id}));return Promise.all(t.map((function(t){return e.setMediaDescription(t)})))},handleEmojiInputShow:function(e){this.emojiInputShown=e},updateIdempotencyKey:function(){this.idempotencyKey=Date.now().toString()},openProfileTab:function(){this.$store.dispatch("openSettingsModalTab","profile")},propsToNative:function(e){return(0,ze.X)(e)}}},Me=(0,Ce.Z)(Ue,[["render",function(e,t,n,q,N,Z){var W=(0,o.up)("i18n-t"),H=(0,o.up)("FAIcon"),V=(0,o.up)("StatusContent"),K=(0,o.up)("EmojiInput"),G=(0,o.up)("scope-selector"),Y=(0,o.up)("Select"),J=(0,o.up)("poll-form"),Q=(0,o.up)("media-upload"),X=(0,o.up)("gallery"),ee=(0,o.up)("Checkbox");return(0,o.wg)(),(0,o.iD)("div",s,[(0,o._)("form",{autocomplete:"off",onSubmit:t[27]||(t[27]=(0,r.iM)((function(){}),["prevent"])),onDragover:t[28]||(t[28]=(0,r.iM)((function(){return e.fileDrag&&e.fileDrag.apply(e,arguments)}),["prevent"]))},[(0,o._)("div",a,[e.$store.state.users.currentUser.locked||"private"!=e.newStatus.visibility||e.disableLockWarning?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(W,{key:0,keypath:"post_status.account_not_locked_warning",tag:"p",class:"visibility-notice",scope:"global"},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled -link",onClick:t[0]||(t[0]=function(){return e.openProfileTab&&e.openProfileTab.apply(e,arguments)})},(0,i.zw)(e.$t("post_status.account_not_locked_warning_link")),1)]})),_:1})),e.hideScopeNotice||"public"!==e.newStatus.visibility?e.hideScopeNotice||"unlisted"!==e.newStatus.visibility?!e.hideScopeNotice&&"private"===e.newStatus.visibility&&e.$store.state.users.currentUser.locked?((0,o.wg)(),(0,o.iD)("p",p,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.private")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[3]||(t[3]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,m)])):"direct"===e.newStatus.visibility?((0,o.wg)(),(0,o.iD)("p",h,[e.safeDMEnabled?((0,o.wg)(),(0,o.iD)("span",f,(0,i.zw)(e.$t("post_status.direct_warning_to_first_only")),1)):((0,o.wg)(),(0,o.iD)("span",g,(0,i.zw)(e.$t("post_status.direct_warning_to_all")),1))])):(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",l,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.unlisted")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[2]||(t[2]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,d)])):((0,o.wg)(),(0,o.iD)("p",u,[(0,o._)("span",null,(0,i.zw)(e.$t("post_status.scope_notice.public")),1),(0,o._)("a",{class:"fa-scale-110 fa-old-padding dismiss",title:e.$t("post_status.scope_notice_dismiss"),role:"button",tabindex:"0",onClick:t[1]||(t[1]=(0,r.iM)((function(t){return e.dismissScopeNotice()}),["prevent"]))},[(0,o.Wm)(H,{icon:"times"})],8,c)])),e.isEdit?((0,o.wg)(),(0,o.iD)("div",v,[(0,o._)("p",null,(0,i.zw)(e.$t("post_status.edit_remote_warning")),1),(0,o._)("p",null,(0,i.zw)(e.$t("post_status.edit_unsupported_warning")),1)])):(0,o.kq)("",!0),e.disablePreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",w,[(0,o._)("a",{class:"preview-toggle faint",onClick:t[4]||(t[4]=(0,r.iM)((function(){return e.togglePreview&&e.togglePreview.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Uk)((0,i.zw)(e.$t("post_status.preview"))+" ",1),(0,o.Wm)(H,{icon:e.showPreview?"chevron-left":"chevron-right"},null,8,["icon"])]),(0,o.wy)((0,o._)("div",b,[(0,o.Wm)(H,{class:"fa-old-padding",spin:"",icon:"circle-notch"})],512),[[r.F8,e.previewLoading]])])),e.showPreview?((0,o.wg)(),(0,o.iD)("div",y,[e.preview?e.preview.error?((0,o.wg)(),(0,o.iD)("div",_,(0,i.zw)(e.preview.error),1)):((0,o.wg)(),(0,o.j4)(V,{key:2,status:e.preview,class:"preview-status"},null,8,["status"])):((0,o.wg)(),(0,o.iD)("div",D,(0,i.zw)(e.$t("general.loading")),1))])):(0,o.kq)("",!0),e.quotable?((0,o.wg)(),(0,o.iD)("div",k,[(0,o._)("button",{id:"reply-or-quote-option-".concat(e.randomSeed,"-reply"),class:(0,i.C_)(["btn button-default reply-or-quote-option",{toggled:!e.newStatus.quoting}]),tabindex:"0",role:"radio","aria-labelledby":"reply-or-quote-option-".concat(e.randomSeed,"-reply"),"aria-checked":!e.newStatus.quoting,onClick:t[5]||(t[5]=function(t){return e.newStatus.quoting=!1})},(0,i.zw)(e.$t("post_status.reply_option")),11,C),(0,o._)("button",{id:"reply-or-quote-option-".concat(e.randomSeed,"-quote"),class:(0,i.C_)(["btn button-default reply-or-quote-option",{toggled:e.newStatus.quoting}]),tabindex:"0",role:"radio","aria-labelledby":"reply-or-quote-option-".concat(e.randomSeed,"-quote"),"aria-checked":e.newStatus.quoting,onClick:t[6]||(t[6]=function(t){return e.newStatus.quoting=!0})},(0,i.zw)(e.$t("post_status.quote_option")),11,S)])):(0,o.kq)("",!0),e.disableSubject||!e.newStatus.spoilerText&&!e.alwaysShowSubject?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(K,{key:9,modelValue:e.newStatus.spoilerText,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.newStatus.spoilerText=t}),"enable-emoji-picker":"",suggest:e.emojiSuggestor,class:"form-control"},{default:(0,o.w5)((function(n){return[(0,o.wy)((0,o._)("input",(0,o.dG)({"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.newStatus.spoilerText=t}),type:"text",placeholder:e.$t("post_status.content_warning"),disabled:e.posting&&!e.optimisticPosting},e.propsToNative(n),{size:"1",class:"form-post-subject"}),null,16,j),[[r.nr,e.newStatus.spoilerText]])]})),_:1},8,["modelValue","suggest"])),(0,o.Wm)(K,{ref:"emoji-input",modelValue:e.newStatus.status,"onUpdate:modelValue":t[16]||(t[16]=function(t){return e.newStatus.status=t}),suggest:e.emojiUserSuggestor,placement:e.emojiPickerPlacement,class:"form-control main-input","enable-emoji-picker":"","hide-emoji-button":"","newline-on-ctrl-enter":e.submitOnEnter,"enable-sticker-picker":"",onInput:e.onEmojiInputInput,onStickerUploaded:e.addMediaFile,onStickerUploadFailed:e.uploadFailed,onShown:e.handleEmojiInputShow},{default:(0,o.w5)((function(n){return[(0,o.wy)((0,o._)("textarea",(0,o.dG)({ref:"textarea","onUpdate:modelValue":t[9]||(t[9]=function(t){return e.newStatus.status=t}),placeholder:e.placeholder||e.$t("post_status.default"),rows:"1",cols:"1",disabled:e.posting&&!e.optimisticPosting,class:["form-post-body",{"scrollable-form":!!e.maxHeight}]},e.propsToNative(n),{onKeydown:[t[10]||(t[10]=(0,r.D2)((0,r.iM)((function(t){return e.submitOnEnter&&e.postStatus(t,e.newStatus)}),["exact"]),["enter"])),t[11]||(t[11]=(0,r.D2)((0,r.iM)((function(t){return e.postStatus(t,e.newStatus)}),["meta"]),["enter"])),t[12]||(t[12]=(0,r.D2)((0,r.iM)((function(t){return!e.submitOnEnter&&e.postStatus(t,e.newStatus)}),["ctrl"]),["enter"]))],onInput:t[13]||(t[13]=function(){return e.resize&&e.resize.apply(e,arguments)}),onCompositionupdate:t[14]||(t[14]=function(){return e.resize&&e.resize.apply(e,arguments)}),onPaste:t[15]||(t[15]=function(){return e.paste&&e.paste.apply(e,arguments)})}),null,16,F),[[r.nr,e.newStatus.status]]),e.hasStatusLengthLimit?((0,o.wg)(),(0,o.iD)("p",{key:0,class:(0,i.C_)(["character-counter faint",{error:e.isOverLengthLimit}])},(0,i.zw)(e.charactersLeft),3)):(0,o.kq)("",!0)]})),_:1},8,["modelValue","suggest","placement","newline-on-ctrl-enter","onInput","onStickerUploaded","onStickerUploadFailed","onShown"]),e.disableScopeSelector?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",A,[e.disableVisibilitySelector?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(G,{key:0,"show-all":e.showAllScopes,"user-default":e.userDefaultScope,"original-scope":e.copyMessageScope,"initial-scope":e.newStatus.visibility,"on-scope-change":e.changeVis},null,8,["show-all","user-default","original-scope","initial-scope","on-scope-change"])),e.postFormats.length>1?((0,o.wg)(),(0,o.iD)("div",O,[(0,o.Wm)(Y,{id:"post-content-type",modelValue:e.newStatus.contentType,"onUpdate:modelValue":t[17]||(t[17]=function(t){return e.newStatus.contentType=t}),class:"form-control",attrs:{"aria-label":e.$t("post_status.content_type_selection")}},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.postFormats,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,i.zw)(e.$t('post_status.content_type["'.concat(t,'"]'))),9,E)})),128))]})),_:1},8,["modelValue","attrs"])])):(0,o.kq)("",!0),1===e.postFormats.length&&"text/plain"!==e.postFormats[0]?((0,o.wg)(),(0,o.iD)("div",z,[(0,o._)("span",P,(0,i.zw)(e.$t('post_status.content_type["'.concat(e.postFormats[0],'"]'))),1)])):(0,o.kq)("",!0)]))]),e.pollsAvailable?((0,o.wg)(),(0,o.j4)(J,{key:0,ref:"pollForm",visible:e.pollFormVisible,onUpdatePoll:e.setPoll},null,8,["visible","onUpdatePoll"])):(0,o.kq)("",!0),(0,o._)("div",I,[(0,o._)("div",x,[(0,o.Wm)(Q,{ref:"mediaUpload",class:"media-upload-icon","drop-files":e.dropFiles,disabled:e.uploadFileLimitReached,onUploading:e.startedUploadingFiles,onUploaded:e.addMediaFile,onUploadFailed:e.uploadFailed,onAllUploaded:e.finishedUploadingFiles},null,8,["drop-files","disabled","onUploading","onUploaded","onUploadFailed","onAllUploaded"]),(0,o._)("button",{class:"emoji-icon button-unstyled",title:e.$t("emoji.add_emoji"),onClick:t[18]||(t[18]=function(){return e.showEmojiPicker&&e.showEmojiPicker.apply(e,arguments)})},[(0,o.Wm)(H,{icon:"smile-beam"})],8,T),e.pollsAvailable?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,i.C_)(["poll-icon button-unstyled",{selected:e.pollFormVisible}]),title:e.$t("polls.add_poll"),onClick:t[19]||(t[19]=function(){return e.togglePollForm&&e.togglePollForm.apply(e,arguments)})},[(0,o.Wm)(H,{icon:"poll-h"})],10,$)):(0,o.kq)("",!0)]),e.posting?((0,o.wg)(),(0,o.iD)("button",B,(0,i.zw)(e.$t("post_status.posting")),1)):e.isOverLengthLimit?((0,o.wg)(),(0,o.iD)("button",U,(0,i.zw)(e.$t("post_status.post")),1)):((0,o.wg)(),(0,o.iD)("button",{key:2,disabled:e.uploadingFiles||e.disableSubmit,class:"btn button-default",onClick:t[20]||(t[20]=(0,r.iM)((function(t){return e.postStatus(t,e.newStatus)}),["stop","prevent"]))},(0,i.zw)(e.$t("post_status.post")),9,M))],512),(0,o.wy)((0,o._)("div",{style:(0,i.j5)({animation:"show"===e.showDropIcon?"fade-in 0.25s":"fade-out 0.5s"}),class:"drop-indicator",onDragleave:t[21]||(t[21]=function(){return e.fileDragStop&&e.fileDragStop.apply(e,arguments)}),onDrop:t[22]||(t[22]=(0,r.iM)((function(){return e.fileDrop&&e.fileDrop.apply(e,arguments)}),["stop"]))},[(0,o.Wm)(H,{icon:e.uploadFileLimitReached?"ban":"upload"},null,8,["icon"])],36),[[r.F8,"hide"!==e.showDropIcon]]),e.error?((0,o.wg)(),(0,o.iD)("div",L,[(0,o.Uk)(" Error: "+(0,i.zw)(e.error)+" ",1),(0,o._)("button",{class:"button-unstyled",onClick:t[23]||(t[23]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,o.Wm)(H,{class:"fa-scale-110 fa-old-padding",icon:"times"})])])):(0,o.kq)("",!0),e.newStatus.files&&e.newStatus.files.length>0?((0,o.wg)(),(0,o.j4)(X,{key:2,class:"attachments",grid:!0,nsfw:!1,attachments:e.newStatus.files,descriptions:e.newStatus.mediaDescriptions,"set-media":function(){return e.$store.dispatch("setMedia",e.newStatus.files)},editable:!0,"edit-attachment":e.editAttachment,"remove-attachment":e.removeMediaFile,"shift-up-attachment":e.newStatus.files.length>1&&e.shiftUpMediaFile,"shift-dn-attachment":e.newStatus.files.length>1&&e.shiftDnMediaFile,onPlay:t[24]||(t[24]=function(t){return e.$emit("mediaplay",e.attachment.id)}),onPause:t[25]||(t[25]=function(t){return e.$emit("mediapause",e.attachment.id)})},null,8,["attachments","descriptions","set-media","edit-attachment","remove-attachment","shift-up-attachment","shift-dn-attachment"])):(0,o.kq)("",!0),e.newStatus.files.length>0&&!e.disableSensitivityCheckbox?((0,o.wg)(),(0,o.iD)("div",R,[(0,o.Wm)(ee,{modelValue:e.newStatus.nsfw,"onUpdate:modelValue":t[26]||(t[26]=function(t){return e.newStatus.nsfw=t})},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,i.zw)(e.$t("post_status.attachments_sensitive")),1)]})),_:1},8,["modelValue"])])):(0,o.kq)("",!0)],32)],512)}]])},99507:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=["disabled"];const i={props:{disabled:{type:Boolean},click:{type:Function,default:function(){return Promise.resolve()}}},data:function(){return{progress:!1}},methods:{onClick:function(){var e=this;this.progress=!0,this.click().then((function(){e.progress=!1}))}}},s=(0,n(83744).Z)(i,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("button",{disabled:s.progress||n.disabled,onClick:t[0]||(t[0]=function(){return a.onClick&&a.onClick.apply(a,arguments)})},[s.progress&&e.$slots.progress?(0,o.WI)(e.$slots,"progress",{key:0}):(0,o.WI)(e.$slots,"default",{key:1})],8,r)}]])},72895:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(66252),r=n(3577),i={class:"remote-follow"},s=["action"],a=["value"],u=(0,o._)("input",{type:"hidden",name:"profile",value:""},null,-1),c={click:"submit",class:"button-default remote-button"};const l={props:["user"],computed:{subscribeUrl:function(){var e=new URL(this.user.statusnet_profile_url);return"".concat(e.protocol,"//").concat(e.host,"/main/ostatus")}}},d=(0,n(83744).Z)(l,[["render",function(e,t,n,l,d,p){return(0,o.wg)(),(0,o.iD)("div",i,[(0,o._)("form",{method:"POST",action:e.subscribeUrl},[(0,o._)("input",{type:"hidden",name:"nickname",value:e.user.screen_name},null,8,a),u,(0,o._)("button",c,(0,r.zw)(e.$t("user_card.remote_follow")),1)],8,s)])}]])},54110:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(66252),r=n(3577),i={key:0,class:"ScopeSelector"},s=["title"],a=["title"],u=["title"],c=["title"],l=n(9382),d=n(84131);l.vI.add(d.FU$,d.g4A,d.byT,d._1N);const p={props:["showAll","userDefault","originalScope","initialScope","onScopeChange"],data:function(){return{currentScope:this.initialScope}},computed:{showNothing:function(){return!(this.showPublic||this.showUnlisted||this.showPrivate||this.showDirect)},showPublic:function(){return"direct"!==this.originalScope&&this.shouldShow("public")},showUnlisted:function(){return"direct"!==this.originalScope&&this.shouldShow("unlisted")},showPrivate:function(){return"direct"!==this.originalScope&&this.shouldShow("private")},showDirect:function(){return this.shouldShow("direct")},css:function(){return{public:{selected:"public"===this.currentScope},unlisted:{selected:"unlisted"===this.currentScope},private:{selected:"private"===this.currentScope},direct:{selected:"direct"===this.currentScope}}}},methods:{shouldShow:function(e){return this.showAll||this.currentScope===e||this.originalScope===e||this.userDefault===e||"direct"===e},changeVis:function(e){this.currentScope=e,this.onScopeChange&&this.onScopeChange(e)}}},m=(0,n(83744).Z)(p,[["render",function(e,t,n,l,d,p){var m=(0,o.up)("FAIcon");return e.showNothing?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",i,[e.showDirect?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled scope",e.css.direct]),title:e.$t("post_status.scope.direct"),type:"button",onClick:t[0]||(t[0]=function(t){return e.changeVis("direct")})},[(0,o.Wm)(m,{icon:"envelope",class:"fa-scale-110 fa-old-padding"})],10,s)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showPrivate?((0,o.wg)(),(0,o.iD)("button",{key:1,class:(0,r.C_)(["button-unstyled scope",e.css.private]),title:e.$t("post_status.scope.private"),type:"button",onClick:t[1]||(t[1]=function(t){return e.changeVis("private")})},[(0,o.Wm)(m,{icon:"lock",class:"fa-scale-110 fa-old-padding"})],10,a)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showUnlisted?((0,o.wg)(),(0,o.iD)("button",{key:2,class:(0,r.C_)(["button-unstyled scope",e.css.unlisted]),title:e.$t("post_status.scope.unlisted"),type:"button",onClick:t[2]||(t[2]=function(t){return e.changeVis("unlisted")})},[(0,o.Wm)(m,{icon:"lock-open",class:"fa-scale-110 fa-old-padding"})],10,u)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.showPublic?((0,o.wg)(),(0,o.iD)("button",{key:3,class:(0,r.C_)(["button-unstyled scope",e.css.public]),title:e.$t("post_status.scope.public"),type:"button",onClick:t[3]||(t[3]=function(t){return e.changeVis("public")})},[(0,o.Wm)(m,{icon:"globe",class:"fa-scale-110 fa-old-padding"})],10,c)):(0,o.kq)("",!0)]))}]])},76990:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(66252),r=n(3577),i=["disabled","value"],s=n(9382),a=n(84131);s.vI.add(a.ptq);const u={emits:["update:modelValue"],props:["modelValue","disabled","unstyled","kind","attrs"]},c=(0,n(83744).Z)(u,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("label",{class:(0,r.C_)(["Select input",{disabled:e.disabled,unstyled:e.unstyled}])},[(0,o._)("select",(0,o.dG)({disabled:e.disabled,value:e.modelValue},e.attrs,{onChange:t[0]||(t[0]=function(t){return e.$emit("update:modelValue",t.target.value)})}),[(0,o.WI)(e.$slots,"default")],16,i),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(c,{class:"select-down-icon",icon:"chevron-down"})],2)}]])},24049:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Qt});var o=n(66252),r=n(3577),i=n(49963),s={key:0,class:"alert error"},a={key:1,class:"status-container muted"},u={class:"status-username"},c={key:0,class:"mute-thread"},l={key:1,class:"mute-thread"},d=["title"],p={key:0,class:"pin"},m={class:"faint"},h={class:"right-side faint"},f=["title"],g=["data-tags"],v={key:0,class:"left-side"},w=["href"],b={class:"right-side"},y={key:0,class:"status-heading"},D={class:"heading-name-row"},_={class:"heading-left"},k=["title"],C=["title"],S=["src"],j={class:"heading-right"},F=["title"],A=["title"],O=["title","aria-expanded"],E=["title"],z={key:0,class:"heading-reply-row"},P={key:0,class:"glued-label reply-glued-label"},I=["aria-label"],x={class:"reply-to-text"},T={key:1,class:"reply-to-no-popover"},$={class:"reply-to-text"},B={key:1,class:"glued-label"},U=["aria-label"],M={class:"mentions-text"},L={key:1,class:"heading-edited-row"},R={key:1,class:"quoted-status"},q=["aria-expanded"],N={key:2,class:"quoted-status -unavailable-prompt"},Z=["href"],W={key:3,class:"replies"},H=["title"],V={key:1,class:"faint"},K=["onClick"],G={key:0,class:"favs-repeated-users"},Y={class:"stats"},J={class:"stat-count"},Q={class:"stat-title"},X={class:"stat-number"},ee={class:"stat-count"},te={class:"stat-title"},ne={class:"stat-number"},oe={class:"avatar-row"},re={key:5,class:"status-actions"},ie={key:3,class:"gravestone"},se={class:"left-side"},ae={class:"right-side"},ue={class:"deleted-text"},ce={key:4,class:"status-container reply-form"},le=n(4942),de=n(45578),pe=n.n(de),me=n(27955),he=n.n(me),fe={class:"ReplyButton"},ge=["title"],ve=["href","title"],we={key:2,class:"action-counter"},be=n(9382),ye=n(84131);be.vI.add(ye.Lh7,ye.r8p,ye.NBC);const De={name:"ReplyButton",props:["status","replying"],computed:{loggedIn:function(){return!!this.$store.state.users.currentUser},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}}};var _e=n(83744);const ke=(0,_e.Z)(De,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("div",fe,[e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",{"-active":e.replying}]),title:e.$t("tool_tip.reply"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.$emit("toggle")}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"reply"}),e.replying?((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-8 right-11",icon:"times"})):((0,o.wg)(),(0,o.j4)(c,{key:0,class:"focus-marker",transform:"shrink-6 up-8 right-11",icon:"plus"}))]})),_:1})],10,ge)):((0,o.wg)(),(0,o.iD)("a",{key:1,class:"button-unstyled interactive",target:"_blank",role:"button",href:e.remoteInteractionLink,title:e.$t("tool_tip.reply")},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"reply"}),e.replying?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:0,class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"plus"}))]})),_:1})],8,ve)),e.status.replies_count>0?((0,o.wg)(),(0,o.iD)("span",we,(0,r.zw)(e.status.replies_count),1)):(0,o.kq)("",!0)])}]]);var Ce={class:"FavoriteButton"},Se=["title"],je=["title","href"],Fe={key:2,class:"action-counter"},Ae=n(989),Oe=n(5737);function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ze(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ee(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.Tab,Oe.Tab,ye.r8p,ye.Kl4,ye.LEp);const Pe={props:["status","loggedIn"],data:function(){return{animated:!1}},methods:{favorite:function(){var e=this;this.status.favorited?this.$store.dispatch("unfavorite",{id:this.status.id}):this.$store.dispatch("favorite",{id:this.status.id}),this.animated=!0,setTimeout((function(){e.animated=!1}),500)}},computed:ze(ze({},(0,Ae.Se)(["mergedConfig"])),{},{remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}})},Ie=(0,_e.Z)(Pe,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("div",Ce,[e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",e.status.favorited&&"-favorited"]),title:e.$t("tool_tip.favorite"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.favorite()}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:[e.status.favorited?"fas":"far","star"],spin:e.animated},null,8,["icon","spin"]),e.status.favorited?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"active-marker",transform:"shrink-6 up-9 right-12",icon:"check"})):(0,o.kq)("",!0),e.status.favorited?((0,o.wg)(),(0,o.j4)(c,{key:2,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"minus"})):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"}))]})),_:1})],10,Se)):((0,o.wg)(),(0,o.iD)("a",{key:1,class:"button-unstyled interactive",target:"_blank",role:"button",title:e.$t("tool_tip.favorite"),href:e.remoteInteractionLink},[(0,o.Wm)(l,{class:"fa-scale-110 fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:["far","star"]}),(0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"})]})),_:1})],8,je)),!e.mergedConfig.hidePostStats&&e.status.fave_num>0?((0,o.wg)(),(0,o.iD)("span",Fe,(0,r.zw)(e.status.fave_num),1)):(0,o.kq)("",!0)])}]]);var xe={class:"ReactButton"},Te=["title"],$e=n(84535),Be=n(91300);be.vI.add(ye.r8p,ye.NBC,Oe.RKn);const Ue={props:["status"],data:function(){return{filterWord:"",expanded:!1}},components:{Popover:$e.default,EmojiPicker:Be.Z},methods:{addReaction:function(e){var t=e.insertion,n=this.status.emoji_reactions.find((function(e){return e.name===t}));n&&n.me?this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:t}):this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:t})},show:function(){this.expanded||this.$refs.picker.showPicker()},onShow:function(){this.expanded=!0},onClose:function(){this.expanded=!1}},computed:{hideCustomEmoji:function(){return!this.$store.state.instance.pleromaCustomEmojiReactionsAvailable}}},Me=(0,_e.Z)(Ue,[["render",function(e,t,n,r,s,a){var u=(0,o.up)("EmojiPicker"),c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers");return(0,o.wg)(),(0,o.iD)("span",xe,[(0,o.Wm)(u,{ref:"picker","enable-sticker-picker":e.enableStickerPicker,"hide-custom-emoji":e.hideCustomEmoji,class:"emoji-picker-panel",onEmoji:e.addReaction,onShow:e.onShow,onClose:e.onClose},null,8,["enable-sticker-picker","hide-custom-emoji","onEmoji","onShow","onClose"]),(0,o._)("span",{class:"button-unstyled popover-trigger",role:"button",tabindex:0,title:e.$t("tool_tip.add_reaction"),onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.show&&e.show.apply(e,arguments)}),["stop","prevent"]))},[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110 fa-old-padding",icon:["far","smile-beam"]}),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-17",icon:"plus"},null,512),[[i.F8,!e.expanded]]),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-17",icon:"times"},null,512),[[i.F8,e.expanded]])]})),_:1})],8,Te)])}]]);var Le={class:"RetweetButton"},Re=["title"],qe={key:1},Ne=["title","href"],Ze={key:3,class:"no-event"},We=n(1447);be.vI.add(ye.x5v,ye.r8p,ye.Kl4,ye.LEp);const He={props:["status","loggedIn","visibility"],components:{ConfirmModal:We.Z},data:function(){return{animated:!1,showingConfirmDialog:!1}},methods:{retweet:function(){!this.status.repeated&&this.shouldConfirmRepeat?this.showConfirmDialog():this.doRetweet()},doRetweet:function(){var e=this;this.status.repeated?this.$store.dispatch("unretweet",{id:this.status.id}):this.$store.dispatch("retweet",{id:this.status.id}),this.animated=!0,setTimeout((function(){e.animated=!1}),500),this.hideConfirmDialog()},showConfirmDialog:function(){this.showingConfirmDialog=!0},hideConfirmDialog:function(){this.showingConfirmDialog=!1}},computed:{mergedConfig:function(){return this.$store.getters.mergedConfig},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})},shouldConfirmRepeat:function(){return this.mergedConfig.modalOnRepeat}}},Ve=(0,_e.Z)(He,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers"),d=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",Le,["private"!==e.visibility&&"direct"!==e.visibility&&e.loggedIn?((0,o.wg)(),(0,o.iD)("button",{key:0,class:(0,r.C_)(["button-unstyled interactive",e.status.repeated&&"-repeated"]),title:e.$t("tool_tip.repeat"),onClick:t[0]||(t[0]=(0,i.iM)((function(t){return e.retweet()}),["prevent"]))},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"retweet",spin:e.animated},null,8,["spin"]),e.status.repeated?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"active-marker",transform:"shrink-6 up-9 right-12",icon:"check"})):(0,o.kq)("",!0),e.status.repeated?((0,o.wg)(),(0,o.j4)(c,{key:2,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"minus"})):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"}))]})),_:1})],10,Re)):e.loggedIn?((0,o.wg)(),(0,o.iD)("span",qe,[(0,o.Wm)(c,{class:"fa-scale-110 fa-old-padding",icon:"lock",title:e.$t("timeline.no_retweet_hint")},null,8,["title"])])):((0,o.wg)(),(0,o.iD)("a",{key:2,class:"button-unstyled interactive",target:"_blank",role:"button",title:e.$t("tool_tip.repeat"),href:e.remoteInteractionLink},[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"retweet"}),(0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-9 right-12",icon:"plus"})]})),_:1})],8,Ne)),!e.mergedConfig.hidePostStats&&e.status.repeat_num>0?((0,o.wg)(),(0,o.iD)("span",Ze,(0,r.zw)(e.status.repeat_num),1)):(0,o.kq)("",!0),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmDialog?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("status.repeat_confirm_title"),"confirm-text":e.$t("status.repeat_confirm_accept_button"),"cancel-text":e.$t("status.repeat_confirm_cancel_button"),onAccepted:e.doRetweet,onCancelled:e.hideConfirmDialog},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("status.repeat_confirm")),1)]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))])}]]);var Ke=["id"],Ge=["onClick"],Ye=["onClick"],Je=["onClick"],Qe=["onClick"],Xe=["onClick"],et=["onClick"],tt=["onClick"],nt=["onClick"],ot=["href"],rt=["onClick"],it={class:"button-unstyled popover-trigger"},st=n(93433),at=n(53599);function ut(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}be.vI.add(ye.cNd,ye.xVw,Oe.xVw,ye.Aq,ye.RP7,ye.EfQ,ye.Xjp,Oe.RrC,ye.qO$,ye.r8p,ye.NBC);const ct={props:["status"],components:{Popover:$e.default,ConfirmModal:We.Z},data:function(){return{expanded:!1,showingDeleteDialog:!1,randomSeed:(0,at.Z)()}},methods:{onShow:function(){this.expanded=!0},onClose:function(){this.expanded=!1},deleteStatus:function(){this.shouldConfirmDelete?this.showDeleteStatusConfirmDialog():this.doDeleteStatus()},doDeleteStatus:function(){this.$store.dispatch("deleteStatus",{id:this.status.id}),this.hideDeleteStatusConfirmDialog()},showDeleteStatusConfirmDialog:function(){this.showingDeleteDialog=!0},hideDeleteStatusConfirmDialog:function(){this.showingDeleteDialog=!1},pinStatus:function(){var e=this;this.$store.dispatch("pinStatus",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unpinStatus:function(){var e=this;this.$store.dispatch("unpinStatus",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},muteConversation:function(){var e=this;this.$store.dispatch("muteConversation",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unmuteConversation:function(){var e=this;this.$store.dispatch("unmuteConversation",this.status.id).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},copyLink:function(){var e=this;navigator.clipboard.writeText(this.statusLink).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},bookmarkStatus:function(){var e=this;this.$store.dispatch("bookmark",{id:this.status.id}).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},unbookmarkStatus:function(){var e=this;this.$store.dispatch("unbookmark",{id:this.status.id}).then((function(){return e.$emit("onSuccess")})).catch((function(t){return e.$emit("onError",t.error.error)}))},reportStatus:function(){this.$store.dispatch("openUserReportingModal",{userId:this.status.user.id,statusIds:[this.status.id]})},editStatus:function(){var e=this;this.$store.dispatch("fetchStatusSource",{id:this.status.id}).then((function(t){return e.$store.dispatch("openEditStatusModal",{statusId:e.status.id,subject:t.spoiler_text,statusText:t.text,statusIsSensitive:e.status.nsfw,statusPoll:e.status.poll,statusFiles:(0,st.Z)(e.status.attachments),visibility:e.status.visibility,statusContentType:t.content_type})}))},showStatusHistory:function(){var e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ut(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ut(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},this.status);["attachments","created_at","emojis","text","raw_html","nsfw","poll","summary","summary_raw_html"].forEach((function(t){return delete e[t]})),this.$store.dispatch("openStatusHistoryModal",e)}},computed:{currentUser:function(){return this.$store.state.users.currentUser},canDelete:function(){if(this.currentUser)return this.currentUser.privileges.includes("messages_delete")||this.status.user.id===this.currentUser.id},ownStatus:function(){return this.status.user.id===this.currentUser.id},canPin:function(){return this.ownStatus&&("public"===this.status.visibility||"unlisted"===this.status.visibility)},canMute:function(){return!!this.currentUser},canBookmark:function(){return!!this.currentUser},statusLink:function(){return"".concat(this.$store.state.instance.server).concat(this.$router.resolve({name:"conversation",params:{id:this.status.id}}).href)},isEdited:function(){return null!==this.status.edited_at},editingAvailable:function(){return this.$store.state.instance.editingAvailable},shouldConfirmDelete:function(){return this.$store.getters.mergedConfig.modalOnDelete},triggerAttrs:function(){return{title:this.$t("status.more_actions"),id:"popup-trigger-".concat(this.randomSeed),"aria-controls":"popup-menu-".concat(this.randomSeed),"aria-expanded":this.expanded,"aria-haspopup":"menu"}}}},lt=(0,_e.Z)(ct,[["render",function(e,t,n,s,a,u){var c=(0,o.up)("FAIcon"),l=(0,o.up)("FALayers"),d=(0,o.up)("ConfirmModal"),p=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(p,{class:"ExtraButtons",trigger:"click","trigger-attrs":e.triggerAttrs,placement:"top",offset:{y:5},"bound-to":{x:"container"},"remove-padding":"",onShow:e.onShow,onClose:e.onClose},{content:(0,o.w5)((function(n){var s=n.close;return[(0,o._)("div",{class:"dropdown-menu",role:"menu",id:"popup-menu-".concat(e.randomSeed)},[e.canMute&&!e.status.thread_muted?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[0]||(t[0]=(0,i.iM)((function(){return e.muteConversation&&e.muteConversation.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(c,{"fixed-width":"",icon:"eye-slash"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.mute_conversation")),1)])):(0,o.kq)("",!0),e.canMute&&e.status.thread_muted?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.unmuteConversation&&e.unmuteConversation.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(c,{"fixed-width":"",icon:"eye-slash"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unmute_conversation")),1)])):(0,o.kq)("",!0),!e.status.pinned&&e.canPin?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[2]||(t[2]=(0,i.iM)((function(){return e.pinStatus&&e.pinStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"thumbtack"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.pin")),1)],8,Ge)):(0,o.kq)("",!0),e.status.pinned&&e.canPin?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[3]||(t[3]=(0,i.iM)((function(){return e.unpinStatus&&e.unpinStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"thumbtack"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unpin")),1)],8,Ye)):(0,o.kq)("",!0),e.canBookmark?((0,o.wg)(),(0,o.iD)(o.HY,{key:4},[e.status.bookmarked?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[4]||(t[4]=(0,i.iM)((function(){return e.bookmarkStatus&&e.bookmarkStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:["far","bookmark"]}),(0,o._)("span",null,(0,r.zw)(e.$t("status.bookmark")),1)],8,Je)),e.status.bookmarked?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[5]||(t[5]=(0,i.iM)((function(){return e.unbookmarkStatus&&e.unbookmarkStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"bookmark"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.unbookmark")),1)],8,Qe)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),e.ownStatus&&e.editingAvailable?((0,o.wg)(),(0,o.iD)("button",{key:5,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[6]||(t[6]=(0,i.iM)((function(){return e.editStatus&&e.editStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"pen"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.edit")),1)],8,Xe)):(0,o.kq)("",!0),e.isEdited&&e.editingAvailable?((0,o.wg)(),(0,o.iD)("button",{key:6,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[7]||(t[7]=(0,i.iM)((function(){return e.showStatusHistory&&e.showStatusHistory.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"history"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.status_history")),1)],8,et)):(0,o.kq)("",!0),e.canDelete?((0,o.wg)(),(0,o.iD)("button",{key:7,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[8]||(t[8]=(0,i.iM)((function(){return e.deleteStatus&&e.deleteStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"times"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.delete")),1)],8,tt)):(0,o.kq)("",!0),(0,o._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[9]||(t[9]=(0,i.iM)((function(){return e.copyLink&&e.copyLink.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:"share-alt"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.copy_link")),1)],8,nt),e.status.is_local?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("a",{key:8,class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",title:"Source",href:e.status.external_url,target:"_blank"},[(0,o.Wm)(c,{"fixed-width":"",icon:"external-link-alt"}),(0,o._)("span",null,(0,r.zw)(e.$t("status.external_source")),1)],8,ot)),(0,o._)("button",{class:"button-default dropdown-item dropdown-item-icon",role:"menuitem",onClick:[t[10]||(t[10]=(0,i.iM)((function(){return e.reportStatus&&e.reportStatus.apply(e,arguments)}),["prevent"])),s]},[(0,o.Wm)(c,{"fixed-width":"",icon:["far","flag"]}),(0,o._)("span",null,(0,r.zw)(e.$t("user_card.report")),1)],8,rt)],8,Ke)]})),trigger:(0,o.w5)((function(){return[(0,o._)("span",it,[(0,o.Wm)(l,{class:"fa-old-padding-layer"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{class:"fa-scale-110",icon:"ellipsis-h"}),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"plus"},null,512),[[i.F8,!e.expanded]]),(0,o.wy)((0,o.Wm)(c,{class:"focus-marker",transform:"shrink-6 up-8 right-16",icon:"times"},null,512),[[i.F8,e.expanded]])]})),_:1})]),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingDeleteDialog?((0,o.wg)(),(0,o.j4)(d,{key:0,title:e.$t("status.delete_confirm_title"),"cancel-text":e.$t("status.delete_confirm_cancel_button"),"confirm-text":e.$t("status.delete_confirm_accept_button"),onCancelled:e.hideDeleteStatusConfirmDialog,onAccepted:e.doDeleteStatus},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("status.delete_confirm")),1)]})),_:1},8,["title","cancel-text","confirm-text","onCancelled","onAccepted"])):(0,o.kq)("",!0)]))]})),_:1},8,["trigger-attrs","onShow","onClose"])}]]);var dt=n(45333),pt=n(48173),mt=n(19066),ht=n(1840),ft=n(10252),gt=n(92820),vt={key:1,class:"status-preview-no-content faint"},wt={key:2,class:"status-preview-no-content"},bt=n(13311),yt=n.n(bt);be.vI.add(ye.IJ7);const Dt={name:"StatusPopover",props:["statusId"],data:function(){return{error:!1}},computed:{status:function(){return yt()(this.$store.state.statuses.allStatuses,{id:this.statusId})}},components:{Status:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,24049))})),Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))}))},methods:{enter:function(){var e=this;if(!this.status){if(!this.statusId)return void(this.error=!0);this.$store.dispatch("fetchStatus",this.statusId).then((function(t){return e.error=!1})).catch((function(t){return e.error=!0}))}}},watch:{status:function(e,t){var n=this;e!==t&&this.$nextTick((function(){return n.$refs.popover.updateStyles()}))}}},_t=(0,_e.Z)(Dt,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("Status"),c=(0,o.up)("FAIcon"),l=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(l,{ref:"popover",trigger:"hover","stay-on-click":!0,"popover-class":"popover-default status-popover","bound-to":{x:"container"},onShow:e.enter},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(){return[e.status?((0,o.wg)(),(0,o.j4)(u,{key:0,"is-preview":!0,statusoid:e.status,compact:!0},null,8,["statusoid"])):e.error?((0,o.wg)(),(0,o.iD)("div",vt,(0,r.zw)(e.$t("status.status_unavailable")),1)):((0,o.wg)(),(0,o.iD)("div",wt,[(0,o.Wm)(c,{icon:"circle-notch",spin:"",size:"2x"})]))]})),_:3},8,["onShow"])}]]);var kt=n(22588),Ct={class:"user-list-popover"},St={class:"user-list-names"},jt={class:"user-list-screen-name"},Ft=n(42262);be.vI.add(ye.IJ7);const At={name:"UserListPopover",props:["users"],components:{RichContent:gt.Z,UnicodeDomainIndicator:Ft.Z,Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))})),UserAvatar:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,48173))}))},computed:{usersCapped:function(){return this.users.slice(0,16)}}},Ot=(0,_e.Z)(At,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserAvatar"),c=(0,o.up)("RichContent"),l=(0,o.up)("UnicodeDomainIndicator"),d=(0,o.up)("FAIcon"),p=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(p,{trigger:"hover",placement:"top",offset:{y:5}},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(){return[(0,o._)("div",Ct,[e.users.length?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:0},(0,o.Ko)(e.usersCapped,(function(e){return(0,o.wg)(),(0,o.iD)("div",{key:e.id,class:"user-list-row"},[(0,o.Wm)(u,{user:e,class:"avatar-small",compact:!0},null,8,["user"]),(0,o._)("div",St,[(0,o.Wm)(c,{class:"username",title:"@"+e.screen_name_ui,html:e.name_html,emoji:e.emoji},null,8,["title","html","emoji"]),(0,o._)("span",jt,(0,r.zw)(e.screen_name_ui),1),(0,o.Wm)(l,{user:e},null,8,["user"])])])})),128)):((0,o.wg)(),(0,o.j4)(d,{key:1,icon:"circle-notch",spin:"",size:"3x"}))])]})),_:3})}]]);var Et={class:"EmojiReactions"},zt={class:"reaction-emoji"},Pt=["src"],It={key:1,class:"reaction-emoji reaction-emoji-content"},xt={class:"emoji-reaction-counts"},Tt=n(15861),$t=n(64687),Bt=n.n($t);be.vI.add(ye.r8p,ye.Kl4,ye.LEp);const Ut={name:"EmojiReactions",components:{UserAvatar:pt.default,UserListPopover:Ot},props:["status"],data:function(){return{showAll:!1}},computed:{tooManyReactions:function(){return this.status.emoji_reactions.length>12},emojiReactions:function(){return this.showAll?this.status.emoji_reactions:this.status.emoji_reactions.slice(0,12)},showMoreString:function(){return"+".concat(this.status.emoji_reactions.length-12)},accountsForEmoji:function(){return this.status.emoji_reactions.reduce((function(e,t){return e[t.name]=t.accounts||[],e}),{})},loggedIn:function(){return!!this.$store.state.users.currentUser},remoteInteractionLink:function(){return this.$store.getters.remoteInteractionLink({statusId:this.status.id})}},methods:{toggleShowAll:function(){this.showAll=!this.showAll},reactedWith:function(e){return this.status.emoji_reactions.find((function(t){return t.name===e})).me},fetchEmojiReactionsByIfMissing:function(){var e=this;return(0,Tt.Z)(Bt().mark((function t(){return Bt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.status.emoji_reactions.find((function(e){return!e.accounts}))){t.next=5;break}return t.next=4,e.$store.dispatch("fetchEmojiReactionsBy",e.status.id);case 4:return t.abrupt("return",t.sent);case 5:case"end":return t.stop()}}),t)})))()},reactWith:function(e){this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:e})},unreact:function(e){this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:e})},emojiOnClick:function(e,t){var n=this;return(0,Tt.Z)(Bt().mark((function t(){return Bt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.loggedIn){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,n.fetchEmojiReactionsByIfMissing();case 4:n.reactedWith(e)?n.unreact(e):n.reactWith(e);case 5:case"end":return t.stop()}}),t)})))()},counterTriggerAttrs:function(e){return{class:["btn","button-default","emoji-reaction-count-button",{"-picked-reaction":this.reactedWith(e.name)}],"aria-label":this.$tc("status.reaction_count_label",e.count,{num:e.count})}}}},Mt=(0,_e.Z)(Ut,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("FALayers"),l=(0,o.up)("UserListPopover");return(0,o.wg)(),(0,o.iD)("div",Et,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.emojiReactions,(function(n){return(0,o.wg)(),(0,o.iD)("span",{key:n.url||n.name,class:"emoji-reaction-container btn-group"},[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.loggedIn?"button":"a"),(0,o.dG)(e.loggedIn?{}:{href:e.remoteInteractionLink},{role:"button",class:["emoji-reaction btn button-default",{"-picked-reaction":e.reactedWith(n.name)}],title:n.url?n.name:void 0,"aria-pressed":e.reactedWith(n.name),onClick:function(t){return e.emojiOnClick(n.name,t)}}),{default:(0,o.w5)((function(){return[(0,o._)("span",zt,[n.url?((0,o.wg)(),(0,o.iD)("img",{key:0,src:n.url,class:"reaction-emoji-content",width:"1em"},null,8,Pt)):((0,o.wg)(),(0,o.iD)("span",It,(0,r.zw)(n.name),1))]),(0,o.Wm)(c,null,{default:(0,o.w5)((function(){return[e.reactedWith(n.name)?((0,o.wg)(),(0,o.j4)(u,{key:0,class:"active-marker",transform:"shrink-6 up-9",icon:"check"})):(0,o.kq)("",!0),e.reactedWith(n.name)?((0,o.wg)(),(0,o.j4)(u,{key:2,class:"focus-marker",transform:"shrink-6 up-9",icon:"minus"})):((0,o.wg)(),(0,o.j4)(u,{key:1,class:"focus-marker",transform:"shrink-6 up-9",icon:"plus"}))]})),_:2},1024)]})),_:2},1040,["class","title","aria-pressed","onClick"])),(0,o.Wm)(l,{users:e.accountsForEmoji[n.name],class:"emoji-reaction-popover","trigger-attrs":e.counterTriggerAttrs(n),onShow:t[0]||(t[0]=function(t){return e.fetchEmojiReactionsByIfMissing()})},{default:(0,o.w5)((function(){return[(0,o._)("span",xt,(0,r.zw)(n.count),1)]})),_:2},1032,["users","trigger-attrs"])])})),128)),e.tooManyReactions?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"emoji-reaction-expand faint",href:"javascript:void(0)",onClick:t[1]||(t[1]=function(){return e.toggleShowAll&&e.toggleShowAll.apply(e,arguments)})},(0,r.zw)(e.showAll?e.$t("general.show_less"):e.showMoreString),1)):(0,o.kq)("",!0)])}]]);var Lt=n(12061),Rt=n(21268),qt=n(20460),Nt=n(4493),Zt=n(95052),Wt=n(67828);function Ht(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ht(Object(n),!0).forEach((function(t){(0,le.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ht(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}be.vI.add(ye.FU$,ye.g4A,ye.byT,ye._1N,ye.NBC,ye.x5v,ye.Lh7,ye.CPW,ye.Tab,ye.RKn,ye.cNd,ye.Aq,ye.Mdf,ye.RP7,ye.mTx,ye.ptq,ye.cLY);var Kt,Gt=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},Yt=function(e,t,n){var o=Gt(t),r="controlledSet".concat(o),i="uncontrolled".concat(o);e[r]?e[r](n):e[i]=n};const Jt={name:"Status",components:{ReplyButton:ke,FavoriteButton:Ie,ReactButton:Me,RetweetButton:Ve,ExtraButtons:lt,PostStatusForm:dt.Z,UserAvatar:pt.default,AvatarList:mt.Z,Timeago:ht.Z,StatusPopover:_t,UserListPopover:Ot,EmojiReactions:Mt,StatusContent:ft.Z,RichContent:gt.Z,MentionLink:qt.Z,MentionsLine:Rt.Z,UserPopover:kt.default,UserLink:Lt.Z},props:["statusoid","expandable","inConversation","focused","highlight","compact","replies","isPreview","noHeading","inlineExpanded","showPinned","inProfile","profileUserId","inQuote","simpleTree","controlledThreadDisplayStatus","controlledToggleThreadDisplay","showOtherRepliesAsButton","controlledShowingTall","controlledToggleShowingTall","controlledExpandingSubject","controlledToggleExpandingSubject","controlledShowingLongSubject","controlledToggleShowingLongSubject","controlledReplying","controlledToggleReplying","controlledMediaPlaying","controlledSetMediaPlaying","dive"],data:function(){return{uncontrolledReplying:!1,unmuted:!1,userExpanded:!1,uncontrolledMediaPlaying:[],suspendable:!0,error:null,headTailLinks:null,displayQuote:!this.inQuote}},computed:Vt(Vt({},(Kt=["replying","mediaPlaying"],Kt.reduce((function(e,t){var n=Gt(t),o="controlledToggle".concat(n),r="controlled".concat(n),i="uncontrolled".concat(n);return e[t]=function(){return void 0===this.$data[o]&&void 0===this.$props[o]||!this[o]?this[i]:this[r]},e}),{}))),{},{muteWords:function(){return this.mergedConfig.muteWords},showReasonMutedThread:function(){return(this.status.thread_muted||this.status.reblog&&this.status.reblog.thread_muted)&&!this.inConversation},repeaterClass:function(){var e=this.statusoid.user;return(0,Zt.M)(e)},userClass:function(){var e=this.retweet?this.statusoid.retweeted_status.user:this.statusoid.user;return(0,Zt.M)(e)},deleted:function(){return this.statusoid.deleted},repeaterStyle:function(){var e=this.statusoid.user,t=this.mergedConfig.highlight;return(0,Zt.q)(t[e.screen_name])},userStyle:function(){if(!this.noHeading){var e=this.retweet?this.statusoid.retweeted_status.user:this.statusoid.user,t=this.mergedConfig.highlight;return(0,Zt.q)(t[e.screen_name])}},userProfileLink:function(){return this.generateUserProfileLink(this.status.user.id,this.status.user.screen_name)},replyProfileLink:function(){if(this.isReply){var e=this.$store.getters.findUser(this.status.in_reply_to_user_id);return e?e.statusnet_profile_url:"NOT_FOUND"}},retweet:function(){return!!this.statusoid.retweeted_status},retweeterUser:function(){return this.statusoid.user},retweeter:function(){return this.statusoid.user.name||this.statusoid.user.screen_name_ui},retweeterHtml:function(){return this.statusoid.user.name},retweeterProfileLink:function(){return this.generateUserProfileLink(this.statusoid.user.id,this.statusoid.user.screen_name)},status:function(){return this.retweet?this.statusoid.retweeted_status:this.statusoid},statusFromGlobalRepository:function(){return this.$store.state.statuses.allStatusesObject[this.status.id]},loggedIn:function(){return!!this.currentUser},muteWordHits:function(){return(0,Wt.u)(this.status,this.muteWords)},rtBotStatus:function(){return this.statusoid.user.bot},botStatus:function(){return this.status.user.bot},botIndicator:function(){return this.botStatus&&!this.hideBotIndication},rtBotIndicator:function(){return this.rtBotStatus&&!this.hideBotIndication},mentionsLine:function(){var e=this;if(!this.headTailLinks)return[];var t=new Set(this.headTailLinks.writtenMentions.map((function(e){return e.url})));return this.status.attentions.filter((function(n){return n.id!==e.status.in_reply_to_user_id&&n.statusnet_profile_url!==e.status.user.statusnet_profile_url&&!t.has(n.statusnet_profile_url)})).map((function(e){return{url:e.statusnet_profile_url,content:e.screen_name,userId:e.id}}))},hasMentionsLine:function(){return this.mentionsLine.length>0},muted:function(){if(this.statusoid.user.id===this.currentUser.id)return!1;var e=this.userIsMuted||status.thread_muted||this.muteWordHits.length>0||this.muteBotStatuses&&this.botStatus&&!this.compact;return!this.unmuted&&!this.shouldNotMute&&e},userIsMuted:function(){if(this.statusoid.user.id===this.currentUser.id)return!1;var e=this.status,t=e.reblog,n=this.$store.getters.relationship(e.user.id),o=t&&this.$store.getters.relationship(t.user.id);return e.muted||t&&t.muted||n.muting||o&&o.muting},shouldNotMute:function(){var e=this.status,t=e.reblog;return(this.inProfile&&(!t&&e.user.id===this.profileUserId||t&&t.user.id===this.profileUserId)||this.inConversation&&e.thread_muted)&&!this.muteWordHits.length>0},hideMutedUsers:function(){return this.mergedConfig.hideMutedPosts},hideMutedThreads:function(){return this.mergedConfig.hideMutedThreads},hideFilteredStatuses:function(){return this.mergedConfig.hideFilteredStatuses},hideWordFilteredPosts:function(){return this.mergedConfig.hideWordFilteredPosts},hideStatus:function(){return!this.shouldNotMute&&(this.muted&&this.hideFilteredStatuses||this.userIsMuted&&this.hideMutedUsers||this.status.thread_muted&&this.hideMutedThreads||this.muteWordHits.length>0&&this.hideWordFilteredPosts)},isFocused:function(){return!!this.focused||!!this.inConversation&&this.status.id===this.highlight},isReply:function(){return!(!this.status.in_reply_to_status_id||!this.status.in_reply_to_user_id)},replyToName:function(){if(this.status.in_reply_to_screen_name)return this.status.in_reply_to_screen_name;var e=this.$store.getters.findUser(this.status.in_reply_to_user_id);return e&&e.screen_name_ui},replySubject:function(){if(!this.status.summary)return"";var e=he()(this.status.summary),t=this.mergedConfig.subjectLineBehavior,n=e.match(/^re[: ]/i);return"noop"!==t&&n||"masto"===t?e:"email"===t?"re: ".concat(e):"noop"===t?"":void 0},combinedFavsAndRepeatsUsers:function(){var e=[].concat(this.statusFromGlobalRepository.favoritedBy,this.statusFromGlobalRepository.rebloggedBy);return pe()(e,"id")},tags:function(){return this.status.tags.filter((function(e){return e.hasOwnProperty("name")})).map((function(e){return e.name})).join(" ")},hidePostStats:function(){return this.mergedConfig.hidePostStats},muteBotStatuses:function(){return this.mergedConfig.muteBotStatuses},hideBotIndication:function(){return this.mergedConfig.hideBotIndication},currentUser:function(){return this.$store.state.users.currentUser},betterShadow:function(){return this.$store.state.interface.browserSupport.cssFilter},mergedConfig:function(){return this.$store.getters.mergedConfig},isSuspendable:function(){return!this.replying&&0===this.mediaPlaying.length},inThreadForest:function(){return!!this.controlledThreadDisplayStatus},threadShowing:function(){return"showing"===this.controlledThreadDisplayStatus},visibilityLocalized:function(){return this.$i18n.t("general.scope_in_timeline."+this.status.visibility)},isEdited:function(){return null!==this.status.edited_at},editingAvailable:function(){return this.$store.state.instance.editingAvailable},hasVisibleQuote:function(){return this.status.quote_url&&this.status.quote_visible},hasInvisibleQuote:function(){return this.status.quote_url&&!this.status.quote_visible},quotedStatus:function(){return this.status.quote_id?this.$store.state.statuses.allStatusesObject[this.status.quote_id]:void 0},shouldDisplayQuote:function(){return this.quotedStatus&&this.displayQuote}}),methods:{visibilityIcon:function(e){switch(e){case"private":return"lock";case"unlisted":return"lock-open";case"direct":return"envelope";default:return"globe"}},showError:function(e){this.error=e},clearError:function(){this.error=void 0},toggleReplying:function(){var e,t,n,o;e=this,t=Gt("replying"),n="controlledToggle".concat(t),o="uncontrolled".concat(t),e[n]?e[n]():e[o]=!e[o]},gotoOriginal:function(e){this.inConversation&&this.$emit("goto",e)},toggleExpanded:function(){this.$emit("toggleExpanded")},toggleMute:function(){this.unmuted=!this.unmuted},toggleUserExpanded:function(){this.userExpanded=!this.userExpanded},generateUserProfileLink:function(e,t){return(0,Nt.Z)(e,t,this.$store.state.instance.restrictedNicknames)},addMediaPlaying:function(e){Yt(this,"mediaPlaying",this.mediaPlaying.concat(e))},removeMediaPlaying:function(e){Yt(this,"mediaPlaying",this.mediaPlaying.filter((function(t){return t!==e})))},setHeadTailLinks:function(e){this.headTailLinks=e},toggleThreadDisplay:function(){this.controlledToggleThreadDisplay()},scrollIfHighlighted:function(e){var t=e;if(this.status.id===t){var n=this.$el.getBoundingClientRect();n.top<100||n.height>=window.innerHeight-50?window.scrollBy(0,n.top-100):n.bottom>window.innerHeight-50&&window.scrollBy(0,n.bottom-window.innerHeight+50)}},toggleDisplayQuote:function(){var e=this;this.shouldDisplayQuote?this.displayQuote=!1:this.quotedStatus?this.displayQuote=!0:this.$store.dispatch("fetchStatus",this.status.quote_id).then((function(){e.displayQuote=!0}))}},watch:{highlight:function(e){this.scrollIfHighlighted(e)},"status.repeat_num":function(e){this.isFocused&&this.statusFromGlobalRepository.rebloggedBy&&this.statusFromGlobalRepository.rebloggedBy.length!==e&&this.$store.dispatch("fetchRepeats",this.status.id)},"status.fave_num":function(e){this.isFocused&&this.statusFromGlobalRepository.favoritedBy&&this.statusFromGlobalRepository.favoritedBy.length!==e&&this.$store.dispatch("fetchFavs",this.status.id)},isSuspendable:function(e){this.suspendable=e}}},Qt=(0,_e.Z)(Jt,[["render",function(e,t,n,le,de,pe){var me=(0,o.up)("FAIcon"),he=(0,o.up)("user-link"),fe=(0,o.up)("UserAvatar"),ge=(0,o.up)("RichContent"),ve=(0,o.up)("router-link"),we=(0,o.up)("UserPopover"),be=(0,o.up)("Timeago"),ye=(0,o.up)("StatusPopover"),De=(0,o.up)("MentionLink"),_e=(0,o.up)("MentionsLine"),ke=(0,o.up)("i18n-t"),Ce=(0,o.up)("StatusContent"),Se=(0,o.up)("Status",!0),je=(0,o.up)("UserListPopover"),Fe=(0,o.up)("AvatarList"),Ae=(0,o.up)("EmojiReactions"),Oe=(0,o.up)("reply-button"),Ee=(0,o.up)("retweet-button"),ze=(0,o.up)("favorite-button"),Pe=(0,o.up)("ReactButton"),Ie=(0,o.up)("extra-buttons"),xe=(0,o.up)("PostStatusForm");return e.hideStatus?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,ref:"root",class:(0,r.C_)(["Status",[{"-focused":e.isFocused},{"-conversation":e.inlineExpanded}]])},[e.error?((0,o.wg)(),(0,o.iD)("div",s,[(0,o.Uk)((0,r.zw)(e.error)+" ",1),(0,o._)("span",{class:"fa-scale-110 fa-old-padding",onClick:t[0]||(t[0]=function(){return e.clearError&&e.clearError.apply(e,arguments)})},[(0,o.Wm)(me,{icon:"times"})])])):(0,o.kq)("",!0),e.muted&&!e.isPreview?((0,o.wg)(),(0,o.iD)("div",a,[(0,o._)("small",u,[e.muted&&e.retweet?((0,o.wg)(),(0,o.j4)(me,{key:0,class:"fa-scale-110 fa-old-padding repeat-icon",icon:"retweet"})):(0,o.kq)("",!0),(0,o.Wm)(he,{user:e.status.user,at:!1},null,8,["user"])]),e.showReasonMutedThread?((0,o.wg)(),(0,o.iD)("small",c,(0,r.zw)(e.$t("status.thread_muted")),1)):(0,o.kq)("",!0),e.showReasonMutedThread&&e.muteWordHits.length>0?((0,o.wg)(),(0,o.iD)("small",l,(0,r.zw)(e.$t("status.thread_muted_and_words")),1)):(0,o.kq)("",!0),(0,o._)("small",{class:"mute-words",title:e.muteWordHits.join(", ")},(0,r.zw)(e.muteWordHits.join(", ")),9,d),(0,o._)("button",{class:"unmute button-unstyled",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{icon:"eye-slash",class:"fa-scale-110 fa-old-padding"})])])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[e.showPinned?((0,o.wg)(),(0,o.iD)("div",p,[(0,o.Wm)(me,{icon:"thumbtack",class:"faint"}),(0,o._)("span",m,(0,r.zw)(e.$t("status.pinned")),1)])):(0,o.kq)("",!0),!e.retweet||e.noHeading||e.inConversation?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)([[e.repeaterClass,{highlighted:e.repeaterStyle}],"status-container repeat-info"]),style:(0,r.j5)([e.repeaterStyle])},[e.retweet?((0,o.wg)(),(0,o.j4)(fe,{key:0,class:"left-side repeater-avatar",bot:e.rtBotIndicator,"better-shadow":e.betterShadow,user:e.statusoid.user},null,8,["bot","better-shadow","user"])):(0,o.kq)("",!0),(0,o._)("div",h,[(0,o._)("bdi",{class:"status-username repeater-name",title:e.retweeter},[e.retweeterHtml?((0,o.wg)(),(0,o.j4)(ve,{key:0,to:e.retweeterProfileLink},{default:(0,o.w5)((function(){return[(0,o.Wm)(ge,{html:e.retweeterHtml,emoji:e.retweeterUser.emoji},null,8,["html","emoji"])]})),_:1},8,["to"])):((0,o.wg)(),(0,o.j4)(ve,{key:1,to:e.retweeterProfileLink},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.retweeter),1)]})),_:1},8,["to"]))],8,f),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(me,{icon:"retweet",class:"repeat-icon",title:e.$t("tool_tip.repeat")},null,8,["title"]),(0,o.Uk)(" "+(0,r.zw)(e.$t("timeline.repeated")),1)])],6)),e.deleted?((0,o.wg)(),(0,o.iD)("div",ie,[(0,o._)("div",se,[(0,o.Wm)(fe,{class:"post-avatar",compact:e.compact,bot:e.botIndicator},null,8,["compact","bot"])]),(0,o._)("div",ae,[(0,o._)("div",ue,(0,r.zw)(e.$t("status.status_deleted")),1),e.replying?((0,o.wg)(),(0,o.j4)(Oe,{key:0,replying:e.replying,status:e.status,onToggle:e.toggleReplying},null,8,["replying","status","onToggle"])):(0,o.kq)("",!0)])])):((0,o.wg)(),(0,o.iD)("div",{key:2,class:(0,r.C_)([[e.userClass,{highlighted:e.userStyle,"-repeat":e.retweet&&!e.inConversation}],"status-container"]),style:(0,r.j5)([e.userStyle]),"data-tags":e.tags},[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",v,[(0,o._)("a",{href:e.$router.resolve(e.userProfileLink).href,onClick:t[2]||(t[2]=(0,i.iM)((function(){}),["prevent"]))},[(0,o.Wm)(we,{"user-id":e.status.user.id,"overlay-centers":!0},{default:(0,o.w5)((function(){return[(0,o.Wm)(fe,{class:"post-avatar",bot:e.botIndicator,compact:e.compact,"better-shadow":e.betterShadow,user:e.status.user},null,8,["bot","compact","better-shadow","user"])]})),_:1},8,["user-id"])],8,w)])),(0,o._)("div",b,[e.noHeading?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",y,[(0,o._)("div",D,[(0,o._)("div",_,[e.status.user.name_html?((0,o.wg)(),(0,o.iD)("h4",{key:0,class:"status-username",title:e.status.user.name},[(0,o.Wm)(ge,{html:e.status.user.name,emoji:e.status.user.emoji},null,8,["html","emoji"])],8,k)):((0,o.wg)(),(0,o.iD)("h4",{key:1,class:"status-username",title:e.status.user.name},(0,r.zw)(e.status.user.name),9,C)),(0,o.Wm)(he,{class:"account-name",title:e.status.user.screen_name_ui,user:e.status.user,at:!1},null,8,["title","user"]),e.status.user&&e.status.user.favicon?((0,o.wg)(),(0,o.iD)("img",{key:2,class:"status-favicon",src:e.status.user.favicon},null,8,S)):(0,o.kq)("",!0)]),(0,o._)("span",j,[(0,o.Wm)(ve,{class:"timeago faint-link",to:{name:"conversation",params:{id:e.status.id}}},{default:(0,o.w5)((function(){return[(0,o.Wm)(be,{time:e.status.created_at,"auto-update":60},null,8,["time"])]})),_:1},8,["to"]),e.status.visibility?((0,o.wg)(),(0,o.iD)("span",{key:0,class:"visibility-icon",title:e.visibilityLocalized},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:e.visibilityIcon(e.status.visibility)},null,8,["icon"])],8,F)):(0,o.kq)("",!0),e.expandable&&!e.isPreview?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-unstyled",title:e.$t("status.expand"),onClick:t[3]||(t[3]=(0,i.iM)((function(){return e.toggleExpanded&&e.toggleExpanded.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:"plus-square"})],8,A)):(0,o.kq)("",!0),e.unmuted?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-unstyled",onClick:t[4]||(t[4]=(0,i.iM)((function(){return e.toggleMute&&e.toggleMute.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",icon:"eye-slash",class:"fa-scale-110"})])):(0,o.kq)("",!0),e.inThreadForest&&e.replies&&e.replies.length&&!e.simpleTree?((0,o.wg)(),(0,o.iD)("button",{key:3,class:"button-unstyled",title:e.threadShowing?e.$t("status.thread_hide"):e.$t("status.thread_show"),"aria-expanded":e.threadShowing?"true":"false",onClick:t[5]||(t[5]=(0,i.iM)((function(){return e.toggleThreadDisplay&&e.toggleThreadDisplay.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:e.threadShowing?"chevron-up":"chevron-down"},null,8,["icon"])],8,O)):(0,o.kq)("",!0),e.dive&&!e.simpleTree?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled",title:e.$t("status.show_only_conversation_under_this"),onClick:t[6]||(t[6]=(0,i.iM)((function(){return e.dive&&e.dive.apply(e,arguments)}),["prevent"]))},[(0,o.Wm)(me,{"fixed-width":"",class:"fa-scale-110",icon:"angle-double-right"})],8,E)):(0,o.kq)("",!0)])]),e.isReply||e.hasMentionsLine?((0,o.wg)(),(0,o.iD)("div",z,[e.isReply?((0,o.wg)(),(0,o.iD)("span",P,[e.isPreview?((0,o.wg)(),(0,o.iD)("span",T,[(0,o._)("span",$,(0,r.zw)(e.$t("status.reply_to")),1)])):((0,o.wg)(),(0,o.j4)(ye,{key:0,"status-id":e.status.parent_visible&&e.status.in_reply_to_status_id,class:(0,r.C_)(["reply-to-popover",{"-strikethrough":!e.status.parent_visible}]),style:{"min-width":"0"}},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled reply-to","aria-label":e.$t("tool_tip.reply"),onClick:t[7]||(t[7]=(0,i.iM)((function(t){return e.gotoOriginal(e.status.in_reply_to_status_id)}),["prevent"]))},[(0,o.Wm)(me,{class:"fa-scale-110 fa-old-padding",icon:"reply",flip:"horizontal"}),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o._)("span",x,(0,r.zw)(e.$t("status.reply_to")),1)],8,I)]})),_:1},8,["status-id","class"])),(0,o.Wm)(De,{content:e.replyToName,url:e.replyProfileLink,"user-id":e.status.in_reply_to_user_id,"user-screen-name":e.status.in_reply_to_screen_name},null,8,["content","url","user-id","user-screen-name"])])):(0,o.kq)("",!0),e.hasMentionsLine?((0,o.wg)(),(0,o.iD)("span",B,[(0,o._)("span",{class:"mentions","aria-label":e.$t("tool_tip.mentions"),onClick:t[8]||(t[8]=(0,i.iM)((function(t){return e.gotoOriginal(e.status.in_reply_to_status_id)}),["prevent"]))},[(0,o._)("span",M,(0,r.zw)(e.$t("status.mentions")),1)],8,U),e.hasMentionsLine?((0,o.wg)(),(0,o.j4)(_e,{key:0,mentions:e.mentionsLine.slice(0,1),class:"mentions-line-first"},null,8,["mentions"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),e.hasMentionsLine?((0,o.wg)(),(0,o.j4)(_e,{key:2,mentions:e.mentionsLine.slice(1),class:"mentions-line"},null,8,["mentions"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),e.isEdited&&e.editingAvailable&&!e.isPreview?((0,o.wg)(),(0,o.iD)("div",L,[(0,o.Wm)(ke,{keypath:"status.edited_at",tag:"span"},{time:(0,o.w5)((function(){return[(0,o.Wm)(be,{"template-key":"time.in_past",time:e.status.edited_at,"auto-update":60,"long-format":!0},null,8,["time"])]})),_:1})])):(0,o.kq)("",!0)])),(0,o.Wm)(Ce,{ref:"content",status:e.status,"no-heading":e.noHeading,highlight:e.highlight,focused:e.isFocused,"controlled-showing-tall":e.controlledShowingTall,"controlled-expanding-subject":e.controlledExpandingSubject,"controlled-showing-long-subject":e.controlledShowingLongSubject,"controlled-toggle-showing-tall":e.controlledToggleShowingTall,"controlled-toggle-expanding-subject":e.controlledToggleExpandingSubject,"controlled-toggle-showing-long-subject":e.controlledToggleShowingLongSubject,onMediaplay:t[9]||(t[9]=function(t){return e.addMediaPlaying(t)}),onMediapause:t[10]||(t[10]=function(t){return e.removeMediaPlaying(t)}),onParseReady:e.setHeadTailLinks},null,8,["status","no-heading","highlight","focused","controlled-showing-tall","controlled-expanding-subject","controlled-showing-long-subject","controlled-toggle-showing-tall","controlled-toggle-expanding-subject","controlled-toggle-showing-long-subject","onParseReady"]),e.hasVisibleQuote?((0,o.wg)(),(0,o.iD)("article",R,[(0,o._)("button",{class:"button-unstyled -link display-quoted-status-button","aria-expanded":e.shouldDisplayQuote,onClick:t[11]||(t[11]=function(){return e.toggleDisplayQuote&&e.toggleDisplayQuote.apply(e,arguments)})},[(0,o.Uk)((0,r.zw)(e.shouldDisplayQuote?e.$t("status.hide_quote"):e.$t("status.display_quote"))+" ",1),(0,o.Wm)(me,{class:"display-quoted-status-button-icon",icon:e.shouldDisplayQuote?"chevron-up":"chevron-down"},null,8,["icon"])],8,q),e.shouldDisplayQuote?((0,o.wg)(),(0,o.j4)(Se,{key:0,statusoid:e.quotedStatus,"in-quote":!0},null,8,["statusoid"])):(0,o.kq)("",!0)])):e.hasInvisibleQuote?((0,o.wg)(),(0,o.iD)("p",N,[(0,o.Wm)(ke,{keypath:"status.invisible_quote"},{link:(0,o.w5)((function(){return[(0,o._)("bdi",null,[(0,o._)("a",{href:e.status.quote_url,target:"_blank"},(0,r.zw)(e.status.quote_url),9,Z)])]})),_:1})])):(0,o.kq)("",!0),e.inConversation&&!e.isPreview&&e.replies&&e.replies.length?((0,o.wg)(),(0,o.iD)("div",W,[e.showOtherRepliesAsButton&&e.replies.length>1?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled -link faint",title:e.$tc("status.ancestor_follow",e.replies.length-1,{numReplies:e.replies.length-1}),onClick:t[12]||(t[12]=(0,i.iM)((function(){return e.dive&&e.dive.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$tc("status.replies_list_with_others",e.replies.length-1,{numReplies:e.replies.length-1})),9,H)):((0,o.wg)(),(0,o.iD)("span",V,(0,r.zw)(e.$t("status.replies_list")),1)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.replies,(function(t){return(0,o.wg)(),(0,o.j4)(ye,{key:t.id,"status-id":t.id},{default:(0,o.w5)((function(){return[(0,o._)("button",{class:"button-unstyled -link reply-link",onClick:(0,i.iM)((function(n){return e.gotoOriginal(t.id)}),["prevent"])},(0,r.zw)(t.name),9,K)]})),_:2},1032,["status-id"])})),128))])):(0,o.kq)("",!0),(0,o.Wm)(i.uT,{name:"fade"},{default:(0,o.w5)((function(){return[!e.hidePostStats&&e.isFocused&&e.combinedFavsAndRepeatsUsers.length>0?((0,o.wg)(),(0,o.iD)("div",G,[(0,o._)("div",Y,[e.statusFromGlobalRepository.rebloggedBy&&e.statusFromGlobalRepository.rebloggedBy.length>0?((0,o.wg)(),(0,o.j4)(je,{key:0,users:e.statusFromGlobalRepository.rebloggedBy},{default:(0,o.w5)((function(){return[(0,o._)("div",J,[(0,o._)("a",Q,(0,r.zw)(e.$t("status.repeats")),1),(0,o._)("div",X,(0,r.zw)(e.statusFromGlobalRepository.rebloggedBy.length),1)])]})),_:1},8,["users"])):(0,o.kq)("",!0),e.statusFromGlobalRepository.favoritedBy&&e.statusFromGlobalRepository.favoritedBy.length>0?((0,o.wg)(),(0,o.j4)(je,{key:1,users:e.statusFromGlobalRepository.favoritedBy},{default:(0,o.w5)((function(){return[(0,o._)("div",ee,[(0,o._)("a",te,(0,r.zw)(e.$t("status.favorites")),1),(0,o._)("div",ne,(0,r.zw)(e.statusFromGlobalRepository.favoritedBy.length),1)])]})),_:1},8,["users"])):(0,o.kq)("",!0),(0,o._)("div",oe,[(0,o.Wm)(Fe,{users:e.combinedFavsAndRepeatsUsers},null,8,["users"])])])])):(0,o.kq)("",!0)]})),_:1}),!e.mergedConfig.emojiReactionsOnTimeline&&!e.isFocused||e.noHeading||e.isPreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(Ae,{key:4,status:e.status},null,8,["status"])),e.noHeading||e.isPreview?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",re,[(0,o.Wm)(Oe,{replying:e.replying,status:e.status,onToggle:e.toggleReplying},null,8,["replying","status","onToggle"]),(0,o.Wm)(Ee,{visibility:e.status.visibility,"logged-in":e.loggedIn,status:e.status},null,8,["visibility","logged-in","status"]),(0,o.Wm)(ze,{"logged-in":e.loggedIn,status:e.status},null,8,["logged-in","status"]),e.loggedIn?((0,o.wg)(),(0,o.j4)(Pe,{key:0,status:e.status},null,8,["status"])):(0,o.kq)("",!0),(0,o.Wm)(Ie,{status:e.status,onOnError:e.showError,onOnSuccess:e.clearError},null,8,["status","onOnError","onOnSuccess"])]))])],14,g)),e.replying?((0,o.wg)(),(0,o.iD)("div",ce,[(0,o.Wm)(xe,{class:"reply-body","reply-to":e.status.id,attentions:e.status.attentions,"replied-user":e.status.user,"copy-message-scope":e.status.visibility,subject:e.replySubject,onPosted:e.toggleReplying},null,8,["reply-to","attentions","replied-user","copy-message-scope","subject","onPosted"])])):(0,o.kq)("",!0)],64))],2))}]])},10252:(e,t,n)=>{"use strict";n.d(t,{Z:()=>K});var o=n(66252),r=n(3577),i={key:0},s={key:1},a={key:3,class:"link-preview media-body"},u=n(4942),c=n(66596),l=["role"],d=["title"],p={class:"option-result-label"},m={class:"result-percentage"},h=["role","aria-labelledby","aria-checked","onClick"],f=["disabled","value"],g=["disabled","value"],v={class:"option-vote"},w={class:"footer faint"},b=["disabled"],y={class:"total"},D=n(35161),_=n.n(D),k=n(84486),C=n.n(k),S=n(1840),j=n(53599),F=n(92820);const A={name:"Poll",props:["basePoll","emoji"],components:{Timeago:S.Z,RichContent:F.Z},data:function(){return{loading:!1,choices:[],randomSeed:(0,j.Z)()}},created:function(){this.$store.state.polls.pollsObject[this.pollId]||this.$store.dispatch("mergeOrAddPoll",this.basePoll),this.$store.dispatch("trackPoll",this.pollId)},unmounted:function(){this.$store.dispatch("untrackPoll",this.pollId)},computed:{pollId:function(){return this.basePoll.id},poll:function(){return this.$store.state.polls.pollsObject[this.pollId]||{}},options:function(){return this.poll&&this.poll.options||[]},expiresAt:function(){return this.poll&&this.poll.expires_at||0},expired:function(){return this.poll&&this.poll.expired||!1},loggedIn:function(){return this.$store.state.users.currentUser},showResults:function(){return this.poll.voted||this.expired||!this.loggedIn},totalVotesCount:function(){return this.poll.votes_count},containerClass:function(){return{loading:this.loading}},choiceIndices:function(){return this.choices.map((function(e,t){return e&&t})).filter((function(e){return"number"==typeof e}))},isDisabled:function(){var e=0===this.choiceIndices.length;return this.loading||e}},methods:{percentageForOption:function(e){return 0===this.totalVotesCount?0:Math.round(e/this.totalVotesCount*100)},resultTitle:function(e){return"".concat(e.votes_count,"/").concat(this.totalVotesCount," ").concat(this.$t("polls.votes"))},fetchPoll:function(){this.$store.dispatch("refreshPoll",{id:this.statusId,pollId:this.poll.id})},activateOption:function(e){var t=this.$el.querySelectorAll("input"),n=this.$el.querySelector('input[value="'.concat(e,'"]'));this.poll.multiple?n.checked=!n.checked:(C()(t,(function(e){e.checked=!1})),n.checked=!0),this.choices=_()(t,(function(e){return e.checked}))},optionId:function(e){return"poll".concat(this.poll.id,"-").concat(e)},vote:function(){var e=this;0!==this.choiceIndices.length&&(this.loading=!0,this.$store.dispatch("votePoll",{id:this.statusId,pollId:this.poll.id,choices:this.choiceIndices}).then((function(t){e.loading=!1})))}}};var O=n(83744);const E=(0,O.Z)(A,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("RichContent"),c=(0,o.up)("Timeago"),D=(0,o.up)("i18n-t");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["poll",e.containerClass])},[(0,o._)("div",{role:e.showResults?"section":e.poll.multiple?"group":"radiogroup"},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.options,(function(t,n){return(0,o.wg)(),(0,o.iD)("div",{key:n,class:"poll-option"},[e.showResults?((0,o.wg)(),(0,o.iD)("div",{key:0,title:e.resultTitle(t),class:"option-result"},[(0,o._)("div",p,[(0,o._)("span",m,(0,r.zw)(e.percentageForOption(t.votes_count))+"% ",1),(0,o.Wm)(u,{html:t.title_html,"handle-links":!1,emoji:e.emoji},null,8,["html","emoji"])]),(0,o._)("div",{class:"result-fill",style:(0,r.j5)({width:"".concat(e.percentageForOption(t.votes_count),"%")})},null,4)],8,d)):((0,o.wg)(),(0,o.iD)("div",{key:1,tabindex:"0",role:e.poll.multiple?"checkbox":"radio","aria-labelledby":"option-vote-".concat(e.randomSeed,"-").concat(n),"aria-checked":e.choices[n],onClick:function(t){return e.activateOption(n)}},[e.poll.multiple?((0,o.wg)(),(0,o.iD)("input",{key:0,type:"checkbox",class:"poll-checkbox",disabled:e.loading,value:n},null,8,f)):((0,o.wg)(),(0,o.iD)("input",{key:1,type:"radio",disabled:e.loading,value:n},null,8,g)),(0,o._)("label",v,[(0,o.Wm)(u,{id:"option-vote-".concat(e.randomSeed,"-").concat(n),html:t.title_html,"handle-links":!1,emoji:e.emoji},null,8,["id","html","emoji"])])],8,h))])})),128))],8,l),(0,o._)("div",w,[e.showResults?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default poll-vote-button",type:"button",disabled:e.isDisabled,onClick:t[0]||(t[0]=function(){return e.vote&&e.vote.apply(e,arguments)})},(0,r.zw)(e.$t("polls.vote")),9,b)),(0,o._)("div",y,["number"==typeof e.poll.voters_count?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.$tc("polls.people_voted_count",e.poll.voters_count,{count:e.poll.voters_count}))+" ·  ",1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.$tc("polls.votes_count",e.poll.votes_count,{count:e.poll.votes_count}))+" ·  ",1)],64))]),(0,o._)("span",null,[(0,o.Wm)(D,{scope:"global",keypath:e.expired?"polls.expired":"polls.expires_in"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,{time:e.expiresAt,"auto-update":60,"now-threshold":0},null,8,["time"])]})),_:1},8,["keypath"])])])],2)}]]);var z=n(67671),P=n(49963),I={class:"body"},x=n(58394),T=n(989),$=n(9382),B=n(84131);function U(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}$.vI.add(B.gMD,B.Xig,B.VmB,B.nNP,B.Mm7);const M={name:"StatusContent",props:["compact","status","focused","noHeading","fullContent","singleLine","showingTall","expandingSubject","showingLongSubject","toggleShowingTall","toggleExpandingSubject","toggleShowingLongSubject"],data:function(){return{postLength:this.status.text.length,parseReadyDone:!1}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?U(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):U(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({localCollapseSubjectDefault:function(){return this.mergedConfig.collapseMessageWithSubject},tallStatus:function(){return!this.singleLine&&!this.compact&&this.status.raw_html.split(/<p|<br/).length+this.postLength/80>20},longSubject:function(){return this.status.summary.length>240},mightHideBecauseSubject:function(){return!!this.status.summary&&this.localCollapseSubjectDefault},mightHideBecauseTall:function(){return this.tallStatus&&!(this.status.summary&&this.localCollapseSubjectDefault)},hideSubjectStatus:function(){return this.mightHideBecauseSubject&&!this.expandingSubject},hideTallStatus:function(){return this.mightHideBecauseTall&&!this.showingTall},showingMore:function(){return this.mightHideBecauseTall&&this.showingTall||this.mightHideBecauseSubject&&this.expandingSubject},attachmentTypes:function(){return this.status.attachments.map((function(e){return x.ZP.fileType(e.mimetype)}))}},(0,T.Se)(["mergedConfig"])),components:{RichContent:F.Z},mounted:function(){var e=this;this.status.attentions&&this.status.attentions.forEach((function(t){var n=t.id;e.$store.dispatch("fetchUserIfMissing",n)}))},methods:{onParseReady:function(e){var t=this;if(!this.parseReadyDone){this.parseReadyDone=!0,this.$emit("parseReady",e);var n=e.writtenMentions,o=e.invisibleMentions;n.filter((function(e){return!e.notifying})).forEach((function(e){var n=e.content,o=e.url,r=n.replace(/<[^>]+?>/gi,"");if(r.startsWith("@")){var i=r.slice(1),s=o.replace(/^https?:\/\//,"").replace(/\/.+?$/,"");t.$store.dispatch("fetchUserIfMissing","".concat(i,"@").concat(s))}})),this.postLength=o.reduce((function(e,t){return e-t.textContent.length-1}),this.postLength)}},toggleShowMore:function(){this.mightHideBecauseTall?this.toggleShowingTall():this.mightHideBecauseSubject&&this.toggleExpandingSubject()},generateTagLink:function(e){return"/tag/".concat(e)}}},L=(0,O.Z)(M,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("RichContent"),c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["StatusBody",{"-compact":e.compact}])},[(0,o._)("div",I,[e.status.summary_raw_html?((0,o.wg)(),(0,o.iD)("div",{key:0,class:(0,r.C_)(["summary-wrapper",{"-tall":e.longSubject&&!e.showingLongSubject}])},[(0,o.Wm)(u,{class:"media-body summary",html:e.status.summary_raw_html,emoji:e.status.emojis},null,8,["html","emoji"]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link tall-subject-hider",onClick:t[0]||(t[0]=(0,P.iM)((function(){return e.toggleShowingLongSubject&&e.toggleShowingLongSubject.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("status.hide_full_subject")),513),[[P.F8,e.longSubject&&e.showingLongSubject]]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link tall-subject-hider",onClick:t[1]||(t[1]=(0,P.iM)((function(){return e.toggleShowingLongSubject&&e.toggleShowingLongSubject.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("status.show_full_subject")),513),[[P.F8,e.longSubject&&!e.showingLongSubject]])],2)):(0,o.kq)("",!0),(0,o._)("div",{class:(0,r.C_)([{"-tall-status":e.hideTallStatus},"text-wrapper"])},[(0,o.wy)((0,o._)("button",{class:(0,r.C_)(["button-unstyled -link tall-status-hider",{"-focused":e.focused}]),onClick:t[2]||(t[2]=(0,P.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.$t("general.show_more")),3),[[P.F8,e.hideTallStatus]]),e.hideSubjectStatus||e.singleLine&&e.status.summary_raw_html?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(u,{key:0,class:(0,r.C_)([{"-single-line":e.singleLine},"text media-body"]),html:e.status.raw_html,emoji:e.status.emojis,"handle-links":!0,greentext:e.mergedConfig.greentext,attentions:e.status.attentions,onParseReady:e.onParseReady},null,8,["class","html","emoji","greentext","attentions","onParseReady"])),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link cw-status-hider",onClick:t[3]||(t[3]=(0,P.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},[(0,o.Uk)((0,r.zw)(e.$t("status.show_content"))+" ",1),e.attachmentTypes.includes("image")?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"image"})):(0,o.kq)("",!0),e.attachmentTypes.includes("video")?((0,o.wg)(),(0,o.j4)(c,{key:1,icon:"video"})):(0,o.kq)("",!0),e.attachmentTypes.includes("audio")?((0,o.wg)(),(0,o.j4)(c,{key:2,icon:"music"})):(0,o.kq)("",!0),e.attachmentTypes.includes("unknown")?((0,o.wg)(),(0,o.j4)(c,{key:3,icon:"file"})):(0,o.kq)("",!0),e.status.poll&&e.status.poll.options?((0,o.wg)(),(0,o.j4)(c,{key:4,icon:"poll-h"})):(0,o.kq)("",!0),e.status.card?((0,o.wg)(),(0,o.j4)(c,{key:5,icon:"link"})):(0,o.kq)("",!0)],512),[[P.F8,e.hideSubjectStatus]]),(0,o.wy)((0,o._)("button",{class:"button-unstyled -link status-unhider",onClick:t[4]||(t[4]=(0,P.iM)((function(){return e.toggleShowMore&&e.toggleShowMore.apply(e,arguments)}),["prevent"]))},(0,r.zw)(e.tallStatus?e.$t("general.show_less"):e.$t("status.hide_content")),513),[[P.F8,e.showingMore&&!e.fullContent]])],2)]),e.hideSubjectStatus?(0,o.kq)("",!0):(0,o.WI)(e.$slots,"default",{key:0})],2)}]]);var R=n(92798);function q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?q(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}$.vI.add(B.IJ7,B.gMD,B.Xig,B.VmB,B.nNP,B.Mm7);var Z,W=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},H=function(e,t){var n=W(t),o="controlledToggle".concat(n),r="uncontrolled".concat(n);e[o]?e[o]():e[r]=!e[r]};const V={name:"StatusContent",props:["status","compact","focused","noHeading","fullContent","singleLine","controlledShowingTall","controlledExpandingSubject","controlledToggleShowingTall","controlledToggleExpandingSubject","controlledShowingLongSubject","controlledToggleShowingLongSubject"],data:function(){return{uncontrolledShowingTall:this.fullContent||this.inConversation&&this.focused,uncontrolledShowingLongSubject:!1,uncontrolledExpandingSubject:!this.$store.getters.mergedConfig.collapseMessageWithSubject}},computed:N(N(N({},(Z=["showingTall","expandingSubject","showingLongSubject"],Z.reduce((function(e,t){var n=W(t),o="controlledToggle".concat(n),r="controlled".concat(n),i="uncontrolled".concat(n);return e[t]=function(){return void 0===this.$data[o]&&void 0===this.$props[o]||!this[o]?this[i]:this[r]},e}),{}))),{},{statusCard:function(){return this.status.card?this.status.card.url===this.status.quote_url?null:this.status.card:null},hideAttachments:function(){return this.mergedConfig.hideAttachments&&!this.inConversation||this.mergedConfig.hideAttachmentsInConv&&this.inConversation},nsfwClickthrough:function(){return!(!this.status.nsfw||this.status.summary&&this.localCollapseSubjectDefault)},attachmentSize:function(){return this.compact?"small":this.mergedConfig.hideAttachments&&!this.inConversation||this.mergedConfig.hideAttachmentsInConv&&this.inConversation||this.status.attachments.length>this.maxThumbnails?"hide":"normal"},maxThumbnails:function(){return this.mergedConfig.maxThumbnails}},(0,T.Se)(["mergedConfig"])),(0,T.rn)({currentUser:function(e){return e.users.currentUser}})),components:{Attachment:c.Z,Poll:E,Gallery:z.Z,LinkPreview:R.Z,StatusBody:L},methods:{toggleShowingTall:function(){H(this,"showingTall")},toggleExpandingSubject:function(){H(this,"expandingSubject")},toggleShowingLongSubject:function(){H(this,"showingLongSubject")},setMedia:function(){var e=this,t="hide"===this.attachmentSize?this.status.attachments:this.galleryAttachments;return function(){return e.$store.dispatch("setMedia",t)}}}},K=(0,O.Z)(V,[["render",function(e,t,n,u,c,l){var d=(0,o.up)("Poll"),p=(0,o.up)("FAIcon"),m=(0,o.up)("gallery"),h=(0,o.up)("link-preview"),f=(0,o.up)("StatusBody");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["StatusContent",{"-compact":e.compact}])},[(0,o.WI)(e.$slots,"header"),(0,o.Wm)(f,{status:e.status,compact:e.compact,"single-line":e.singleLine,"showing-tall":e.showingTall,"expanding-subject":e.expandingSubject,"showing-long-subject":e.showingLongSubject,"toggle-showing-tall":e.toggleShowingTall,"toggle-expanding-subject":e.toggleExpandingSubject,"toggle-showing-long-subject":e.toggleShowingLongSubject,onParseReady:t[2]||(t[2]=function(t){return e.$emit("parseReady",t)})},{default:(0,o.w5)((function(){return[e.status.poll&&e.status.poll.options&&!e.compact?((0,o.wg)(),(0,o.iD)("div",i,[(0,o.Wm)(d,{"base-poll":e.status.poll,emoji:e.status.emojis},null,8,["base-poll","emoji"])])):e.status.poll&&e.status.poll.options&&e.compact?((0,o.wg)(),(0,o.iD)("div",s,[(0,o.Wm)(p,{icon:"poll-h",size:"2x"})])):(0,o.kq)("",!0),0!==e.status.attachments.length?((0,o.wg)(),(0,o.j4)(m,{key:2,class:"attachments media-body",compact:e.compact,nsfw:e.nsfwClickthrough,attachments:e.status.attachments,limit:e.compact?1:0,size:e.attachmentSize,onPlay:t[0]||(t[0]=function(t){return e.$emit("mediaplay",e.attachment.id)}),onPause:t[1]||(t[1]=function(t){return e.$emit("mediapause",e.attachment.id)})},null,8,["compact","nsfw","attachments","limit","size"])):(0,o.kq)("",!0),!e.statusCard||e.noHeading||e.compact?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",a,[(0,o.Wm)(h,{card:e.status.card,size:e.attachmentSize,nsfw:e.nsfwClickthrough},null,8,["card","size","nsfw"])]))]})),_:1},8,["status","compact","single-line","showing-tall","expanding-subject","showing-long-subject","toggle-showing-tall","toggle-expanding-subject","toggle-showing-long-subject"]),(0,o.WI)(e.$slots,"footer")],2)}]])},32140:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i={key:0,ref:"canvas"},s=["alt","title","data-src","src","referrerpolicy","loading"];const a={props:["src","referrerpolicy","mimetype","imageLoadError","imageLoadHandler","alt","height","width","dataSrc","loading"],data:function(){return{realSrc:this.src,stopGifs:this.$store.getters.mergedConfig.stopGifs}},computed:{animated:function(){return!!this.realSrc&&this.stopGifs&&("image/gif"===this.mimetype||this.realSrc.endsWith(".gif"))},style:function(){var e=function(e){return/\d$/.test(e)?e+"px":e};return{height:this.height?e(this.height):null,width:this.width?e(this.width):null}}},methods:{loadLazy:function(){this.dataSrc&&(this.realSrc=this.dataSrc)},onLoad:function(){if(this.realSrc){var e=this.$refs.src;if(e){this.imageLoadHandler&&this.imageLoadHandler(e);var t=this.$refs.canvas;if(t){var n=e.naturalWidth,o=e.naturalHeight;t.width=n,t.height=o,t.getContext("2d").drawImage(e,0,0,n,o)}}}},onError:function(){this.imageLoadError&&this.imageLoadError()}},watch:{src:function(){this.realSrc=this.src},dataSrc:function(){this.$el.removeAttribute("data-loaded")}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,a,u,c){return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["still-image",{animated:e.animated}]),style:(0,r.j5)(e.style)},[e.animated?((0,o.wg)(),(0,o.iD)("canvas",i,null,512)):(0,o.kq)("",!0),((0,o.wg)(),(0,o.iD)("img",{ref:"src",key:e.realSrc,alt:e.alt,title:e.alt,"data-src":e.dataSrc,src:e.realSrc,referrerpolicy:e.referrerpolicy,loading:e.loading,onLoad:t[0]||(t[0]=function(){return e.onLoad&&e.onLoad.apply(e,arguments)}),onError:t[1]||(t[1]=function(){return e.onError&&e.onError.apply(e,arguments)})},null,40,s)),(0,o.WI)(e.$slots,"default")],6)}]])},1840:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(66252),r=n(3577),i=["datetime","title"],s=n(27483),a=n(39776);const u={name:"Timeago",props:["time","autoUpdate","longFormat","nowThreshold","templateKey"],data:function(){return{relativeTime:{key:"time.now",num:0},interval:null}},computed:{localeDateString:function(){var e=a.Z.internalToBrowserLocale(this.$i18n.locale);return"string"==typeof this.time?new Date(Date.parse(this.time)).toLocaleString(e):this.time.toLocaleString(e)},relativeTimeString:function(){var e=this.$i18n.tc(this.relativeTime.key,this.relativeTime.num,[this.relativeTime.num]);return"string"==typeof this.templateKey&&"time.now"!==this.relativeTime.key?this.$i18n.t(this.templateKey,[e]):e}},watch:{time:function(e,t){t!==e&&(clearTimeout(this.interval),this.refreshRelativeTimeObject())}},created:function(){this.refreshRelativeTimeObject()},unmounted:function(){clearTimeout(this.interval)},methods:{refreshRelativeTimeObject:function(){var e="number"==typeof this.nowThreshold?this.nowThreshold:1;this.relativeTime=this.longFormat?s.GV(this.time,e):s._F(this.time,e),this.autoUpdate&&(this.interval=setTimeout(this.refreshRelativeTimeObject,1e3*this.autoUpdate))}}},c=(0,n(83744).Z)(u,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("time",{datetime:n.time,title:u.localeDateString},(0,r.zw)(u.relativeTimeString),9,i)}]])},42262:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(66252),r=n(9382),i=n(84131);r.vI.add(i.dT$);const s={props:{user:Object}},a=(0,n(83744).Z)(s,[["render",function(e,t,n,r,i,s){var a=(0,o.up)("FAIcon");return e.user&&e.user.screen_name_ui_contains_non_ascii?((0,o.wg)(),(0,o.j4)(a,{key:0,icon:"code",title:e.$t("unicode_domain_indicator.tooltip")},null,8,["title"])):(0,o.kq)("",!0)}]])},48173:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var o=n(66252),r=n(3577),i=n(32140),s=n(9382),a=n(84131);s.vI.add(a.VE0);const u={props:["user","betterShadow","compact","bot"],data:function(){return{showPlaceholder:!1,defaultAvatar:"".concat(this.$store.state.instance.server+this.$store.state.instance.defaultAvatar)}},components:{StillImage:i.Z},methods:{imgSrc:function(e){return!e||this.showPlaceholder?this.defaultAvatar:e},imageLoadError:function(){this.showPlaceholder=!0}}},c=(0,n(83744).Z)(u,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("StillImage"),c=(0,o.up)("FAIcon");return(0,o.wg)(),(0,o.iD)("span",{class:(0,r.C_)(["Avatar",{"-compact":e.compact}])},[e.user?((0,o.wg)(),(0,o.j4)(u,{key:0,class:(0,r.C_)(["avatar",{"-compact":e.compact,"-better-shadow":e.betterShadow}]),alt:e.user.screen_name_ui,title:e.user.screen_name_ui,src:e.imgSrc(e.user.profile_image_url_original),"image-load-error":e.imageLoadError},null,8,["alt","title","src","image-load-error","class"])):((0,o.wg)(),(0,o.iD)("div",{key:1,class:(0,r.C_)(["avatar -placeholder",{"-compact":e.compact}])},null,2)),e.bot?((0,o.wg)(),(0,o.j4)(c,{key:2,icon:"robot",class:"bot-indicator"})):(0,o.kq)("",!0)],2)}]])},20392:(e,t,n)=>{"use strict";n.d(t,{Z:()=>$e});var o=n(66252),r=n(3577),i=n(49963),s={class:"user-info"},a={class:"container"},u={class:"user-info-avatar -link -overlay"},c={class:"user-summary"},l={class:"top-line"},d=["href"],p={class:"bottom-line"},m={key:0,class:"alert user-role"},h={key:1,class:"alert user-role"},f={key:2,class:"alert user-role"},g={key:1},v={key:2,class:"dailyAvg"},w={class:"user-meta"},b={key:0,class:"following"},y={key:1,class:"highlighter"},D=["id"],_=["id"],k={value:"disabled"},C={value:"solid"},S={value:"striped"},j={value:"side"},F={key:0,class:"user-interactions"},A={class:"btn-group"},O=["disabled"],E=["disabled"],z=["disabled"],P={key:1,class:"user-interactions"},I={key:0,class:"panel-body"},x={key:0,class:"user-counts"},T=(0,o._)("br",null,null,-1),$=["textContent"],B={class:"mute-expiry"},U=["value"],M=n(4942),L=n(27483),R=n(48173),q=n(72895),N=n(99507),Z=n(34837),W={class:"dropdown-menu"},H={key:0},V={key:0,role:"separator",class:"dropdown-divider"},K={key:3,role:"separator",class:"dropdown-divider"},G={key:4},Y=n(9382),J=n(84131),Q=n(71113),X=n(84535);Y.vI.add(J.ptq);const ee={props:["user"],data:function(){return{tags:{FORCE_NSFW:"mrf_tag:media-force-nsfw",STRIP_MEDIA:"mrf_tag:media-strip",FORCE_UNLISTED:"mrf_tag:force-unlisted",DISABLE_REMOTE_SUBSCRIPTION:"mrf_tag:disable-remote-subscription",DISABLE_ANY_SUBSCRIPTION:"mrf_tag:disable-any-subscription",SANDBOX:"mrf_tag:sandbox",QUARANTINE:"mrf_tag:quarantine"},showDeleteUserDialog:!1,toggled:!1}},components:{DialogModal:Q.Z,Popover:X.default},computed:{tagsSet:function(){return new Set(this.user.tags)},canGrantRole:function(){return this.user.is_local&&!this.user.deactivated&&"admin"===this.$store.state.users.currentUser.role},canChangeActivationState:function(){return this.privileged("users_manage_activation_state")},canDeleteAccount:function(){return this.privileged("users_delete")},canUseTagPolicy:function(){return this.$store.state.instance.tagPolicyAvailable&&this.privileged("users_manage_tags")}},methods:{hasTag:function(e){return this.tagsSet.has(e)},privileged:function(e){return this.$store.state.users.currentUser.privileges.includes(e)},toggleTag:function(e){var t=this,n=this.$store;this.tagsSet.has(e)?n.state.api.backendInteractor.untagUser({user:this.user,tag:e}).then((function(o){o.ok&&n.commit("untagUser",{user:t.user,tag:e})})):n.state.api.backendInteractor.tagUser({user:this.user,tag:e}).then((function(o){o.ok&&n.commit("tagUser",{user:t.user,tag:e})}))},toggleRight:function(e){var t=this,n=this.$store;this.user.rights[e]?n.state.api.backendInteractor.deleteRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!1})})):n.state.api.backendInteractor.addRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!0})}))},toggleActivationStatus:function(){this.$store.dispatch("toggleActivationStatus",{user:this.user})},deleteUserDialog:function(e){this.showDeleteUserDialog=e},deleteUser:function(){var e=this,t=this.$store,n=this.user,o=n.id,r=n.name;t.state.api.backendInteractor.deleteUser({user:n}).then((function(t){e.$store.dispatch("markStatusesAsDeleted",(function(e){return n.id===e.user.id}));var i="external-user-profile"===e.$route.name||"user-profile"===e.$route.name,s=e.$route.params.name===r||e.$route.params.id===o;i&&s&&window.history.back()}))},setToggled:function(e){this.toggled=e}}};var te=n(83744);const ne=(0,te.Z)(ee,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover"),l=(0,o.up)("DialogModal");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(c,{trigger:"click",class:"moderation-tools-popover",placement:"bottom",offset:{y:5},onShow:t[11]||(t[11]=function(t){return e.setToggled(!0)}),onClose:t[12]||(t[12]=function(t){return e.setToggled(!1)})},{content:(0,o.w5)((function(){return[(0,o._)("div",W,[e.canGrantRole?((0,o.wg)(),(0,o.iD)("span",H,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[0]||(t[0]=function(t){return e.toggleRight("admin")})},(0,r.zw)(e.$t(e.user.rights.admin?"user_card.admin_menu.revoke_admin":"user_card.admin_menu.grant_admin")),1),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[1]||(t[1]=function(t){return e.toggleRight("moderator")})},(0,r.zw)(e.$t(e.user.rights.moderator?"user_card.admin_menu.revoke_moderator":"user_card.admin_menu.grant_moderator")),1),e.canChangeActivationState||e.canDeleteAccount?((0,o.wg)(),(0,o.iD)("div",V)):(0,o.kq)("",!0)])):(0,o.kq)("",!0),e.canChangeActivationState?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item",onClick:t[2]||(t[2]=function(t){return e.toggleActivationStatus()})},(0,r.zw)(e.$t(e.user.deactivated?"user_card.admin_menu.activate_account":"user_card.admin_menu.deactivate_account")),1)):(0,o.kq)("",!0),e.canDeleteAccount?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item",onClick:t[3]||(t[3]=function(t){return e.deleteUserDialog(!0)})},(0,r.zw)(e.$t("user_card.admin_menu.delete_account")),1)):(0,o.kq)("",!0),e.canUseTagPolicy?((0,o.wg)(),(0,o.iD)("div",K)):(0,o.kq)("",!0),e.canUseTagPolicy?((0,o.wg)(),(0,o.iD)("span",G,[(0,o._)("button",{class:"button-default dropdown-item",onClick:t[4]||(t[4]=function(t){return e.toggleTag(e.tags.FORCE_NSFW)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.FORCE_NSFW)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.force_nsfw")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[5]||(t[5]=function(t){return e.toggleTag(e.tags.STRIP_MEDIA)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.STRIP_MEDIA)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.strip_media")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[6]||(t[6]=function(t){return e.toggleTag(e.tags.FORCE_UNLISTED)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.FORCE_UNLISTED)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.force_unlisted")),1)]),(0,o._)("button",{class:"button-default dropdown-item",onClick:t[7]||(t[7]=function(t){return e.toggleTag(e.tags.SANDBOX)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.SANDBOX)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.sandbox")),1)]),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-default dropdown-item",onClick:t[8]||(t[8]=function(t){return e.toggleTag(e.tags.DISABLE_REMOTE_SUBSCRIPTION)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.DISABLE_REMOTE_SUBSCRIPTION)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.disable_remote_subscription")),1)])):(0,o.kq)("",!0),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"button-default dropdown-item",onClick:t[9]||(t[9]=function(t){return e.toggleTag(e.tags.DISABLE_ANY_SUBSCRIPTION)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.DISABLE_ANY_SUBSCRIPTION)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.disable_any_subscription")),1)])):(0,o.kq)("",!0),e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"button-default dropdown-item",onClick:t[10]||(t[10]=function(t){return e.toggleTag(e.tags.QUARANTINE)})},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":e.hasTag(e.tags.QUARANTINE)}])},null,2),(0,o.Uk)(" "+(0,r.zw)(e.$t("user_card.admin_menu.quarantine")),1)])):(0,o.kq)("",!0)])):(0,o.kq)("",!0)])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",{class:(0,r.C_)(["btn button-default btn-block moderation-tools-button",{toggled:e.toggled}])},[(0,o.Uk)((0,r.zw)(e.$t("user_card.admin_menu.moderation"))+" ",1),(0,o.Wm)(u,{icon:"chevron-down"})],2)]})),_:1}),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showDeleteUserDialog?((0,o.wg)(),(0,o.j4)(l,{key:0,"on-cancel":e.deleteUserDialog.bind(this,!1)},{header:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.$t("user_card.admin_menu.delete_user")),1)]})),footer:(0,o.w5)((function(){return[(0,o._)("button",{class:"btn button-default",onClick:t[13]||(t[13]=function(t){return e.deleteUserDialog(!1)})},(0,r.zw)(e.$t("general.cancel")),1),(0,o._)("button",{class:"btn button-default danger",onClick:t[14]||(t[14]=function(t){return e.deleteUser()})},(0,r.zw)(e.$t("user_card.admin_menu.delete_user")),1)]})),default:(0,o.w5)((function(){return[(0,o._)("p",null,(0,r.zw)(e.$t("user_card.admin_menu.delete_user_confirmation")),1)]})),_:1},8,["on-cancel"])):(0,o.kq)("",!0)]))])}]]);var oe={class:"AccountActions"},re={class:"dropdown-menu"},ie=(0,o._)("div",{role:"separator",class:"dropdown-divider"},null,-1),se={class:"button-unstyled ellipsis-button"},ae=["textContent"],ue=["textContent"],ce=n(989),le={class:"UserListMenu"},de={class:"dropdown-menu"},pe=["onClick"],me={class:"btn button-default dropdown-item -has-submenu"};function he(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function fe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?he(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):he(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Y.vI.add(J._tD);const ge={props:["user"],data:function(){return{}},components:{DialogModal:Q.Z,Popover:X.default},created:function(){this.$store.dispatch("fetchUserInLists",this.user.id)},computed:fe(fe({},(0,ce.rn)({allLists:function(e){return e.lists.allLists}})),{},{inListsSet:function(){return new Set(this.user.inLists.map((function(e){return e.id})))},lists:function(){var e=this;return this.user.inLists?this.allLists.map((function(t){return fe(fe({},t),{},{inList:e.inListsSet.has(t.id)})})):[]}}),methods:{toggleList:function(e){var t=this;this.inListsSet.has(e)?this.$store.dispatch("removeListAccount",{accountId:this.user.id,listId:e}).then((function(e){e.ok&&t.$store.dispatch("fetchUserInLists",t.user.id)})):this.$store.dispatch("addListAccount",{accountId:this.user.id,listId:e}).then((function(e){e.ok&&t.$store.dispatch("fetchUserInLists",t.user.id)}))},toggleRight:function(e){var t=this,n=this.$store;this.user.rights[e]?n.state.api.backendInteractor.deleteRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!1})})):n.state.api.backendInteractor.addRight({user:this.user,right:e}).then((function(o){o.ok&&n.commit("updateRight",{user:t.user,right:e,value:!0})}))},toggleActivationStatus:function(){this.$store.dispatch("toggleActivationStatus",{user:this.user})},deleteUserDialog:function(e){this.showDeleteUserDialog=e},deleteUser:function(){var e=this,t=this.$store,n=this.user,o=n.id,r=n.name;t.state.api.backendInteractor.deleteUser({user:n}).then((function(t){e.$store.dispatch("markStatusesAsDeleted",(function(e){return n.id===e.user.id}));var i="external-user-profile"===e.$route.name||"user-profile"===e.$route.name,s=e.$route.params.name===r||e.$route.params.id===o;i&&s&&window.history.back()}))},setToggled:function(e){this.toggled=e}}},ve=(0,te.Z)(ge,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("FAIcon"),c=(0,o.up)("Popover");return(0,o.wg)(),(0,o.iD)("div",le,[(0,o.Wm)(c,{trigger:"hover",placement:"left","remove-padding":""},{content:(0,o.w5)((function(){return[(0,o._)("div",de,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.lists,(function(t){return(0,o.wg)(),(0,o.iD)("button",{key:t.id,class:"button-default dropdown-item",onClick:function(n){return e.toggleList(t.id)}},[(0,o._)("span",{class:(0,r.C_)(["menu-checkbox",{"menu-checkbox-checked":t.inList}])},null,2),(0,o.Uk)(" "+(0,r.zw)(t.title),1)],8,pe)})),128))])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",me,[(0,o.Uk)((0,r.zw)(e.$t("lists.manage_lists"))+" ",1),(0,o.Wm)(u,{class:"chevron-icon",size:"lg",icon:"chevron-right"})])]})),_:1})])}]]);var we=n(1447);function be(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}Y.vI.add(J.iV1);const ye={props:["user","relationship"],data:function(){return{showingConfirmBlock:!1,showingConfirmRemoveFollower:!1}},components:{ProgressButton:N.Z,Popover:X.default,UserListMenu:ve,ConfirmModal:we.Z},methods:{showConfirmBlock:function(){this.showingConfirmBlock=!0},hideConfirmBlock:function(){this.showingConfirmBlock=!1},showConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!0},hideConfirmRemoveUserFromFollowers:function(){this.showingConfirmRemoveFollower=!1},showRepeats:function(){this.$store.dispatch("showReblogs",this.user.id)},hideRepeats:function(){this.$store.dispatch("hideReblogs",this.user.id)},blockUser:function(){this.shouldConfirmBlock?this.showConfirmBlock():this.doBlockUser()},doBlockUser:function(){this.$store.dispatch("blockUser",this.user.id),this.hideConfirmBlock()},unblockUser:function(){this.$store.dispatch("unblockUser",this.user.id)},removeUserFromFollowers:function(){this.shouldConfirmRemoveUserFromFollowers?this.showConfirmRemoveUserFromFollowers():this.doRemoveUserFromFollowers()},doRemoveUserFromFollowers:function(){this.$store.dispatch("removeUserFromFollowers",this.user.id),this.hideConfirmRemoveUserFromFollowers()},reportUser:function(){this.$store.dispatch("openUserReportingModal",{userId:this.user.id})},openChat:function(){this.$router.push({name:"chat",params:{username:this.$store.state.users.currentUser.screen_name,recipient_id:this.user.id}})}},computed:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({shouldConfirmBlock:function(){return this.$store.getters.mergedConfig.modalOnBlock},shouldConfirmRemoveUserFromFollowers:function(){return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers}},(0,ce.rn)({pleromaChatMessagesAvailable:function(e){return e.instance.pleromaChatMessagesAvailable}}))},De=(0,te.Z)(ye,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UserListMenu"),c=(0,o.up)("FAIcon"),l=(0,o.up)("Popover"),d=(0,o.up)("i18n-t"),p=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",oe,[(0,o.Wm)(l,{trigger:"click",placement:"bottom","bound-to":{x:"container"},"remove-padding":""},{content:(0,o.w5)((function(){return[(0,o._)("div",re,[e.relationship.following?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.relationship.showing_reblogs?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default dropdown-item",onClick:t[0]||(t[0]=function(){return e.hideRepeats&&e.hideRepeats.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.hide_repeats")),1)):(0,o.kq)("",!0),e.relationship.showing_reblogs?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default dropdown-item",onClick:t[1]||(t[1]=function(){return e.showRepeats&&e.showRepeats.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.show_repeats")),1)),ie],64)):(0,o.kq)("",!0),(0,o.Wm)(u,{user:e.user},null,8,["user"]),e.relationship.followed_by?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default btn-block dropdown-item",onClick:t[2]||(t[2]=function(){return e.removeUserFromFollowers&&e.removeUserFromFollowers.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.remove_follower")),1)):(0,o.kq)("",!0),e.relationship.blocking?((0,o.wg)(),(0,o.iD)("button",{key:2,class:"btn button-default btn-block dropdown-item",onClick:t[3]||(t[3]=function(){return e.unblockUser&&e.unblockUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.unblock")),1)):((0,o.wg)(),(0,o.iD)("button",{key:3,class:"btn button-default btn-block dropdown-item",onClick:t[4]||(t[4]=function(){return e.blockUser&&e.blockUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.block")),1)),(0,o._)("button",{class:"btn button-default btn-block dropdown-item",onClick:t[5]||(t[5]=function(){return e.reportUser&&e.reportUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.report")),1),e.pleromaChatMessagesAvailable?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"btn button-default btn-block dropdown-item",onClick:t[6]||(t[6]=function(){return e.openChat&&e.openChat.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.message")),1)):(0,o.kq)("",!0)])]})),trigger:(0,o.w5)((function(){return[(0,o._)("button",se,[(0,o.Wm)(c,{class:"icon",icon:"ellipsis-v"})])]})),_:1}),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmBlock?((0,o.wg)(),(0,o.j4)(p,{key:0,title:e.$t("user_card.block_confirm_title"),"confirm-text":e.$t("user_card.block_confirm_accept_button"),"cancel-text":e.$t("user_card.block_confirm_cancel_button"),onAccepted:e.doBlockUser,onCancelled:e.hideConfirmBlock},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{keypath:"user_card.block_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,ae)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)])),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmRemoveFollower?((0,o.wg)(),(0,o.j4)(p,{key:0,title:e.$t("user_card.remove_follower_confirm_title"),"confirm-text":e.$t("user_card.remove_follower_confirm_accept_button"),"cancel-text":e.$t("user_card.remove_follower_confirm_cancel_button"),onAccepted:e.doRemoveUserFromFollowers,onCancelled:e.hideConfirmRemoveUserFromFollowers},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{keypath:"user_card.remove_follower_confirm",tag:"span"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,ue)]})),_:1})]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))])}]]);var _e={class:"user-note"},ke={class:"heading"},Ce={class:"buttons"},Se=["disabled"],je=["disabled"];const Fe={props:{user:Object,relationship:Object,editable:Boolean},data:function(){return{localNote:"",editing:!1,frozen:!1}},computed:{shouldShow:function(){return this.relationship.note||this.editing}},methods:{startEditing:function(){this.localNote=this.relationship.note,this.editing=!0},cancelEditing:function(){this.editing=!1},finalizeEditing:function(){var e=this;this.frozen=!0,this.$store.dispatch("editUserNote",{id:this.user.id,comment:this.localNote}).then((function(){e.frozen=!1,e.editing=!1})).catch((function(){e.frozen=!1}))}}},Ae=(0,te.Z)(Fe,[["render",function(e,t,n,s,a,u){return(0,o.wg)(),(0,o.iD)("div",_e,[(0,o._)("div",ke,[(0,o._)("span",null,(0,r.zw)(e.$t("user_card.note")),1),(0,o._)("div",Ce,[(0,o.wy)((0,o._)("button",{class:"button-default btn",onClick:t[0]||(t[0]=function(){return e.startEditing&&e.startEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note")),513),[[i.F8,!e.editing&&e.editable]]),(0,o.wy)((0,o._)("button",{class:"button-default btn",disabled:e.frozen,onClick:t[1]||(t[1]=function(){return e.finalizeEditing&&e.finalizeEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note_apply")),9,Se),[[i.F8,e.editing]]),(0,o.wy)((0,o._)("button",{class:"button-default btn",disabled:e.frozen,onClick:t[2]||(t[2]=function(){return e.cancelEditing&&e.cancelEditing.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.edit_note_cancel")),9,je),[[i.F8,e.editing]])])]),(0,o.wy)((0,o._)("textarea",{"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.localNote=t}),class:"note-text"},null,512),[[i.F8,e.editing],[i.nr,e.localNote]]),(0,o.wy)((0,o._)("span",{class:(0,r.C_)(["note-text",{"-blank":!e.relationship.note}])},(0,r.zw)(e.relationship.note||e.$t("user_card.note_blank")),3),[[i.F8,!e.editing]])])}]]);var Oe=n(76990),Ee=n(12061),ze=n(92820),Pe=n(4493);function Ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(n),!0).forEach((function(t){(0,M.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ie(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}Y.vI.add(J.Fwd,J.qmU,J.N7g,J.Xjp,J.Xcf,J.NBC,J.TTL);const Te={props:["userId","switcher","selected","hideBio","rounded","bordered","avatarAction","onClose","hasNoteEditor"],data:function(){return{followRequestInProgress:!1,betterShadow:this.$store.state.interface.browserSupport.cssFilter,showingConfirmMute:!1,muteExpiryAmount:0,muteExpiryUnit:"minutes"}},created:function(){this.$store.dispatch("fetchUserRelationship",this.user.id)},computed:xe({user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},classes:function(){return[{"-rounded-t":"top"===this.rounded,"-rounded":!0===this.rounded,"-bordered":!0===this.bordered,"-popover":!!this.onClose}]},style:function(){return{backgroundImage:["linear-gradient(to bottom, var(--profileTint), var(--profileTint))","url(".concat(this.user.cover_photo,")")].join(", ")}},isOtherUser:function(){return this.user.id!==this.$store.state.users.currentUser.id},subscribeUrl:function(){var e=new URL(this.user.statusnet_profile_url);return"".concat(e.protocol,"//").concat(e.host,"/main/ostatus")},loggedIn:function(){return this.$store.state.users.currentUser},dailyAvg:function(){var e=Math.ceil((new Date-new Date(this.user.created_at))/864e5);return Math.round(this.user.statuses_count/e)},userHighlightType:xe({get:function(){var e=this.$store.getters.mergedConfig.highlight[this.user.screen_name];return e&&e.type||"disabled"},set:function(e){var t=this.$store.getters.mergedConfig.highlight[this.user.screen_name];"disabled"!==e?this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:t&&t.color||"#FFFFFF",type:e}):this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:void 0})}},(0,ce.Se)(["mergedConfig"])),userHighlightColor:{get:function(){var e=this.$store.getters.mergedConfig.highlight[this.user.screen_name];return e&&e.color},set:function(e){this.$store.dispatch("setHighlight",{user:this.user.screen_name,color:e})}},visibleRole:function(){var e=this.user.rights;if(e){var t=e.admin||e.moderator,n=e.admin?"admin":"moderator";return t&&n}},hideFollowsCount:function(){return this.isOtherUser&&this.user.hide_follows_count},hideFollowersCount:function(){return this.isOtherUser&&this.user.hide_followers_count},showModerationMenu:function(){var e=this.loggedIn.privileges;return"admin"===this.loggedIn.role||e.includes("users_manage_activation_state")||e.includes("users_delete")||e.includes("users_manage_tags")},hasNote:function(){return this.relationship.note},supportsNote:function(){return"note"in this.relationship},shouldConfirmMute:function(){return this.mergedConfig.modalOnMute},muteExpiryUnits:function(){return["minutes","hours","days"]}},(0,ce.Se)(["mergedConfig"])),components:{UserAvatar:R.default,RemoteFollow:q.Z,ModerationTools:ne,AccountActions:De,ProgressButton:N.Z,FollowButton:Z.Z,Select:Oe.Z,RichContent:ze.Z,UserLink:Ee.Z,UserNote:Ae,ConfirmModal:we.Z},methods:{showConfirmMute:function(){this.showingConfirmMute=!0},hideConfirmMute:function(){this.showingConfirmMute=!1},muteUser:function(){this.shouldConfirmMute?this.showConfirmMute():this.doMuteUser()},doMuteUser:function(){this.$store.dispatch("muteUser",{id:this.user.id,expiresIn:this.shouldConfirmMute?(0,L.cC)(this.muteExpiryUnit,this.muteExpiryAmount):0}),this.hideConfirmMute()},unmuteUser:function(){this.$store.dispatch("unmuteUser",this.user.id)},subscribeUser:function(){return this.$store.dispatch("subscribeUser",this.user.id)},unsubscribeUser:function(){return this.$store.dispatch("unsubscribeUser",this.user.id)},setProfileView:function(e){this.switcher&&this.$store.commit("setProfileView",{v:e})},linkClicked:function(e){var t=e.target;"SPAN"===t.tagName&&(t=t.parentNode),"A"===t.tagName&&window.open(t.href,"_blank")},userProfileLink:function(e){return(0,Pe.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)},openProfileTab:function(){this.$store.dispatch("openSettingsModalTab","profile")},zoomAvatar:function(){var e={url:this.user.profile_image_url_original,mimetype:"image"};this.$store.dispatch("setMedia",[e]),this.$store.dispatch("setCurrentMedia",e)},mentionUser:function(){this.$store.dispatch("openPostStatusModal",{replyTo:!0,repliedUser:this.user})},onAvatarClickHandler:function(e){this.onAvatarClick&&(e.preventDefault(),this.onAvatarClick())}}},$e=(0,te.Z)(Te,[["render",function(e,t,n,M,L,R){var q=(0,o.up)("UserAvatar"),N=(0,o.up)("FAIcon"),Z=(0,o.up)("router-link"),W=(0,o.up)("RichContent"),H=(0,o.up)("AccountActions"),V=(0,o.up)("user-link"),K=(0,o.up)("Select"),G=(0,o.up)("FollowButton"),Y=(0,o.up)("ProgressButton"),J=(0,o.up)("FALayers"),Q=(0,o.up)("ModerationTools"),X=(0,o.up)("RemoteFollow"),ee=(0,o.up)("UserNote"),te=(0,o.up)("i18n-t"),ne=(0,o.up)("confirm-modal");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["user-card",e.classes])},[(0,o._)("div",{class:(0,r.C_)([{"hide-bio":e.hideBio},"background-image"]),style:(0,r.j5)(e.style)},null,6),(0,o._)("div",{class:(0,r.C_)(e.onClose?"":e.panel-e.heading-e.flexible-e.height)},[(0,o._)("div",s,[(0,o._)("div",a,["zoom"===e.avatarAction?((0,o.wg)(),(0,o.iD)("a",{key:0,class:"user-info-avatar -link",onClick:t[0]||(t[0]=function(){return e.zoomAvatar&&e.zoomAvatar.apply(e,arguments)})},[(0,o.Wm)(q,{"better-shadow":e.betterShadow,user:e.user},null,8,["better-shadow","user"]),(0,o._)("div",u,[(0,o.Wm)(N,{class:"fa-scale-110 fa-old-padding",icon:"search-plus"})])])):"function"==typeof e.avatarAction?((0,o.wg)(),(0,o.j4)(q,{key:1,class:"user-info-avatar","better-shadow":e.betterShadow,user:e.user,onClick:e.avatarAction},null,8,["better-shadow","user","onClick"])):((0,o.wg)(),(0,o.j4)(Z,{key:2,to:e.userProfileLink(e.user)},{default:(0,o.w5)((function(){return[(0,o.Wm)(q,{"better-shadow":e.betterShadow,user:e.user},null,8,["better-shadow","user"])]})),_:1},8,["to"])),(0,o._)("div",c,[(0,o._)("div",l,[(0,o.Wm)(Z,{to:e.userProfileLink(e.user),class:"user-name"},{default:(0,o.w5)((function(){return[(0,o.Wm)(W,{title:e.user.name,html:e.user.name,emoji:e.user.emoji},null,8,["title","html","emoji"])]})),_:1},8,["to"]),!e.isOtherUser&&e.user.is_local?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"button-unstyled edit-profile-button",onClick:t[1]||(t[1]=(0,i.iM)((function(){return e.openProfileTab&&e.openProfileTab.apply(e,arguments)}),["stop"]))},[(0,o.Wm)(N,{"fixed-width":"",class:"icon",icon:"edit",title:e.$t("user_card.edit_profile")},null,8,["title"])])):(0,o.kq)("",!0),e.isOtherUser&&!e.user.is_local?((0,o.wg)(),(0,o.iD)("a",{key:1,href:e.user.statusnet_profile_url,target:"_blank",class:"button-unstyled external-link-button"},[(0,o.Wm)(N,{class:"icon",icon:"external-link-alt"})],8,d)):(0,o.kq)("",!0),e.isOtherUser&&e.loggedIn?((0,o.wg)(),(0,o.j4)(H,{key:2,user:e.user,relationship:e.relationship},null,8,["user","relationship"])):(0,o.kq)("",!0),e.onClose?((0,o.wg)(),(0,o.j4)(Z,{key:3,to:e.userProfileLink(e.user),class:"button-unstyled external-link-button",onClick:e.onClose},{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{class:"icon",icon:"expand-alt"})]})),_:1},8,["to","onClick"])):(0,o.kq)("",!0),e.onClose?((0,o.wg)(),(0,o.iD)("button",{key:4,class:"button-unstyled external-link-button",onClick:t[2]||(t[2]=function(){return e.onClose&&e.onClose.apply(e,arguments)})},[(0,o.Wm)(N,{class:"icon",icon:"times"})])):(0,o.kq)("",!0)]),(0,o._)("div",p,[(0,o.Wm)(V,{class:"user-screen-name",user:e.user},null,8,["user"]),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.user.deactivated?((0,o.wg)(),(0,o.iD)("span",m,(0,r.zw)(e.$t("user_card.deactivated")),1)):(0,o.kq)("",!0),e.visibleRole?((0,o.wg)(),(0,o.iD)("span",h,(0,r.zw)(e.$t("general.role.".concat(e.visibleRole))),1)):(0,o.kq)("",!0),e.user.bot?((0,o.wg)(),(0,o.iD)("span",f,(0,r.zw)(e.$t("user_card.bot")),1)):(0,o.kq)("",!0)],64)),e.user.locked?((0,o.wg)(),(0,o.iD)("span",g,[(0,o.Wm)(N,{class:"lock-icon",icon:"lock",size:"sm"})])):(0,o.kq)("",!0),e.mergedConfig.hideUserStats||e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",v,(0,r.zw)(e.dailyAvg)+" "+(0,r.zw)(e.$t("user_card.per_day")),1))])])]),(0,o._)("div",w,[e.relationship.followed_by&&e.loggedIn&&e.isOtherUser?((0,o.wg)(),(0,o.iD)("div",b,(0,r.zw)(e.$t("user_card.follows_you")),1)):(0,o.kq)("",!0),!e.isOtherUser||!e.loggedIn&&e.switcher?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",y,["disabled"!==e.userHighlightType?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:0,id:"userHighlightColorTx"+e.user.id,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.userHighlightColor=t}),class:"userHighlightText",type:"text"},null,8,D)),[[i.nr,e.userHighlightColor]]):(0,o.kq)("",!0),"disabled"!==e.userHighlightType?(0,o.wy)(((0,o.wg)(),(0,o.iD)("input",{key:1,id:"userHighlightColor"+e.user.id,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.userHighlightColor=t}),class:"userHighlightCl",type:"color"},null,8,_)),[[i.nr,e.userHighlightColor]]):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(" ")+" "),(0,o.Wm)(K,{id:"userHighlightSel"+e.user.id,modelValue:e.userHighlightType,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.userHighlightType=t}),class:"userHighlightSel"},{default:(0,o.w5)((function(){return[(0,o._)("option",k,(0,r.zw)(e.$t("user_card.highlight.disabled")),1),(0,o._)("option",C,(0,r.zw)(e.$t("user_card.highlight.solid")),1),(0,o._)("option",S,(0,r.zw)(e.$t("user_card.highlight.striped")),1),(0,o._)("option",j,(0,r.zw)(e.$t("user_card.highlight.side")),1)]})),_:1},8,["id","modelValue"])]))]),e.loggedIn&&e.isOtherUser?((0,o.wg)(),(0,o.iD)("div",F,[(0,o._)("div",A,[(0,o.Wm)(G,{relationship:e.relationship,user:e.user},null,8,["relationship","user"]),e.relationship.following?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.relationship.subscribing?((0,o.wg)(),(0,o.j4)(Y,{key:1,class:"btn button-default toggled",click:e.unsubscribeUser,title:e.$t("user_card.unsubscribe")},{default:(0,o.w5)((function(){return[(0,o.Wm)(J,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{icon:"rss",transform:"left-5 shrink-6 up-3 rotate-20",flip:"horizontal"}),(0,o.Wm)(N,{icon:"rss",transform:"right-5 shrink-6 up-3 rotate-20"}),(0,o.Wm)(N,{icon:"bell"})]})),_:1})]})),_:1},8,["click","title"])):((0,o.wg)(),(0,o.j4)(Y,{key:0,class:"btn button-default",click:e.subscribeUser,title:e.$t("user_card.subscribe")},{default:(0,o.w5)((function(){return[(0,o.Wm)(N,{icon:"bell"})]})),_:1},8,["click","title"]))],64)):(0,o.kq)("",!0)]),(0,o._)("div",null,[e.relationship.muting?((0,o.wg)(),(0,o.iD)("button",{key:0,class:"btn button-default btn-block toggled",disabled:e.user.deactivated,onClick:t[6]||(t[6]=function(){return e.unmuteUser&&e.unmuteUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.muted")),9,O)):((0,o.wg)(),(0,o.iD)("button",{key:1,class:"btn button-default btn-block",disabled:e.user.deactivated,onClick:t[7]||(t[7]=function(){return e.muteUser&&e.muteUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.mute")),9,E))]),(0,o._)("div",null,[(0,o._)("button",{class:"btn button-default btn-block",disabled:e.user.deactivated,onClick:t[8]||(t[8]=function(){return e.mentionUser&&e.mentionUser.apply(e,arguments)})},(0,r.zw)(e.$t("user_card.mention")),9,z)]),e.showModerationMenu?((0,o.wg)(),(0,o.j4)(Q,{key:0,user:e.user},null,8,["user"])):(0,o.kq)("",!0)])):(0,o.kq)("",!0),!e.loggedIn&&e.user.is_local?((0,o.wg)(),(0,o.iD)("div",P,[(0,o.Wm)(X,{user:e.user},null,8,["user"])])):(0,o.kq)("",!0),e.loggedIn&&e.isOtherUser&&(e.hasNote||e.hasNoteEditor&&e.supportsNote)?((0,o.wg)(),(0,o.j4)(ee,{key:2,user:e.user,relationship:e.relationship,editable:e.hasNoteEditor},null,8,["user","relationship","editable"])):(0,o.kq)("",!0)])],2),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",I,[!e.mergedConfig.hideUserStats&&e.switcher?((0,o.wg)(),(0,o.iD)("div",x,[(0,o._)("div",{class:"user-count",onClick:t[9]||(t[9]=(0,i.iM)((function(t){return e.setProfileView("statuses")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.statuses")),1),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(e.user.statuses_count)+" ",1),T])]),(0,o._)("div",{class:"user-count",onClick:t[10]||(t[10]=(0,i.iM)((function(t){return e.setProfileView("friends")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.followees")),1),(0,o._)("span",null,(0,r.zw)(e.hideFollowsCount?e.$t("user_card.hidden"):e.user.friends_count),1)]),(0,o._)("div",{class:"user-count",onClick:t[11]||(t[11]=(0,i.iM)((function(t){return e.setProfileView("followers")}),["prevent"]))},[(0,o._)("h5",null,(0,r.zw)(e.$t("user_card.followers")),1),(0,o._)("span",null,(0,r.zw)(e.hideFollowersCount?e.$t("user_card.hidden"):e.user.followers_count),1)])])):(0,o.kq)("",!0),e.hideBio?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(W,{key:1,class:"user-card-bio",html:e.user.description_html,emoji:e.user.emoji,"handle-links":!0},null,8,["html","emoji"]))])),((0,o.wg)(),(0,o.j4)(o.lR,{to:"#modal"},[e.showingConfirmMute?((0,o.wg)(),(0,o.j4)(ne,{key:0,title:e.$t("user_card.mute_confirm_title"),"confirm-text":e.$t("user_card.mute_confirm_accept_button"),"cancel-text":e.$t("user_card.mute_confirm_cancel_button"),onAccepted:e.doMuteUser,onCancelled:e.hideConfirmMute},{default:(0,o.w5)((function(){return[(0,o.Wm)(te,{keypath:"user_card.mute_confirm",tag:"div"},{user:(0,o.w5)((function(){return[(0,o._)("span",{textContent:(0,r.zw)(e.user.screen_name_ui)},null,8,$)]})),_:1}),(0,o._)("div",B,[(0,o._)("label",null,(0,r.zw)(e.$t("user_card.mute_duration_prompt")),1),(0,o.wy)((0,o._)("input",{"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.muteExpiryAmount=t}),type:"number",class:"expiry-amount hide-number-spinner",min:0},null,512),[[i.nr,e.muteExpiryAmount]]),(0,o.Wm)(K,{modelValue:e.muteExpiryUnit,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.muteExpiryUnit=t}),unstyled:"true",class:"expiry-unit"},{default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.muteExpiryUnits,(function(t){return(0,o.wg)(),(0,o.iD)("option",{key:t,value:t},(0,r.zw)(e.$t("time.".concat(t,"_short"),[""])),9,U)})),128))]})),_:1},8,["modelValue"])])]})),_:1},8,["title","confirm-text","cancel-text","onAccepted","onCancelled"])):(0,o.kq)("",!0)]))],2)}]])},12061:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(66252),r=n(3577),i=n(42262),s=n(4493);const a={props:{user:Object,at:{type:Boolean,default:!0}},components:{UnicodeDomainIndicator:i.Z},methods:{userProfileLink:function(e){return(0,s.Z)(e.id,e.screen_name,this.$store.state.instance.restrictedNicknames)}}},u=(0,n(83744).Z)(a,[["render",function(e,t,n,i,s,a){var u=(0,o.up)("UnicodeDomainIndicator"),c=(0,o.up)("router-link");return(0,o.wg)(),(0,o.j4)(c,{title:e.user.screen_name_ui,to:e.userProfileLink(e.user)},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,r.zw)(e.at?"@":"")+(0,r.zw)(e.user.screen_name_ui),1),(0,o.Wm)(u,{user:e.user},null,8,["user"])]})),_:1},8,["title","to"])}]])},22588:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var o=n(66252);const r={name:"UserPopover",props:["userId","overlayCenters","disabled","overlayCentersSelector"],components:{UserCard:n(20392).Z,Popover:(0,o.RC)((function(){return Promise.resolve().then(n.bind(n,84535))}))},computed:{userPopoverAvatarAction:function(){return this.$store.getters.mergedConfig.userPopoverAvatarAction},userPopoverOverlay:function(){return this.$store.getters.mergedConfig.userPopoverOverlay}}},i=(0,n(83744).Z)(r,[["render",function(e,t,n,r,i,s){var a=(0,o.up)("UserCard"),u=(0,o.up)("Popover");return(0,o.wg)(),(0,o.j4)(u,{trigger:"click","popover-class":"popover-default user-popover","overlay-centers-selector":e.overlayCentersSelector||".user-info .Avatar","overlay-centers":e.overlayCenters&&e.userPopoverOverlay,disabled:e.disabled},{trigger:(0,o.w5)((function(){return[(0,o.WI)(e.$slots,"default")]})),content:(0,o.w5)((function(t){var n=t.close;return[(0,o.Wm)(a,{class:"user-popover","user-id":e.userId,"hide-bio":!0,"avatar-action":"close"==e.userPopoverAvatarAction?n:e.userPopoverAvatarAction,"on-close":n},null,8,["user-id","avatar-action","on-close"])]})),_:3},8,["overlay-centers-selector","overlay-centers","disabled"])}]])},34133:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(66252),r=["src","loop","controls","alt","title"];const i={props:["attachment","controls"],data:function(){return{blocksSuspend:!1,hasAudio:!0}},computed:{loopVideo:function(){return this.$store.getters.mergedConfig.loopVideoSilentOnly?!this.hasAudio:this.$store.getters.mergedConfig.loopVideo}},methods:{onPlaying:function(e){this.setHasAudio(e),this.loopVideo?this.$emit("play",{looping:!0}):this.$emit("play")},onPaused:function(e){this.$emit("pause")},setHasAudio:function(e){var t=e.srcElement||e.target;this.hasAudio&&(void 0!==t.webkitAudioDecodedByteCount&&t.webkitAudioDecodedByteCount>0||void 0!==t.mozHasAudio&&t.mozHasAudio||void 0!==t.audioTracks&&t.audioTracks.length>0||(this.hasAudio=!1))}}},s=(0,n(83744).Z)(i,[["render",function(e,t,n,i,s,a){return(0,o.wg)(),(0,o.iD)("video",{class:"video",preload:"metadata",src:e.attachment.url,loop:e.loopVideo,controls:e.controls,alt:e.attachment.description,title:e.attachment.description,playsinline:"",onPlaying:t[0]||(t[0]=function(){return e.onPlaying&&e.onPlaying.apply(e,arguments)}),onPause:t[1]||(t[1]=function(){return e.onPaused&&e.onPaused.apply(e,arguments)})},null,40,r)}]])},27650:(e,t,n)=>{var o={"./ar.json":[36224,7808],"./ca.json":[49394,6234],"./cs.json":[87436,7433],"./de.json":[25195,9459],"./en.json":[88797],"./eo.json":[97898,4646],"./es.json":[98559,3968],"./et.json":[13230,4451],"./eu.json":[84826,4542],"./fa.json":[52006,2953],"./fi.json":[70823,9738],"./fr.json":[61341,3746],"./ga.json":[41647,830],"./he.json":[92215,379],"./hu.json":[95028,5494],"./id.json":[62263,2513],"./it.json":[2533,1159],"./ja_easy.json":[8439,8714],"./ja_pedantic.json":[22838,325],"./ko.json":[10707,9670],"./nan-TW.json":[42101,9862],"./nb.json":[72358,7845],"./nl.json":[49922,6256],"./oc.json":[47297,617],"./pl.json":[82098,5571],"./pt.json":[94465,4047],"./ro.json":[64367,6342],"./ru.json":[73289,5964],"./sk.json":[31478,1547],"./te.json":[32781,2044],"./uk.json":[8411,5253],"./vi.json":[6294,4975],"./zh.json":[4425,5929],"./zh_Hant.json":[37644,6544]};function r(e){if(!n.o(o,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=o[e],r=t[0];return Promise.all(t.slice(1).map(n.e)).then((()=>n(r)))}r.keys=()=>Object.keys(o),r.id=27650,e.exports=r},31934:(e,t,n)=>{"use strict";e.exports=n.p+"static/img/pleromatan_apology.f9d5180.png"},95326:(e,t,n)=>{"use strict";e.exports=n.p+"static/img/pleromatan_apology_fox.038b0bb.png"},68789:e=>{"use strict";e.exports="data:image/png;base64,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"},43011:e=>{"use strict";e.exports="data:image/png;base64,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"}},s={};function a(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={id:e,loaded:!1,exports:{}};return i[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,e=[],a.O=(t,n,o,r)=>{if(!n){var i=1/0;for(l=0;l<e.length;l++){for(var[n,o,r]=e[l],s=!0,u=0;u<n.length;u++)(!1&r||i>=r)&&Object.keys(a.O).every((e=>a.O[e](n[u])))?n.splice(u--,1):(s=!1,r<i&&(i=r));if(s){e.splice(l--,1);var c=o();void 0!==c&&(t=c)}}return t}r=r||0;for(var l=e.length;l>0&&e[l-1][2]>r;l--)e[l]=e[l-1];e[l]=[n,o,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var r=Object.create(null);a.r(r);var i={};t=t||[null,n({}),n([]),n(n)];for(var s=2&o&&e;"object"==typeof s&&!~t.indexOf(s);s=n(s))Object.getOwnPropertyNames(s).forEach((t=>i[t]=()=>e[t]));return i.default=()=>e,a.d(r,i),r},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>"static/js/"+({50:"emoji-annotations/en_GB-json",227:"emoji-annotations/ha-json",278:"emoji-annotations/kn-json",313:"emoji-annotations/tg-json",325:"i18n/ja_pedantic-json",346:"emoji-annotations/rw-json",379:"i18n/he-json",420:"emoji-annotations/fi-json",457:"emoji-annotations/zh-json",577:"emoji-annotations/en_001-json",617:"i18n/oc-json",625:"emoji-annotations/so-json",678:"emoji-annotations/ps-json",786:"emoji-annotations/xh-json",830:"i18n/ga-json",1012:"emoji-annotations/or-json",1044:"emoji-annotations/zh_Hant_HK-json",1056:"emoji-annotations/uz-json",1095:"emoji-annotations/pl-json",1159:"i18n/it-json",1162:"emoji-annotations/ccp-json",1236:"emoji-annotations/fil-json",1290:"emoji-annotations/ja-json",1404:"emoji-annotations/km-json",1452:"emoji-annotations/yue-json",1546:"emoji-annotations/pt_PT-json",1547:"i18n/sk-json",1553:"emoji-annotations/sl-json",1584:"emoji-annotations/to-json",1596:"emoji-annotations/da-json",1613:"emoji-annotations/mai-json",1780:"emoji-annotations/tk-json",1790:"emoji-annotations/dsb-json",1821:"emoji-annotations/fr_CA-json",1911:"emoji-annotations/mr-json",1959:"emoji-annotations/su-json",2044:"i18n/te-json",2223:"emoji-annotations/fr-json",2243:"emoji-annotations/sa-json",2342:"emoji-annotations/az-json",2350:"emoji-annotations/sk-json",2397:"emoji-annotations/kl-json",2479:"emoji-annotations/jv-json",2513:"i18n/id-json",2569:"emoji-annotations/tt-json",2599:"emoji-annotations/kok-json",2656:"emoji-annotations/ckb-json",2685:"emoji-annotations/ml-json",2699:"emoji-annotations/es_MX-json",2767:"emoji-annotations/zh_Hant-json",2861:"emoji-annotations/hr-json",2873:"emoji-annotations/kk-json",2874:"emoji-annotations/sc-json",2883:"emoji-annotations/ku-json",2953:"i18n/fa-json",2966:"emoji-annotations/ko-json",2992:"emoji-annotations/eu-json",3056:"emoji-annotations/hi_Latn-json",3241:"emoji-annotations/sv-json",3276:"emoji-annotations/et-json",3313:"emoji-annotations/es_US-json",3377:"emoji-annotations/as-json",3568:"emoji-annotations/ti-json",3687:"emoji",3746:"i18n/fr-json",3887:"emoji-annotations/sr-json",3951:"emoji-annotations/th-json",3968:"i18n/es-json",3974:"emoji-annotations/bg-json",3994:"emoji-annotations/sw_KE-json",4047:"i18n/pt-json",4209:"emoji-annotations/doi-json",4354:"emoji-annotations/si-json",4368:"emoji-annotations/sq-json",4424:"emoji-annotations/yue_Hans-json",4451:"i18n/et-json",4542:"i18n/eu-json",4571:"emoji-annotations/ga-json",4646:"i18n/eo-json",4691:"emoji-annotations/ca-json",4710:"emoji-annotations/cs-json",4718:"emoji-annotations/mn-json",4770:"emoji-annotations/lb-json",4785:"emoji-annotations/ky-json",4786:"emoji-annotations/te-json",4879:"emoji-annotations/en_CA-json",4902:"emoji-annotations/hu-json",4975:"i18n/vi-json",5041:"emoji-annotations/pt-json",5104:"emoji-annotations/pcm-json",5115:"emoji-annotations/sr_Latn_BA-json",5119:"emoji-annotations/am-json",5224:"emoji-annotations/vi-json",5253:"i18n/uk-json",5304:"emoji-annotations/ha_NE-json",5401:"emoji-annotations/mni-json",5494:"i18n/hu-json",5521:"emoji-annotations/fa-json",5548:"emoji-annotations/he-json",5571:"i18n/pl-json",5728:"emoji-annotations/en-json",5887:"emoji-annotations/rm-json",5929:"i18n/zh-json",5964:"i18n/ru-json",5968:"emoji-annotations/hi-json",6060:"emoji-annotations/sr_Cyrl_BA-json",6068:"emoji-annotations/ka-json",6116:"emoji-annotations/gd-json",6126:"emoji-annotations/gl-json",6148:"emoji-annotations/br-json",6226:"emoji-annotations/de-json",6234:"i18n/ca-json",6256:"i18n/nl-json",6272:"emoji-annotations/cy-json",6342:"i18n/ro-json",6344:"emoji-annotations/hy-json",6355:"emoji-annotations/af-json",6544:"i18n/zh_Hant-json",6701:"emoji-annotations/mi-json",6773:"emoji-annotations/nl-json",6790:"emoji-annotations/my-json",6797:"emoji-annotations/ur-json",6826:"emoji-annotations/sd-json",6831:"emoji-annotations/es-json",6869:"emoji-annotations/chr-json",6936:"emoji-annotations/ia-json",6946:"emoji-annotations/pa-json",7164:"emoji-annotations/de_CH-json",7169:"emoji-annotations/lt-json",7261:"emoji-annotations/gu-json",7300:"emoji-annotations/is-json",7303:"emoji-annotations/wo-json",7304:"emoji-annotations/be-json",7360:"emoji-annotations/ar_SA-json",7433:"i18n/cs-json",7464:"emoji-annotations/lo-json",7569:"emoji-annotations/ast-json",7585:"emoji-annotations/sw-json",7808:"i18n/ar-json",7845:"i18n/nb-json",7855:"emoji-annotations/sat-json",7879:"emoji-annotations/el-json",7897:"emoji-annotations/ta-json",8015:"emoji-annotations/hsb-json",8031:"emoji-annotations/qu-json",8134:"emoji-annotations/bs-json",8395:"emoji-annotations/ru-json",8681:"emoji-annotations/sr_Latn-json",8714:"i18n/ja_easy-json",8732:"emoji-annotations/yo-json",8873:"emoji-annotations/es_419-json",8898:"emoji-annotations/lv-json",8970:"emoji-annotations/it-json",8988:"emoji-annotations/en_IN-json",8995:"emoji-annotations/fo-json",9064:"emoji-annotations/bn-json",9319:"emoji-annotations/zu-json",9360:"emoji-annotations/en_AU-json",9377:"emoji-annotations/ne-json",9399:"emoji-annotations/mt-json",9414:"emoji-annotations/nn-json",9459:"i18n/de-json",9465:"emoji-annotations/id-json",9670:"i18n/ko-json",9738:"i18n/fi-json",9757:"emoji-annotations/ug-json",9780:"emoji-annotations/kab-json",9790:"emoji-annotations/ceb-json",9862:"i18n/nan-TW-json",9864:"emoji-annotations/ro-json",9871:"emoji-annotations/uk-json",9873:"emoji-annotations/ar-json",9895:"emoji-annotations/ig-json",9921:"emoji-annotations/mk-json",9924:"emoji-annotations/ms-json",9926:"emoji-annotations/yo_BJ-json",9978:"emoji-annotations/tr-json",9979:"emoji-annotations/no-json",9994:"emoji-annotations/pa_Arab-json"}[e]||e)+"."+{48:"b5ecdbc517423af07ca4",50:"bd687f904492facc81d1",159:"903e90c9de8ef6c67077",227:"2a08912b38925c10f970",278:"efdac8ac0cb00991ba1e",313:"9647f559a4477d7d8e96",325:"b52fa70f0bf89ae01cfb",346:"031838c5374676191131",379:"03c5d271a4034de06e6f",420:"0f254bb4b0faaba4abcc",457:"e42a28127d5c1aff6c85",577:"72d8c47269350f59aa9f",617:"4f52bf1b6e3213acc33c",625:"f75abd16637c8924c075",678:"a0d9eea5b81bcad11e64",786:"21e88c05ad3113dfc7f2",830:"3f1981817977a16f1d7e",1012:"b007c2f6f92dcc95efac",1044:"7eee03c705347a21c612",1056:"ac43f4c54d4587324a20",1095:"e9e8f1ed84dc6c169516",1159:"99a21d5c98376af17141",1162:"02836537ffe2b02291cb",1236:"4fca833f178d1b889b69",1290:"0bd51f8c40c106355b0e",1404:"9bc922b2e0faa64b4c53",1452:"15102c0ddfdf19bdfb4c",1546:"c381b13e323f91b0e6b3",1547:"d8d0eba80f94e6f55145",1553:"a40c5548da34fce6f1d0",1584:"50ac37d101caaf592c94",1596:"8d074e27df71edafc543",1613:"302386b3358f4d34f9c8",1780:"23a9a6229829921704ad",1790:"7635686ffd8d62264466",1821:"59ed6b59e2ca68707292",1911:"cb0a87d9aabf8a52161d",1959:"daff15251020cbecea7d",2044:"ce6db28261b2f824064f",2223:"da49ed0d1a6622fe1c67",2243:"21b06234a08c7469ccb4",2342:"9a32f2941d9c4d1f834c",2350:"5d96bdb4da82655d0314",2397:"87ab8661b4bdecd09faf",2479:"1c8d5ffcff22b46b6214",2513:"e5c9ee768155f88128b9",2569:"4c089389ba9983ec8ef7",2599:"116e4f72db3bfb846233",2656:"13dc83db1e15aa76051a",2685:"3f2902a84240faff1b48",2699:"ee359d4b611fdb1aeb33",2767:"9cbb765c181d443828a9",2861:"fe847ade1f18a60e513c",2873:"a20b59d47bdfe99786ad",2874:"c84c9c47d2e104c43e4c",2883:"2173ed87f8d7372ee209",2953:"a19100f6a5a9431e2adb",2966:"d175900fe48f48ce87c8",2992:"931b429f5fcc141549a5",3056:"3cb73c456f31261f1908",3241:"8b0374cbca3a77519876",3276:"c42e3f186a55ecb061cd",3313:"280bdb036dfd651d079a",3377:"34cf67edc1cecd195738",3568:"5b173bd33bb960be805b",3687:"33eab91b64f59431137d",3746:"36ef21ccb1203d3e65ae",3887:"e29a20e59a708df0c6a8",3951:"34709bae223bb9d2587c",3968:"4a302899a65e1f67d8a2",3974:"7c69c52572a7bf87e1db",3994:"f3563cbeac1c158563d5",4047:"3fc5593e030268bcd291",4209:"7841c3f3ceb4e3da0bd1",4354:"841b356da03623c10dbf",4368:"bcf154ed8a6138aa089c",4424:"cc60bb10d32fab3d8207",4451:"580b101d6bb83a8aee75",4542:"d2eab39b0427995fc314",4571:"cb3f9e613a8c445aea23",4646:"6c62eef99e850912498b",4691:"ce029e860b10b242c6a5",4710:"48d8bba230dc9fe6b3dc",4718:"764169f1168d0432640f",4770:"499c526f3a653618ea9b",4785:"310bda579c819eda9472",4786:"8a69a10f62cdf626244e",4879:"5de965778a6b8a5a4bb4",4902:"1faf52040deda872b416",4975:"703c1e731be6e857bbf3",5041:"2b2512ee44291bdb2ae7",5104:"eac3a5ad0b4b5b33289d",5115:"72933405032b81344754",5119:"94388548f7c18233fec3",5224:"f6a364b2add7f8c8bc67",5253:"003908af9b15becdd382",5304:"e4855d92aaccfdd6ba57",5401:"7db7f76ab1ce34e3683d",5494:"0487899ca7a7a8505ed8",5521:"819c7f263c8594ccf4fa",5548:"a3d7631f32182b0955a2",5571:"c963247822381b05579b",5728:"6c3947f7c49c3952084d",5887:"985d4934f386fd05a75c",5929:"a0a26f6d62ddbe0b49cc",5964:"b913eb7f7e9f0c642438",5968:"04bc5f73dc2169def97e",6060:"83c7c64b9696ae2339f2",6068:"567e7b051d90a37003f3",6116:"e3d0aea3725be774ad81",6126:"ce89036f0ae72224c994",6148:"c7175423d8965ed10bae",6226:"e1443c01a191af1665e1",6234:"1eb24bc001efa3c0627f",6256:"3fb9758b10c29434b613",6272:"e09dd13da5ad56530ead",6342:"3fd9977ed1c1413059ae",6344:"2d819f7faabfeba8457f",6355:"96c988285a6a2cce6246",6464:"eb9c90a1c948cde554e9",6544:"f7e1d0f4b873c60d6396",6701:"9efe6f146ecd8987f80a",6773:"52f4b93b8fa5e22cb585",6790:"8e7dd1485813d15bba7e",6797:"983c02109444c883a18f",6826:"8f2a6a06dc3cf185f79d",6831:"f593b0dc2367a9d7fb30",6869:"e7e542ab5a74167dec10",6936:"8e8365e2bf41779e2beb",6946:"7d60d69762a108270669",7164:"b4a5891ea2f38d616ec0",7169:"ced4d5e70edc60127df6",7261:"8a899f364cf260376905",7300:"62e220c65215b034533d",7303:"e0d689e22cda0dd77e9a",7304:"f92f80669873a4100c69",7360:"4a6f4402931a867070f0",7433:"5eedbe9f7084c349fbe8",7464:"ecb06d61465a355b8157",7569:"7e4da8cb7e539c19a9b9",7585:"d5f350641b9cbcc0e126",7586:"628f729b9c8b2e6f4e1f",7808:"4916f840147303aa65fe",7845:"a54af3b1f47d576ad4aa",7855:"71e92700b2aaca8e021c",7879:"b36610f2ea16d56c2314",7897:"675cc6c7607449d4a91b",7962:"e25d40b042f8ee7389c3",8015:"438721731b4171bc6fc3",8031:"55f4df57e71076dbad9f",8134:"48ef42da1c7976cf083c",8395:"a81d0df34460837ccacc",8681:"ff27d1f455bf2afb8d70",8714:"1d5ea7e755b066ac2cdd",8732:"ea1150d6bc360dd86f2e",8859:"c76b0a0c3a4b5acbef11",8873:"d81991295392b6ed83bb",8898:"5600c2eb6d59fa0aa2e2",8970:"9c1758f4fd3391f7f61a",8988:"002faa48c09121928fca",8995:"9b060e8009b3a8be4597",9060:"24271e167e0471a1a732",9064:"657aac057f36ad06c58d",9319:"e0cb7cd3890583fd0f6d",9360:"33aac9bbd887273a34b1",9377:"a0118dca2096a101b8e8",9399:"3ddf7dbc114adf90c500",9414:"7293cd5d7205681cf48c",9459:"bfa48615ac92f87ff37a",9465:"55f83c46d753b0b69330",9670:"9029d09084bb22d8b705",9738:"d1934c18f12d80493ab1",9757:"bf768bd32e9ff02b0a8a",9780:"1a2de4774f4ddc2b51dd",9790:"9db0336f168aa77ee395",9862:"7f2789d8a461e86d1734",9864:"cb62f86ce78c94d1e813",9871:"af110c8eef232638fc4d",9873:"5527466d349f2954d49b",9895:"f19fa5fe3582463ba73c",9921:"a254cabb8570419cc426",9924:"272ee4735aabc37015dd",9926:"650318c25fe4da92bad8",9978:"6462e8cfd5006cf5b6cf",9979:"22bdbbc77cc3c14ada58",9994:"5ae021308b1c5f6dd8a7"}[e]+".js",a.miniCssF=e=>"static/css/"+e+"."+{159:"1d523a00378ebd68c5b3",6464:"169260b661120cc50815",7586:"0d43f70bc6240422f179",7962:"76663e78ad5ea0bb0b90",8859:"d26a3b0841a7beb8fd4a"}[e]+".css",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},r="pleroma_fe:",a.l=(e,t,n,i)=>{if(o[e])o[e].push(t);else{var s,u;if(void 0!==n)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==r+n){s=d;break}}s||(u=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,a.nc&&s.setAttribute("nonce",a.nc),s.setAttribute("data-webpack",r+n),s.src=e),o[e]=[t];var p=(t,n)=>{s.onerror=s.onload=null,clearTimeout(m);var r=o[e];if(delete o[e],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(n))),t)return t(n)},m=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),u&&document.head.appendChild(s)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="/",(()=>{if("undefined"!=typeof document){var e={2143:0};a.f.miniCss=(t,n)=>{e[t]?n.push(e[t]):0!==e[t]&&{159:1,6464:1,7586:1,7962:1,8859:1}[t]&&n.push(e[t]=(e=>new Promise(((t,n)=>{var o=a.miniCssF(e),r=a.p+o;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),o=0;o<n.length;o++){var r=(s=n[o]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(r===e||r===t))return s}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){var s;if((r=(s=i[o]).getAttribute("data-href"))===e||r===t)return s}})(o,r))return t();((e,t,n,o,r)=>{var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onerror=i.onload=n=>{if(i.onerror=i.onload=null,"load"===n.type)o();else{var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.href||t,u=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");u.code="CSS_CHUNK_LOAD_FAILED",u.type=s,u.request=a,i.parentNode&&i.parentNode.removeChild(i),r(u)}},i.href=t,document.head.appendChild(i)})(e,r,0,t,n)})))(t).then((()=>{e[t]=0}),(n=>{throw delete e[t],n})))}}})(),(()=>{var e={2143:0};a.f.j=(t,n)=>{var o=a.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,r)=>o=e[t]=[n,r]));n.push(o[2]=r);var i=a.p+a.u(t),s=new Error;a.l(i,(n=>{if(a.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+t,t)}},a.O.j=t=>0===e[t];var t=(t,n)=>{var o,r,[i,s,u]=n,c=0;if(i.some((t=>0!==e[t]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(u)var l=u(a)}for(t&&t(n);c<i.length;c++)r=i[c],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(l)},n=self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var u=a.O(void 0,[3733],(()=>a(35930)));u=a.O(u)})(); +//# sourceMappingURL=app.d42ab31e1d50a3265a82.js.map +\ No newline at end of file diff --git a/priv/static/static/js/app.d42ab31e1d50a3265a82.js.map b/priv/static/static/js/app.d42ab31e1d50a3265a82.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/app.d42ab31e1d50a3265a82.js","mappings":"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,CAChB,MACA,KAED,eAAgB,CACf,KACA,MAED,eAAgB,CACf,KACA,MAED,eAAgB,CACf,MACA,IAED,eAAgB,CACf,MACA,MAED,YAAa,CACZ,MACA,MAED,gBAAiB,CAChB,MACA,MAED,eAAgB,CACf,MACA,MAED,eAAgB,CACf,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,eAAgB,CACf,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,eAAgB,CACf,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,eAAgB,CACf,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,aAAc,CACb,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,oBAAqB,CACpB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,MAED,eAAgB,CACf,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,IACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,MACA,MAED,YAAa,CACZ,KACA,MAED,YAAa,CACZ,MACA,KAED,YAAa,CACZ,MACA,MAED,eAAgB,CACf,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,YAAa,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,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO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","sources":["webpack://pleroma_fe/webpack/runtime/chunk loaded","webpack://pleroma_fe/webpack/runtime/create fake namespace object","webpack://pleroma_fe/webpack/runtime/load script","webpack://pleroma_fe/./src/i18n/en.json","webpack://pleroma_fe/./node_modules/@kazvmoe-infra/unicode-emoji-json/annotations/ lazy ^\\.\\/.*\\.json$ chunkName: emoji-annotations/[request] namespace object","webpack://pleroma_fe/./src/components/emoji_input/suggestor.js","webpack://pleroma_fe/./src/services/html_converter/utility.service.js","webpack://pleroma_fe/./src/services/html_converter/html_line_converter.service.js","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.vue","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.js","webpack://pleroma_fe/./src/services/matcher/matcher.service.js","webpack://pleroma_fe/./src/components/hashtag_link/hashtag_link.vue?7c0f","webpack://pleroma_fe/./src/components/rich_content/rich_content.jsx","webpack://pleroma_fe/./src/services/html_converter/html_tree_converter.service.js","webpack://pleroma_fe/./src/components/tab_switcher/tab_switcher.jsx","webpack://pleroma_fe/./src/hocs/with_load_more/with_load_more.jsx","webpack://pleroma_fe/./src/i18n/languages.js","webpack://pleroma_fe/./src/i18n/messages.js","webpack://pleroma_fe/./src/lib/event_target_polyfill.js","webpack://pleroma_fe/./src/modules/interface.js","webpack://pleroma_fe/./src/modules/instance.js","webpack://pleroma_fe/./src/modules/statuses.js","webpack://pleroma_fe/./src/modules/lists.js","webpack://pleroma_fe/./src/services/timeline_fetcher/timeline_fetcher.service.js","webpack://pleroma_fe/./src/services/follow_request_fetcher/follow_request_fetcher.service.js","webpack://pleroma_fe/./src/services/lists_fetcher/lists_fetcher.service.js","webpack://pleroma_fe/./src/services/backend_interactor_service/backend_interactor_service.js","webpack://pleroma_fe/./src/services/window_utils/window_utils.js","webpack://pleroma_fe/./src/services/new_api/oauth.js","webpack://pleroma_fe/./src/services/push/push.js","webpack://pleroma_fe/./src/modules/users.js","webpack://pleroma_fe/./src/services/chat_utils/chat_utils.js","webpack://pleroma_fe/./src/modules/api.js","webpack://pleroma_fe/./src/modules/profileConfig.js","webpack://pleroma_fe/./src/components/update_notification/update_notification.js","webpack://pleroma_fe/./src/modules/serverSideStorage.js","webpack://pleroma_fe/./src/modules/adminSettings.js","webpack://pleroma_fe/./src/modules/shout.js","webpack://pleroma_fe/./src/modules/oauth.js","webpack://pleroma_fe/./src/modules/auth_flow.js","webpack://pleroma_fe/./src/modules/media_viewer.js","webpack://pleroma_fe/./src/modules/oauth_tokens.js","webpack://pleroma_fe/./src/modules/reports.js","webpack://pleroma_fe/./src/modules/polls.js","webpack://pleroma_fe/./src/modules/postStatus.js","webpack://pleroma_fe/./src/modules/editStatus.js","webpack://pleroma_fe/./src/modules/statusHistory.js","webpack://pleroma_fe/./src/services/chat_service/chat_service.js","webpack://pleroma_fe/./src/modules/chats.js","webpack://pleroma_fe/./src/modules/announcements.js","webpack://pleroma_fe/./src/lib/persisted_state.js","webpack://pleroma_fe/./src/lib/push_notifications_plugin.js","webpack://pleroma_fe/./src/App.vue","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue","webpack://pleroma_fe/./src/components/login_form/login_form.vue","webpack://pleroma_fe/./src/components/login_form/login_form.js","webpack://pleroma_fe/./src/components/login_form/login_form.vue?7e2c","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.vue","webpack://pleroma_fe/./src/services/new_api/mfa.js","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.js","webpack://pleroma_fe/./src/components/mfa_form/recovery_form.vue?75db","webpack://pleroma_fe/./src/components/mfa_form/totp_form.vue","webpack://pleroma_fe/./src/components/mfa_form/totp_form.js","webpack://pleroma_fe/./src/components/mfa_form/totp_form.vue?e31f","webpack://pleroma_fe/./src/components/auth_form/auth_form.js","webpack://pleroma_fe/./src/components/user_panel/user_panel.js","webpack://pleroma_fe/./src/components/user_panel/user_panel.vue?62d1","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue","webpack://pleroma_fe/./src/components/navigation/navigation.js","webpack://pleroma_fe/./src/components/optional_router_link/optional_router_link.vue","webpack://pleroma_fe/./src/components/optional_router_link/optional_router_link.vue?aa8e","webpack://pleroma_fe/./src/components/navigation/navigation_entry.js","webpack://pleroma_fe/./src/components/navigation/navigation_entry.vue?57fe","webpack://pleroma_fe/./src/components/navigation/filter.js","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.js","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.vue?5439","webpack://pleroma_fe/./src/components/lists_menu/lists_menu_content.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue","webpack://pleroma_fe/./src/components/navigation/navigation_pins.js","webpack://pleroma_fe/./src/components/navigation/navigation_pins.vue?9359","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.js","webpack://pleroma_fe/./src/components/nav_panel/nav_panel.vue?ec9c","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.vue","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.js","webpack://pleroma_fe/./src/components/instance_specific_panel/instance_specific_panel.vue?b4d3","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue","webpack://pleroma_fe/./src/components/features_panel/features_panel.js","webpack://pleroma_fe/./src/components/features_panel/features_panel.vue?e52c","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.js","webpack://pleroma_fe/./src/components/who_to_follow_panel/who_to_follow_panel.vue?c79e","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.js","webpack://pleroma_fe/./src/components/shout_panel/shout_panel.vue?452f","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.js","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.vue?6a4b","webpack://pleroma_fe/./src/components/pinch_zoom/pinch_zoom.vue","webpack://pleroma_fe/./src/services/gesture_service/gesture_service.js","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.js","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.vue?cb15","webpack://pleroma_fe/./src/components/swipe_click/swipe_click.vue","webpack://pleroma_fe/./src/components/media_modal/media_modal.js","webpack://pleroma_fe/./src/components/media_modal/media_modal.vue?9f8e","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.js","webpack://pleroma_fe/./src/components/side_drawer/side_drawer.vue?c115","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.js","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue?cc2d","webpack://pleroma_fe/./src/components/mobile_post_status_button/mobile_post_status_button.vue","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.js","webpack://pleroma_fe/./src/components/mobile_nav/mobile_nav.vue?67f1","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue","webpack://pleroma_fe/./src/components/search_bar/search_bar.js","webpack://pleroma_fe/./src/components/search_bar/search_bar.vue?d1ca","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.js","webpack://pleroma_fe/./src/components/desktop_nav/desktop_nav.vue?6641","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.js","webpack://pleroma_fe/./src/components/user_reporting_modal/user_reporting_modal.vue?df82","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.js","webpack://pleroma_fe/./src/components/edit_status_modal/edit_status_modal.vue?03f9","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.js","webpack://pleroma_fe/./src/components/post_status_modal/post_status_modal.vue?9c44","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.js","webpack://pleroma_fe/./src/components/status_history_modal/status_history_modal.vue?4ee0","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.js","webpack://pleroma_fe/./src/components/global_notice_list/global_notice_list.vue?1667","webpack://pleroma_fe/./src/App.js","webpack://pleroma_fe/./src/App.vue?3b2b","webpack://pleroma_fe/./src/components/timeline/timeline.vue","webpack://pleroma_fe/./src/components/conversation/conversation.vue","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.js","webpack://pleroma_fe/./src/components/thread_tree/thread_tree.vue?7311","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.vue","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.js","webpack://pleroma_fe/./src/components/quick_filter_settings/quick_filter_settings.vue?f71f","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.vue","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.js","webpack://pleroma_fe/./src/components/quick_view_settings/quick_view_settings.vue?4eaf","webpack://pleroma_fe/./src/components/conversation/conversation.js","webpack://pleroma_fe/./src/components/conversation/conversation.vue?6723","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.js","webpack://pleroma_fe/./src/components/timeline_menu/timeline_menu.vue?96c1","webpack://pleroma_fe/./src/components/timeline/timeline.js","webpack://pleroma_fe/./src/components/timeline/timeline.vue?7060","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.js","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.vue?daf2","webpack://pleroma_fe/./src/components/public_timeline/public_timeline.vue","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.js","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.vue?9b62","webpack://pleroma_fe/./src/components/public_and_external_timeline/public_and_external_timeline.vue","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.js","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.vue?a3f1","webpack://pleroma_fe/./src/components/friends_timeline/friends_timeline.vue","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.js","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.vue?be7b","webpack://pleroma_fe/./src/components/tag_timeline/tag_timeline.vue","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.js","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.vue?863c","webpack://pleroma_fe/./src/components/bookmark_timeline/bookmark_timeline.vue","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.js","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.vue?2386","webpack://pleroma_fe/./src/components/conversation-page/conversation-page.vue","webpack://pleroma_fe/./src/components/interactions/interactions.vue","webpack://pleroma_fe/./src/components/interactions/interactions.js","webpack://pleroma_fe/./src/components/interactions/interactions.vue?3dc7","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.js","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.vue?fced","webpack://pleroma_fe/./src/components/dm_timeline/dm_timeline.vue","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.vue","webpack://pleroma_fe/./src/components/chat_title/chat_title.js","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue?723f","webpack://pleroma_fe/./src/components/chat_title/chat_title.vue","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.js","webpack://pleroma_fe/./src/components/chat_list_item/chat_list_item.vue?9103","webpack://pleroma_fe/./src/components/chat_new/chat_new.vue","webpack://pleroma_fe/./src/components/chat_new/chat_new.js","webpack://pleroma_fe/./src/components/chat_new/chat_new.vue?e65f","webpack://pleroma_fe/./src/components/chat_list/chat_list.js","webpack://pleroma_fe/./src/components/chat_list/chat_list.vue?39cf","webpack://pleroma_fe/./src/components/chat/chat.vue","webpack://pleroma_fe/./src/components/chat_message/chat_message.vue","webpack://pleroma_fe/./src/components/chat_message_date/chat_message_date.vue","webpack://pleroma_fe/./src/components/chat_message_date/chat_message_date.vue?a1e2","webpack://pleroma_fe/./src/components/chat_message/chat_message.js","webpack://pleroma_fe/./src/components/chat_message/chat_message.vue?38f9","webpack://pleroma_fe/./src/components/chat/chat_layout_utils.js","webpack://pleroma_fe/./src/components/chat/chat.js","webpack://pleroma_fe/./src/components/chat/chat.vue?0265","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.js","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.vue?a06d","webpack://pleroma_fe/./src/components/remove_follower_button/remove_follower_button.vue","webpack://pleroma_fe/./src/components/follow_card/follow_card.js","webpack://pleroma_fe/./src/components/follow_card/follow_card.vue?a7d5","webpack://pleroma_fe/./src/components/user_profile/user_profile.js","webpack://pleroma_fe/./src/components/user_profile/user_profile.vue?c6a1","webpack://pleroma_fe/./src/components/search/search.vue","webpack://pleroma_fe/./src/components/search/search.js","webpack://pleroma_fe/./src/components/search/search.vue?853e","webpack://pleroma_fe/./src/components/registration/registration.vue","webpack://pleroma_fe/./src/components/registration/registration.js","webpack://pleroma_fe/./src/components/registration/registration.vue?5788","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue","webpack://pleroma_fe/./src/components/password_reset/password_reset.js","webpack://pleroma_fe/./src/services/new_api/password_reset.js","webpack://pleroma_fe/./src/components/password_reset/password_reset.vue?e9fd","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.js","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.js","webpack://pleroma_fe/./src/components/follow_request_card/follow_request_card.vue?64bb","webpack://pleroma_fe/./src/components/follow_requests/follow_requests.vue?427b","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.js","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.vue?a7e1","webpack://pleroma_fe/./src/components/oauth_callback/oauth_callback.vue","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.vue","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.js","webpack://pleroma_fe/./src/components/who_to_follow/who_to_follow.vue?d712","webpack://pleroma_fe/./src/components/about/about.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.js","webpack://pleroma_fe/./src/components/terms_of_service_panel/terms_of_service_panel.vue?39d2","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.js","webpack://pleroma_fe/./src/components/staff_panel/staff_panel.vue?16a1","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.vue","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.js","webpack://pleroma_fe/./src/components/about/about.js","webpack://pleroma_fe/./src/components/mrf_transparency_panel/mrf_transparency_panel.vue?cbb1","webpack://pleroma_fe/./src/components/about/about.vue?07c3","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.vue","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.js","webpack://pleroma_fe/./src/components/remote_user_resolver/remote_user_resolver.vue?ac33","webpack://pleroma_fe/./src/components/lists/lists.vue","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue","webpack://pleroma_fe/./src/components/lists_card/lists_card.js","webpack://pleroma_fe/./src/components/lists/lists.js","webpack://pleroma_fe/./src/components/lists_card/lists_card.vue?16e6","webpack://pleroma_fe/./src/components/lists/lists.vue?7e21","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.js","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.vue?804f","webpack://pleroma_fe/./src/components/lists_timeline/lists_timeline.vue","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.js","webpack://pleroma_fe/./src/components/lists_user_search/lists_user_search.vue?4447","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.js","webpack://pleroma_fe/./src/components/lists_edit/lists_edit.vue?056b","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue","webpack://pleroma_fe/./src/components/announcement/announcement.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.js","webpack://pleroma_fe/./src/components/announcement_editor/announcement_editor.vue?cdb9","webpack://pleroma_fe/./src/components/announcement/announcement.js","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.js","webpack://pleroma_fe/./src/components/announcement/announcement.vue?a400","webpack://pleroma_fe/./src/components/announcements_page/announcements_page.vue?89ce","webpack://pleroma_fe/./src/boot/routes.js","webpack://pleroma_fe/./src/directives/body_scroll_lock.js","webpack://pleroma_fe/./src/boot/after_store.js","webpack://pleroma_fe/./src/main.js","webpack://pleroma_fe/./src/modules/config.js","webpack://pleroma_fe/./src/services/errors/errors.js","webpack://pleroma_fe/./src/modules/errors.js","webpack://pleroma_fe/./src/services/api/api.service.js","webpack://pleroma_fe/./src/services/attributes_helper/attributes_helper.service.js","webpack://pleroma_fe/./src/services/color_convert/color_convert.js","webpack://pleroma_fe/./src/services/component_utils/component_utils.js","webpack://pleroma_fe/./src/services/date_utils/date_utils.js","webpack://pleroma_fe/./src/services/desktop_notification_utils/desktop_notification_utils.js","webpack://pleroma_fe/./src/services/entity_normalizer/entity_normalizer.service.js","webpack://pleroma_fe/./src/services/favicon_service/favicon_service.js","webpack://pleroma_fe/./src/services/file_size_format/file_size_format.js","webpack://pleroma_fe/./src/services/file_type/file_type.service.js","webpack://pleroma_fe/./src/services/locale/locale.service.js","webpack://pleroma_fe/./src/services/notification_utils/notification_utils.js","webpack://pleroma_fe/./src/services/notifications_fetcher/notifications_fetcher.service.js","webpack://pleroma_fe/./src/services/offset_finder/offset_finder.service.js","webpack://pleroma_fe/./src/services/promise_interval/promise_interval.js","webpack://pleroma_fe/./src/services/random_seed/random_seed.service.js","webpack://pleroma_fe/./src/services/status_parser/status_parser.js","webpack://pleroma_fe/./src/services/status_poster/status_poster.service.js","webpack://pleroma_fe/./src/services/style_setter/style_setter.js","webpack://pleroma_fe/./src/services/theme_data/pleromafe.js","webpack://pleroma_fe/./src/services/theme_data/theme_data.service.js","webpack://pleroma_fe/./src/services/user_highlighter/user_highlighter.js","webpack://pleroma_fe/./src/services/user_profile_link_generator/user_profile_link_generator.js","webpack://pleroma_fe/./src/components/attachment/attachment.vue","webpack://pleroma_fe/./src/components/attachment/attachment.js","webpack://pleroma_fe/./src/components/attachment/attachment.vue?6808","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.js","webpack://pleroma_fe/./src/components/avatar_list/avatar_list.vue?171c","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.js","webpack://pleroma_fe/./src/components/basic_user_card/basic_user_card.vue?95ff","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue","webpack://pleroma_fe/./src/components/checkbox/checkbox.vue?4d95","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.js","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.vue?dff7","webpack://pleroma_fe/./src/components/confirm_modal/confirm_modal.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.js","webpack://pleroma_fe/./src/components/dialog_modal/dialog_modal.vue?60df","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue","webpack://pleroma_fe/./src/services/completion/completion.js","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.js","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.vue?a18c","webpack://pleroma_fe/./src/components/screen_reader_notice/screen_reader_notice.vue","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.js","webpack://pleroma_fe/./src/components/emoji_input/emoji_input.vue?cc95","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.vue","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.js","webpack://pleroma_fe/./src/components/emoji_picker/emoji_picker.vue?6411","webpack://pleroma_fe/./src/services/ruffle_service/ruffle_service.js","webpack://pleroma_fe/./src/components/flash/flash.vue","webpack://pleroma_fe/./src/components/flash/flash.js","webpack://pleroma_fe/./src/components/flash/flash.vue?8f01","webpack://pleroma_fe/./src/services/follow_manipulate/follow_manipulate.js","webpack://pleroma_fe/./src/components/follow_button/follow_button.js","webpack://pleroma_fe/./src/components/follow_button/follow_button.vue?fbc0","webpack://pleroma_fe/./src/components/follow_button/follow_button.vue","webpack://pleroma_fe/./src/components/gallery/gallery.vue","webpack://pleroma_fe/./src/components/gallery/gallery.js","webpack://pleroma_fe/./src/components/gallery/gallery.vue?c41d","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue","webpack://pleroma_fe/./src/components/interface_language_switcher/interface_language_switcher.vue?f2c7","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue","webpack://pleroma_fe/./src/components/link-preview/link-preview.js","webpack://pleroma_fe/./src/components/link-preview/link-preview.vue?5c9b","webpack://pleroma_fe/./src/components/list/list.vue","webpack://pleroma_fe/./src/components/list/list.vue?b52f","webpack://pleroma_fe/./src/components/media_upload/media_upload.js","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue?73d1","webpack://pleroma_fe/./src/components/media_upload/media_upload.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.vue","webpack://pleroma_fe/./src/components/mention_link/mention_link.js","webpack://pleroma_fe/./src/components/mention_link/mention_link.vue?f0cb","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.vue","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.js","webpack://pleroma_fe/./src/components/mentions_line/mentions_line.vue?e8e7","webpack://pleroma_fe/./src/components/modal/modal.vue","webpack://pleroma_fe/./src/components/modal/modal.vue?8c58","webpack://pleroma_fe/./src/components/notifications/notifications.vue","webpack://pleroma_fe/./src/components/notification/notification.vue","webpack://pleroma_fe/./src/components/report/report.vue","webpack://pleroma_fe/./src/components/report/report.js","webpack://pleroma_fe/./src/components/report/report.vue?5c84","webpack://pleroma_fe/./src/components/notification/notification.js","webpack://pleroma_fe/./src/components/notification/notification.vue?17c8","webpack://pleroma_fe/./src/components/notifications/notification_filters.vue","webpack://pleroma_fe/./src/components/notifications/notification_filters.vue?4a98","webpack://pleroma_fe/./src/components/notifications/notifications.js","webpack://pleroma_fe/./src/components/notifications/notifications.vue?770b","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue","webpack://pleroma_fe/./src/components/panel_loading/panel_loading.vue?50c2","webpack://pleroma_fe/./src/components/popover/popover.js","webpack://pleroma_fe/./src/components/popover/popover.vue?237b","webpack://pleroma_fe/./src/components/popover/popover.vue","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue","webpack://pleroma_fe/./src/components/poll/poll_form.vue","webpack://pleroma_fe/./src/components/poll/poll_form.js","webpack://pleroma_fe/./src/components/poll/poll_form.vue?5434","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.js","webpack://pleroma_fe/./src/components/post_status_form/post_status_form.vue?b98e","webpack://pleroma_fe/./src/components/progress_button/progress_button.vue","webpack://pleroma_fe/./src/components/progress_button/progress_button.vue?2d10","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.js","webpack://pleroma_fe/./src/components/remote_follow/remote_follow.vue?188a","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.js","webpack://pleroma_fe/./src/components/scope_selector/scope_selector.vue?cbff","webpack://pleroma_fe/./src/components/select/select.js","webpack://pleroma_fe/./src/components/select/select.vue?fa00","webpack://pleroma_fe/./src/components/select/select.vue","webpack://pleroma_fe/./src/components/status/status.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue","webpack://pleroma_fe/./src/components/reply_button/reply_button.js","webpack://pleroma_fe/./src/components/reply_button/reply_button.vue?f8cc","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.js","webpack://pleroma_fe/./src/components/favorite_button/favorite_button.vue?4c13","webpack://pleroma_fe/./src/components/react_button/react_button.vue","webpack://pleroma_fe/./src/components/react_button/react_button.js","webpack://pleroma_fe/./src/components/react_button/react_button.vue?64d4","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.js","webpack://pleroma_fe/./src/components/retweet_button/retweet_button.vue?774a","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.js","webpack://pleroma_fe/./src/components/extra_buttons/extra_buttons.vue?2a14","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue","webpack://pleroma_fe/./src/components/status_popover/status_popover.js","webpack://pleroma_fe/./src/components/status_popover/status_popover.vue?2f31","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.js","webpack://pleroma_fe/./src/components/user_list_popover/user_list_popover.vue?32eb","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.js","webpack://pleroma_fe/./src/components/emoji_reactions/emoji_reactions.vue?be26","webpack://pleroma_fe/./src/components/status/status.js","webpack://pleroma_fe/./src/components/status/status.vue?f274","webpack://pleroma_fe/./src/components/status_content/status_content.vue","webpack://pleroma_fe/./src/components/poll/poll.vue","webpack://pleroma_fe/./src/components/poll/poll.js","webpack://pleroma_fe/./src/components/poll/poll.vue?09ad","webpack://pleroma_fe/./src/components/status_body/status_body.vue","webpack://pleroma_fe/./src/components/status_body/status_body.js","webpack://pleroma_fe/./src/components/status_body/status_body.vue?a029","webpack://pleroma_fe/./src/components/status_content/status_content.js","webpack://pleroma_fe/./src/components/status_content/status_content.vue?5b7b","webpack://pleroma_fe/./src/components/still-image/still-image.vue","webpack://pleroma_fe/./src/components/still-image/still-image.js","webpack://pleroma_fe/./src/components/still-image/still-image.vue?7a8d","webpack://pleroma_fe/./src/components/timeago/timeago.vue","webpack://pleroma_fe/./src/components/timeago/timeago.vue?3167","webpack://pleroma_fe/./src/components/unicode_domain_indicator/unicode_domain_indicator.vue","webpack://pleroma_fe/./src/components/unicode_domain_indicator/unicode_domain_indicator.vue?760a","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.js","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue?84fc","webpack://pleroma_fe/./src/components/user_avatar/user_avatar.vue","webpack://pleroma_fe/./src/components/user_card/user_card.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.js","webpack://pleroma_fe/./src/components/moderation_tools/moderation_tools.vue?98d7","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.vue","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.js","webpack://pleroma_fe/./src/components/user_list_menu/user_list_menu.vue?e3cb","webpack://pleroma_fe/./src/components/account_actions/account_actions.js","webpack://pleroma_fe/./src/components/account_actions/account_actions.vue?26a0","webpack://pleroma_fe/./src/components/user_note/user_note.vue","webpack://pleroma_fe/./src/components/user_note/user_note.js","webpack://pleroma_fe/./src/components/user_note/user_note.vue?302a","webpack://pleroma_fe/./src/components/user_card/user_card.js","webpack://pleroma_fe/./src/components/user_card/user_card.vue?bb36","webpack://pleroma_fe/./src/components/user_link/user_link.vue","webpack://pleroma_fe/./src/components/user_link/user_link.vue?e5f2","webpack://pleroma_fe/./src/components/user_popover/user_popover.js","webpack://pleroma_fe/./src/components/user_popover/user_popover.vue?dfdb","webpack://pleroma_fe/./src/components/user_popover/user_popover.vue","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.js","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.vue?da03","webpack://pleroma_fe/./src/components/video_attachment/video_attachment.vue","webpack://pleroma_fe/./src/i18n/ lazy ^\\.\\/.*\\.json$ include: \\.json$ chunkName: i18n/[request] namespace object","webpack://pleroma_fe/webpack/bootstrap","webpack://pleroma_fe/webpack/runtime/compat get default export","webpack://pleroma_fe/webpack/runtime/define property getters","webpack://pleroma_fe/webpack/runtime/ensure chunk","webpack://pleroma_fe/webpack/runtime/get javascript chunk filename","webpack://pleroma_fe/webpack/runtime/get mini-css chunk filename","webpack://pleroma_fe/webpack/runtime/global","webpack://pleroma_fe/webpack/runtime/hasOwnProperty shorthand","webpack://pleroma_fe/webpack/runtime/make namespace object","webpack://pleroma_fe/webpack/runtime/node module decorator","webpack://pleroma_fe/webpack/runtime/publicPath","webpack://pleroma_fe/webpack/runtime/css loading","webpack://pleroma_fe/webpack/runtime/jsonp chunk loading","webpack://pleroma_fe/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"pleroma_fe:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","export default {\n \"about\": {\n \"mrf\": {\n \"federation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Federation\"])},\n \"keyword\": {\n \"keyword_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keyword policies\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Removal from \\\"The Whole Known Network\\\" Timeline\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject\"])},\n \"replace\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replace\"])},\n \"is_replaced_by\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"→\"])}\n },\n \"mrf_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enabled MRF policies\"])},\n \"mrf_policies_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:\"])},\n \"simple\": {\n \"simple_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance-specific policies\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reason\"])},\n \"not_applicable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N/A\"])},\n \"accept\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accept\"])},\n \"accept_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance only accepts messages from the following instances:\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject\"])},\n \"reject_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance will not accept messages from the following instances:\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quarantine\"])},\n \"quarantine_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance will send only public posts to the following instances:\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Removal from \\\"Known Network\\\" Timeline\"])},\n \"ftl_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance removes these instances from \\\"Known Network\\\" timeline:\"])},\n \"media_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media Removal\"])},\n \"media_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance removes media from posts on the following instances:\"])},\n \"media_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media force-set as sensitive\"])},\n \"media_nsfw_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance forces media to be set sensitive in posts on the following instances:\"])}\n }\n },\n \"staff\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Staff\"])}\n },\n \"announcements\": {\n \"page_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcements\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcement\"])},\n \"mark_as_read_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark as read\"])},\n \"post_form_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post announcement\"])},\n \"post_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Type your announcement content here...\"])},\n \"post_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post\"])},\n \"post_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error: \", _interpolate(_named(\"error\"))])},\n \"close_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"delete_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"start_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start time: \"])},\n \"end_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"End time: \"])},\n \"all_day_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is an all-day event\"])},\n \"published_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Published at \", _interpolate(_named(\"time\"))])},\n \"start_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Starts at \", _interpolate(_named(\"time\"))])},\n \"end_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Ends at \", _interpolate(_named(\"time\"))])},\n \"edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"submit_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"cancel_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"inactive_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This announcement is inactive\"])}\n },\n \"shoutbox\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shoutbox\"])}\n },\n \"domain_mute_card\": {\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muting…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmuting…\"])}\n },\n \"exporter\": {\n \"export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export\"])},\n \"processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Processing, you'll soon be asked to download your file\"])}\n },\n \"features_panel\": {\n \"shout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shoutbox\"])},\n \"pleroma_chat_messages\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma Chat\"])},\n \"gopher\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gopher\"])},\n \"media_proxy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media proxy\"])},\n \"scope_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope options\"])},\n \"text_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Text limit\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Features\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])},\n \"upload_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload limit\"])}\n },\n \"finder\": {\n \"error_fetching_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error fetching user\"])},\n \"find_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Find user\"])}\n },\n \"general\": {\n \"apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Apply\"])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"loading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loading…\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occured\"])},\n \"generic_error_message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"An error occured: \", _interpolate(_list(0))])},\n \"error_retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please try again\"])},\n \"retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Try again\"])},\n \"optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"optional\"])},\n \"show_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show more\"])},\n \"show_less\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show less\"])},\n \"never_show_again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Never show again\"])},\n \"dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dismiss\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"disable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm\"])},\n \"verify\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verify\"])},\n \"close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"undo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Undo\"])},\n \"yes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])},\n \"no\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"peek\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Peek\"])},\n \"scroll_to_top\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scroll to top\"])},\n \"role\": {\n \"admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Moderator\"])}\n },\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpin item\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pin item\"])},\n \"flash_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Click to show Flash content using Ruffle (Experimental, may not work).\"])},\n \"flash_security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Note that this can be potentially dangerous since Flash content is still arbitrary code.\"])},\n \"flash_fail\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Failed to load flash content, see console for details.\"])},\n \"scope_in_timeline\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers-only\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unlisted\"])}\n }\n },\n \"image_cropper\": {\n \"crop_picture\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Crop picture\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save\"])},\n \"save_without_cropping\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save without cropping\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])}\n },\n \"importer\": {\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"success\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imported successfully.\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occured while importing this file.\"])}\n },\n \"login\": {\n \"login\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in with OAuth\"])},\n \"logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log out\"])},\n \"logout_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout confirmation\"])},\n \"logout_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to logout?\"])},\n \"logout_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"logout_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not logout\"])},\n \"password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. lain\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"username\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in to join the discussion\"])},\n \"authentication_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authentication code\"])},\n \"enter_recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a recovery code\"])},\n \"enter_two_factor_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a two-factor code\"])},\n \"recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Recovery code\"])},\n \"heading\": {\n \"totp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor authentication\"])},\n \"recovery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor recovery\"])}\n }\n },\n \"media_modal\": {\n \"previous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous\"])},\n \"next\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next\"])},\n \"counter\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"current\")), \" / \", _interpolate(_named(\"total\"))])},\n \"hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close media viewer\"])}\n },\n \"nav\": {\n \"about\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"About\"])},\n \"administration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"back\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"friend_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow requests\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"interactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interactions\"])},\n \"dms\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct messages\"])},\n \"public_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public timeline\"])},\n \"timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timeline\"])},\n \"home_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home timeline\"])},\n \"twkn\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Known Network\"])},\n \"bookmarks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmarks\"])},\n \"user_search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Search\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search\"])},\n \"search_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close search bar\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])},\n \"preferences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timelines\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chats\"])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lists\"])},\n \"edit_nav_mobile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Customize navigation bar\"])},\n \"edit_pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit pinned items\"])},\n \"edit_finish\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Done editing\"])},\n \"mobile_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Toggle mobile sidebar\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open notifications\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open notifications (there are unread ones)\"])},\n \"mobile_notifications_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close notifications\"])},\n \"announcements\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Announcements\"])}\n },\n \"notifications\": {\n \"broken_favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unknown status, searching for it…\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error fetching notifications: \", _interpolate(_list(0))])},\n \"favorited_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"favorited your status\"])},\n \"followed_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"followed you\"])},\n \"follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wants to follow you\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older notifications\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"read\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Read!\"])},\n \"repeated_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeated your status\"])},\n \"no_more_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more notifications\"])},\n \"migrated_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"migrated to\"])},\n \"reacted_with\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"reacted with \", _interpolate(_list(0))])},\n \"submitted_report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"submitted a report\"])},\n \"poll_ended\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"poll has ended\"])}\n },\n \"polls\": {\n \"add_poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add poll\"])},\n \"add_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add option\"])},\n \"option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Option\"])},\n \"votes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"votes\"])},\n \"people_voted_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" person voted\"]), _normalize([_interpolate(_named(\"count\")), \" people voted\"])])},\n \"votes_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" vote\"]), _normalize([_interpolate(_named(\"count\")), \" votes\"])])},\n \"vote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vote\"])},\n \"type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll type\"])},\n \"single_choice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Single choice\"])},\n \"multiple_choices\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Multiple choices\"])},\n \"expiry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll age\"])},\n \"expires_in\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Poll ends in \", _interpolate(_list(0))])},\n \"expired\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Poll ended \", _interpolate(_list(0)), \" ago\"])},\n \"not_enough_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Too few unique options in poll\"])}\n },\n \"emoji\": {\n \"stickers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stickers\"])},\n \"emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Emoji\"])},\n \"keep_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep picker open\"])},\n \"search_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search for an emoji\"])},\n \"add_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insert emoji\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Custom emoji\"])},\n \"unpacked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpacked emoji\"])},\n \"unicode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unicode emoji\"])},\n \"unicode_groups\": {\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activities\"])},\n \"animals-and-nature\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Animals & Nature\"])},\n \"flags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Flags\"])},\n \"food-and-drink\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Food & Drink\"])},\n \"objects\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Objects\"])},\n \"people-and-body\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"People & Body\"])},\n \"smileys-and-emotion\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Smileys & Emotion\"])},\n \"symbols\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Symbols\"])},\n \"travel-and-places\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Travel & Places\"])}\n },\n \"load_all_hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Loaded first \", _interpolate(_named(\"saneAmount\")), \" emoji, loading all emoji may cause performance issues.\"])},\n \"load_all\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Loading all \", _interpolate(_named(\"emojiAmount\")), \" emoji\"])},\n \"regional_indicator\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Regional indicator \", _interpolate(_named(\"letter\"))])}\n },\n \"errors\": {\n \"storage_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies.\"])}\n },\n \"interactions\": {\n \"favs_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats and favorites\"])},\n \"follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New follows\"])},\n \"emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Emoji Reactions\"])},\n \"reports\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reports\"])},\n \"moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User migrates\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older interactions\"])}\n },\n \"post_status\": {\n \"edit_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit status\"])},\n \"new_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post new status\"])},\n \"reply_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply to this status\"])},\n \"quote_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quote this status\"])},\n \"account_not_locked_warning\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your account is not \", _interpolate(_list(0)), \". Anyone can follow you to view your follower-only posts.\"])},\n \"account_not_locked_warning_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"locked\"])},\n \"attachments_sensitive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark attachments as sensitive\"])},\n \"media_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media description\"])},\n \"content_type\": {\n \"text/plain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Plain text\"])},\n \"text/html\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"HTML\"])},\n \"text/markdown\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Markdown\"])},\n \"text/bbcode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"BBCode\"])}\n },\n \"content_type_selection\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post format\"])},\n \"content_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Subject (optional)\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just landed in L.A.\"])},\n \"direct_warning_to_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to all the mentioned users.\"])},\n \"direct_warning_to_first_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will only be visible to the mentioned users at the beginning of the message.\"])},\n \"edit_remote_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Other remote instances may not support editing and unable to receive the latest version of your post.\"])},\n \"edit_unsupported_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma does not support editing mentions or polls.\"])},\n \"posting\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posting\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"preview_empty\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Empty\"])},\n \"empty_status_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Can't post an empty status with no files\"])},\n \"media_description_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Failed to update media, try again\"])},\n \"scope_notice\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to everyone\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will be visible to your followers only\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post will not be visible in Public Timeline and The Whole Known Network\"])}\n },\n \"scope_notice_dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close this notice\"])},\n \"scope\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Direct - post to mentioned users only\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers-only - post to followers only\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Public - post to public timelines\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unlisted - do not post to public timelines\"])}\n }\n },\n \"registration\": {\n \"bio_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio (optional)\"])},\n \"email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"email_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email (optional)\"])},\n \"fullname\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display name\"])},\n \"password_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password confirmation\"])},\n \"registration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invite token\"])},\n \"captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"new_captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Click the image to get a new captcha\"])},\n \"username_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. lain\"])},\n \"fullname_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g. Lain Iwakura\"])},\n \"bio_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"e.g.\\nHi, I'm Lain.\\nI’m an anime girl living in suburban Japan. You may know me from the Wired.\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reason to register\"])},\n \"reason_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This instance approves registrations manually.\\nLet the administration know why you want to register.\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"validations\": {\n \"username_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"fullname_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"email_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_confirmation_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"password_confirmation_match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"should be the same as password\"])},\n \"birthday_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cannot be left blank\"])},\n \"birthday_min_age\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"must be on or before \", _interpolate(_named(\"date\"))])}\n },\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"In which language do you want to receive emails from the server?\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday:\"])},\n \"birthday_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday (optional):\"])}\n },\n \"remote_user_resolver\": {\n \"remote_user_resolver\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remote user resolver\"])},\n \"searching_for\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Searching for\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Not found.\"])}\n },\n \"report\": {\n \"reporter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reporter:\"])},\n \"reported_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reported user:\"])},\n \"reported_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reported statuses:\"])},\n \"notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notes:\"])},\n \"state\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"State:\"])},\n \"state_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open\"])},\n \"state_closed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Closed\"])},\n \"state_resolved\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resolved\"])}\n },\n \"selectable_list\": {\n \"select_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Select all\"])}\n },\n \"settings\": {\n \"add_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add fallback language\"])},\n \"remove_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"primary_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Primary language:\"])},\n \"fallback_language\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Fallback language \", _interpolate(_named(\"index\")), \":\"])},\n \"app_name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"App name\"])},\n \"expert_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show advanced\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save changes\"])},\n \"security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Security\"])},\n \"setting_changed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Setting is different from default\"])},\n \"setting_server_side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This setting is tied to your profile and affects all sessions and clients\"])},\n \"enter_current_password_to_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter your current password to confirm your identity\"])},\n \"post_look_feel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts Look & Feel\"])},\n \"mention_links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mention links\"])},\n \"mfa\": {\n \"otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OTP\"])},\n \"setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Setup OTP\"])},\n \"wait_pre_setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"presetting OTP\"])},\n \"confirm_and_enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm & enable OTP\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Two-factor Authentication\"])},\n \"generate_new_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Generate new recovery codes\"])},\n \"warning_of_generate_new_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"When you generate new recovery codes, your old codes won’t work anymore.\"])},\n \"recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Recovery codes.\"])},\n \"waiting_a_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Receiving backup codes…\"])},\n \"recovery_codes_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.\"])},\n \"authentication_methods\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authentication methods\"])},\n \"scan\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scan\"])},\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Using your two-factor app, scan this QR code or enter text key:\"])},\n \"secret_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Key\"])}\n },\n \"verify\": {\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"To enable two-factor authentication, enter the code from your two-factor app:\"])}\n }\n },\n \"lists_navigation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show lists in navigation\"])},\n \"allow_following_move\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow auto-follow when following account moves\"])},\n \"attachmentRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments\"])},\n \"attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatar\"])},\n \"avatarAltRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatars (notifications)\"])},\n \"avatarRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avatars\"])},\n \"background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background\"])},\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language for receiving emails from the server\"])},\n \"block_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block export\"])},\n \"block_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your blocks to a csv file\"])},\n \"block_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block import\"])},\n \"block_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing blocks\"])},\n \"blocks_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocks imported! Processing them will take a while.\"])},\n \"mute_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute export\"])},\n \"mute_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your mutes to a csv file\"])},\n \"mute_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute import\"])},\n \"mute_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing mutes\"])},\n \"mutes_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes imported! Processing them will take a while.\"])},\n \"import_mutes_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import mutes from a csv file\"])},\n \"account_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account backup\"])},\n \"account_backup_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This allows you to download an archive of your account information and your posts, but they cannot yet be imported into a Pleroma account.\"])},\n \"account_backup_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup\"])},\n \"download_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Download\"])},\n \"backup_not_ready\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This backup is not ready yet.\"])},\n \"backup_running\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"This backup is in progress, processed \", _interpolate(_named(\"number\")), \" record.\"]), _normalize([\"This backup is in progress, processed \", _interpolate(_named(\"number\")), \" records.\"])])},\n \"backup_failed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This backup has failed.\"])},\n \"remove_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"list_backups_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error fetching backup list: \", _interpolate(_named(\"error\"))])},\n \"add_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Create a new backup\"])},\n \"added_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Added a new backup.\"])},\n \"add_backup_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error adding a new backup: \", _interpolate(_named(\"error\"))])},\n \"blocks_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocks\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is a bot account\"])},\n \"btnRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Buttons\"])},\n \"cBlue\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blue (Reply, follow)\"])},\n \"cGreen\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Green (Retweet)\"])},\n \"cOrange\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Orange (Favorite)\"])},\n \"cRed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Red (Cancel)\"])},\n \"change_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Change email\"])},\n \"change_email_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue changing your email.\"])},\n \"changed_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email changed successfully!\"])},\n \"change_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Change password\"])},\n \"change_password_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue changing your password.\"])},\n \"changed_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password changed successfully!\"])},\n \"chatMessageRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chat message\"])},\n \"collapse_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse posts with subjects\"])},\n \"composing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Composing\"])},\n \"confirm_new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirm new password\"])},\n \"current_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"confirm_dialogs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ask for confirmation when\"])},\n \"confirm_dialogs_repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeating a status\"])},\n \"confirm_dialogs_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"unfollowing a user\"])},\n \"confirm_dialogs_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"blocking a user\"])},\n \"confirm_dialogs_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"muting a user\"])},\n \"confirm_dialogs_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"deleting a status\"])},\n \"confirm_dialogs_logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"logging out\"])},\n \"confirm_dialogs_approve_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"approving a follower\"])},\n \"confirm_dialogs_deny_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"denying a follower\"])},\n \"confirm_dialogs_remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"removing a follower\"])},\n \"mutes_and_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes and Blocks\"])},\n \"data_import_export_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Data import / export\"])},\n \"default_vis\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default visibility scope\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete account\"])},\n \"delete_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Permanently delete your data and deactivate your account.\"])},\n \"delete_account_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"There was an issue deleting your account. If this persists please contact your instance administrator.\"])},\n \"delete_account_instructions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Type your password in the input below to confirm account deletion.\"])},\n \"account_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account aliases\"])},\n \"account_alias_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alias\"])},\n \"list_aliases_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error fetching aliases: \", _interpolate(_named(\"error\"))])},\n \"hide_list_aliases_error_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close\"])},\n \"remove_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove this alias\"])},\n \"new_alias_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Add a new alias (e.g. \", _interpolate(_named(\"example\")), \")\"])},\n \"added_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alias is added.\"])},\n \"add_alias_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error adding alias: \", _interpolate(_named(\"error\"))])},\n \"move_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Move account\"])},\n \"move_account_notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you want to move the account somewhere else, you must go to your target account and add an alias pointing here.\"])},\n \"move_account_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Target account (e.g. \", _interpolate(_named(\"example\")), \")\"])},\n \"moved_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account is moved.\"])},\n \"move_account_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Error moving account: \", _interpolate(_named(\"error\"))])},\n \"discoverable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow discovery of this account in search results and other services\"])},\n \"domain_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Domains\"])},\n \"avatar_size_instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The recommended minimum size for avatar images is 150x150 pixels.\"])},\n \"pad_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pad emoji with spaces when adding from picker\"])},\n \"autocomplete_select_first\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically select the first candidate when autocomplete results are available\"])},\n \"emoji_reactions_on_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show emoji reactions on timeline\"])},\n \"emoji_reactions_scale\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reactions scale factor\"])},\n \"export_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save preset\"])},\n \"filtering\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtering\"])},\n \"wordfilter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wordfilter\"])},\n \"filtering_explanation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All statuses containing these words will be muted, one per line\"])},\n \"word_filter_and_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Word filter and more...\"])},\n \"follow_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow export\"])},\n \"follow_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Export your follows to a csv file\"])},\n \"follow_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow import\"])},\n \"follow_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error importing followers\"])},\n \"follows_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows imported! Processing them will take a while.\"])},\n \"accent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accent\"])},\n \"foreground\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Foreground\"])},\n \"general\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"General\"])},\n \"hide_attachments_in_convo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachments in conversations\"])},\n \"hide_attachments_in_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachments in timeline\"])},\n \"hide_media_previews\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide media previews\"])},\n \"hide_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide posts of muted users\"])},\n \"mute_bot_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute bot posts\"])},\n \"hide_bot_indication\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide bot indication in posts\"])},\n \"hide_all_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide muted posts\"])},\n \"max_thumbnails\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximum amount of thumbnails per post (empty = no limit)\"])},\n \"hide_isp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance-specific panel\"])},\n \"hide_shoutbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance shoutbox\"])},\n \"right_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reverse order of columns\"])},\n \"navbar_column_stretch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stretch navbar to columns width\"])},\n \"always_show_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Always show floating New Post button\"])},\n \"hide_wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide instance wallpaper\"])},\n \"preload_images\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preload images\"])},\n \"use_one_click_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open NSFW attachments with just one click\"])},\n \"hide_post_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide post statistics (e.g. the number of favorites)\"])},\n \"hide_user_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide user statistics (e.g. the number of followers)\"])},\n \"hide_filtered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide all filtered posts\"])},\n \"hide_wordfiltered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide word-filtered statuses\"])},\n \"hide_muted_threads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide muted threads\"])},\n \"import_blocks_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import blocks from a csv file\"])},\n \"import_followers_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Import follows from a csv file\"])},\n \"import_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load preset\"])},\n \"inputRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"checkboxRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Checkboxes\"])},\n \"instance_default\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(default: \", _interpolate(_named(\"value\")), \")\"])},\n \"instance_default_simple\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(default)\"])},\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface\"])},\n \"interfaceLanguage\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface language\"])},\n \"invalid_theme_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The selected file is not a supported Pleroma theme. No changes to your theme were made.\"])},\n \"limited_availability\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unavailable in your browser\"])},\n \"links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Links\"])},\n \"lock_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restrict your account to approved followers only\"])},\n \"loop_video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loop videos\"])},\n \"loop_video_silent_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Loop only videos without sound (i.e. Mastodon's \\\"gifs\\\")\"])},\n \"mutes_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mutes\"])},\n \"play_videos_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Play videos in a popup frame\"])},\n \"url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"file_export_import\": {\n \"backup_restore\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings backup\"])},\n \"backup_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup settings to file\"])},\n \"backup_settings_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backup settings and theme to file\"])},\n \"restore_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restore settings from file\"])},\n \"errors\": {\n \"invalid_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The selected file is not a supported Pleroma settings backup. No changes were made.\"])},\n \"file_too_new\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Incompatile major version: \", _interpolate(_named(\"fileMajor\")), \", this PleromaFE (settings ver \", _interpolate(_named(\"feMajor\")), \") is too old to handle it\"])},\n \"file_too_old\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Incompatile major version: \", _interpolate(_named(\"fileMajor\")), \", file version is too old and not supported (min. set. ver. \", _interpolate(_named(\"feMajor\")), \")\"])},\n \"file_slightly_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File minor version is different, some settings might not load\"])}\n }\n },\n \"profile_fields\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile metadata\"])},\n \"add_field\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add field\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])},\n \"value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])}\n },\n \"birthday\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birthday\"])},\n \"show_birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show my birthday\"])}\n },\n \"account_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Privacy\"])},\n \"use_contain_fit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't crop the attachment in thumbnails\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Name\"])},\n \"name_bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Name & bio\"])},\n \"new_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts\"])},\n \"user_profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Profiles\"])},\n \"notification_visibility\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Types of notifications to show\"])},\n \"notification_visibility_follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows\"])},\n \"notification_visibility_likes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"notification_visibility_mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"notification_visibility_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats\"])},\n \"notification_visibility_moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Migrates\"])},\n \"notification_visibility_emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reactions\"])},\n \"notification_visibility_polls\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ends of polls you voted in\"])},\n \"no_rich_text_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Strip rich text formatting from all posts\"])},\n \"no_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No blocks\"])},\n \"no_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No mutes\"])},\n \"hide_favorites_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show list of my favorites (people still get notified)\"])},\n \"hide_follows_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show who I'm following\"])},\n \"hide_followers_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show who's following me\"])},\n \"hide_follows_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show follow count\"])},\n \"hide_followers_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show follower count\"])},\n \"show_admin_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show \\\"Admin\\\" badge in my profile\"])},\n \"show_moderator_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show \\\"Moderator\\\" badge in my profile\"])},\n \"nsfw_clickthrough\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide sensitive/NSFW media\"])},\n \"oauth_tokens\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth tokens\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Token\"])},\n \"refresh_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Refresh token\"])},\n \"valid_until\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valid until\"])},\n \"revoke_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke\"])},\n \"panelRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panels\"])},\n \"pause_on_unfocused\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pause when tab is not focused\"])},\n \"presets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Presets\"])},\n \"profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile background\"])},\n \"profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile banner\"])},\n \"profile_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile\"])},\n \"radii_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set up interface edge rounding (in pixels)\"])},\n \"replies_in_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replies in timeline\"])},\n \"reply_visibility_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show all replies\"])},\n \"reply_visibility_following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies directed at me or users I'm following\"])},\n \"reply_visibility_self\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies directed at me\"])},\n \"reply_visibility_following_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show replies to my follows\"])},\n \"reply_visibility_self_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show replies to self only\"])},\n \"autohide_floating_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically hide New Post button (mobile)\"])},\n \"saving_err\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error saving settings\"])},\n \"saving_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings saved\"])},\n \"search_user_to_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search whom you want to block\"])},\n \"search_user_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search whom you want to mute\"])},\n \"security_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Security\"])},\n \"scope_copy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy scope when replying (DMs are always copied)\"])},\n \"minimal_scopes_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Minimize post scope selection options\"])},\n \"set_new_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new avatar\"])},\n \"set_new_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new profile background\"])},\n \"set_new_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set new profile banner\"])},\n \"reset_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset avatar\"])},\n \"reset_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset profile background\"])},\n \"reset_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset profile banner\"])},\n \"reset_avatar_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the avatar?\"])},\n \"reset_banner_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the banner?\"])},\n \"reset_background_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to reset the background?\"])},\n \"settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Settings\"])},\n \"subject_input_always_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Always show subject field\"])},\n \"subject_line_behavior\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy subject when replying\"])},\n \"subject_line_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Like email: \\\"re: subject\\\"\"])},\n \"subject_line_mastodon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Like mastodon: copy as is\"])},\n \"subject_line_noop\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not copy\"])},\n \"conversation_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Conversation display style\"])},\n \"conversation_display_tree\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tree-style\"])},\n \"conversation_display_tree_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tree view\"])},\n \"disable_sticky_headers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't stick column headers to top of the screen\"])},\n \"show_scrollbars\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show side column's scrollbars\"])},\n \"third_column_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"When there's enough space, show third column containing\"])},\n \"third_column_mode_none\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Don't show third column at all\"])},\n \"third_column_mode_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications column\"])},\n \"third_column_mode_postform\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Main post form and navigation\"])},\n \"columns\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Columns\"])},\n \"column_sizes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Column sizes\"])},\n \"column_sizes_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sidebar\"])},\n \"column_sizes_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])},\n \"column_sizes_notifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"tree_advanced\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Allow more flexible navigation in tree view\"])},\n \"tree_fade_ancestors\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display ancestors of the current status in faint text\"])},\n \"conversation_display_linear\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Linear-style\"])},\n \"conversation_display_linear_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Linear view\"])},\n \"conversation_other_replies_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show the \\\"other replies\\\" button\"])},\n \"conversation_other_replies_button_below\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Below statuses\"])},\n \"conversation_other_replies_button_inside\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inside statuses\"])},\n \"max_depth_in_thread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximum number of levels in thread to display by default\"])},\n \"post_status_content_type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post status content type\"])},\n \"sensitive_by_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark posts as sensitive by default\"])},\n \"stop_gifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pause animated images until you hover on them\"])},\n \"streaming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Automatically show new posts when scrolled to the top\"])},\n \"auto_update\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show new posts automatically\"])},\n \"user_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Users\"])},\n \"useStreamingApi\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Receive posts and notifications real-time\"])},\n \"use_websockets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use websockets (Realtime updates)\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Text\"])},\n \"theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Theme\"])},\n \"theme_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use hex color codes (#rrggbb) to customize your color theme.\"])},\n \"theme_help_v2_1\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can also override certain component's colors and opacity by toggling the checkbox, use \\\"Clear all\\\" button to clear all overrides.\"])},\n \"theme_help_v2_2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"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.\"])},\n \"tooltipRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tooltips/alerts\"])},\n \"type_domains_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search domains to mute\"])},\n \"upload_a_photo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload a photo\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Settings\"])},\n \"values\": {\n \"false\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no\"])},\n \"true\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"yes\"])}\n },\n \"virtual_scrolling\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Optimize timeline rendering\"])},\n \"use_at_icon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display \", \"@\", \" symbol as an icon instead of text\"])},\n \"mention_link_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display mention links\"])},\n \"mention_link_display_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"always as short names (e.g. \", \"@\", \"foo)\"])},\n \"mention_link_display_full_for_remote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"as full names only for remote users (e.g. \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_display_full\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"always as full names (e.g. \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_use_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user card when clicking mention links\"])},\n \"mention_link_show_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user avatar beside the link\"])},\n \"mention_link_show_avatar_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user avatar next to mentions\"])},\n \"mention_link_fade_domain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fade domains (e.g. \", \"@\", \"example.org in \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_bolden_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highlight mention of you when you are mentioned\"])},\n \"user_popover_avatar_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Popover avatar click action\"])},\n \"user_popover_avatar_action_zoom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zoom the avatar\"])},\n \"user_popover_avatar_action_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Close the popover\"])},\n \"user_popover_avatar_action_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open profile\"])},\n \"user_popover_avatar_overlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show user popover over user avatar\"])},\n \"fun\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fun\"])},\n \"greentext\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Meme arrows\"])},\n \"show_yous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show (You)s\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notifications\"])},\n \"notification_setting_filters\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filters\"])},\n \"notification_setting_block_from_strangers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block notifications from users who you do not follow\"])},\n \"notification_setting_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Privacy\"])},\n \"notification_setting_hide_notification_contents\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide the sender and contents of push notifications\"])},\n \"notification_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"To stop receiving notifications from a specific user, use a mute.\"])},\n \"notification_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocking a user stops all notifications as well as unsubscribes them.\"])},\n \"enable_web_push_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable web push notifications\"])},\n \"more_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More settings\"])},\n \"style\": {\n \"switcher\": {\n \"keep_color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep colors\"])},\n \"keep_shadows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep shadows\"])},\n \"keep_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep opacity\"])},\n \"keep_roundness\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep roundness\"])},\n \"keep_fonts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep fonts\"])},\n \"save_load_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"\\\"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.\"])},\n \"reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"clear_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear all\"])},\n \"clear_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear opacity\"])},\n \"load_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load theme\"])},\n \"keep_as_is\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep as is\"])},\n \"use_snapshot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Old version\"])},\n \"use_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New version\"])},\n \"help\": {\n \"upgraded_from_v2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE has been upgraded, theme could look a little bit different than you remember.\"])},\n \"v2_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies.\"])},\n \"future_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made in newer version of FE.\"])},\n \"older_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File you imported was made in older version of FE.\"])},\n \"snapshot_present\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead.\"])},\n \"snapshot_missing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No theme snapshot was in the file so it could look different than originally envisioned.\"])},\n \"fe_upgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE's theme engine upgraded after version update.\"])},\n \"fe_downgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE's version rolled back.\"])},\n \"migration_snapshot_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just to be safe, theme snapshot loaded. You can try loading theme data.\"])},\n \"migration_napshot_gone\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"For whatever reason snapshot was missing, some stuff could look different than you remember.\"])},\n \"snapshot_source_mismatch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version.\"])}\n }\n },\n \"common\": {\n \"color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Color\"])},\n \"opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Opacity\"])},\n \"contrast\": {\n \"hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Contrast ratio is \", _interpolate(_named(\"ratio\")), \", it \", _interpolate(_named(\"level\")), \" \", _interpolate(_named(\"context\"))])},\n \"level\": {\n \"aa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"meets Level AA guideline (minimal)\"])},\n \"aaa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"meets Level AAA guideline (recommended)\"])},\n \"bad\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"doesn't meet any accessibility guidelines\"])}\n },\n \"context\": {\n \"18pt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"for large (18pt+) text\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"for text\"])}\n }\n }\n },\n \"common_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Common\"])},\n \"main\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Common colors\"])},\n \"foreground_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"See \\\"Advanced\\\" tab for more detailed control\"])},\n \"rgbo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Icons, accents, badges\"])}\n },\n \"advanced_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Advanced\"])},\n \"alert\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alert background\"])},\n \"alert_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error\"])},\n \"alert_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Warning\"])},\n \"alert_neutral\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neutral\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Posts/User bios\"])},\n \"badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Badge background\"])},\n \"popover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tooltips, menus, popovers\"])},\n \"badge_notification\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Notification\"])},\n \"panel_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel header\"])},\n \"top_bar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Top bar\"])},\n \"borders\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Borders\"])},\n \"buttons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Buttons\"])},\n \"inputs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"faint_text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Faded text\"])},\n \"underlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Underlay\"])},\n \"wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wallpaper\"])},\n \"poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Poll graph\"])},\n \"icons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Icons\"])},\n \"highlight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highlighted elements\"])},\n \"pressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pressed\"])},\n \"selectedPost\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Selected post\"])},\n \"selectedMenu\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Selected menu item\"])},\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disabled\"])},\n \"toggled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Toggled\"])},\n \"tabs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tabs\"])},\n \"chat\": {\n \"incoming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Incoming\"])},\n \"outgoing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Outgoing\"])},\n \"border\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Border\"])}\n }\n },\n \"radii\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Roundness\"])}\n },\n \"shadows\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shadow and lighting\"])},\n \"component\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Component\"])},\n \"override\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Override\"])},\n \"shadow_id\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Shadow #\", _interpolate(_named(\"value\"))])},\n \"blur\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blur\"])},\n \"spread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Spread\"])},\n \"inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inset\"])},\n \"hintV3\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"For shadows you can also use the \", _interpolate(_list(0)), \" notation to use other color slot.\"])},\n \"filter_hint\": {\n \"always_drop_shadow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Warning, this shadow always uses \", _interpolate(_list(0)), \" when browser supports it.\"])},\n \"drop_shadow_syntax\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" does not support \", _interpolate(_list(1)), \" parameter and \", _interpolate(_list(2)), \" keyword.\"])},\n \"avatar_inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.\"])},\n \"spread_zero\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shadows with spread > 0 will appear as if it was set to zero\"])},\n \"inset_classic\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Inset shadows will be using \", _interpolate(_list(0))])}\n },\n \"components\": {\n \"panel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel\"])},\n \"panelHeader\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Panel header\"])},\n \"topBar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Top bar\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User avatar (in profile view)\"])},\n \"avatarStatus\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User avatar (in post display)\"])},\n \"popup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Popups and tooltips\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button\"])},\n \"buttonHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (hover)\"])},\n \"buttonPressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (pressed)\"])},\n \"buttonPressedHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button (pressed+hover)\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input field\"])}\n }\n },\n \"fonts\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fonts\"])},\n \"help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Select font to use for elements of UI. For \\\"custom\\\" you have to enter exact font name as it appears in system.\"])},\n \"components\": {\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Interface\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Input fields\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post text\"])},\n \"postCode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monospaced text in a post (rich text)\"])}\n },\n \"family\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Font name\"])},\n \"size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Size (in px)\"])},\n \"weight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weight (boldness)\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Custom\"])}\n },\n \"preview\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview\"])},\n \"content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Content\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Example error\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Button\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"A bunch of more \", _interpolate(_list(0)), \" and \", _interpolate(_list(1))])},\n \"mono\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"content\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Just landed in L.A.\"])},\n \"faint_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"helpful manual\"])},\n \"fine_print\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Read our \", _interpolate(_list(0)), \" to learn nothing useful!\"])},\n \"header_faint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This is fine\"])},\n \"checkbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"I have skimmed over terms and conditions\"])},\n \"link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"a nice lil' link\"])}\n }\n },\n \"version\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Version\"])},\n \"backend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Backend version\"])},\n \"frontend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Frontend version\"])}\n },\n \"commit_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save\"])},\n \"commit_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Value is not saved, press this button to commit your changes\"])},\n \"reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset draft\"])},\n \"hard_reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hard reset\"])},\n \"hard_reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove setting from storage, forcing use of default value\"])}\n },\n \"admin_dash\": {\n \"window_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"This admin dashboard is experimental and WIP, \", _interpolate(_named(\"adminFeLink\")), \".\"])},\n \"old_ui_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"old admin UI available here\"])},\n \"reset_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset all\"])},\n \"commit_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save all\"])},\n \"tabs\": {\n \"nodb\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No DB Config\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance\"])},\n \"limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limits\"])},\n \"frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Front-ends\"])}\n },\n \"nodb\": {\n \"heading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Database config is disabled\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"You need to change backend config files so that \", _interpolate(_named(\"property\")), \" is set to \", _interpolate(_named(\"value\")), \", see more in \", _interpolate(_named(\"documentation\")), \".\"])},\n \"documentation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"text2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Most configuration options will be unavailable.\"])}\n },\n \"captcha\": {\n \"native\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Native\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha\"])}\n },\n \"instance\": {\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance information\"])},\n \"registrations\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User sign-ups\"])},\n \"captcha_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha settings\"])},\n \"access\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance access\"])},\n \"restrict\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Restrict access for anonymous visitors\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Detailed setting for allowing/disallowing access to certain aspects of API. By default (indeterminate state) it will disallow if instance is not public, ticked checkbox means disallow access even if instance is public, unticked means allow access even if instance is private. Please note that unexpected behavior might happen if some settings are set, i.e. if profile access is disabled posts will show without profile information.\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timelines access\"])},\n \"profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User profiles access\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statues/activities access\"])}\n }\n },\n \"limits\": {\n \"arbitrary_limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Arbitrary limits\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post limits\"])},\n \"uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Attachments limits\"])},\n \"users\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User profile limits\"])},\n \"profile_fields\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile fields limits\"])},\n \"user_uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile media limits\"])}\n },\n \"frontend\": {\n \"repository\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repository link\"])},\n \"versions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Available versions\"])},\n \"build_url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Build URL\"])},\n \"reinstall\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reinstall\"])},\n \"is_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(Default)\"])},\n \"is_default_custom\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(Default, version: \", _interpolate(_named(\"version\")), \")\"])},\n \"install\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Install\"])},\n \"install_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Install version \", _interpolate(_named(\"version\"))])},\n \"more_install_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More install options\"])},\n \"more_default_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More default setting options\"])},\n \"set_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Set default\"])},\n \"set_default_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Set version \", _interpolate(_named(\"version\")), \" as default\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please note that this section is a WIP and lacks certain features as backend implementation of front-end management is incomplete.\"])},\n \"default_frontend\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default front-end\"])},\n \"default_frontend_tip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Default front-end will be shown to all users. Currently there's no way to for a user to select personal front-end. If you switch away from PleromaFE you'll most likely have to use old and buggy AdminFE to do instance configuration until we replace it.\"])},\n \"available_frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Available for install\"])},\n \"failure_installing_frontend\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Failed to install frontend \", _interpolate(_named(\"version\")), \": \", _interpolate(_named(\"reason\"))])},\n \"success_installing_frontend\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Frontend \", _interpolate(_named(\"version\")), \" successfully installed\"])}\n },\n \"temp_overrides\": {\n \":pleroma\": {\n \":instance\": {\n \":public\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Instance is public\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disabling this will make all API accessible only for logged-in users, this will make Public and Federated timelines inaccessible to anonymous visitors.\"])}\n },\n \":limit_to_local_content\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit search to local content\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disables global network search for unauthenticated (default), all users or none\"])}\n },\n \":description_limit\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Character limit for attachment descriptions\"])}\n },\n \":background_image\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background image\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Background image (primarily used by PleromaFE)\"])}\n }\n }\n }\n }\n },\n \"time\": {\n \"unit\": {\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" day\"]), _normalize([_interpolate(_list(0)), \" days\"])])},\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" hour\"]), _normalize([_interpolate(_list(0)), \" hours\"])])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" minute\"]), _normalize([_interpolate(_list(0)), \" minutes\"])])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" month\"]), _normalize([_interpolate(_list(0)), \" months\"])])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" second\"]), _normalize([_interpolate(_list(0)), \" seconds\"])])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" week\"]), _normalize([_interpolate(_list(0)), \" weeks\"])])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_list(0)), \" year\"]), _normalize([_interpolate(_list(0)), \" years\"])])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])}\n },\n \"in_future\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"in \", _interpolate(_list(0))])},\n \"in_past\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" ago\"])},\n \"now\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"just now\"])},\n \"now_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"now\"])}\n },\n \"timeline\": {\n \"collapse\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse\"])},\n \"conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Conversation\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error fetching timeline: \", _interpolate(_list(0))])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load older statuses\"])},\n \"no_retweet_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Post is marked as followers-only or direct and cannot be repeated\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"repeated\"])},\n \"show_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show new\"])},\n \"reload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reload\"])},\n \"up_to_date\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Up-to-date\"])},\n \"no_more_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more statuses\"])},\n \"no_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No statuses\"])},\n \"socket_reconnected\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Realtime connection established\"])},\n \"socket_broke\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Realtime connection lost: CloseEvent code \", _interpolate(_list(0))])},\n \"quick_view_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quick view settings\"])},\n \"quick_filter_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quick filter settings\"])}\n },\n \"status\": {\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeats\"])},\n \"repeat_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to repeat this status?\"])},\n \"repeat_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat confirmation\"])},\n \"repeat_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat\"])},\n \"repeat_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not repeat\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete status\"])},\n \"delete_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error deleting status: \", _interpolate(_list(0))])},\n \"edit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit status\"])},\n \"edited_at\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(last edited \", _interpolate(_named(\"time\")), \")\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pin on profile\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unpin from profile\"])},\n \"pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pinned\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmark\"])},\n \"unbookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unbookmark\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to delete this status?\"])},\n \"delete_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete confirmation\"])},\n \"delete_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"delete_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep\"])},\n \"reply_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply to\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mentions\"])},\n \"replies_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Replies:\"])},\n \"replies_list_with_others\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Replies (+\", _interpolate(_named(\"numReplies\")), \" other):\"]), _normalize([\"Replies (+\", _interpolate(_named(\"numReplies\")), \" others):\"])])},\n \"mute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute conversation\"])},\n \"unmute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute conversation\"])},\n \"status_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Status unavailable\"])},\n \"copy_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Copy link to status\"])},\n \"external_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"External source\"])},\n \"thread_muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Thread muted\"])},\n \"thread_muted_and_words\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\", has words:\"])},\n \"show_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show full subject\"])},\n \"hide_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide full subject\"])},\n \"show_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show content\"])},\n \"hide_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide content\"])},\n \"status_deleted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This post was deleted\"])},\n \"nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NSFW\"])},\n \"expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand\"])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(You)\"])},\n \"plus_more\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"+\", _interpolate(_named(\"number\")), \" more\"])},\n \"many_attachments\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Post has \", _interpolate(_named(\"number\")), \" attachment(s)\"])},\n \"collapse_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Collapse attachments\"])},\n \"show_all_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show all attachments\"])},\n \"show_attachment_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show in media modal\"])},\n \"show_attachment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preview description (open attachment for full description)\"])},\n \"hide_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide attachment\"])},\n \"remove_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove attachment\"])},\n \"attachment_stop_flash\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Stop Flash player\"])},\n \"move_up\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shift attachment left\"])},\n \"move_down\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Shift attachment right\"])},\n \"open_gallery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Open gallery\"])},\n \"thread_hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide this thread\"])},\n \"thread_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show this thread\"])},\n \"thread_show_full\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Show everything under this thread (\", _interpolate(_named(\"numStatus\")), \" status in total, max depth \", _interpolate(_named(\"depth\")), \")\"]), _normalize([\"Show everything under this thread (\", _interpolate(_named(\"numStatus\")), \" statuses in total, max depth \", _interpolate(_named(\"depth\")), \")\"])])},\n \"thread_show_full_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"thread_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"See the remaining part of this thread (\", _interpolate(_named(\"numStatus\")), \" status in total)\"]), _normalize([\"See the remaining part of this thread (\", _interpolate(_named(\"numStatus\")), \" statuses in total)\"])])},\n \"thread_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"ancestor_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"See \", _interpolate(_named(\"numReplies\")), \" other reply under this status\"]), _normalize([\"See \", _interpolate(_named(\"numReplies\")), \" other replies under this status\"])])},\n \"ancestor_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"Show full conversation (\", _interpolate(_named(\"numStatus\")), \" other status)\"]), _normalize([\"Show full conversation (\", _interpolate(_named(\"numStatus\")), \" other statuses)\"])])},\n \"show_only_conversation_under_this\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Only show replies to this status\"])},\n \"status_history\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Status history\"])},\n \"reaction_count_label\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"num\")), \" person reacted\"]), _normalize([_interpolate(_named(\"num\")), \" people reacted\"])])},\n \"hide_quote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide the quoted status\"])},\n \"display_quote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Display the quoted status\"])},\n \"invisible_quote\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Quoted status unavailable: \", _interpolate(_named(\"link\"))])},\n \"more_actions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More actions on this status\"])}\n },\n \"user_card\": {\n \"approve\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve\"])},\n \"approve_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve confirmation\"])},\n \"approve_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Approve\"])},\n \"approve_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not approve\"])},\n \"approve_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you want to approve \", _interpolate(_named(\"user\")), \"'s follow request?\"])},\n \"block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block\"])},\n \"blocked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocked!\"])},\n \"block_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block confirmation\"])},\n \"block_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to block \", _interpolate(_named(\"user\")), \"?\"])},\n \"block_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Block\"])},\n \"block_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not block\"])},\n \"deactivated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deactivated\"])},\n \"deny\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny\"])},\n \"deny_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny confirmation\"])},\n \"deny_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deny\"])},\n \"deny_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not deny\"])},\n \"deny_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you want to deny \", _interpolate(_named(\"user\")), \"'s follow request?\"])},\n \"edit_profile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorites\"])},\n \"follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follow\"])},\n \"follow_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel request\"])},\n \"follow_sent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Request sent!\"])},\n \"follow_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Requesting…\"])},\n \"follow_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow\"])},\n \"unfollow_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow confirmation\"])},\n \"unfollow_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to unfollow \", _interpolate(_named(\"user\")), \"?\"])},\n \"unfollow_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unfollow\"])},\n \"unfollow_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not unfollow\"])},\n \"followees\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Following\"])},\n \"followers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Followers\"])},\n \"following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Following!\"])},\n \"follows_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Follows you!\"])},\n \"hidden\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"its_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"It's you!\"])},\n \"media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Media\"])},\n \"mention\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mention\"])},\n \"message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Message\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muted\"])},\n \"mute_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute confirmation\"])},\n \"mute_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to mute \", _interpolate(_named(\"user\")), \"?\"])},\n \"mute_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute\"])},\n \"mute_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do not mute\"])},\n \"mute_duration_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mute this user for (0 for indefinite time):\"])},\n \"per_day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"per day\"])},\n \"remote_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remote follow\"])},\n \"remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove follower\"])},\n \"remove_follower_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove follower confirmation\"])},\n \"remove_follower_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove\"])},\n \"remove_follower_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keep\"])},\n \"remove_follower_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Do you really want to remove \", _interpolate(_named(\"user\")), \" from your followers?\"])},\n \"report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Report\"])},\n \"statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statuses\"])},\n \"subscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Subscribe\"])},\n \"unsubscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unsubscribe\"])},\n \"unblock\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unblock\"])},\n \"unblock_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unblocking…\"])},\n \"block_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Blocking…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmute\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unmuting…\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Muting…\"])},\n \"hide_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hide repeats\"])},\n \"show_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Show repeats\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bot\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Born \", _interpolate(_named(\"birthday\"))])},\n \"admin_menu\": {\n \"moderation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Moderation\"])},\n \"grant_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Grant Admin\"])},\n \"revoke_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke Admin\"])},\n \"grant_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Grant Moderator\"])},\n \"revoke_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke Moderator\"])},\n \"activate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"deactivate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deactivate account\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete account\"])},\n \"force_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mark all posts as NSFW\"])},\n \"strip_media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove media from posts\"])},\n \"force_unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Force posts to be unlisted\"])},\n \"sandbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Force posts to be followers-only\"])},\n \"disable_remote_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow following user from remote instances\"])},\n \"disable_any_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow following user at all\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disallow user posts from federating\"])},\n \"delete_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"delete_user_data_and_deactivate_confirmation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This will permanently delete the data from this account and deactivate it. Are you absolutely sure?\"])}\n },\n \"highlight\": {\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No highlight\"])},\n \"solid\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Solid bg\"])},\n \"striped\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Striped bg\"])},\n \"side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Side stripe\"])}\n },\n \"note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Note\"])},\n \"note_blank\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(None)\"])},\n \"edit_note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit note\"])},\n \"edit_note_apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Apply\"])},\n \"edit_note_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])}\n },\n \"user_profile\": {\n \"timeline_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User timeline\"])},\n \"profile_does_not_exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, this profile does not exist.\"])},\n \"profile_loading_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, there was an error loading this profile.\"])}\n },\n \"user_reporting\": {\n \"title\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Reporting \", _interpolate(_list(0))])},\n \"add_comment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:\"])},\n \"additional_comments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Additional comments\"])},\n \"forward_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The account is from another server. Send a copy of the report there as well?\"])},\n \"forward_to\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Forward to \", _interpolate(_list(0))])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"An error occurred while processing your request.\"])}\n },\n \"who_to_follow\": {\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Who to follow\"])}\n },\n \"tool_tip\": {\n \"media_upload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload media\"])},\n \"repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Repeat\"])},\n \"reply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reply\"])},\n \"favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Favorite\"])},\n \"add_reaction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add Reaction\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User Settings\"])},\n \"accept_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accept follow request\"])},\n \"reject_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reject follow request\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bookmark\"])},\n \"toggle_expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand or collapse notification to show post in full\"])},\n \"toggle_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Expand or collapse notification to reveal muted content\"])},\n \"autocomplete_available\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"number\")), \" result is available. Use up and down keys to navigate through them.\"]), _normalize([_interpolate(_named(\"number\")), \" results are available. Use up and down keys to navigate through them.\"])])}\n },\n \"upload\": {\n \"error\": {\n \"base\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload failed.\"])},\n \"message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Upload failed: \", _interpolate(_list(0))])},\n \"file_too_big\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"File too big [\", _interpolate(_named(\"filesize\")), _interpolate(_named(\"filesizeunit\")), \" / \", _interpolate(_named(\"allowedsize\")), _interpolate(_named(\"allowedsizeunit\")), \"]\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Try again later\"])}\n },\n \"file_size_units\": {\n \"B\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"B\"])},\n \"KiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KiB\"])},\n \"MiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MiB\"])},\n \"GiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"GiB\"])},\n \"TiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"TiB\"])}\n }\n },\n \"search\": {\n \"people\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"People\"])},\n \"hashtags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hashtags\"])},\n \"person_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" person talking\"])},\n \"people_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" people talking\"])},\n \"no_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No results\"])},\n \"no_more_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No more results\"])},\n \"load_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more results\"])}\n },\n \"password_reset\": {\n \"forgot_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"password_reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter your email address or username. We will send you a link to reset your password.\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your email or username\"])},\n \"check_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email for a link to reset your password.\"])},\n \"return_home\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Return to the home page\"])},\n \"too_many_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You have reached the limit of attempts, try again later.\"])},\n \"password_reset_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset is disabled. Please contact your instance administrator.\"])},\n \"password_reset_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You must reset your password to log in.\"])},\n \"password_reset_required_but_mailer_is_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You must reset your password, but password reset is disabled. Please contact your instance administrator.\"])}\n },\n \"chats\": {\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You:\"])},\n \"message_user\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Message \", _interpolate(_named(\"nickname\"))])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Chats\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New Chat\"])},\n \"empty_message_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cannot post empty message\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"More\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Do you really want to delete this message?\"])},\n \"error_loading_chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong when loading the chat.\"])},\n \"error_sending_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong when sending the message.\"])},\n \"empty_chat_list_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You don't have any chats yet. Start a new chat!\"])}\n },\n \"lists\": {\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lists\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New List\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"List title\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search users\"])},\n \"create\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Create\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save changes\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete list\"])},\n \"following_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Limit to Following\"])},\n \"manage_lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Manage lists\"])},\n \"manage_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Manage list members\"])},\n \"add_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Search for more users\"])},\n \"remove_from_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove from list\"])},\n \"add_to_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add to list\"])},\n \"is_in_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already in list\"])},\n \"editing_list\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Editing list \", _interpolate(_named(\"listTitle\"))])},\n \"creating_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Creating new list\"])},\n \"update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Save Title\"])},\n \"really_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Really delete list?\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Error manipulating lists: \", _interpolate(_list(0))])}\n },\n \"file_type\": {\n \"audio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Audio\"])},\n \"video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Video\"])},\n \"image\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File\"])}\n },\n \"display_date\": {\n \"today\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Today\"])}\n },\n \"update\": {\n \"big_update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Please bear with us\"])},\n \"big_update_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"We haven't had a release in a while, so things might look and feel different than what you're used to.\"])},\n \"update_bugs\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Please report any issues and bugs on \", _interpolate(_named(\"pleromaGitlab\")), \", as we have changed a lot, and although we test thoroughly and use development versions ourselves, we may have missed some things. We welcome your feedback and suggestions on issues you might encounter, or how to improve Pleroma and Pleroma-FE.\"])},\n \"update_bugs_gitlab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma GitLab\"])},\n \"update_changelog\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"For more details on what's changed, see \", _interpolate(_named(\"theFullChangelog\")), \".\"])},\n \"update_changelog_here\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"the full changelog\"])},\n \"art_by\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Art by \", _interpolate(_named(\"linkToArtist\"))])}\n },\n \"unicode_domain_indicator\": {\n \"tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This domain contains non-ascii characters.\"])}\n }\n}","var map = {\n\t\"./af.json\": [\n\t\t44919,\n\t\t6355\n\t],\n\t\"./am.json\": [\n\t\t53139,\n\t\t5119\n\t],\n\t\"./ar.json\": [\n\t\t44557,\n\t\t9873\n\t],\n\t\"./ar_SA.json\": [\n\t\t23450,\n\t\t7360\n\t],\n\t\"./as.json\": [\n\t\t44359,\n\t\t3377\n\t],\n\t\"./ast.json\": [\n\t\t13764,\n\t\t7569\n\t],\n\t\"./az.json\": [\n\t\t86459,\n\t\t2342\n\t],\n\t\"./be.json\": [\n\t\t50866,\n\t\t7304\n\t],\n\t\"./bg.json\": [\n\t\t26219,\n\t\t3974\n\t],\n\t\"./bn.json\": [\n\t\t69178,\n\t\t9064\n\t],\n\t\"./br.json\": [\n\t\t67871,\n\t\t6148\n\t],\n\t\"./bs.json\": [\n\t\t75340,\n\t\t8134\n\t],\n\t\"./ca.json\": [\n\t\t86914,\n\t\t4691\n\t],\n\t\"./ccp.json\": [\n\t\t73872,\n\t\t1162\n\t],\n\t\"./ceb.json\": [\n\t\t64478,\n\t\t9790\n\t],\n\t\"./chr.json\": [\n\t\t61017,\n\t\t6869\n\t],\n\t\"./ckb.json\": [\n\t\t56412,\n\t\t2656\n\t],\n\t\"./cs.json\": [\n\t\t8888,\n\t\t4710\n\t],\n\t\"./cy.json\": [\n\t\t25392,\n\t\t6272\n\t],\n\t\"./da.json\": [\n\t\t35042,\n\t\t1596\n\t],\n\t\"./de.json\": [\n\t\t35169,\n\t\t6226\n\t],\n\t\"./de_CH.json\": [\n\t\t28246,\n\t\t7164\n\t],\n\t\"./doi.json\": [\n\t\t59784,\n\t\t4209\n\t],\n\t\"./dsb.json\": [\n\t\t60634,\n\t\t1790\n\t],\n\t\"./el.json\": [\n\t\t98338,\n\t\t7879\n\t],\n\t\"./en.json\": [\n\t\t74990,\n\t\t5728\n\t],\n\t\"./en_001.json\": [\n\t\t62736,\n\t\t577\n\t],\n\t\"./en_AU.json\": [\n\t\t2597,\n\t\t9360\n\t],\n\t\"./en_CA.json\": [\n\t\t1516,\n\t\t4879\n\t],\n\t\"./en_GB.json\": [\n\t\t84830,\n\t\t50\n\t],\n\t\"./en_IN.json\": [\n\t\t71809,\n\t\t8988\n\t],\n\t\"./es.json\": [\n\t\t61148,\n\t\t6831\n\t],\n\t\"./es_419.json\": [\n\t\t25696,\n\t\t8873\n\t],\n\t\"./es_MX.json\": [\n\t\t11915,\n\t\t2699\n\t],\n\t\"./es_US.json\": [\n\t\t87826,\n\t\t3313\n\t],\n\t\"./et.json\": [\n\t\t66641,\n\t\t3276\n\t],\n\t\"./eu.json\": [\n\t\t6541,\n\t\t2992\n\t],\n\t\"./fa.json\": [\n\t\t43305,\n\t\t5521\n\t],\n\t\"./fi.json\": [\n\t\t40752,\n\t\t420\n\t],\n\t\"./fil.json\": [\n\t\t26843,\n\t\t1236\n\t],\n\t\"./fo.json\": [\n\t\t43032,\n\t\t8995\n\t],\n\t\"./fr.json\": [\n\t\t80898,\n\t\t2223\n\t],\n\t\"./fr_CA.json\": [\n\t\t54515,\n\t\t1821\n\t],\n\t\"./ga.json\": [\n\t\t66572,\n\t\t4571\n\t],\n\t\"./gd.json\": [\n\t\t9185,\n\t\t6116\n\t],\n\t\"./gl.json\": [\n\t\t23840,\n\t\t6126\n\t],\n\t\"./gu.json\": [\n\t\t85811,\n\t\t7261\n\t],\n\t\"./ha.json\": [\n\t\t91566,\n\t\t227\n\t],\n\t\"./ha_NE.json\": [\n\t\t3400,\n\t\t5304\n\t],\n\t\"./he.json\": [\n\t\t26260,\n\t\t5548\n\t],\n\t\"./hi.json\": [\n\t\t18136,\n\t\t5968\n\t],\n\t\"./hi_Latn.json\": [\n\t\t95638,\n\t\t3056\n\t],\n\t\"./hr.json\": [\n\t\t77435,\n\t\t2861\n\t],\n\t\"./hsb.json\": [\n\t\t15758,\n\t\t8015\n\t],\n\t\"./hu.json\": [\n\t\t2727,\n\t\t4902\n\t],\n\t\"./hy.json\": [\n\t\t8397,\n\t\t6344\n\t],\n\t\"./ia.json\": [\n\t\t49796,\n\t\t6936\n\t],\n\t\"./id.json\": [\n\t\t56635,\n\t\t9465\n\t],\n\t\"./ig.json\": [\n\t\t26406,\n\t\t9895\n\t],\n\t\"./is.json\": [\n\t\t51391,\n\t\t7300\n\t],\n\t\"./it.json\": [\n\t\t54879,\n\t\t8970\n\t],\n\t\"./ja.json\": [\n\t\t2971,\n\t\t1290\n\t],\n\t\"./jv.json\": [\n\t\t18644,\n\t\t2479\n\t],\n\t\"./ka.json\": [\n\t\t71255,\n\t\t6068\n\t],\n\t\"./kab.json\": [\n\t\t92892,\n\t\t9780\n\t],\n\t\"./kk.json\": [\n\t\t46419,\n\t\t2873\n\t],\n\t\"./kl.json\": [\n\t\t2227,\n\t\t2397\n\t],\n\t\"./km.json\": [\n\t\t65729,\n\t\t1404\n\t],\n\t\"./kn.json\": [\n\t\t65611,\n\t\t278\n\t],\n\t\"./ko.json\": [\n\t\t67080,\n\t\t2966\n\t],\n\t\"./kok.json\": [\n\t\t47209,\n\t\t2599\n\t],\n\t\"./ku.json\": [\n\t\t18738,\n\t\t2883\n\t],\n\t\"./ky.json\": [\n\t\t89690,\n\t\t4785\n\t],\n\t\"./lb.json\": [\n\t\t3929,\n\t\t4770\n\t],\n\t\"./lo.json\": [\n\t\t19778,\n\t\t7464\n\t],\n\t\"./lt.json\": [\n\t\t41683,\n\t\t7169\n\t],\n\t\"./lv.json\": [\n\t\t54873,\n\t\t8898\n\t],\n\t\"./mai.json\": [\n\t\t11781,\n\t\t1613\n\t],\n\t\"./mi.json\": [\n\t\t11569,\n\t\t6701\n\t],\n\t\"./mk.json\": [\n\t\t67589,\n\t\t9921\n\t],\n\t\"./ml.json\": [\n\t\t24415,\n\t\t2685\n\t],\n\t\"./mn.json\": [\n\t\t50512,\n\t\t4718\n\t],\n\t\"./mni.json\": [\n\t\t81597,\n\t\t5401\n\t],\n\t\"./mr.json\": [\n\t\t97747,\n\t\t1911\n\t],\n\t\"./ms.json\": [\n\t\t81588,\n\t\t9924\n\t],\n\t\"./mt.json\": [\n\t\t25081,\n\t\t9399\n\t],\n\t\"./my.json\": [\n\t\t8608,\n\t\t6790\n\t],\n\t\"./ne.json\": [\n\t\t8572,\n\t\t9377\n\t],\n\t\"./nl.json\": [\n\t\t52355,\n\t\t6773\n\t],\n\t\"./nn.json\": [\n\t\t52874,\n\t\t9414\n\t],\n\t\"./no.json\": [\n\t\t48005,\n\t\t9979\n\t],\n\t\"./or.json\": [\n\t\t26728,\n\t\t1012\n\t],\n\t\"./pa.json\": [\n\t\t15042,\n\t\t6946\n\t],\n\t\"./pa_Arab.json\": [\n\t\t43578,\n\t\t9994\n\t],\n\t\"./pcm.json\": [\n\t\t91163,\n\t\t5104\n\t],\n\t\"./pl.json\": [\n\t\t61335,\n\t\t1095\n\t],\n\t\"./ps.json\": [\n\t\t51828,\n\t\t678\n\t],\n\t\"./pt.json\": [\n\t\t38543,\n\t\t5041\n\t],\n\t\"./pt_PT.json\": [\n\t\t8063,\n\t\t1546\n\t],\n\t\"./qu.json\": [\n\t\t15821,\n\t\t8031\n\t],\n\t\"./rm.json\": [\n\t\t5014,\n\t\t5887\n\t],\n\t\"./ro.json\": [\n\t\t34064,\n\t\t9864\n\t],\n\t\"./ru.json\": [\n\t\t95222,\n\t\t8395\n\t],\n\t\"./rw.json\": [\n\t\t12710,\n\t\t346\n\t],\n\t\"./sa.json\": [\n\t\t69343,\n\t\t2243\n\t],\n\t\"./sat.json\": [\n\t\t51243,\n\t\t7855\n\t],\n\t\"./sc.json\": [\n\t\t1319,\n\t\t2874\n\t],\n\t\"./sd.json\": [\n\t\t67728,\n\t\t6826\n\t],\n\t\"./si.json\": [\n\t\t5044,\n\t\t4354\n\t],\n\t\"./sk.json\": [\n\t\t45626,\n\t\t2350\n\t],\n\t\"./sl.json\": [\n\t\t76091,\n\t\t1553\n\t],\n\t\"./so.json\": [\n\t\t93761,\n\t\t625\n\t],\n\t\"./sq.json\": [\n\t\t1230,\n\t\t4368\n\t],\n\t\"./sr.json\": [\n\t\t60445,\n\t\t3887\n\t],\n\t\"./sr_Cyrl_BA.json\": [\n\t\t38940,\n\t\t6060\n\t],\n\t\"./sr_Latn.json\": [\n\t\t21650,\n\t\t8681\n\t],\n\t\"./sr_Latn_BA.json\": [\n\t\t78328,\n\t\t5115\n\t],\n\t\"./su.json\": [\n\t\t54395,\n\t\t1959\n\t],\n\t\"./sv.json\": [\n\t\t3418,\n\t\t3241\n\t],\n\t\"./sw.json\": [\n\t\t11958,\n\t\t7585\n\t],\n\t\"./sw_KE.json\": [\n\t\t35001,\n\t\t3994\n\t],\n\t\"./ta.json\": [\n\t\t92930,\n\t\t7897\n\t],\n\t\"./te.json\": [\n\t\t8748,\n\t\t4786\n\t],\n\t\"./tg.json\": [\n\t\t20999,\n\t\t313\n\t],\n\t\"./th.json\": [\n\t\t23900,\n\t\t3951\n\t],\n\t\"./ti.json\": [\n\t\t368,\n\t\t3568\n\t],\n\t\"./tk.json\": [\n\t\t88770,\n\t\t1780\n\t],\n\t\"./to.json\": [\n\t\t95781,\n\t\t1584\n\t],\n\t\"./tr.json\": [\n\t\t92619,\n\t\t9978\n\t],\n\t\"./tt.json\": [\n\t\t87782,\n\t\t2569\n\t],\n\t\"./ug.json\": [\n\t\t19005,\n\t\t9757\n\t],\n\t\"./uk.json\": [\n\t\t82057,\n\t\t9871\n\t],\n\t\"./ur.json\": [\n\t\t13889,\n\t\t6797\n\t],\n\t\"./uz.json\": [\n\t\t45108,\n\t\t1056\n\t],\n\t\"./vi.json\": [\n\t\t97099,\n\t\t5224\n\t],\n\t\"./wo.json\": [\n\t\t9923,\n\t\t7303\n\t],\n\t\"./xh.json\": [\n\t\t29064,\n\t\t786\n\t],\n\t\"./yo.json\": [\n\t\t11971,\n\t\t8732\n\t],\n\t\"./yo_BJ.json\": [\n\t\t64533,\n\t\t9926\n\t],\n\t\"./yue.json\": [\n\t\t40648,\n\t\t1452\n\t],\n\t\"./yue_Hans.json\": [\n\t\t24800,\n\t\t4424\n\t],\n\t\"./zh.json\": [\n\t\t34626,\n\t\t457\n\t],\n\t\"./zh_Hant.json\": [\n\t\t82560,\n\t\t2767\n\t],\n\t\"./zh_Hant_HK.json\": [\n\t\t47677,\n\t\t1044\n\t],\n\t\"./zu.json\": [\n\t\t73784,\n\t\t9319\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 1395;\nmodule.exports = webpackAsyncContext;","/**\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 * (getters.standardEmojiList + state.instance.customEmoji)\n * data.users - optional, an array of all known users\n * updateUsersList - optional, a function to search and append to users\n *\n * Depending on data present one or both (or none) can be present, so if field\n * doesn't support user linking you can just provide only emoji.\n */\n\nexport default data => {\n const emojiCurry = suggestEmoji(data.emoji)\n const usersCurry = data.store && suggestUsers(data.store)\n return (input, nameKeywordLocalizer) => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return emojiCurry(input, nameKeywordLocalizer)\n }\n if (firstChar === '@' && usersCurry) {\n return usersCurry(input)\n }\n return []\n }\n}\n\nexport const suggestEmoji = emojis => (input, nameKeywordLocalizer) => {\n const noPrefix = input.toLowerCase().substr(1)\n return emojis\n .map(emoji => ({ ...emoji, ...nameKeywordLocalizer(emoji) }))\n .filter((emoji) => (emoji.names.concat(emoji.keywords)).filter(kw => kw.toLowerCase().match(noPrefix)).length)\n .map(k => {\n let score = 0\n\n // An exact match always wins\n score += Math.max(...k.names.map(name => name.toLowerCase() === noPrefix ? 200 : 0), 0)\n\n // Prioritize custom emoji a lot\n score += k.imageUrl ? 100 : 0\n\n // Prioritize prefix matches somewhat\n score += Math.max(...k.names.map(kw => kw.toLowerCase().startsWith(noPrefix) ? 10 : 0), 0)\n\n // Sort by length\n score -= k.displayText.length\n\n k.score = score\n return k\n })\n .sort((a, b) => {\n // Break ties alphabetically\n const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5\n\n return b.score - a.score + alphabetically\n })\n}\n\nexport const suggestUsers = ({ dispatch, state }) => {\n // Keep some persistent values in closure, most importantly for the\n // custom debounce to work. Lodash debounce does not return a promise.\n let suggestions = []\n let previousQuery = ''\n let timeout = null\n let cancelUserSearch = null\n\n const userSearch = (query) => dispatch('searchUsers', { query })\n const debounceUserSearch = (query) => {\n cancelUserSearch && cancelUserSearch()\n return new Promise((resolve, reject) => {\n timeout = setTimeout(() => {\n userSearch(query).then(resolve).catch(reject)\n }, 300)\n cancelUserSearch = () => {\n clearTimeout(timeout)\n resolve([])\n }\n })\n }\n\n return async input => {\n const noPrefix = input.toLowerCase().substr(1)\n if (previousQuery === noPrefix) return suggestions\n\n suggestions = []\n previousQuery = noPrefix\n // Fetch more and wait, don't fetch if there's the 2nd @ because\n // the backend user search can't deal with it.\n // Reference semantics make it so that we get the updated data after\n // the await.\n if (!noPrefix.includes('@')) {\n await debounceUserSearch(noPrefix)\n }\n\n const newSuggestions = state.users.users.filter(\n user =>\n user.screen_name && user.name && (\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix))\n ).slice(0, 20).sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // Matches on screen name (i.e. user@instance) makes a priority\n aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n\n // Matches on name takes second priority\n aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n\n const diff = (bScore - aScore) * 10\n\n // Then sort alphabetically\n const nameAlphabetically = a.name > b.name ? 1 : -1\n const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1\n\n return diff + nameAlphabetically + screenNameAlphabetically\n /* eslint-disable camelcase */\n }).map((user) => ({\n user,\n displayText: user.screen_name_ui,\n detailText: user.name,\n imageUrl: user.profile_image_url_original,\n replacement: '@' + user.screen_name + ' '\n }))\n /* eslint-enable camelcase */\n\n suggestions = newSuggestions || []\n return suggestions\n }\n}\n","/**\n * Extract tag name from tag opener/closer.\n *\n * @param {String} tag - tag string, i.e. '<a href=\"...\">'\n * @return {String} - tagname, i.e. \"div\"\n */\nexport const getTagName = (tag) => {\n const result = /(?:<\\/(\\w+)>|<(\\w+)\\s?.*?\\/?>)/gis.exec(tag)\n return result && (result[1] || result[2])\n}\n\n/**\n * Extract attributes from tag opener.\n *\n * @param {String} tag - tag string, i.e. '<a href=\"...\">'\n * @return {Object} - map of attributes key = attribute name, value = attribute value\n * attributes without values represented as boolean true\n */\nexport const getAttrs = (tag, filter) => {\n const innertag = tag\n .substring(1, tag.length - 1)\n .replace(new RegExp('^' + getTagName(tag)), '')\n .replace(/\\/?$/, '')\n .trim()\n const attrs = Array.from(innertag.matchAll(/([a-z]+[a-z0-9-]*)(?:=(\"[^\"]+?\"|'[^']+?'))?/gi))\n .map(([trash, key, value]) => [key, value])\n .map(([k, v]) => {\n if (!v) return [k, true]\n return [k, v.substring(1, v.length - 1)]\n })\n const defaultFilter = ([k, v]) => {\n const attrKey = k.toLowerCase()\n if (attrKey === 'style') return false\n if (attrKey === 'class') {\n return v === 'greentext' || v === 'cyantext'\n }\n return true\n }\n return Object.fromEntries(attrs.filter(filter || defaultFilter))\n}\n\n/**\n * Finds shortcodes in text\n *\n * @param {String} text - original text to find emojis in\n * @param {{ url: String, shortcode: Sring }[]} emoji - list of shortcodes to find\n * @param {Function} processor - function to call on each encountered emoji,\n * function is passed single object containing matching emoji ({ url, shortcode })\n * return value will be inserted into resulting array instead of :shortcode:\n * @return {Array} resulting array with non-emoji parts of text and whatever {processor}\n * returned for emoji\n */\nexport const processTextForEmoji = (text, emojis, processor) => {\n const buffer = []\n let textBuffer = ''\n for (let i = 0; i < text.length; i++) {\n const char = text[i]\n if (char === ':') {\n const next = text.slice(i + 1)\n let found = false\n for (const emoji of emojis) {\n if (next.slice(0, emoji.shortcode.length + 1) === (emoji.shortcode + ':')) {\n found = emoji\n break\n }\n }\n if (found) {\n buffer.push(textBuffer)\n textBuffer = ''\n buffer.push(processor(found))\n i += found.shortcode.length + 1\n } else {\n textBuffer += char\n }\n } else {\n textBuffer += char\n }\n }\n if (textBuffer) buffer.push(textBuffer)\n return buffer\n}\n","import { getTagName } from './utility.service.js'\n\n/**\n * This is a tiny purpose-built HTML parser/processor. This basically detects\n * any type of visual newline and converts entire HTML into a array structure.\n *\n * Text nodes are represented as object with single property - text - containing\n * the visual line. Intended usage is to process the array with .map() in which\n * map function returns a string and resulting array can be converted back to html\n * with a .join('').\n *\n * Generally this isn't very useful except for when you really need to either\n * modify visual lines (greentext i.e. simple quoting) or do something with\n * first/last line.\n *\n * known issue: doesn't handle CDATA so nested CDATA might not work well\n *\n * @param {Object} input - input data\n * @return {(string|{ text: string })[]} processed html in form of a list.\n */\nexport const convertHtmlToLines = (html = '') => {\n // Elements that are implicitly self-closing\n // https://developer.mozilla.org/en-US/docs/Glossary/empty_element\n const emptyElements = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ])\n // Block-level element (they make a visual line)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\n const blockElements = new Set([\n 'address', 'article', 'aside', 'blockquote', 'details', 'dialog', 'dd',\n 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main',\n 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'\n ])\n // br is very weird in a way that it's technically not block-level, it's\n // essentially converted to a \\n (or \\r\\n). There's also wbr but it doesn't\n // guarantee linebreak, only suggest it.\n const linebreakElements = new Set(['br'])\n\n const visualLineElements = new Set([\n ...blockElements.values(),\n ...linebreakElements.values()\n ])\n\n // All block-level elements that aren't empty elements, i.e. not <hr>\n const nonEmptyElements = new Set(visualLineElements)\n // Difference\n for (const elem of emptyElements) {\n nonEmptyElements.delete(elem)\n }\n\n // All elements that we are recognizing\n const allElements = new Set([\n ...nonEmptyElements.values(),\n ...emptyElements.values()\n ])\n\n const buffer = [] // Current output buffer\n const level = [] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer.trim().length > 0) {\n buffer.push({ level: [...level], text: textBuffer })\n } else {\n buffer.push(textBuffer)\n }\n textBuffer = ''\n }\n\n const handleBr = (tag) => { // handles single newlines/linebreaks/selfclosing\n flush()\n buffer.push(tag)\n }\n\n const handleOpen = (tag) => { // handles opening tags\n flush()\n buffer.push(tag)\n level.unshift(getTagName(tag))\n }\n\n const handleClose = (tag) => { // handles closing tags\n if (level[0] === getTagName(tag)) {\n flush()\n buffer.push(tag)\n level.shift()\n } else { // Broken case\n textBuffer += tag\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (allElements.has(tagName)) {\n if (linebreakElements.has(tagName)) {\n handleBr(tagFull)\n } else if (nonEmptyElements.has(tagName)) {\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleBr(tagFull)\n } else {\n handleOpen(tagFull)\n }\n } else {\n textBuffer += tagFull\n }\n } else {\n textBuffer += tagFull\n }\n } else if (char === '\\n') {\n handleBr(char)\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flush()\n\n return buffer\n}\n","<template>\n <span\n class=\"HashtagLink\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <a\n :href=\"url\"\n class=\"original\"\n target=\"_blank\"\n @click.prevent=\"onClick\"\n v-html=\"content\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </span>\n</template>\n\n<script src=\"./hashtag_link.js\" />\n\n<style lang=\"scss\" src=\"./hashtag_link.scss\" />\n","import { extractTagFromUrl } from 'src/services/matcher/matcher.service.js'\n\nconst HashtagLink = {\n name: 'HashtagLink',\n props: {\n url: {\n required: true,\n type: String\n },\n content: {\n required: true,\n type: String\n },\n tag: {\n required: false,\n type: String,\n default: ''\n }\n },\n methods: {\n onClick () {\n const tag = this.tag || extractTagFromUrl(this.url)\n if (tag) {\n const link = this.generateTagLink(tag)\n this.$router.push(link)\n } else {\n window.open(this.url, '_blank')\n }\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n }\n }\n}\n\nexport default HashtagLink\n","export const mentionMatchesUrl = (attention, url) => {\n if (url === attention.statusnet_profile_url) {\n return true\n }\n const [namepart, instancepart] = attention.screen_name.split('@')\n const matchstring = new RegExp('://' + instancepart + '/.*' + namepart + '$', 'g')\n\n return !!url.match(matchstring)\n}\n\n/**\n * Extract tag name from pleroma or mastodon url.\n * i.e https://bikeshed.party/tag/photo or https://quey.org/tags/sky\n * @param {string} url\n */\nexport const extractTagFromUrl = (url) => {\n const decoded = decodeURI(url)\n // https://git.pleroma.social/pleroma/elixir-libraries/linkify/-/blob/master/lib/linkify/parser.ex\n // https://www.pcre.org/original/doc/html/pcrepattern.html\n const regex = /tag[s]*\\/([\\p{L}\\p{N}_]*[\\p{Alphabetic}_·\\u{200c}][\\p{L}\\p{N}_·\\p{M}\\u{200c}]*)$/ug\n const result = regex.exec(decoded)\n if (!result) {\n return false\n }\n return result[1]\n}\n","import { render } from \"./hashtag_link.vue?vue&type=template&id=76a14451\"\nimport script from \"./hashtag_link.js?vue&type=script&lang=js\"\nexport * from \"./hashtag_link.js?vue&type=script&lang=js\"\n\nimport \"./hashtag_link.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { unescape, flattenDeep } from 'lodash'\nimport { getTagName, processTextForEmoji, getAttrs } from 'src/services/html_converter/utility.service.js'\nimport { convertHtmlToTree } from 'src/services/html_converter/html_tree_converter.service.js'\nimport { convertHtmlToLines } from 'src/services/html_converter/html_line_converter.service.js'\nimport StillImage from 'src/components/still-image/still-image.vue'\nimport MentionsLine, { MENTIONS_LIMIT } from 'src/components/mentions_line/mentions_line.vue'\nimport HashtagLink from 'src/components/hashtag_link/hashtag_link.vue'\n\nimport './rich_content.scss'\n\nconst MAYBE_LINE_BREAKING_ELEMENTS = [\n 'blockquote',\n 'br',\n 'hr',\n 'ul',\n 'ol',\n 'li',\n 'p',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5'\n]\n\n/**\n * RichContent, The Über-powered component for rendering Post HTML.\n *\n * This takes post HTML and does multiple things to it:\n * - Groups all mentions into <MentionsLine>, this affects all mentions regardles\n * of where they are (beginning/middle/end), even single mentions are converted\n * to a <MentionsLine> containing single <MentionLink>.\n * - Replaces emoji shortcodes with <StillImage>'d images.\n *\n * There are two problems with this component's architecture:\n * 1. Parsing HTML and rendering are inseparable. Attempts to separate the two\n * proven to be a massive overcomplication due to amount of things done here.\n * 2. We need to output both render and some extra data, which seems to be imp-\n * possible in vue. Current solution is to emit 'parseReady' event when parsing\n * is done within render() function.\n *\n * Apart from that one small hiccup with emit in render this _should_ be vue3-ready\n */\nexport default {\n name: 'RichContent',\n components: {\n MentionsLine,\n HashtagLink\n },\n props: {\n // Original html content\n html: {\n required: true,\n type: String\n },\n attentions: {\n required: false,\n default: () => []\n },\n // Emoji object, as in status.emojis, note the \"s\" at the end...\n emoji: {\n required: true,\n type: Array\n },\n // Whether to handle links or not (posts: yes, everything else: no)\n handleLinks: {\n required: false,\n type: Boolean,\n default: false\n },\n // Meme arrows\n greentext: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n // NEVER EVER TOUCH DATA INSIDE RENDER\n render () {\n // Pre-process HTML\n const { newHtml: html } = preProcessPerLine(this.html, this.greentext)\n let currentMentions = null // Current chain of mentions, we group all mentions together\n // This is used to recover spacing removed when parsing mentions\n let lastSpacing = ''\n\n const lastTags = [] // Tags that appear at the end of post body\n const writtenMentions = [] // All mentions that appear in post body\n const invisibleMentions = [] // All mentions that go beyond the limiter (see MentionsLine)\n // to collapse too many mentions in a row\n const writtenTags = [] // All tags that appear in post body\n // unique index for vue \"tag\" property\n let mentionIndex = 0\n let tagsIndex = 0\n\n const renderImage = (tag) => {\n return <StillImage\n {...getAttrs(tag)}\n class=\"img\"\n />\n }\n\n const renderHashtag = (attrs, children, encounteredTextReverse) => {\n const { index, ...linkData } = getLinkData(attrs, children, tagsIndex++)\n writtenTags.push(linkData)\n if (!encounteredTextReverse) {\n lastTags.push(linkData)\n }\n const { url, tag, content } = linkData\n return <HashtagLink url={url} tag={tag} content={content}/>\n }\n\n const renderMention = (attrs, children) => {\n const linkData = getLinkData(attrs, children, mentionIndex++)\n linkData.notifying = this.attentions.some(a => a.statusnet_profile_url === linkData.url)\n writtenMentions.push(linkData)\n if (currentMentions === null) {\n currentMentions = []\n }\n currentMentions.push(linkData)\n if (currentMentions.length > MENTIONS_LIMIT) {\n invisibleMentions.push(linkData)\n }\n if (currentMentions.length === 1) {\n return <MentionsLine mentions={ currentMentions } />\n } else {\n return ''\n }\n }\n\n // Processor to use with html_tree_converter\n const processItem = (item, index, array, what) => {\n // Handle text nodes - just add emoji\n if (typeof item === 'string') {\n const emptyText = item.trim() === ''\n if (item.includes('\\n')) {\n currentMentions = null\n }\n if (emptyText) {\n // don't include spaces when processing mentions - we'll include them\n // in MentionsLine\n lastSpacing = item\n // Don't remove last space in a container (fixes poast mentions)\n return (index !== array.length - 1) && (currentMentions !== null) ? item.trim() : item\n }\n\n currentMentions = null\n if (item.includes(':')) {\n item = ['', processTextForEmoji(\n item,\n this.emoji,\n ({ shortcode, url }) => {\n return <StillImage\n class=\"emoji img\"\n src={url}\n title={`:${shortcode}:`}\n alt={`:${shortcode}:`}\n />\n }\n )]\n }\n return item\n }\n\n // Handle tag nodes\n if (Array.isArray(item)) {\n const [opener, children, closer] = item\n let Tag = getTagName(opener)\n if (Tag.toLowerCase() === 'script') Tag = 'js-exploit'\n if (Tag.toLowerCase() === 'style') Tag = 'css-exploit'\n const fullAttrs = getAttrs(opener, () => true)\n const attrs = getAttrs(opener)\n const previouslyMentions = currentMentions !== null\n /* During grouping of mentions we trim all the empty text elements\n * This padding is added to recover last space removed in case\n * we have a tag right next to mentions\n */\n const mentionsLinePadding =\n // Padding is only needed if we just finished parsing mentions\n previouslyMentions &&\n // Don't add padding if content is string and has padding already\n !(children && typeof children[0] === 'string' && children[0].match(/^\\s/))\n ? lastSpacing\n : ''\n if (MAYBE_LINE_BREAKING_ELEMENTS.includes(Tag)) {\n // all the elements that can cause a line change\n currentMentions = null\n } else if (Tag === 'img') { // replace images with StillImage\n return ['', [mentionsLinePadding, renderImage(opener)], '']\n } else if (Tag === 'a' && this.handleLinks) { // replace mentions with MentionLink\n if (fullAttrs.class && fullAttrs.class.includes('mention')) {\n // Handling mentions here\n return renderMention(attrs, children)\n } else {\n currentMentions = null\n }\n } else if (Tag === 'span') {\n if (this.handleLinks && fullAttrs.class && fullAttrs.class.includes('h-card')) {\n return ['', children.map(processItem), '']\n }\n }\n\n if (children !== undefined) {\n return [\n '',\n [\n mentionsLinePadding,\n [opener, children.map(processItem), closer]\n ],\n ''\n ]\n } else {\n return ['', [mentionsLinePadding, item], '']\n }\n }\n }\n\n // Processor for back direction (for finding \"last\" stuff, just easier this way)\n let encounteredTextReverse = false\n const processItemReverse = (item, index, array, what) => {\n // Handle text nodes - just add emoji\n if (typeof item === 'string') {\n const emptyText = item.trim() === ''\n if (emptyText) return item\n if (!encounteredTextReverse) encounteredTextReverse = true\n return unescape(item)\n } else if (Array.isArray(item)) {\n // Handle tag nodes\n const [opener, children] = item\n const Tag = opener === '' ? '' : getTagName(opener)\n switch (Tag) {\n case 'a': { // replace mentions with MentionLink\n if (!this.handleLinks) break\n const fullAttrs = getAttrs(opener, () => true)\n const attrs = getAttrs(opener, () => true)\n // should only be this\n if (\n (fullAttrs.class && fullAttrs.class.includes('hashtag')) || // Pleroma style\n (fullAttrs.rel === 'tag') // Mastodon style\n ) {\n return renderHashtag(attrs, children, encounteredTextReverse)\n } else {\n attrs.target = '_blank'\n const newChildren = [...children].reverse().map(processItemReverse).reverse()\n\n return <a {...attrs}>\n { newChildren }\n </a>\n }\n }\n case '':\n return [...children].reverse().map(processItemReverse).reverse()\n }\n\n // Render tag as is\n if (children !== undefined) {\n const newChildren = Array.isArray(children)\n ? [...children].reverse().map(processItemReverse).reverse()\n : children\n return <Tag {...getAttrs(opener)}>\n { newChildren }\n </Tag>\n } else {\n return <Tag/>\n }\n }\n return item\n }\n\n const pass1 = convertHtmlToTree(html).map(processItem)\n const pass2 = [...pass1].reverse().map(processItemReverse).reverse()\n // DO NOT USE SLOTS they cause a re-render feedback loop here.\n // slots updated -> rerender -> emit -> update up the tree -> rerender -> ...\n // at least until vue3?\n const result = <span class=\"RichContent\">\n { pass2 }\n </span>\n\n const event = {\n lastTags,\n writtenMentions,\n writtenTags,\n invisibleMentions\n }\n\n // DO NOT MOVE TO UPDATE. BAD IDEA.\n this.$emit('parseReady', event)\n\n return result\n }\n}\n\nconst getLinkData = (attrs, children, index) => {\n const stripTags = (item) => {\n if (typeof item === 'string') {\n return item\n } else {\n return item[1].map(stripTags).join('')\n }\n }\n const textContent = children.map(stripTags).join('')\n return {\n index,\n url: attrs.href,\n tag: attrs['data-tag'],\n content: flattenDeep(children).join(''),\n textContent\n }\n}\n\n/** Pre-processing HTML\n *\n * Currently this does one thing:\n * - add green/cyantexting\n *\n * @param {String} html - raw HTML to process\n * @param {Boolean} greentext - whether to enable greentexting or not\n */\nexport const preProcessPerLine = (html, greentext) => {\n const greentextHandle = new Set(['p', 'div'])\n\n const lines = convertHtmlToLines(html)\n const newHtml = lines.reverse().map((item, index, array) => {\n if (!item.text) return item\n const string = item.text\n\n // Greentext stuff\n if (\n // Only if greentext is engaged\n greentext &&\n // Only handle p's and divs. Don't want to affect blockquotes, code etc\n item.level.every(l => greentextHandle.has(l)) &&\n // Only if line begins with '>' or '<'\n (string.includes('&gt;') || string.includes('&lt;'))\n ) {\n const cleanedString = string.replace(/<[^>]+?>/gi, '') // remove all tags\n .replace(/@\\w+/gi, '') // remove mentions (even failed ones)\n .trim()\n if (cleanedString.startsWith('&gt;')) {\n return `<span class='greentext'>${string}</span>`\n } else if (cleanedString.startsWith('&lt;')) {\n return `<span class='cyantext'>${string}</span>`\n }\n }\n\n return string\n }).reverse().join('')\n\n return { newHtml }\n}\n","import { getTagName } from './utility.service.js'\nimport { unescape } from 'lodash'\n\n/**\n * This is a not-so-tiny purpose-built HTML parser/processor. This parses html\n * and converts it into a tree structure representing tag openers/closers and\n * children.\n *\n * Structure follows this pattern: [opener, [...children], closer] except root\n * node which is just [...children]. Text nodes can only be within children and\n * are represented as strings.\n *\n * Intended use is to convert HTML structure and then recursively iterate over it\n * most likely using a map. Very useful for dynamically rendering html replacing\n * tags with JSX elements in a render function.\n *\n * known issue: doesn't handle CDATA so CDATA might not work well\n * known issue: doesn't handle HTML comments\n *\n * @param {Object} input - input data\n * @return {string} processed html\n */\nexport const convertHtmlToTree = (html = '') => {\n // Elements that are implicitly self-closing\n // https://developer.mozilla.org/en-US/docs/Glossary/empty_element\n const emptyElements = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ])\n // TODO For future - also parse HTML5 multi-source components?\n\n const buffer = [] // Current output buffer\n const levels = [['', buffer]] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n const getCurrentBuffer = () => {\n return levels[levels.length - 1][1]\n }\n\n const flushText = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer === '') return\n getCurrentBuffer().push(textBuffer)\n textBuffer = ''\n }\n\n const handleSelfClosing = (tag) => {\n getCurrentBuffer().push([tag])\n }\n\n const handleOpen = (tag) => {\n const curBuf = getCurrentBuffer()\n const newLevel = [unescape(tag), []]\n levels.push(newLevel)\n curBuf.push(newLevel)\n }\n\n const handleClose = (tag) => {\n const currentTag = levels[levels.length - 1]\n if (getTagName(levels[levels.length - 1][0]) === getTagName(tag)) {\n currentTag.push(tag)\n levels.pop()\n } else {\n getCurrentBuffer().push(tag)\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n flushText()\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (emptyElements.has(tagName) || tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleSelfClosing(tagFull)\n } else {\n handleOpen(tagFull)\n }\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flushText()\n return buffer\n}\n","// eslint-disable-next-line no-unused\nimport { h, Fragment } from 'vue'\nimport { mapState } from 'vuex'\nimport { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'\n\nimport './tab_switcher.scss'\n\nconst findFirstUsable = (slots) => slots.findIndex(_ => _.props)\n\nexport default {\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 bodyScrollLock: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n active: findFirstUsable(this.slots())\n }\n },\n computed: {\n activeIndex () {\n // In case of controlled component\n if (this.activeTab) {\n return this.slots().findIndex(slot => slot && slot.props && this.activeTab === slot.props.key)\n } else {\n return this.active\n }\n },\n isActive () {\n return tabName => {\n const isWanted = slot => slot.props && slot.props['data-tab-name'] === tabName\n return this.$slots.default().findIndex(isWanted) === this.activeIndex\n }\n }\n },\n beforeUpdate () {\n const currentSlot = this.slots()[this.active]\n if (!currentSlot.props) {\n this.active = findFirstUsable(this.slots())\n }\n },\n methods: {\n clickTab (index) {\n return (e) => {\n e.preventDefault()\n this.setTab(index)\n }\n },\n // DO NOT put it to computed, it doesn't work (caching?)\n slots () {\n if (this.$slots.default()[0].type === Fragment) {\n return this.$slots.default()[0].children\n }\n return this.$slots.default()\n },\n setTab (index) {\n if (typeof this.onSwitch === 'function') {\n this.onSwitch.call(null, this.slots()[index].key)\n }\n this.active = index\n if (this.scrollableTabs) {\n this.$refs.contents.scrollTop = 0\n }\n }\n },\n render () {\n const tabs = this.slots()\n .map((slot, index) => {\n const props = slot.props\n if (!props) return\n const classesTab = ['tab', 'button-default']\n const classesWrapper = ['tab-wrapper']\n if (this.activeIndex === index) {\n classesTab.push('active')\n classesWrapper.push('active')\n }\n if (props.image) {\n return (\n <div class={classesWrapper.join(' ')}>\n <button\n disabled={props.disabled}\n onClick={this.clickTab(index)}\n class={classesTab.join(' ')}\n type=\"button\"\n role=\"tab\"\n >\n <img src={props.image} title={props['image-tooltip']}/>\n {props.label ? '' : props.label}\n </button>\n </div>\n )\n }\n return (\n <div class={classesWrapper.join(' ')}>\n <button\n disabled={props.disabled}\n onClick={this.clickTab(index)}\n class={classesTab.join(' ')}\n type=\"button\"\n role=\"tab\"\n >\n {!props.icon ? '' : (<FAIcon class=\"tab-icon\" size=\"2x\" fixed-width icon={props.icon}/>)}\n <span class=\"text\">\n {props.label}\n </span>\n </button>\n </div>\n )\n })\n\n const contents = this.slots().map((slot, index) => {\n const props = slot.props\n if (!props) return\n const active = this.activeIndex === index\n const classes = [ active ? 'active' : 'hidden' ]\n if (props.fullHeight) {\n classes.push('full-height')\n }\n const renderSlot = (!this.renderOnlyFocused || active)\n ? slot\n : ''\n\n return (\n <div class={classes}>\n {\n this.sideTabBar\n ? <h1 class=\"mobile-label\">{props.label}</h1>\n : ''\n }\n {renderSlot}\n </div>\n )\n })\n\n return (\n <div class={'tab-switcher ' + (this.sideTabBar ? 'side-tabs' : 'top-tabs')}>\n <div\n class=\"tabs\"\n role=\"tablist\"\n >\n {tabs}\n </div>\n <div\n ref=\"contents\"\n role=\"tabpanel\"\n class={'contents' + (this.scrollableTabs ? ' scrollable-tabs' : '')}\n v-body-scroll-lock={this.bodyScrollLock}\n >\n {contents}\n </div>\n </div>\n )\n }\n}\n","// eslint-disable-next-line no-unused\nimport { h } from 'vue'\nimport isEmpty from 'lodash/isEmpty'\nimport { getComponentProps } from '../../services/component_utils/component_utils'\nimport './with_load_more.scss'\n\nimport { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst withLoadMore = ({\n fetch, // function to fetch entries and return a promise\n select, // function to select data from store\n unmounted, // function called at \"destroyed\" lifecycle\n childPropName = 'entries', // name of the prop to be passed into the wrapped component\n additionalPropNames = [] // additional prop name list of the wrapper component\n}) => (WrappedComponent) => {\n const originalProps = Object.keys(getComponentProps(WrappedComponent))\n const props = originalProps.filter(v => v !== childPropName).concat(additionalPropNames)\n\n return {\n props,\n data () {\n return {\n loading: false,\n bottomedOut: false,\n error: false,\n entries: []\n }\n },\n created () {\n window.addEventListener('scroll', this.scrollLoad)\n if (this.entries.length === 0) {\n this.fetchEntries()\n }\n },\n unmounted () {\n window.removeEventListener('scroll', this.scrollLoad)\n unmounted && unmounted(this.$props, this.$store)\n },\n methods: {\n // Entries is not a computed because computed can't track the dynamic\n // selector for changes and won't trigger after fetch.\n updateEntries () {\n this.entries = select(this.$props, this.$store) || []\n },\n fetchEntries () {\n if (!this.loading) {\n this.loading = true\n this.error = false\n fetch(this.$props, this.$store)\n .then((newEntries) => {\n this.loading = false\n this.bottomedOut = isEmpty(newEntries)\n })\n .catch(() => {\n this.loading = false\n this.error = true\n })\n .finally(() => {\n this.updateEntries()\n })\n }\n },\n scrollLoad (e) {\n const bodyBRect = document.body.getBoundingClientRect()\n const height = Math.max(bodyBRect.height, -(bodyBRect.y))\n if (this.loading === false &&\n this.bottomedOut === false &&\n this.$el.offsetHeight > 0 &&\n (window.innerHeight + window.pageYOffset) >= (height - 750)\n ) {\n this.fetchEntries()\n }\n }\n },\n render () {\n const props = {\n ...this.$props,\n [childPropName]: this.entries\n }\n const children = this.$slots\n return (\n <div class=\"with-load-more\">\n <WrappedComponent {...props}>\n {children}\n </WrappedComponent>\n <div class=\"with-load-more-footer\">\n {this.error &&\n <button onClick={this.fetchEntries} class=\"button-unstyled -link -fullwidth alert error\">\n {this.$t('general.generic_error')}\n </button>\n }\n {!this.error && this.loading && <FAIcon spin icon=\"circle-notch\"/>}\n {!this.error && !this.loading && !this.bottomedOut && <a onClick={this.fetchEntries} role=\"button\" tabindex=\"0\">{this.$t('general.more')}</a>}\n </div>\n </div>\n )\n }\n }\n}\n\nexport default withLoadMore\n","const languages = [\n 'ar',\n 'ca',\n 'cs',\n 'de',\n 'eo',\n 'en',\n 'es',\n 'et',\n 'eu',\n 'fi',\n 'fr',\n 'ga',\n 'he',\n 'hu',\n 'it',\n 'ja',\n 'ja_easy',\n 'ko',\n 'nan-TW',\n 'nb',\n 'nl',\n 'oc',\n 'pl',\n 'pt',\n 'ro',\n 'ru',\n 'sk',\n 'te',\n 'uk',\n 'zh',\n 'zh_Hant'\n]\n\nconst specialJsonName = {\n ja: 'ja_pedantic'\n}\n\nconst langCodeToJsonName = (code) => specialJsonName[code] || code\n\nconst langCodeToCldrName = (code) => code\n\nconst ensureFinalFallback = codes => {\n const codeList = Array.isArray(codes) ? codes : [codes]\n return codeList.includes('en') ? codeList : codeList.concat(['en'])\n}\n\nmodule.exports = {\n languages,\n langCodeToJsonName,\n langCodeToCldrName,\n ensureFinalFallback\n}\n","// When contributing, please sort JSON before committing so it would be easier to see what's missing and what's being added compared to English and other languages. It's not obligatory, but just an advice.\n// To sort json use jq https://stedolan.github.io/jq and invoke it like `jq -S . xx.json > xx.sorted.json`, AFAIK, there's no inplace edit option like in sed\n// Also, when adding a new language to \"messages\" variable, please do it alphabetically by language code so that users can search or check their custom language easily.\n\n// For anyone contributing to old huge messages.js and in need to quickly convert it to JSON\n// sed command for converting currently formatted JS to JSON:\n// sed -i -e \"s/'//gm\" -e 's/\"/\\\\\"/gm' -re 's/^( +)(.+?): ((.+?))?(,?)(\\{?)$/\\1\"\\2\": \"\\4\"/gm' -e 's/\\\"\\{\\\"/{/g' -e 's/,\"$/\",/g' file.json\n// There's only problem that apostrophe character ' gets replaced by \\\\ so you have to fix it manually, sorry.\n\nimport { isEqual } from 'lodash'\nimport { languages, langCodeToJsonName } from './languages.js'\n\nconst ULTIMATE_FALLBACK_LOCALE = 'en'\n\nconst hasLanguageFile = (code) => languages.includes(code)\n\nconst loadLanguageFile = (code) => {\n return import(\n /* webpackInclude: /\\.json$/ */\n /* webpackChunkName: \"i18n/[request]\" */\n `./${langCodeToJsonName(code)}.json`\n )\n}\n\nconst messages = {\n languages,\n default: {\n en: require('./en.json').default\n },\n setLanguage: async (i18n, language) => {\n const languages = (Array.isArray(language) ? language : [language]).filter(k => k)\n\n if (!languages.includes(ULTIMATE_FALLBACK_LOCALE)) {\n languages.push(ULTIMATE_FALLBACK_LOCALE)\n }\n const [first, ...rest] = languages\n\n if (first === i18n.locale && isEqual(rest, i18n.fallbackLocale)) {\n return\n }\n\n for (const lang of languages) {\n if (hasLanguageFile(lang)) {\n const messages = await loadLanguageFile(lang)\n i18n.setLocaleMessage(lang, messages.default)\n }\n }\n\n i18n.fallbackLocale = rest\n i18n.locale = first\n }\n}\n\nexport default messages\n","import EventTargetPolyfill from '@ungap/event-target'\n\ntry {\n /* eslint-disable no-new */\n new EventTarget()\n /* eslint-enable no-new */\n} catch (e) {\n window.EventTarget = EventTargetPolyfill\n}\n","const defaultState = {\n settingsModalState: 'hidden',\n settingsModalLoadedUser: false,\n settingsModalLoadedAdmin: false,\n settingsModalTargetTab: null,\n settingsModalMode: 'user',\n settings: {\n currentSaveStateNotice: null,\n noticeClearTimeout: null,\n notificationPermission: null\n },\n browserSupport: {\n cssFilter: window.CSS && window.CSS.supports && (\n window.CSS.supports('filter', 'drop-shadow(0 0)') ||\n window.CSS.supports('-webkit-filter', 'drop-shadow(0 0)')\n )\n },\n layoutType: 'normal',\n globalNotices: [],\n layoutHeight: 0,\n lastTimeline: null\n}\n\nconst interfaceMod = {\n state: defaultState,\n mutations: {\n settingsSaved (state, { success, error }) {\n if (success) {\n if (state.noticeClearTimeout) {\n clearTimeout(state.noticeClearTimeout)\n }\n state.settings.currentSaveStateNotice = { error: false, data: success }\n state.settings.noticeClearTimeout = setTimeout(() => delete state.settings.currentSaveStateNotice, 2000)\n } else {\n state.settings.currentSaveStateNotice = { error: true, errorData: error }\n }\n },\n setNotificationPermission (state, permission) {\n state.notificationPermission = permission\n },\n setLayoutType (state, value) {\n state.layoutType = value\n },\n closeSettingsModal (state) {\n state.settingsModalState = 'hidden'\n },\n togglePeekSettingsModal (state) {\n switch (state.settingsModalState) {\n case 'minimized':\n state.settingsModalState = 'visible'\n return\n case 'visible':\n state.settingsModalState = 'minimized'\n return\n default:\n throw new Error('Illegal minimization state of settings modal')\n }\n },\n openSettingsModal (state, value) {\n state.settingsModalMode = value\n state.settingsModalState = 'visible'\n if (value === 'user') {\n if (!state.settingsModalLoadedUser) {\n state.settingsModalLoadedUser = true\n }\n } else if (value === 'admin') {\n if (!state.settingsModalLoadedAdmin) {\n state.settingsModalLoadedAdmin = true\n }\n }\n },\n setSettingsModalTargetTab (state, value) {\n state.settingsModalTargetTab = value\n },\n pushGlobalNotice (state, notice) {\n state.globalNotices.push(notice)\n },\n removeGlobalNotice (state, notice) {\n state.globalNotices = state.globalNotices.filter(n => n !== notice)\n },\n setLayoutHeight (state, value) {\n state.layoutHeight = value\n },\n setLayoutWidth (state, value) {\n state.layoutWidth = value\n },\n setLastTimeline (state, value) {\n state.lastTimeline = value\n }\n },\n actions: {\n setPageTitle ({ rootState }, option = '') {\n document.title = `${option} ${rootState.instance.name}`\n },\n settingsSaved ({ commit, dispatch }, { success, error }) {\n commit('settingsSaved', { success, error })\n },\n setNotificationPermission ({ commit }, permission) {\n commit('setNotificationPermission', permission)\n },\n closeSettingsModal ({ commit }) {\n commit('closeSettingsModal')\n },\n openSettingsModal ({ commit }, value = 'user') {\n commit('openSettingsModal', value)\n },\n togglePeekSettingsModal ({ commit }) {\n commit('togglePeekSettingsModal')\n },\n clearSettingsModalTargetTab ({ commit }) {\n commit('setSettingsModalTargetTab', null)\n },\n openSettingsModalTab ({ commit }, value) {\n commit('setSettingsModalTargetTab', value)\n commit('openSettingsModal', 'user')\n },\n pushGlobalNotice (\n { commit, dispatch, state },\n {\n messageKey,\n messageArgs = {},\n level = 'error',\n timeout = 0\n }) {\n const notice = {\n messageKey,\n messageArgs,\n level\n }\n commit('pushGlobalNotice', notice)\n // Adding a new element to array wraps it in a Proxy, which breaks the comparison\n // TODO: Generate UUID or something instead or relying on !== operator?\n const newNotice = state.globalNotices[state.globalNotices.length - 1]\n if (timeout) {\n setTimeout(() => dispatch('removeGlobalNotice', newNotice), timeout)\n }\n return newNotice\n },\n removeGlobalNotice ({ commit }, notice) {\n commit('removeGlobalNotice', notice)\n },\n setLayoutHeight ({ commit }, value) {\n commit('setLayoutHeight', value)\n },\n // value is optional, assuming it was cached prior\n setLayoutWidth ({ commit, state, rootGetters, rootState }, value) {\n let width = value\n if (value !== undefined) {\n commit('setLayoutWidth', value)\n } else {\n width = state.layoutWidth\n }\n const mobileLayout = width <= 800\n const normalOrMobile = mobileLayout ? 'mobile' : 'normal'\n const { thirdColumnMode } = rootGetters.mergedConfig\n if (thirdColumnMode === 'none' || !rootState.users.currentUser) {\n commit('setLayoutType', normalOrMobile)\n } else {\n const wideLayout = width >= 1300\n commit('setLayoutType', wideLayout ? 'wide' : normalOrMobile)\n }\n },\n setLastTimeline ({ commit }, value) {\n commit('setLastTimeline', value)\n }\n }\n}\n\nexport default interfaceMod\n","import { getPreset, applyTheme } from '../services/style_setter/style_setter.js'\nimport { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'\nimport apiService from '../services/api/api.service.js'\nimport { instanceDefaultProperties } from './config.js'\nimport { langCodeToCldrName, ensureFinalFallback } from '../i18n/languages.js'\n\nconst SORTED_EMOJI_GROUP_IDS = [\n 'smileys-and-emotion',\n 'people-and-body',\n 'animals-and-nature',\n 'food-and-drink',\n 'travel-and-places',\n 'activities',\n 'objects',\n 'symbols',\n 'flags'\n]\n\nconst REGIONAL_INDICATORS = (() => {\n const start = 0x1F1E6\n const end = 0x1F1FF\n const A = 'A'.codePointAt(0)\n const res = new Array(end - start + 1)\n for (let i = start; i <= end; ++i) {\n const letter = String.fromCodePoint(A + i - start)\n res[i - start] = {\n replacement: String.fromCodePoint(i),\n imageUrl: false,\n displayText: 'regional_indicator_' + letter,\n displayTextI18n: {\n key: 'emoji.regional_indicator',\n args: { letter }\n }\n }\n }\n return res\n})()\n\nconst REMOTE_INTERACTION_URL = '/main/ostatus'\n\nconst defaultState = {\n // Stuff from apiConfig\n name: 'Pleroma FE',\n registrationOpen: true,\n server: 'http://localhost:4040/',\n textlimit: 5000,\n themeData: undefined,\n vapidPublicKey: undefined,\n\n // Stuff from static/config.json\n alwaysShowSubjectInput: true,\n defaultAvatar: '/images/avi.png',\n defaultBanner: '/images/banner.png',\n background: '/static/aurora_borealis.jpg',\n collapseMessageWithSubject: false,\n greentext: false,\n useAtIcon: false,\n mentionLinkDisplay: 'short',\n mentionLinkShowTooltip: true,\n mentionLinkShowAvatar: false,\n mentionLinkFadeDomain: true,\n mentionLinkShowYous: false,\n mentionLinkBoldenYou: true,\n hideFilteredStatuses: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: false,\n hideMutedThreads: true,\n hideWordFilteredPosts: false,\n hidePostStats: false,\n hideBotIndication: false,\n hideSitename: false,\n hideUserStats: false,\n muteBotStatuses: false,\n modalOnRepeat: false,\n modalOnUnfollow: false,\n modalOnBlock: true,\n modalOnMute: false,\n modalOnDelete: true,\n modalOnLogout: true,\n modalOnApproveFollow: false,\n modalOnDenyFollow: false,\n modalOnRemoveUserFromFollowers: false,\n loginMethod: 'password',\n logo: '/static/logo.svg',\n logoMargin: '.2em',\n logoMask: true,\n logoLeft: false,\n disableUpdateNotification: false,\n minimalScopesMode: false,\n nsfwCensorImage: undefined,\n postContentType: 'text/plain',\n redirectRootLogin: '/main/friends',\n redirectRootNoLogin: '/main/all',\n scopeCopy: true,\n showFeaturesPanel: true,\n showInstanceSpecificPanel: false,\n sidebarRight: false,\n subjectLineBehavior: 'email',\n theme: 'pleroma-dark',\n virtualScrolling: true,\n sensitiveByDefault: false,\n conversationDisplay: 'linear',\n conversationTreeAdvanced: false,\n conversationOtherRepliesButton: 'below',\n conversationTreeFadeAncestors: false,\n maxDepthInThread: 6,\n autocompleteSelect: false,\n\n // Nasty stuff\n customEmoji: [],\n customEmojiFetched: false,\n emoji: {},\n emojiFetched: false,\n unicodeEmojiAnnotations: {},\n pleromaBackend: true,\n postFormats: [],\n restrictedNicknames: [],\n safeDM: true,\n knownDomains: [],\n birthdayRequired: false,\n birthdayMinAge: 0,\n\n // Feature-set, apparently, not everything here is reported...\n shoutAvailable: false,\n pleromaChatMessagesAvailable: false,\n pleromaCustomEmojiReactionsAvailable: false,\n gopherAvailable: false,\n mediaProxyAvailable: false,\n suggestionsEnabled: false,\n suggestionsWeb: '',\n quotingAvailable: false,\n\n // Html stuff\n instanceSpecificPanelContent: '',\n tos: '',\n\n // Version Information\n backendVersion: '',\n frontendVersion: '',\n\n pollsAvailable: false,\n pollLimits: {\n max_options: 4,\n max_option_chars: 255,\n min_expiration: 60,\n max_expiration: 60 * 60 * 24\n }\n}\n\nconst loadAnnotations = (lang) => {\n return import(\n /* webpackChunkName: \"emoji-annotations/[request]\" */\n `@kazvmoe-infra/unicode-emoji-json/annotations/${langCodeToCldrName(lang)}.json`\n )\n .then(k => k.default)\n}\n\nconst injectAnnotations = (emoji, annotations) => {\n const availableLangs = Object.keys(annotations)\n\n return {\n ...emoji,\n annotations: availableLangs.reduce((acc, cur) => {\n acc[cur] = annotations[cur][emoji.replacement]\n return acc\n }, {})\n }\n}\n\nconst injectRegionalIndicators = groups => {\n groups.symbols.push(...REGIONAL_INDICATORS)\n return groups\n}\n\nconst instance = {\n state: defaultState,\n mutations: {\n setInstanceOption (state, { name, value }) {\n if (typeof value !== 'undefined') {\n state[name] = value\n }\n },\n setKnownDomains (state, domains) {\n state.knownDomains = domains\n },\n setUnicodeEmojiAnnotations (state, { lang, annotations }) {\n state.unicodeEmojiAnnotations[lang] = annotations\n }\n },\n getters: {\n instanceDefaultConfig (state) {\n return instanceDefaultProperties\n .map(key => [key, state[key]])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n },\n groupedCustomEmojis (state) {\n const packsOf = emoji => {\n const packs = emoji.tags\n .filter(k => k.startsWith('pack:'))\n .map(k => {\n const packName = k.slice(5) // remove 'pack:' prefix\n return {\n id: `custom-${packName}`,\n text: packName\n }\n })\n\n if (!packs.length) {\n return [{\n id: 'unpacked'\n }]\n } else {\n return packs\n }\n }\n\n return state.customEmoji\n .reduce((res, emoji) => {\n packsOf(emoji).forEach(({ id: packId, text: packName }) => {\n if (!res[packId]) {\n res[packId] = ({\n id: packId,\n text: packName,\n image: emoji.imageUrl,\n emojis: []\n })\n }\n res[packId].emojis.push(emoji)\n })\n return res\n }, {})\n },\n standardEmojiList (state) {\n return SORTED_EMOJI_GROUP_IDS\n .map(groupId => (state.emoji[groupId] || []).map(k => injectAnnotations(k, state.unicodeEmojiAnnotations)))\n .reduce((a, b) => a.concat(b), [])\n },\n standardEmojiGroupList (state) {\n return SORTED_EMOJI_GROUP_IDS.map(groupId => ({\n id: groupId,\n emojis: (state.emoji[groupId] || []).map(k => injectAnnotations(k, state.unicodeEmojiAnnotations))\n }))\n },\n instanceDomain (state) {\n return new URL(state.server).hostname\n },\n remoteInteractionLink (state) {\n const server = state.server.endsWith('/') ? state.server.slice(0, -1) : state.server\n const link = server + REMOTE_INTERACTION_URL\n\n return ({ statusId, nickname }) => {\n if (statusId) {\n return `${link}?status_id=${statusId}`\n } else {\n return `${link}?nickname=${nickname}`\n }\n }\n }\n },\n actions: {\n setInstanceOption ({ commit, dispatch }, { name, value }) {\n commit('setInstanceOption', { name, value })\n switch (name) {\n case 'name':\n dispatch('setPageTitle')\n break\n case 'shoutAvailable':\n if (value) {\n dispatch('initializeSocket')\n }\n break\n case 'theme':\n dispatch('setTheme', value)\n break\n }\n },\n async getStaticEmoji ({ commit }) {\n try {\n const values = (await import(/* webpackChunkName: 'emoji' */ '../../static/emoji.json')).default\n\n const emoji = Object.keys(values).reduce((res, groupId) => {\n res[groupId] = values[groupId].map(e => ({\n displayText: e.slug,\n imageUrl: false,\n replacement: e.emoji\n }))\n return res\n }, {})\n commit('setInstanceOption', { name: 'emoji', value: injectRegionalIndicators(emoji) })\n } catch (e) {\n console.warn(\"Can't load static emoji\")\n console.warn(e)\n }\n },\n\n loadUnicodeEmojiData ({ commit, state }, language) {\n const langList = ensureFinalFallback(language)\n\n return Promise.all(\n langList\n .map(async lang => {\n if (!state.unicodeEmojiAnnotations[lang]) {\n try {\n const annotations = await loadAnnotations(lang)\n commit('setUnicodeEmojiAnnotations', { lang, annotations })\n } catch (e) {\n console.warn(`Error loading unicode emoji annotations for ${lang}: `, e)\n // ignore\n }\n }\n }))\n },\n\n async getCustomEmoji ({ commit, state }) {\n try {\n const res = await window.fetch('/api/pleroma/emoji.json')\n if (res.ok) {\n const result = await res.json()\n const values = Array.isArray(result) ? Object.assign({}, ...result) : result\n const caseInsensitiveStrCmp = (a, b) => {\n const la = a.toLowerCase()\n const lb = b.toLowerCase()\n return la > lb ? 1 : (la < lb ? -1 : 0)\n }\n const noPackLast = (a, b) => {\n const aNull = a === ''\n const bNull = b === ''\n if (aNull === bNull) {\n return 0\n } else if (aNull && !bNull) {\n return 1\n } else {\n return -1\n }\n }\n const byPackThenByName = (a, b) => {\n const packOf = emoji => (emoji.tags.filter(k => k.startsWith('pack:'))[0] || '').slice(5)\n const packOfA = packOf(a)\n const packOfB = packOf(b)\n return noPackLast(packOfA, packOfB) || caseInsensitiveStrCmp(packOfA, packOfB) || caseInsensitiveStrCmp(a.displayText, b.displayText)\n }\n\n const emoji = Object.entries(values).map(([key, value]) => {\n const imageUrl = value.image_url\n return {\n displayText: key,\n imageUrl: imageUrl ? state.server + imageUrl : value,\n tags: imageUrl ? value.tags.sort((a, b) => a > b ? 1 : 0) : ['utf'],\n replacement: `:${key}: `\n }\n // Technically could use tags but those are kinda useless right now,\n // should have been \"pack\" field, that would be more useful\n }).sort(byPackThenByName)\n commit('setInstanceOption', { name: 'customEmoji', value: emoji })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load custom emojis\")\n console.warn(e)\n }\n },\n\n setTheme ({ commit, rootState }, themeName) {\n commit('setInstanceOption', { name: 'theme', value: themeName })\n getPreset(themeName)\n .then(themeData => {\n commit('setInstanceOption', { name: 'themeData', value: themeData })\n // No need to apply theme if there's user theme already\n const { customTheme } = rootState.config\n if (customTheme) return\n\n // New theme presets don't have 'theme' property, they use 'source'\n const themeSource = themeData.source\n if (!themeData.theme || (themeSource && themeSource.themeEngineVersion === CURRENT_VERSION)) {\n applyTheme(themeSource)\n } else {\n applyTheme(themeData.theme)\n }\n })\n },\n fetchEmoji ({ dispatch, state }) {\n if (!state.customEmojiFetched) {\n state.customEmojiFetched = true\n dispatch('getCustomEmoji')\n }\n if (!state.emojiFetched) {\n state.emojiFetched = true\n dispatch('getStaticEmoji')\n }\n },\n\n async getKnownDomains ({ commit, rootState }) {\n try {\n const result = await apiService.fetchKnownDomains({\n credentials: rootState.users.currentUser.credentials\n })\n commit('setKnownDomains', result)\n } catch (e) {\n console.warn(\"Can't load known domains\")\n console.warn(e)\n }\n }\n }\n}\n\nexport default instance\n","import {\n remove,\n slice,\n each,\n findIndex,\n find,\n maxBy,\n minBy,\n merge,\n first,\n last,\n isArray,\n omitBy\n} from 'lodash'\nimport {\n isStatusNotification,\n isValidNotification,\n maybeShowNotification\n} from '../services/notification_utils/notification_utils.js'\nimport apiService from '../services/api/api.service.js'\n\nconst emptyTl = (userId = 0) => ({\n statuses: [],\n statusesObject: {},\n faves: [],\n visibleStatuses: [],\n visibleStatusesObject: {},\n newStatusCount: 0,\n maxId: 0,\n minId: 0,\n minVisibleId: 0,\n loading: false,\n followers: [],\n friends: [],\n userId,\n flushMarker: 0\n})\n\nconst emptyNotifications = () => ({\n desktopNotificationSilence: true,\n maxId: 0,\n minId: Number.POSITIVE_INFINITY,\n data: [],\n idStore: {},\n loading: false\n})\n\nexport const defaultState = () => ({\n allStatuses: [],\n allStatusesObject: {},\n conversationsObject: {},\n maxId: 0,\n notifications: emptyNotifications(),\n favorites: new Set(),\n timelines: {\n mentions: emptyTl(),\n public: emptyTl(),\n user: emptyTl(),\n favorites: emptyTl(),\n media: emptyTl(),\n publicAndExternal: emptyTl(),\n friends: emptyTl(),\n tag: emptyTl(),\n dms: emptyTl(),\n bookmarks: emptyTl(),\n list: emptyTl()\n }\n})\n\nexport const prepareStatus = (status) => {\n // Set deleted flag\n status.deleted = false\n\n // To make the array reactive\n status.attachments = status.attachments || []\n\n return status\n}\n\nconst mergeOrAdd = (arr, obj, item) => {\n const oldItem = obj[item.id]\n\n if (oldItem) {\n // We already have this, so only merge the new info.\n // We ignore null values to avoid overwriting existing properties with missing data\n // we also skip 'user' because that is handled by users module\n merge(oldItem, omitBy(item, (v, k) => v === null || k === 'user'))\n // Reactivity fix.\n oldItem.attachments.splice(oldItem.attachments.length)\n return { item: oldItem, new: false }\n } else {\n // This is a new item, prepare it\n prepareStatus(item)\n arr.push(item)\n obj[item.id] = item\n return { item, new: true }\n }\n}\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nconst sortTimeline = (timeline) => {\n timeline.visibleStatuses = timeline.visibleStatuses.sort(sortById)\n timeline.statuses = timeline.statuses.sort(sortById)\n timeline.minVisibleId = (last(timeline.visibleStatuses) || {}).id\n return timeline\n}\n\n// Add status to the global storages (arrays and objects maintaining statuses) except timelines\nconst addStatusToGlobalStorage = (state, data) => {\n const result = mergeOrAdd(state.allStatuses, state.allStatusesObject, data)\n if (result.new) {\n // Add to conversation\n const status = result.item\n const conversationsObject = state.conversationsObject\n const conversationId = status.statusnet_conversation_id\n if (conversationsObject[conversationId]) {\n conversationsObject[conversationId].push(status)\n } else {\n conversationsObject[conversationId] = [status]\n }\n }\n return result\n}\n\n// Remove status from the global storages (arrays and objects maintaining statuses) except timelines\nconst removeStatusFromGlobalStorage = (state, status) => {\n remove(state.allStatuses, { id: status.id })\n\n // TODO: Need to remove from allStatusesObject?\n\n // Remove possible notification\n remove(state.notifications.data, ({ action: { id } }) => id === status.id)\n\n // Remove from conversation\n const conversationId = status.statusnet_conversation_id\n if (state.conversationsObject[conversationId]) {\n remove(state.conversationsObject[conversationId], { id: status.id })\n }\n}\n\nconst addNewStatuses = (state, { statuses, showImmediately = false, timeline, user = {}, noIdUpdate = false, userId, pagination = {} }) => {\n // Sanity check\n if (!isArray(statuses)) {\n return false\n }\n\n const allStatuses = state.allStatuses\n const timelineObject = state.timelines[timeline]\n\n // Mismatch between API pagination and our internal minId/maxId tracking systems:\n // pagination.maxId is the oldest of the returned statuses when fetching older,\n // and pagination.minId is the newest when fetching newer. The names come directly\n // from the arguments they're supposed to be passed as for the next fetch.\n const minNew = pagination.maxId || (statuses.length > 0 ? minBy(statuses, 'id').id : 0)\n const maxNew = pagination.minId || (statuses.length > 0 ? maxBy(statuses, 'id').id : 0)\n\n const newer = timeline && (maxNew > timelineObject.maxId || timelineObject.maxId === 0) && statuses.length > 0\n const older = timeline && (minNew < timelineObject.minId || timelineObject.minId === 0) && statuses.length > 0\n\n if (!noIdUpdate && newer) {\n timelineObject.maxId = maxNew\n }\n if (!noIdUpdate && older) {\n timelineObject.minId = minNew\n }\n\n // This makes sure that user timeline won't get data meant for other\n // user. I.e. opening different user profiles makes request which could\n // return data late after user already viewing different user profile\n if ((timeline === 'user' || timeline === 'media') && timelineObject.userId !== userId) {\n return\n }\n\n const addStatus = (data, showImmediately, addToTimeline = true) => {\n const result = addStatusToGlobalStorage(state, data)\n const status = result.item\n\n if (result.new) {\n // We are mentioned in a post\n if (status.type === 'status' && find(status.attentions, { id: user.id })) {\n const mentions = state.timelines.mentions\n\n // Add the mention to the mentions timeline\n if (timelineObject !== mentions) {\n mergeOrAdd(mentions.statuses, mentions.statusesObject, status)\n mentions.newStatusCount += 1\n\n sortTimeline(mentions)\n }\n }\n if (status.visibility === 'direct') {\n const dms = state.timelines.dms\n\n mergeOrAdd(dms.statuses, dms.statusesObject, status)\n dms.newStatusCount += 1\n\n sortTimeline(dms)\n }\n }\n\n // Decide if we should treat the status as new for this timeline.\n let resultForCurrentTimeline\n // Some statuses should only be added to the global status repository.\n if (timeline && addToTimeline) {\n resultForCurrentTimeline = mergeOrAdd(timelineObject.statuses, timelineObject.statusesObject, status)\n }\n\n if (timeline && showImmediately) {\n // Add it directly to the visibleStatuses, don't change\n // newStatusCount\n mergeOrAdd(timelineObject.visibleStatuses, timelineObject.visibleStatusesObject, status)\n } else if (timeline && addToTimeline && resultForCurrentTimeline.new) {\n // Just change newStatuscount\n timelineObject.newStatusCount += 1\n }\n\n if (status.quote) {\n addStatus(status.quote, /* showImmediately = */ false, /* addToTimeline = */ false)\n }\n\n return status\n }\n\n const favoriteStatus = (favorite, counter) => {\n const status = find(allStatuses, { id: favorite.in_reply_to_status_id })\n if (status) {\n // This is our favorite, so the relevant bit.\n if (favorite.user.id === user.id) {\n status.favorited = true\n } else {\n status.fave_num += 1\n }\n }\n return status\n }\n\n const processors = {\n status: (status) => {\n addStatus(status, showImmediately)\n },\n edit: (status) => {\n addStatus(status, showImmediately)\n },\n retweet: (status) => {\n // RetweetedStatuses are never shown immediately\n const retweetedStatus = addStatus(status.retweeted_status, false, false)\n\n let retweet\n // If the retweeted status is already there, don't add the retweet\n // to the timeline.\n if (timeline && find(timelineObject.statuses, (s) => {\n if (s.retweeted_status) {\n return s.id === retweetedStatus.id || s.retweeted_status.id === retweetedStatus.id\n } else {\n return s.id === retweetedStatus.id\n }\n })) {\n // Already have it visible (either as the original or another RT), don't add to timeline, don't show.\n retweet = addStatus(status, false, false)\n } else {\n retweet = addStatus(status, showImmediately)\n }\n\n retweet.retweeted_status = retweetedStatus\n },\n favorite: (favorite) => {\n // Only update if this is a new favorite.\n // Ignore our own favorites because we get info about likes as response to like request\n if (!state.favorites.has(favorite.id)) {\n state.favorites.add(favorite.id)\n favoriteStatus(favorite)\n }\n },\n deletion: (deletion) => {\n const uri = deletion.uri\n const status = find(allStatuses, { uri })\n if (!status) {\n return\n }\n\n removeStatusFromGlobalStorage(state, status)\n\n if (timeline) {\n remove(timelineObject.statuses, { uri })\n remove(timelineObject.visibleStatuses, { uri })\n }\n },\n follow: (follow) => {\n // NOOP, it is known status but we don't do anything about it for now\n },\n default: (unknown) => {\n console.log('unknown status type')\n console.log(unknown)\n }\n }\n\n each(statuses, (status) => {\n const type = status.type\n const processor = processors[type] || processors.default\n processor(status)\n })\n\n // Keep the visible statuses sorted\n if (timeline && !(timeline === 'bookmarks')) {\n sortTimeline(timelineObject)\n }\n}\n\nconst updateNotificationsMinMaxId = (state, notification) => {\n state.notifications.maxId = notification.id > state.notifications.maxId\n ? notification.id\n : state.notifications.maxId\n state.notifications.minId = notification.id < state.notifications.minId\n ? notification.id\n : state.notifications.minId\n}\n\nconst addNewNotifications = (state, { dispatch, notifications, older, visibleNotificationTypes, rootGetters, newNotificationSideEffects }) => {\n each(notifications, (notification) => {\n // If invalid notification, update ids but don't add it to store\n if (!isValidNotification(notification)) {\n console.error('Invalid notification:', notification)\n updateNotificationsMinMaxId(state, notification)\n return\n }\n\n if (isStatusNotification(notification.type)) {\n notification.action = addStatusToGlobalStorage(state, notification.action).item\n notification.status = notification.status && addStatusToGlobalStorage(state, notification.status).item\n }\n\n if (notification.type === 'pleroma:report') {\n dispatch('addReport', notification.report)\n }\n\n if (notification.type === 'pleroma:emoji_reaction') {\n dispatch('fetchEmojiReactionsBy', notification.status.id)\n }\n\n // Only add a new notification if we don't have one for the same action\n // eslint-disable-next-line no-prototype-builtins\n if (!state.notifications.idStore.hasOwnProperty(notification.id)) {\n updateNotificationsMinMaxId(state, notification)\n\n state.notifications.data.push(notification)\n state.notifications.idStore[notification.id] = notification\n\n newNotificationSideEffects(notification)\n } else if (notification.seen) {\n state.notifications.idStore[notification.id].seen = true\n }\n })\n}\n\nconst removeStatus = (state, { timeline, userId }) => {\n const timelineObject = state.timelines[timeline]\n if (userId) {\n remove(timelineObject.statuses, { user: { id: userId } })\n remove(timelineObject.visibleStatuses, { user: { id: userId } })\n timelineObject.minVisibleId = timelineObject.visibleStatuses.length > 0 ? last(timelineObject.visibleStatuses).id : 0\n timelineObject.maxId = timelineObject.statuses.length > 0 ? first(timelineObject.statuses).id : 0\n }\n}\n\nexport const mutations = {\n addNewStatuses,\n addNewNotifications,\n removeStatus,\n showNewStatuses (state, { timeline }) {\n const oldTimeline = (state.timelines[timeline])\n\n oldTimeline.newStatusCount = 0\n oldTimeline.visibleStatuses = slice(oldTimeline.statuses, 0, 50)\n oldTimeline.minVisibleId = last(oldTimeline.visibleStatuses).id\n oldTimeline.minId = oldTimeline.minVisibleId\n oldTimeline.visibleStatusesObject = {}\n each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })\n },\n resetStatuses (state) {\n const emptyState = defaultState()\n Object.entries(emptyState).forEach(([key, value]) => {\n state[key] = value\n })\n },\n clearTimeline (state, { timeline, excludeUserId = false }) {\n const userId = excludeUserId ? state.timelines[timeline].userId : undefined\n state.timelines[timeline] = emptyTl(userId)\n },\n clearNotifications (state) {\n state.notifications = emptyNotifications()\n },\n setFavorited (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n\n if (newStatus.favorited !== value) {\n if (value) {\n newStatus.fave_num++\n } else {\n newStatus.fave_num--\n }\n }\n\n newStatus.favorited = value\n },\n setFavoritedConfirm (state, { status, user }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.favorited = status.favorited\n newStatus.fave_num = status.fave_num\n const index = findIndex(newStatus.favoritedBy, { id: user.id })\n if (index !== -1 && !newStatus.favorited) {\n newStatus.favoritedBy.splice(index, 1)\n } else if (index === -1 && newStatus.favorited) {\n newStatus.favoritedBy.push(user)\n }\n },\n setMutedStatus (state, status) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.thread_muted = status.thread_muted\n\n if (newStatus.thread_muted !== undefined) {\n state.conversationsObject[newStatus.statusnet_conversation_id].forEach(status => { status.thread_muted = newStatus.thread_muted })\n }\n },\n setRetweeted (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n\n if (newStatus.repeated !== value) {\n if (value) {\n newStatus.repeat_num++\n } else {\n newStatus.repeat_num--\n }\n }\n\n newStatus.repeated = value\n },\n setRetweetedConfirm (state, { status, user }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.repeated = status.repeated\n newStatus.repeat_num = status.repeat_num\n const index = findIndex(newStatus.rebloggedBy, { id: user.id })\n if (index !== -1 && !newStatus.repeated) {\n newStatus.rebloggedBy.splice(index, 1)\n } else if (index === -1 && newStatus.repeated) {\n newStatus.rebloggedBy.push(user)\n }\n },\n setBookmarked (state, { status, value }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.bookmarked = value\n },\n setBookmarkedConfirm (state, { status }) {\n const newStatus = state.allStatusesObject[status.id]\n newStatus.bookmarked = status.bookmarked\n },\n setDeleted (state, { status }) {\n const newStatus = state.allStatusesObject[status.id]\n if (newStatus) newStatus.deleted = true\n },\n setManyDeleted (state, condition) {\n Object.values(state.allStatusesObject).forEach(status => {\n if (condition(status)) {\n status.deleted = true\n }\n })\n },\n setLoading (state, { timeline, value }) {\n state.timelines[timeline].loading = value\n },\n setNsfw (state, { id, nsfw }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.nsfw = nsfw\n },\n setNotificationsLoading (state, { value }) {\n state.notifications.loading = value\n },\n setNotificationsSilence (state, { value }) {\n state.notifications.desktopNotificationSilence = value\n },\n markNotificationsAsSeen (state) {\n each(state.notifications.data, (notification) => {\n notification.seen = true\n })\n },\n markSingleNotificationAsSeen (state, { id }) {\n const notification = find(state.notifications.data, n => n.id === id)\n if (notification) notification.seen = true\n },\n dismissNotification (state, { id }) {\n state.notifications.data = state.notifications.data.filter(n => n.id !== id)\n },\n dismissNotifications (state, { finder }) {\n state.notifications.data = state.notifications.data.filter(n => finder)\n },\n updateNotification (state, { id, updater }) {\n const notification = find(state.notifications.data, n => n.id === id)\n notification && updater(notification)\n },\n queueFlush (state, { timeline, id }) {\n state.timelines[timeline].flushMarker = id\n },\n queueFlushAll (state) {\n Object.keys(state.timelines).forEach((timeline) => {\n state.timelines[timeline].flushMarker = state.timelines[timeline].maxId\n })\n },\n addRepeats (state, { id, rebloggedByUsers, currentUser }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.rebloggedBy = rebloggedByUsers.filter(_ => _)\n // repeats stats can be incorrect based on polling condition, let's update them using the most recent data\n newStatus.repeat_num = newStatus.rebloggedBy.length\n newStatus.repeated = !!newStatus.rebloggedBy.find(({ id }) => currentUser.id === id)\n },\n addFavs (state, { id, favoritedByUsers, currentUser }) {\n const newStatus = state.allStatusesObject[id]\n newStatus.favoritedBy = favoritedByUsers.filter(_ => _)\n // favorites stats can be incorrect based on polling condition, let's update them using the most recent data\n newStatus.fave_num = newStatus.favoritedBy.length\n newStatus.favorited = !!newStatus.favoritedBy.find(({ id }) => currentUser.id === id)\n },\n addEmojiReactionsBy (state, { id, emojiReactions, currentUser }) {\n const status = state.allStatusesObject[id]\n status.emoji_reactions = emojiReactions\n },\n addOwnReaction (state, { id, emoji, currentUser }) {\n const status = state.allStatusesObject[id]\n const reactionIndex = findIndex(status.emoji_reactions, { name: emoji })\n const reaction = status.emoji_reactions[reactionIndex] || { name: emoji, count: 0, accounts: [] }\n\n const newReaction = {\n ...reaction,\n count: reaction.count + 1,\n me: true,\n accounts: [\n ...reaction.accounts,\n currentUser\n ]\n }\n\n // Update count of existing reaction if it exists, otherwise append at the end\n if (reactionIndex >= 0) {\n status.emoji_reactions[reactionIndex] = newReaction\n } else {\n status.emoji_reactions = [...status.emoji_reactions, newReaction]\n }\n },\n removeOwnReaction (state, { id, emoji, currentUser }) {\n const status = state.allStatusesObject[id]\n const reactionIndex = findIndex(status.emoji_reactions, { name: emoji })\n if (reactionIndex < 0) return\n\n const reaction = status.emoji_reactions[reactionIndex]\n const accounts = reaction.accounts || []\n\n const newReaction = {\n ...reaction,\n count: reaction.count - 1,\n me: false,\n accounts: accounts.filter(acc => acc.id !== currentUser.id)\n }\n\n if (newReaction.count > 0) {\n status.emoji_reactions[reactionIndex] = newReaction\n } else {\n status.emoji_reactions = status.emoji_reactions.filter(r => r.name !== emoji)\n }\n },\n updateStatusWithPoll (state, { id, poll }) {\n const status = state.allStatusesObject[id]\n status.poll = poll\n },\n setVirtualHeight (state, { statusId, height }) {\n state.allStatusesObject[statusId].virtualHeight = height\n }\n}\n\nconst statuses = {\n state: defaultState(),\n actions: {\n addNewStatuses ({ rootState, commit }, { statuses, showImmediately = false, timeline = false, noIdUpdate = false, userId, pagination }) {\n commit('addNewStatuses', { statuses, showImmediately, timeline, noIdUpdate, user: rootState.users.currentUser, userId, pagination })\n },\n addNewNotifications (store, { notifications, older }) {\n const { commit, dispatch, rootGetters } = store\n\n const newNotificationSideEffects = (notification) => {\n maybeShowNotification(store, notification)\n }\n commit('addNewNotifications', { dispatch, notifications, older, rootGetters, newNotificationSideEffects })\n },\n setNotificationsLoading ({ rootState, commit }, { value }) {\n commit('setNotificationsLoading', { value })\n },\n setNotificationsSilence ({ rootState, commit }, { value }) {\n commit('setNotificationsSilence', { value })\n },\n fetchStatus ({ rootState, dispatch }, id) {\n return rootState.api.backendInteractor.fetchStatus({ id })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n fetchStatusSource ({ rootState, dispatch }, status) {\n return apiService.fetchStatusSource({ id: status.id, credentials: rootState.users.currentUser.credentials })\n },\n fetchStatusHistory ({ rootState, dispatch }, status) {\n return apiService.fetchStatusHistory({ status })\n },\n deleteStatus ({ rootState, commit, dispatch }, status) {\n apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })\n .then((_) => {\n commit('setDeleted', { status })\n })\n .catch((e) => {\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'status.delete_error',\n messageArgs: [e.message],\n timeout: 5000\n })\n })\n },\n deleteStatusById ({ rootState, commit }, id) {\n const status = rootState.statuses.allStatusesObject[id]\n commit('setDeleted', { status })\n },\n markStatusesAsDeleted ({ commit }, condition) {\n commit('setManyDeleted', condition)\n },\n favorite ({ rootState, commit }, status) {\n // Optimistic favoriting...\n commit('setFavorited', { status, value: true })\n rootState.api.backendInteractor.favorite({ id: status.id })\n .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser }))\n },\n unfavorite ({ rootState, commit }, status) {\n // Optimistic unfavoriting...\n commit('setFavorited', { status, value: false })\n rootState.api.backendInteractor.unfavorite({ id: status.id })\n .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser }))\n },\n fetchPinnedStatuses ({ rootState, dispatch }, userId) {\n rootState.api.backendInteractor.fetchPinnedStatuses({ id: userId })\n .then(statuses => dispatch('addNewStatuses', { statuses, timeline: 'user', userId, showImmediately: true, noIdUpdate: true }))\n },\n pinStatus ({ rootState, dispatch }, statusId) {\n return rootState.api.backendInteractor.pinOwnStatus({ id: statusId })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n unpinStatus ({ rootState, dispatch }, statusId) {\n rootState.api.backendInteractor.unpinOwnStatus({ id: statusId })\n .then((status) => dispatch('addNewStatuses', { statuses: [status] }))\n },\n muteConversation ({ rootState, commit }, statusId) {\n return rootState.api.backendInteractor.muteConversation({ id: statusId })\n .then((status) => commit('setMutedStatus', status))\n },\n unmuteConversation ({ rootState, commit }, statusId) {\n return rootState.api.backendInteractor.unmuteConversation({ id: statusId })\n .then((status) => commit('setMutedStatus', status))\n },\n retweet ({ rootState, commit }, status) {\n // Optimistic retweeting...\n commit('setRetweeted', { status, value: true })\n rootState.api.backendInteractor.retweet({ id: status.id })\n .then(status => commit('setRetweetedConfirm', { status: status.retweeted_status, user: rootState.users.currentUser }))\n },\n unretweet ({ rootState, commit }, status) {\n // Optimistic unretweeting...\n commit('setRetweeted', { status, value: false })\n rootState.api.backendInteractor.unretweet({ id: status.id })\n .then(status => commit('setRetweetedConfirm', { status, user: rootState.users.currentUser }))\n },\n bookmark ({ rootState, commit }, status) {\n commit('setBookmarked', { status, value: true })\n rootState.api.backendInteractor.bookmarkStatus({ id: status.id })\n .then(status => {\n commit('setBookmarkedConfirm', { status })\n })\n },\n unbookmark ({ rootState, commit }, status) {\n commit('setBookmarked', { status, value: false })\n rootState.api.backendInteractor.unbookmarkStatus({ id: status.id })\n .then(status => {\n commit('setBookmarkedConfirm', { status })\n })\n },\n queueFlush ({ rootState, commit }, { timeline, id }) {\n commit('queueFlush', { timeline, id })\n },\n queueFlushAll ({ rootState, commit }) {\n commit('queueFlushAll')\n },\n markNotificationsAsSeen ({ rootState, commit }) {\n commit('markNotificationsAsSeen')\n apiService.markNotificationsAsSeen({\n id: rootState.statuses.notifications.maxId,\n credentials: rootState.users.currentUser.credentials\n })\n },\n markSingleNotificationAsSeen ({ rootState, commit }, { id }) {\n commit('markSingleNotificationAsSeen', { id })\n apiService.markNotificationsAsSeen({\n single: true,\n id,\n credentials: rootState.users.currentUser.credentials\n })\n },\n dismissNotificationLocal ({ rootState, commit }, { id }) {\n commit('dismissNotification', { id })\n },\n dismissNotification ({ rootState, commit }, { id }) {\n commit('dismissNotification', { id })\n rootState.api.backendInteractor.dismissNotification({ id })\n },\n updateNotification ({ rootState, commit }, { id, updater }) {\n commit('updateNotification', { id, updater })\n },\n fetchFavsAndRepeats ({ rootState, commit }, id) {\n Promise.all([\n rootState.api.backendInteractor.fetchFavoritedByUsers({ id }),\n rootState.api.backendInteractor.fetchRebloggedByUsers({ id })\n ]).then(([favoritedByUsers, rebloggedByUsers]) => {\n commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser })\n commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser })\n })\n },\n reactWithEmoji ({ rootState, dispatch, commit }, { id, emoji }) {\n const currentUser = rootState.users.currentUser\n if (!currentUser) return\n\n commit('addOwnReaction', { id, emoji, currentUser })\n rootState.api.backendInteractor.reactWithEmoji({ id, emoji }).then(\n ok => {\n dispatch('fetchEmojiReactionsBy', id)\n }\n )\n },\n unreactWithEmoji ({ rootState, dispatch, commit }, { id, emoji }) {\n const currentUser = rootState.users.currentUser\n if (!currentUser) return\n\n commit('removeOwnReaction', { id, emoji, currentUser })\n rootState.api.backendInteractor.unreactWithEmoji({ id, emoji }).then(\n ok => {\n dispatch('fetchEmojiReactionsBy', id)\n }\n )\n },\n fetchEmojiReactionsBy ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.fetchEmojiReactions({ id }).then(\n emojiReactions => {\n commit('addEmojiReactionsBy', { id, emojiReactions, currentUser: rootState.users.currentUser })\n }\n )\n },\n fetchFavs ({ rootState, commit }, id) {\n rootState.api.backendInteractor.fetchFavoritedByUsers({ id })\n .then(favoritedByUsers => commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser }))\n },\n fetchRepeats ({ rootState, commit }, id) {\n rootState.api.backendInteractor.fetchRebloggedByUsers({ id })\n .then(rebloggedByUsers => commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser }))\n },\n search (store, { q, resolve, limit, offset, following, type }) {\n return store.rootState.api.backendInteractor.search2({ q, resolve, limit, offset, following, type })\n .then((data) => {\n store.commit('addNewUsers', data.accounts)\n store.commit('addNewUsers', data.statuses.map(s => s.user).filter(u => u))\n store.commit('addNewStatuses', { statuses: data.statuses })\n return data\n })\n },\n setVirtualHeight ({ commit }, { statusId, height }) {\n commit('setVirtualHeight', { statusId, height })\n }\n },\n mutations\n}\n\nexport default statuses\n","import { remove, find } from 'lodash'\n\nexport const defaultState = {\n allLists: [],\n allListsObject: {}\n}\n\nexport const mutations = {\n setLists (state, value) {\n state.allLists = value\n },\n setList (state, { listId, title }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].title = title\n\n const entry = find(state.allLists, { id: listId })\n if (!entry) {\n state.allLists.push({ id: listId, title })\n } else {\n entry.title = title\n }\n },\n setListAccounts (state, { listId, accountIds }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].accountIds = accountIds\n },\n addListAccount (state, { listId, accountId }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n state.allListsObject[listId].accountIds.push(accountId)\n },\n removeListAccount (state, { listId, accountId }) {\n if (!state.allListsObject[listId]) {\n state.allListsObject[listId] = { accountIds: [] }\n }\n const { accountIds } = state.allListsObject[listId]\n const set = new Set(accountIds)\n set.delete(accountId)\n state.allListsObject[listId].accountIds = [...set]\n },\n deleteList (state, { listId }) {\n delete state.allListsObject[listId]\n remove(state.allLists, list => list.id === listId)\n }\n}\n\nconst actions = {\n setLists ({ commit }, value) {\n commit('setLists', value)\n },\n createList ({ rootState, commit }, { title }) {\n return rootState.api.backendInteractor.createList({ title })\n .then((list) => {\n commit('setList', { listId: list.id, title })\n return list\n })\n },\n fetchList ({ rootState, commit }, { listId }) {\n return rootState.api.backendInteractor.getList({ listId })\n .then((list) => commit('setList', { listId: list.id, title: list.title }))\n },\n fetchListAccounts ({ rootState, commit }, { listId }) {\n return rootState.api.backendInteractor.getListAccounts({ listId })\n .then((accountIds) => commit('setListAccounts', { listId, accountIds }))\n },\n setList ({ rootState, commit }, { listId, title }) {\n rootState.api.backendInteractor.updateList({ listId, title })\n commit('setList', { listId, title })\n },\n setListAccounts ({ rootState, commit }, { listId, accountIds }) {\n const saved = rootState.lists.allListsObject[listId].accountIds || []\n const added = accountIds.filter(id => !saved.includes(id))\n const removed = saved.filter(id => !accountIds.includes(id))\n commit('setListAccounts', { listId, accountIds })\n if (added.length > 0) {\n rootState.api.backendInteractor.addAccountsToList({ listId, accountIds: added })\n }\n if (removed.length > 0) {\n rootState.api.backendInteractor.removeAccountsFromList({ listId, accountIds: removed })\n }\n },\n addListAccount ({ rootState, commit }, { listId, accountId }) {\n return rootState\n .api\n .backendInteractor\n .addAccountsToList({ listId, accountIds: [accountId] })\n .then((result) => {\n commit('addListAccount', { listId, accountId })\n return result\n })\n },\n removeListAccount ({ rootState, commit }, { listId, accountId }) {\n return rootState\n .api\n .backendInteractor\n .removeAccountsFromList({ listId, accountIds: [accountId] })\n .then((result) => {\n commit('removeListAccount', { listId, accountId })\n return result\n })\n },\n deleteList ({ rootState, commit }, { listId }) {\n rootState.api.backendInteractor.deleteList({ listId })\n commit('deleteList', { listId })\n }\n}\n\nexport const getters = {\n findListTitle: state => id => {\n if (!state.allListsObject[id]) return\n return state.allListsObject[id].title\n },\n findListAccounts: state => id => {\n return [...state.allListsObject[id].accountIds]\n }\n}\n\nconst lists = {\n state: defaultState,\n mutations,\n actions,\n getters\n}\n\nexport default lists\n","import { camelCase } from 'lodash'\n\nimport apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst update = ({ store, statuses, timeline, showImmediately, userId, listId, pagination }) => {\n const ccTimeline = camelCase(timeline)\n\n store.dispatch('addNewStatuses', {\n timeline: ccTimeline,\n userId,\n listId,\n statuses,\n showImmediately,\n pagination\n })\n}\n\nconst fetchAndUpdate = ({\n store,\n credentials,\n timeline = 'friends',\n older = false,\n showImmediately = false,\n userId = false,\n listId = false,\n tag = false,\n until,\n since\n}) => {\n const args = { timeline, credentials }\n const rootState = store.rootState || store.state\n const { getters } = store\n const timelineData = rootState.statuses.timelines[camelCase(timeline)]\n const { hideMutedPosts, replyVisibility } = getters.mergedConfig\n const loggedIn = !!rootState.users.currentUser\n\n if (older) {\n args.until = until || timelineData.minId\n } else {\n if (since === undefined) {\n args.since = timelineData.maxId\n } else if (since !== null) {\n args.since = since\n }\n }\n\n args.userId = userId\n args.listId = listId\n args.tag = tag\n args.withMuted = !hideMutedPosts\n if (loggedIn && ['friends', 'public', 'publicAndExternal'].includes(timeline)) {\n args.replyVisibility = replyVisibility\n }\n\n const numStatusesBeforeFetch = timelineData.statuses.length\n\n return apiService.fetchTimeline(args)\n .then(response => {\n if (response.errors) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n\n const { data: statuses, pagination } = response\n if (!older && statuses.length >= 20 && !timelineData.loading && numStatusesBeforeFetch > 0) {\n store.dispatch('queueFlush', { timeline, id: timelineData.maxId })\n }\n update({ store, statuses, timeline, showImmediately, userId, listId, pagination })\n return { statuses, pagination }\n })\n .catch((error) => {\n store.dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'timeline.error',\n messageArgs: [error.message],\n timeout: 5000\n })\n })\n}\n\nconst startFetching = ({ timeline = 'friends', credentials, store, userId = false, listId = false, tag = false }) => {\n const rootState = store.rootState || store.state\n const timelineData = rootState.statuses.timelines[camelCase(timeline)]\n const showImmediately = timelineData.visibleStatuses.length === 0\n timelineData.userId = userId\n timelineData.listId = listId\n fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, listId, tag })\n const boundFetchAndUpdate = () =>\n fetchAndUpdate({ timeline, credentials, store, userId, listId, tag })\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\nconst timelineFetcher = {\n fetchAndUpdate,\n startFetching\n}\n\nexport default timelineFetcher\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst fetchAndUpdate = ({ store, credentials }) => {\n return apiService.fetchFollowRequests({ credentials })\n .then((requests) => {\n store.commit('setFollowRequests', requests)\n store.commit('addNewUsers', requests)\n }, () => {})\n .catch(() => {})\n}\n\nconst startFetching = ({ credentials, store }) => {\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\n\nconst followRequestFetcher = {\n startFetching\n}\n\nexport default followRequestFetcher\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\nconst fetchAndUpdate = ({ store, credentials }) => {\n return apiService.fetchLists({ credentials })\n .then(lists => {\n store.commit('setLists', lists)\n }, () => {})\n .catch(() => {})\n}\n\nconst startFetching = ({ credentials, store }) => {\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 240000)\n}\n\nconst listsFetcher = {\n startFetching\n}\n\nexport default listsFetcher\n","import apiService, { getMastodonSocketURI, ProcessedWS } from '../api/api.service.js'\nimport timelineFetcher from '../timeline_fetcher/timeline_fetcher.service.js'\nimport notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js'\nimport followRequestFetcher from '../../services/follow_request_fetcher/follow_request_fetcher.service'\nimport listsFetcher from '../../services/lists_fetcher/lists_fetcher.service.js'\n\nconst backendInteractorService = credentials => ({\n startFetchingTimeline ({ timeline, store, userId = false, listId = false, tag }) {\n return timelineFetcher.startFetching({ timeline, store, credentials, userId, listId, tag })\n },\n\n fetchTimeline (args) {\n return timelineFetcher.fetchAndUpdate({ ...args, credentials })\n },\n\n startFetchingNotifications ({ store }) {\n return notificationsFetcher.startFetching({ store, credentials })\n },\n\n fetchNotifications (args) {\n return notificationsFetcher.fetchAndUpdate({ ...args, credentials })\n },\n\n startFetchingFollowRequests ({ store }) {\n return followRequestFetcher.startFetching({ store, credentials })\n },\n\n startFetchingLists ({ store }) {\n return listsFetcher.startFetching({ store, credentials })\n },\n\n startUserSocket ({ store }) {\n const serv = store.rootState.instance.server.replace('http', 'ws')\n const url = serv + getMastodonSocketURI({ credentials, stream: 'user' })\n return ProcessedWS({ url, id: 'User' })\n },\n\n ...Object.entries(apiService).reduce((acc, [key, func]) => {\n return {\n ...acc,\n [key]: (args) => func({ credentials, ...args })\n }\n }, {}),\n\n verifyCredentials: apiService.verifyCredentials\n})\n\nexport default backendInteractorService\n","\nexport const windowWidth = () =>\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth\n\nexport const windowHeight = () =>\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight\n","import { reduce } from 'lodash'\n\nconst REDIRECT_URI = `${window.location.origin}/oauth-callback`\n\nexport const getOrCreateApp = ({ clientId, clientSecret, instance, commit }) => {\n if (clientId && clientSecret) {\n return Promise.resolve({ clientId, clientSecret })\n }\n\n const url = `${instance}/api/v1/apps`\n const form = new window.FormData()\n\n form.append('client_name', `PleromaFE_${window.___pleromafe_commit_hash}_${(new Date()).toISOString()}`)\n form.append('redirect_uris', REDIRECT_URI)\n form.append('scopes', 'read write follow push admin')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n })\n .then((data) => data.json())\n .then((app) => ({ clientId: app.client_id, clientSecret: app.client_secret }))\n .then((app) => commit('setClientData', app) || app)\n}\n\nconst login = ({ instance, clientId }) => {\n const data = {\n response_type: 'code',\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n scope: 'read write follow push admin'\n }\n\n const dataString = reduce(data, (acc, v, k) => {\n const encoded = `${k}=${encodeURIComponent(v)}`\n if (!acc) {\n return encoded\n } else {\n return `${acc}&${encoded}`\n }\n }, false)\n\n // Do the redirect...\n const url = `${instance}/oauth/authorize?${dataString}`\n\n window.location.href = url\n}\n\nconst getTokenWithCredentials = ({ clientId, clientSecret, instance, username, password }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'password')\n form.append('username', username)\n form.append('password', password)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst getToken = ({ clientId, clientSecret, instance, code }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'authorization_code')\n form.append('code', code)\n form.append('redirect_uri', `${window.location.origin}/oauth-callback`)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n })\n .then((data) => data.json())\n}\n\nexport const getClientToken = ({ clientId, clientSecret, instance }) => {\n const url = `${instance}/oauth/token`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('grant_type', 'client_credentials')\n form.append('redirect_uri', `${window.location.origin}/oauth-callback`)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\nconst verifyOTPCode = ({ app, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', app.client_id)\n form.append('client_secret', app.client_secret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'totp')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst verifyRecoveryCode = ({ app, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', app.client_id)\n form.append('client_secret', app.client_secret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'recovery')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst revokeToken = ({ app, instance, token }) => {\n const url = `${instance}/oauth/revoke`\n const form = new window.FormData()\n\n form.append('client_id', app.clientId)\n form.append('client_secret', app.clientSecret)\n form.append('token', token)\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst oauth = {\n login,\n getToken,\n getTokenWithCredentials,\n getOrCreateApp,\n verifyOTPCode,\n verifyRecoveryCode,\n revokeToken\n}\n\nexport default oauth\n","import runtime from 'serviceworker-webpack5-plugin/lib/runtime'\n\nfunction urlBase64ToUint8Array (base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4)\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n\n const rawData = window.atob(base64)\n return Uint8Array.from([...rawData].map((char) => char.charCodeAt(0)))\n}\n\nfunction isPushSupported () {\n return 'serviceWorker' in navigator && 'PushManager' in window\n}\n\nfunction getOrCreateServiceWorker () {\n return runtime.register()\n .catch((err) => console.error('Unable to get or create a service worker.', err))\n}\n\nfunction subscribePush (registration, isEnabled, vapidPublicKey) {\n if (!isEnabled) return Promise.reject(new Error('Web Push is disabled in config'))\n if (!vapidPublicKey) return Promise.reject(new Error('VAPID public key is not found'))\n\n const subscribeOptions = {\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)\n }\n return registration.pushManager.subscribe(subscribeOptions)\n}\n\nfunction unsubscribePush (registration) {\n return registration.pushManager.getSubscription()\n .then((subscribtion) => {\n if (subscribtion === null) { return }\n return subscribtion.unsubscribe()\n })\n}\n\nfunction deleteSubscriptionFromBackEnd (token) {\n return window.fetch('/api/v1/push/subscription/', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`\n }\n }).then((response) => {\n if (!response.ok) throw new Error('Bad status code from server.')\n return response\n })\n}\n\nfunction sendSubscriptionToBackEnd (subscription, token, notificationVisibility) {\n return window.fetch('/api/v1/push/subscription/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify({\n subscription,\n data: {\n alerts: {\n follow: notificationVisibility.follows,\n favourite: notificationVisibility.likes,\n mention: notificationVisibility.mentions,\n reblog: notificationVisibility.repeats,\n move: notificationVisibility.moves\n }\n }\n })\n }).then((response) => {\n if (!response.ok) throw new Error('Bad status code from server.')\n return response.json()\n }).then((responseData) => {\n if (!responseData.id) throw new Error('Bad response from server.')\n return responseData\n })\n}\n\nexport function registerPushNotifications (isEnabled, vapidPublicKey, token, notificationVisibility) {\n if (isPushSupported()) {\n getOrCreateServiceWorker()\n .then((registration) => subscribePush(registration, isEnabled, vapidPublicKey))\n .then((subscription) => sendSubscriptionToBackEnd(subscription, token, notificationVisibility))\n .catch((e) => console.warn(`Failed to setup Web Push Notifications: ${e.message}`))\n }\n}\n\nexport function unregisterPushNotifications (token) {\n if (isPushSupported()) {\n Promise.all([\n deleteSubscriptionFromBackEnd(token),\n getOrCreateServiceWorker()\n .then((registration) => {\n return unsubscribePush(registration).then((result) => [registration, result])\n })\n .then(([registration, unsubResult]) => {\n if (!unsubResult) {\n console.warn('Push subscription cancellation wasn\\'t successful, killing SW anyway...')\n }\n return registration.unregister().then((result) => {\n if (!result) {\n console.warn('Failed to kill SW')\n }\n })\n })\n ]).catch((e) => console.warn(`Failed to disable Web Push Notifications: ${e.message}`))\n }\n}\n","import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { windowWidth, windowHeight } from '../services/window_utils/window_utils'\nimport oauthApi from '../services/new_api/oauth.js'\nimport { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'\nimport { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js'\n\n// TODO: Unify with mergeOrAdd in statuses.js\nexport const mergeOrAdd = (arr, obj, item) => {\n if (!item) { return false }\n const oldItem = obj[item.id]\n if (oldItem) {\n // We already have this, so only merge the new info.\n mergeWith(oldItem, item, mergeArrayLength)\n return { item: oldItem, new: false }\n } else {\n // This is a new item, prepare it\n arr.push(item)\n obj[item.id] = item\n return { item, new: true }\n }\n}\n\nconst mergeArrayLength = (oldValue, newValue) => {\n if (isArray(oldValue) && isArray(newValue)) {\n oldValue.length = newValue.length\n return mergeWith(oldValue, newValue, mergeArrayLength)\n }\n}\n\nconst getNotificationPermission = () => {\n const Notification = window.Notification\n\n if (!Notification) return Promise.resolve(null)\n if (Notification.permission === 'default') return Notification.requestPermission()\n return Promise.resolve(Notification.permission)\n}\n\nconst blockUser = (store, id) => {\n return store.rootState.api.backendInteractor.blockUser({ id })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n store.commit('addBlockId', id)\n store.commit('removeStatus', { timeline: 'friends', userId: id })\n store.commit('removeStatus', { timeline: 'public', userId: id })\n store.commit('removeStatus', { timeline: 'publicAndExternal', userId: id })\n })\n}\n\nconst unblockUser = (store, id) => {\n return store.rootState.api.backendInteractor.unblockUser({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst removeUserFromFollowers = (store, id) => {\n return store.rootState.api.backendInteractor.removeUserFromFollowers({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst editUserNote = (store, { id, comment }) => {\n return store.rootState.api.backendInteractor.editUserNote({ id, comment })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst muteUser = (store, args) => {\n const id = typeof args === 'object' ? args.id : args\n const expiresIn = typeof args === 'object' ? args.expiresIn : 0\n\n const predictedRelationship = store.state.relationships[id] || { id }\n predictedRelationship.muting = true\n store.commit('updateUserRelationship', [predictedRelationship])\n store.commit('addMuteId', id)\n\n return store.rootState.api.backendInteractor.muteUser({ id, expiresIn })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n store.commit('addMuteId', id)\n })\n}\n\nconst unmuteUser = (store, id) => {\n const predictedRelationship = store.state.relationships[id] || { id }\n predictedRelationship.muting = false\n store.commit('updateUserRelationship', [predictedRelationship])\n\n return store.rootState.api.backendInteractor.unmuteUser({ id })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst hideReblogs = (store, userId) => {\n return store.rootState.api.backendInteractor.followUser({ id: userId, reblogs: false })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n })\n}\n\nconst showReblogs = (store, userId) => {\n return store.rootState.api.backendInteractor.followUser({ id: userId, reblogs: true })\n .then((relationship) => store.commit('updateUserRelationship', [relationship]))\n}\n\nconst muteDomain = (store, domain) => {\n return store.rootState.api.backendInteractor.muteDomain({ domain })\n .then(() => store.commit('addDomainMute', domain))\n}\n\nconst unmuteDomain = (store, domain) => {\n return store.rootState.api.backendInteractor.unmuteDomain({ domain })\n .then(() => store.commit('removeDomainMute', domain))\n}\n\nexport const mutations = {\n tagUser (state, { user: { id }, tag }) {\n const user = state.usersObject[id]\n const tags = user.tags || []\n const newTags = tags.concat([tag])\n user.tags = newTags\n },\n untagUser (state, { user: { id }, tag }) {\n const user = state.usersObject[id]\n const tags = user.tags || []\n const newTags = tags.filter(t => t !== tag)\n user.tags = newTags\n },\n updateRight (state, { user: { id }, right, value }) {\n const user = state.usersObject[id]\n const newRights = user.rights\n newRights[right] = value\n user.rights = newRights\n },\n updateActivationStatus (state, { user: { id }, deactivated }) {\n const user = state.usersObject[id]\n user.deactivated = deactivated\n },\n setCurrentUser (state, user) {\n state.lastLoginName = user.screen_name\n state.currentUser = mergeWith(state.currentUser || {}, user, mergeArrayLength)\n },\n clearCurrentUser (state) {\n state.currentUser = false\n state.lastLoginName = false\n },\n beginLogin (state) {\n state.loggingIn = true\n },\n endLogin (state) {\n state.loggingIn = false\n },\n saveFriendIds (state, { id, friendIds }) {\n const user = state.usersObject[id]\n user.friendIds = uniq(concat(user.friendIds || [], friendIds))\n },\n saveFollowerIds (state, { id, followerIds }) {\n const user = state.usersObject[id]\n user.followerIds = uniq(concat(user.followerIds || [], followerIds))\n },\n // Because frontend doesn't have a reason to keep these stuff in memory\n // outside of viewing someones user profile.\n clearFriends (state, userId) {\n const user = state.usersObject[userId]\n if (user) {\n user.friendIds = []\n }\n },\n clearFollowers (state, userId) {\n const user = state.usersObject[userId]\n if (user) {\n user.followerIds = []\n }\n },\n addNewUsers (state, users) {\n each(users, (user) => {\n if (user.relationship) {\n state.relationships[user.relationship.id] = user.relationship\n }\n const res = mergeOrAdd(state.users, state.usersObject, user)\n const item = res.item\n if (res.new && item.screen_name && !item.screen_name.includes('@')) {\n state.usersByNameObject[item.screen_name.toLowerCase()] = item\n }\n })\n },\n updateUserRelationship (state, relationships) {\n relationships.forEach((relationship) => {\n state.relationships[relationship.id] = relationship\n })\n },\n updateUserInLists (state, { id, inLists }) {\n state.usersObject[id].inLists = inLists\n },\n saveBlockIds (state, blockIds) {\n state.currentUser.blockIds = blockIds\n },\n addBlockId (state, blockId) {\n if (state.currentUser.blockIds.indexOf(blockId) === -1) {\n state.currentUser.blockIds.push(blockId)\n }\n },\n setBlockIdsMaxId (state, blockIdsMaxId) {\n state.currentUser.blockIdsMaxId = blockIdsMaxId\n },\n saveMuteIds (state, muteIds) {\n state.currentUser.muteIds = muteIds\n },\n setMuteIdsMaxId (state, muteIdsMaxId) {\n state.currentUser.muteIdsMaxId = muteIdsMaxId\n },\n addMuteId (state, muteId) {\n if (state.currentUser.muteIds.indexOf(muteId) === -1) {\n state.currentUser.muteIds.push(muteId)\n }\n },\n saveDomainMutes (state, domainMutes) {\n state.currentUser.domainMutes = domainMutes\n },\n addDomainMute (state, domain) {\n if (state.currentUser.domainMutes.indexOf(domain) === -1) {\n state.currentUser.domainMutes.push(domain)\n }\n },\n removeDomainMute (state, domain) {\n const index = state.currentUser.domainMutes.indexOf(domain)\n if (index !== -1) {\n state.currentUser.domainMutes.splice(index, 1)\n }\n },\n setPinnedToUser (state, status) {\n const user = state.usersObject[status.user.id]\n user.pinnedStatusIds = user.pinnedStatusIds || []\n const index = user.pinnedStatusIds.indexOf(status.id)\n\n if (status.pinned && index === -1) {\n user.pinnedStatusIds.push(status.id)\n } else if (!status.pinned && index !== -1) {\n user.pinnedStatusIds.splice(index, 1)\n }\n },\n setUserForStatus (state, status) {\n status.user = state.usersObject[status.user.id]\n },\n setUserForNotification (state, notification) {\n if (notification.type !== 'follow') {\n notification.action.user = state.usersObject[notification.action.user.id]\n }\n notification.from_profile = state.usersObject[notification.from_profile.id]\n },\n setColor (state, { user: { id }, highlighted }) {\n const user = state.usersObject[id]\n user.highlight = highlighted\n },\n signUpPending (state) {\n state.signUpPending = true\n state.signUpErrors = []\n },\n signUpSuccess (state) {\n state.signUpPending = false\n },\n signUpFailure (state, errors) {\n state.signUpPending = false\n state.signUpErrors = errors\n }\n}\n\nexport const getters = {\n findUser: state => query => {\n return state.usersObject[query]\n },\n findUserByName: state => query => {\n return state.usersByNameObject[query.toLowerCase()]\n },\n findUserByUrl: state => query => {\n return state.users\n .find(u => u.statusnet_profile_url &&\n u.statusnet_profile_url.toLowerCase() === query.toLowerCase())\n },\n relationship: state => id => {\n const rel = id && state.relationships[id]\n return rel || { id, loading: true }\n }\n}\n\nexport const defaultState = {\n loggingIn: false,\n lastLoginName: false,\n currentUser: false,\n users: [],\n usersObject: {},\n usersByNameObject: {},\n signUpPending: false,\n signUpErrors: [],\n relationships: {}\n}\n\nconst users = {\n state: defaultState,\n mutations,\n getters,\n actions: {\n fetchUserIfMissing (store, id) {\n if (!store.getters.findUser(id)) {\n store.dispatch('fetchUser', id)\n }\n },\n fetchUser (store, id) {\n return store.rootState.api.backendInteractor.fetchUser({ id })\n .then((user) => {\n store.commit('addNewUsers', [user])\n return user\n })\n },\n fetchUserByName (store, name) {\n return store.rootState.api.backendInteractor.fetchUserByName({ name })\n .then((user) => {\n store.commit('addNewUsers', [user])\n return user\n })\n },\n fetchUserRelationship (store, id) {\n if (store.state.currentUser) {\n store.rootState.api.backendInteractor.fetchUserRelationship({ id })\n .then((relationships) => store.commit('updateUserRelationship', relationships))\n }\n },\n fetchUserInLists (store, id) {\n if (store.state.currentUser) {\n store.rootState.api.backendInteractor.fetchUserInLists({ id })\n .then((inLists) => store.commit('updateUserInLists', { id, inLists }))\n }\n },\n fetchBlocks (store, args) {\n const { reset } = args || {}\n\n const maxId = store.state.currentUser.blockIdsMaxId\n return store.rootState.api.backendInteractor.fetchBlocks({ maxId })\n .then((blocks) => {\n if (reset) {\n store.commit('saveBlockIds', map(blocks, 'id'))\n } else {\n map(blocks, 'id').map(id => store.commit('addBlockId', id))\n }\n if (blocks.length) {\n store.commit('setBlockIdsMaxId', last(blocks).id)\n }\n store.commit('addNewUsers', blocks)\n return blocks\n })\n },\n blockUser (store, id) {\n return blockUser(store, id)\n },\n unblockUser (store, id) {\n return unblockUser(store, id)\n },\n removeUserFromFollowers (store, id) {\n return removeUserFromFollowers(store, id)\n },\n blockUsers (store, ids = []) {\n return Promise.all(ids.map(id => blockUser(store, id)))\n },\n unblockUsers (store, ids = []) {\n return Promise.all(ids.map(id => unblockUser(store, id)))\n },\n editUserNote (store, args) {\n return editUserNote(store, args)\n },\n fetchMutes (store, args) {\n const { reset } = args || {}\n\n const maxId = store.state.currentUser.muteIdsMaxId\n return store.rootState.api.backendInteractor.fetchMutes({ maxId })\n .then((mutes) => {\n if (reset) {\n store.commit('saveMuteIds', map(mutes, 'id'))\n } else {\n map(mutes, 'id').map(id => store.commit('addMuteId', id))\n }\n if (mutes.length) {\n store.commit('setMuteIdsMaxId', last(mutes).id)\n }\n store.commit('addNewUsers', mutes)\n return mutes\n })\n },\n muteUser (store, id) {\n return muteUser(store, id)\n },\n unmuteUser (store, id) {\n return unmuteUser(store, id)\n },\n hideReblogs (store, id) {\n return hideReblogs(store, id)\n },\n showReblogs (store, id) {\n return showReblogs(store, id)\n },\n muteUsers (store, ids = []) {\n return Promise.all(ids.map(id => muteUser(store, id)))\n },\n unmuteUsers (store, ids = []) {\n return Promise.all(ids.map(id => unmuteUser(store, id)))\n },\n fetchDomainMutes (store) {\n return store.rootState.api.backendInteractor.fetchDomainMutes()\n .then((domainMutes) => {\n store.commit('saveDomainMutes', domainMutes)\n return domainMutes\n })\n },\n muteDomain (store, domain) {\n return muteDomain(store, domain)\n },\n unmuteDomain (store, domain) {\n return unmuteDomain(store, domain)\n },\n muteDomains (store, domains = []) {\n return Promise.all(domains.map(domain => muteDomain(store, domain)))\n },\n unmuteDomains (store, domain = []) {\n return Promise.all(domain.map(domain => unmuteDomain(store, domain)))\n },\n fetchFriends ({ rootState, commit }, id) {\n const user = rootState.users.usersObject[id]\n const maxId = last(user.friendIds)\n return rootState.api.backendInteractor.fetchFriends({ id, maxId })\n .then((friends) => {\n commit('addNewUsers', friends)\n commit('saveFriendIds', { id, friendIds: map(friends, 'id') })\n return friends\n })\n },\n fetchFollowers ({ rootState, commit }, id) {\n const user = rootState.users.usersObject[id]\n const maxId = last(user.followerIds)\n return rootState.api.backendInteractor.fetchFollowers({ id, maxId })\n .then((followers) => {\n commit('addNewUsers', followers)\n commit('saveFollowerIds', { id, followerIds: map(followers, 'id') })\n return followers\n })\n },\n clearFriends ({ commit }, userId) {\n commit('clearFriends', userId)\n },\n clearFollowers ({ commit }, userId) {\n commit('clearFollowers', userId)\n },\n subscribeUser ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.subscribeUser({ id })\n .then((relationship) => commit('updateUserRelationship', [relationship]))\n },\n unsubscribeUser ({ rootState, commit }, id) {\n return rootState.api.backendInteractor.unsubscribeUser({ id })\n .then((relationship) => commit('updateUserRelationship', [relationship]))\n },\n toggleActivationStatus ({ rootState, commit }, { user }) {\n const api = user.deactivated ? rootState.api.backendInteractor.activateUser : rootState.api.backendInteractor.deactivateUser\n api({ user })\n .then((user) => { const deactivated = !user.is_active; commit('updateActivationStatus', { user, deactivated }) })\n },\n registerPushNotifications (store) {\n const token = store.state.currentUser.credentials\n const vapidPublicKey = store.rootState.instance.vapidPublicKey\n const isEnabled = store.rootState.config.webPushNotifications\n const notificationVisibility = store.rootState.config.notificationVisibility\n\n registerPushNotifications(isEnabled, vapidPublicKey, token, notificationVisibility)\n },\n unregisterPushNotifications (store) {\n const token = store.state.currentUser.credentials\n\n unregisterPushNotifications(token)\n },\n addNewUsers ({ commit }, users) {\n commit('addNewUsers', users)\n },\n addNewStatuses (store, { statuses }) {\n const users = map(statuses, 'user')\n const retweetedUsers = compact(map(statuses, 'retweeted_status.user'))\n store.commit('addNewUsers', users)\n store.commit('addNewUsers', retweetedUsers)\n\n each(statuses, (status) => {\n // Reconnect users to statuses\n store.commit('setUserForStatus', status)\n // Set pinned statuses to user\n store.commit('setPinnedToUser', status)\n })\n each(compact(map(statuses, 'retweeted_status')), (status) => {\n // Reconnect users to retweets\n store.commit('setUserForStatus', status)\n // Set pinned retweets to user\n store.commit('setPinnedToUser', status)\n })\n },\n addNewNotifications (store, { notifications }) {\n const users = map(notifications, 'from_profile')\n const targetUsers = map(notifications, 'target').filter(_ => _)\n const notificationIds = notifications.map(_ => _.id)\n store.commit('addNewUsers', users)\n store.commit('addNewUsers', targetUsers)\n\n const notificationsObject = store.rootState.statuses.notifications.idStore\n const relevantNotifications = Object.entries(notificationsObject)\n .filter(([k, val]) => notificationIds.includes(k))\n .map(([k, val]) => val)\n\n // Reconnect users to notifications\n each(relevantNotifications, (notification) => {\n store.commit('setUserForNotification', notification)\n })\n },\n searchUsers ({ rootState, commit }, { query }) {\n return rootState.api.backendInteractor.searchUsers({ query })\n .then((users) => {\n commit('addNewUsers', users)\n return users\n })\n },\n async signUp (store, userInfo) {\n store.commit('signUpPending')\n\n const rootState = store.rootState\n\n try {\n const data = await rootState.api.backendInteractor.register(\n { params: { ...userInfo } }\n )\n store.commit('signUpSuccess')\n store.commit('setToken', data.access_token)\n store.dispatch('loginUser', data.access_token)\n } catch (e) {\n const errors = e.message\n store.commit('signUpFailure', errors)\n throw e\n }\n },\n async getCaptcha (store) {\n return store.rootState.api.backendInteractor.getCaptcha()\n },\n\n logout (store) {\n const { oauth, instance } = store.rootState\n\n const data = {\n ...oauth,\n commit: store.commit,\n instance: instance.server\n }\n\n return oauthApi.getOrCreateApp(data)\n .then((app) => {\n const params = {\n app,\n instance: data.instance,\n token: oauth.userToken\n }\n\n return oauthApi.revokeToken(params)\n })\n .then(() => {\n store.commit('clearCurrentUser')\n store.dispatch('disconnectFromSocket')\n store.commit('clearToken')\n store.dispatch('stopFetchingTimeline', 'friends')\n store.commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))\n store.dispatch('stopFetchingNotifications')\n store.dispatch('stopFetchingLists')\n store.dispatch('stopFetchingFollowRequests')\n store.commit('clearNotifications')\n store.commit('resetStatuses')\n store.dispatch('resetChats')\n store.dispatch('setLastTimeline', 'public-timeline')\n store.dispatch('setLayoutWidth', windowWidth())\n store.dispatch('setLayoutHeight', windowHeight())\n store.commit('clearServerSideStorage')\n })\n },\n loginUser (store, accessToken) {\n return new Promise((resolve, reject) => {\n const commit = store.commit\n const dispatch = store.dispatch\n commit('beginLogin')\n store.rootState.api.backendInteractor.verifyCredentials(accessToken)\n .then((data) => {\n if (!data.error) {\n const user = data\n // user.credentials = userCredentials\n user.credentials = accessToken\n user.blockIds = []\n user.muteIds = []\n user.domainMutes = []\n commit('setCurrentUser', user)\n commit('setServerSideStorage', user)\n commit('addNewUsers', [user])\n\n dispatch('fetchEmoji')\n\n getNotificationPermission()\n .then(permission => commit('setNotificationPermission', permission))\n\n // Set our new backend interactor\n commit('setBackendInteractor', backendInteractorService(accessToken))\n dispatch('pushServerSideStorage')\n\n if (user.token) {\n dispatch('setWsToken', user.token)\n\n // Initialize the shout socket.\n dispatch('initializeSocket')\n }\n\n const startPolling = () => {\n // Start getting fresh posts.\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n\n // Start fetching notifications\n dispatch('startFetchingNotifications')\n\n // Start fetching chats\n dispatch('startFetchingChats')\n }\n\n dispatch('startFetchingLists')\n\n if (user.locked) {\n dispatch('startFetchingFollowRequests')\n }\n\n if (store.getters.mergedConfig.useStreamingApi) {\n dispatch('fetchTimeline', { timeline: 'friends', since: null })\n dispatch('fetchNotifications', { since: null })\n dispatch('enableMastoSockets', true).catch((error) => {\n console.error('Failed initializing MastoAPI Streaming socket', error)\n }).then(() => {\n dispatch('fetchChats', { latest: true })\n setTimeout(() => dispatch('setNotificationsSilence', false), 10000)\n })\n } else {\n startPolling()\n }\n\n // Get user mutes\n dispatch('fetchMutes')\n\n dispatch('setLayoutWidth', windowWidth())\n dispatch('setLayoutHeight', windowHeight())\n\n // Fetch our friends\n store.rootState.api.backendInteractor.fetchFriends({ id: user.id })\n .then((friends) => commit('addNewUsers', friends))\n } else {\n const response = data.error\n // Authentication failed\n commit('endLogin')\n\n // remove authentication token on client/authentication errors\n if ([400, 401, 403, 422].includes(response.status)) {\n commit('clearToken')\n }\n\n if (response.status === 401) {\n reject(new Error('Wrong username or password'))\n } else {\n reject(new Error('An error occurred, please try again'))\n }\n }\n commit('endLogin')\n resolve()\n })\n .catch((error) => {\n console.log(error)\n commit('endLogin')\n reject(new Error('Failed to connect to server, try again'))\n })\n })\n }\n }\n}\n\nexport default users\n","import { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'\n\nexport const maybeShowChatNotification = (store, chat) => {\n if (!chat.lastMessage) return\n if (store.rootState.chats.currentChatId === chat.id && !document.hidden) return\n if (store.rootState.users.currentUser.id === chat.lastMessage.account_id) return\n\n const opts = {\n tag: chat.lastMessage.id,\n title: chat.account.name,\n icon: chat.account.profile_image_url,\n body: chat.lastMessage.content\n }\n\n if (chat.lastMessage.attachment && chat.lastMessage.attachment.type === 'image') {\n opts.image = chat.lastMessage.attachment.preview_url\n }\n\n showDesktopNotification(store.rootState, opts)\n}\n\nexport const buildFakeMessage = ({ content, chatId, attachments, userId, idempotencyKey }) => {\n const fakeMessage = {\n content,\n chat_id: chatId,\n created_at: new Date(),\n id: `${new Date().getTime()}`,\n attachments,\n account_id: userId,\n idempotency_key: idempotencyKey,\n emojis: [],\n pending: true,\n isNormalized: true\n }\n\n if (attachments[0]) {\n fakeMessage.attachment = attachments[0]\n }\n\n return fakeMessage\n}\n","import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { WSConnectionStatus } from '../services/api/api.service.js'\nimport { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'\nimport { Socket } from 'phoenix'\n\nconst retryTimeout = (multiplier) => 1000 * multiplier\n\nconst api = {\n state: {\n retryMultiplier: 1,\n backendInteractor: backendInteractorService(),\n fetchers: {},\n socket: null,\n mastoUserSocket: null,\n mastoUserSocketStatus: null,\n followRequests: []\n },\n getters: {\n followRequestCount: state => state.followRequests.length\n },\n mutations: {\n setBackendInteractor (state, backendInteractor) {\n state.backendInteractor = backendInteractor\n },\n addFetcher (state, { fetcherName, fetcher }) {\n state.fetchers[fetcherName] = fetcher\n },\n removeFetcher (state, { fetcherName, fetcher }) {\n state.fetchers[fetcherName].stop()\n delete state.fetchers[fetcherName]\n },\n setWsToken (state, token) {\n state.wsToken = token\n },\n setSocket (state, socket) {\n state.socket = socket\n },\n setFollowRequests (state, value) {\n state.followRequests = value\n },\n setMastoUserSocketStatus (state, value) {\n state.mastoUserSocketStatus = value\n },\n incrementRetryMultiplier (state) {\n state.retryMultiplier = Math.max(++state.retryMultiplier, 3)\n },\n resetRetryMultiplier (state) {\n state.retryMultiplier = 1\n }\n },\n actions: {\n /**\n * Global MastoAPI socket control, in future should disable ALL sockets/(re)start relevant sockets\n *\n * @param {Boolean} [initial] - whether this enabling happened at boot time or not\n */\n enableMastoSockets (store, initial) {\n const { state, dispatch, commit } = store\n // Do not initialize unless nonexistent or closed\n if (\n state.mastoUserSocket &&\n ![\n WebSocket.CLOSED,\n WebSocket.CLOSING\n ].includes(state.mastoUserSocket.getState())\n ) {\n return\n }\n if (initial) {\n commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING_INITIAL)\n } else {\n commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING)\n }\n return dispatch('startMastoUserSocket')\n },\n disableMastoSockets (store) {\n const { state, dispatch, commit } = store\n if (!state.mastoUserSocket) return\n commit('setMastoUserSocketStatus', WSConnectionStatus.DISABLED)\n return dispatch('stopMastoUserSocket')\n },\n\n // MastoAPI 'User' sockets\n startMastoUserSocket (store) {\n return new Promise((resolve, reject) => {\n try {\n const { state, commit, dispatch, rootState } = store\n const timelineData = rootState.statuses.timelines.friends\n state.mastoUserSocket = state.backendInteractor.startUserSocket({ store })\n state.mastoUserSocket.addEventListener(\n 'message',\n ({ detail: message }) => {\n if (!message) return // pings\n if (message.event === 'notification') {\n dispatch('addNewNotifications', {\n notifications: [message.notification],\n older: false\n })\n } else if (message.event === 'update') {\n dispatch('addNewStatuses', {\n statuses: [message.status],\n userId: false,\n showImmediately: timelineData.visibleStatuses.length === 0,\n timeline: 'friends'\n })\n } else if (message.event === 'status.update') {\n dispatch('addNewStatuses', {\n statuses: [message.status],\n userId: false,\n showImmediately: message.status.id in timelineData.visibleStatusesObject,\n timeline: 'friends'\n })\n } else if (message.event === 'delete') {\n dispatch('deleteStatusById', message.id)\n } else if (message.event === 'pleroma:chat_update') {\n // The setTimeout wrapper is a temporary band-aid to avoid duplicates for the user's own messages when doing optimistic sending.\n // The cause of the duplicates is the WS event arriving earlier than the HTTP response.\n // This setTimeout wrapper can be removed once the commit `8e41baff` is in the stable Pleroma release.\n // (`8e41baff` adds the idempotency key to the chat message entity, which PleromaFE uses when it's available, and it makes this artificial delay unnecessary).\n setTimeout(() => {\n dispatch('addChatMessages', {\n chatId: message.chatUpdate.id,\n messages: [message.chatUpdate.lastMessage]\n })\n dispatch('updateChat', { chat: message.chatUpdate })\n maybeShowChatNotification(store, message.chatUpdate)\n }, 100)\n }\n }\n )\n state.mastoUserSocket.addEventListener('open', () => {\n // Do not show notification when we just opened up the page\n if (state.mastoUserSocketStatus !== WSConnectionStatus.STARTING_INITIAL) {\n dispatch('pushGlobalNotice', {\n level: 'success',\n messageKey: 'timeline.socket_reconnected',\n timeout: 5000\n })\n }\n // Stop polling if we were errored or disabled\n if (new Set([\n WSConnectionStatus.ERROR,\n WSConnectionStatus.DISABLED\n ]).has(state.mastoUserSocketStatus)) {\n dispatch('stopFetchingTimeline', { timeline: 'friends' })\n dispatch('stopFetchingNotifications')\n dispatch('stopFetchingChats')\n }\n commit('resetRetryMultiplier')\n commit('setMastoUserSocketStatus', WSConnectionStatus.JOINED)\n })\n state.mastoUserSocket.addEventListener('error', ({ detail: error }) => {\n console.error('Error in MastoAPI websocket:', error)\n // TODO is this needed?\n dispatch('clearOpenedChats')\n })\n state.mastoUserSocket.addEventListener('close', ({ detail: closeEvent }) => {\n const ignoreCodes = new Set([\n 1000, // Normal (intended) closure\n 1001 // Going away\n ])\n const { code } = closeEvent\n if (ignoreCodes.has(code)) {\n console.debug(`Not restarting socket becasue of closure code ${code} is in ignore list`)\n commit('setMastoUserSocketStatus', WSConnectionStatus.CLOSED)\n } else {\n console.warn(`MastoAPI websocket disconnected, restarting. CloseEvent code: ${code}`)\n setTimeout(() => {\n dispatch('startMastoUserSocket')\n }, retryTimeout(state.retryMultiplier))\n commit('incrementRetryMultiplier')\n if (state.mastoUserSocketStatus !== WSConnectionStatus.ERROR) {\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n dispatch('startFetchingNotifications')\n dispatch('startFetchingChats')\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'timeline.socket_broke',\n messageArgs: [code],\n timeout: 5000\n })\n }\n commit('setMastoUserSocketStatus', WSConnectionStatus.ERROR)\n }\n dispatch('clearOpenedChats')\n })\n resolve()\n } catch (e) {\n reject(e)\n }\n })\n },\n stopMastoUserSocket ({ state, dispatch }) {\n dispatch('startFetchingTimeline', { timeline: 'friends' })\n dispatch('startFetchingNotifications')\n dispatch('startFetchingChats')\n state.mastoUserSocket.close()\n },\n\n // Timelines\n startFetchingTimeline (store, {\n timeline = 'friends',\n tag = false,\n userId = false,\n listId = false\n }) {\n if (store.state.fetchers[timeline]) return\n\n const fetcher = store.state.backendInteractor.startFetchingTimeline({\n timeline, store, userId, listId, tag\n })\n store.commit('addFetcher', { fetcherName: timeline, fetcher })\n },\n stopFetchingTimeline (store, timeline) {\n const fetcher = store.state.fetchers[timeline]\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: timeline, fetcher })\n },\n fetchTimeline (store, { timeline, ...rest }) {\n store.state.backendInteractor.fetchTimeline({\n store,\n timeline,\n ...rest\n })\n },\n\n // Notifications\n startFetchingNotifications (store) {\n if (store.state.fetchers.notifications) return\n const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })\n store.commit('addFetcher', { fetcherName: 'notifications', fetcher })\n },\n stopFetchingNotifications (store) {\n const fetcher = store.state.fetchers.notifications\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'notifications', fetcher })\n },\n fetchNotifications (store, { ...rest }) {\n store.state.backendInteractor.fetchNotifications({\n store,\n ...rest\n })\n },\n\n // Follow requests\n startFetchingFollowRequests (store) {\n if (store.state.fetchers.followRequests) return\n const fetcher = store.state.backendInteractor.startFetchingFollowRequests({ store })\n\n store.commit('addFetcher', { fetcherName: 'followRequests', fetcher })\n },\n stopFetchingFollowRequests (store) {\n const fetcher = store.state.fetchers.followRequests\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'followRequests', fetcher })\n },\n removeFollowRequest (store, request) {\n const requests = store.state.followRequests.filter((it) => it !== request)\n store.commit('setFollowRequests', requests)\n },\n\n // Lists\n startFetchingLists (store) {\n if (store.state.fetchers.lists) return\n const fetcher = store.state.backendInteractor.startFetchingLists({ store })\n store.commit('addFetcher', { fetcherName: 'lists', fetcher })\n },\n stopFetchingLists (store) {\n const fetcher = store.state.fetchers.lists\n if (!fetcher) return\n store.commit('removeFetcher', { fetcherName: 'lists', fetcher })\n },\n\n // Pleroma websocket\n setWsToken (store, token) {\n store.commit('setWsToken', token)\n },\n initializeSocket ({ dispatch, commit, state, rootState }) {\n // Set up websocket connection\n const token = state.wsToken\n if (rootState.instance.shoutAvailable && typeof token !== 'undefined' && state.socket === null) {\n const socket = new Socket('/socket', { params: { token } })\n socket.connect()\n\n commit('setSocket', socket)\n dispatch('initializeShout', socket)\n }\n },\n disconnectFromSocket ({ commit, state }) {\n state.socket && state.socket.disconnect()\n commit('setSocket', null)\n }\n }\n}\n\nexport default api\n","import { get, set } from 'lodash'\n\nconst defaultApi = ({ rootState, commit }, { path, value }) => {\n const params = {}\n set(params, path, value)\n return rootState\n .api\n .backendInteractor\n .updateProfile({ params })\n .then(result => {\n commit('addNewUsers', [result])\n commit('setCurrentUser', result)\n })\n}\n\nconst notificationsApi = ({ rootState, commit }, { path, value, oldValue }) => {\n const settings = {}\n set(settings, path, value)\n return rootState\n .api\n .backendInteractor\n .updateNotificationSettings({ settings })\n .then(result => {\n if (result.status === 'success') {\n commit('confirmProfileOption', { name, value })\n } else {\n commit('confirmProfileOption', { name, value: oldValue })\n }\n })\n}\n\n/**\n * Map that stores relation between path for reading (from user profile),\n * for writing (into API) an what API to use.\n *\n * Shorthand - instead of { get, set, api? } object it's possible to use string\n * in case default api is used and get = set\n *\n * If no api is specified, defaultApi is used (see above)\n */\nexport const settingsMap = {\n defaultScope: 'source.privacy',\n defaultNSFW: 'source.sensitive', // BROKEN: pleroma/pleroma#2837\n stripRichContent: {\n get: 'source.pleroma.no_rich_text',\n set: 'no_rich_text'\n },\n // Privacy\n locked: 'locked',\n acceptChatMessages: {\n get: 'pleroma.accepts_chat_messages',\n set: 'accepts_chat_messages'\n },\n allowFollowingMove: {\n get: 'pleroma.allow_following_move',\n set: 'allow_following_move'\n },\n discoverable: {\n get: 'source.pleroma.discoverable',\n set: 'discoverable'\n },\n hideFavorites: {\n get: 'pleroma.hide_favorites',\n set: 'hide_favorites'\n },\n hideFollowers: {\n get: 'pleroma.hide_followers',\n set: 'hide_followers'\n },\n hideFollows: {\n get: 'pleroma.hide_follows',\n set: 'hide_follows'\n },\n hideFollowersCount: {\n get: 'pleroma.hide_followers_count',\n set: 'hide_followers_count'\n },\n hideFollowsCount: {\n get: 'pleroma.hide_follows_count',\n set: 'hide_follows_count'\n },\n // NotificationSettingsAPIs\n webPushHideContents: {\n get: 'pleroma.notification_settings.hide_notification_contents',\n set: 'hide_notification_contents',\n api: notificationsApi\n },\n blockNotificationsFromStrangers: {\n get: 'pleroma.notification_settings.block_from_strangers',\n set: 'block_from_strangers',\n api: notificationsApi\n }\n}\n\nexport const defaultState = Object.fromEntries(Object.keys(settingsMap).map(key => [key, null]))\n\nconst profileConfig = {\n state: { ...defaultState },\n mutations: {\n confirmProfileOption (state, { name, value }) {\n set(state, name, value)\n },\n wipeProfileOption (state, { name }) {\n set(state, name, null)\n },\n wipeAllProfileOptions (state) {\n Object.keys(settingsMap).forEach(key => {\n set(state, key, null)\n })\n },\n // Set the settings based on their path location\n setCurrentUser (state, user) {\n Object.entries(settingsMap).forEach((map) => {\n const [name, value] = map\n const { get: path = value } = value\n set(state, name, get(user._original, path))\n })\n }\n },\n actions: {\n setProfileOption ({ rootState, state, commit, dispatch }, { name, value }) {\n const oldValue = get(state, name)\n const map = settingsMap[name]\n if (!map) throw new Error('Invalid server-side setting')\n const { set: path = map, api = defaultApi } = map\n commit('wipeProfileOption', { name })\n\n api({ rootState, commit }, { path, value, oldValue })\n .catch((e) => {\n console.warn('Error setting server-side option:', e)\n commit('confirmProfileOption', { name, value: oldValue })\n })\n },\n logout ({ commit }) {\n commit('wipeAllProfileOptions')\n }\n }\n}\n\nexport default profileConfig\n","import Modal from 'src/components/modal/modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport pleromaTan from 'src/assets/pleromatan_apology.png'\nimport pleromaTanFox from 'src/assets/pleromatan_apology_fox.png'\nimport pleromaTanMask from 'src/assets/pleromatan_apology_mask.png'\nimport pleromaTanFoxMask from 'src/assets/pleromatan_apology_fox_mask.png'\n\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\nlibrary.add(\n faTimes\n)\n\nexport const CURRENT_UPDATE_COUNTER = 1\n\nconst UpdateNotification = {\n data () {\n return {\n showingImage: false,\n pleromaTanVariant: Math.random() > 0.5 ? pleromaTan : pleromaTanFox,\n showingMore: false\n }\n },\n components: {\n Modal\n },\n computed: {\n pleromaTanStyles () {\n const mask = this.pleromaTanVariant === pleromaTan ? pleromaTanMask : pleromaTanFoxMask\n return {\n 'shape-outside': 'url(' + mask + ')'\n }\n },\n shouldShow () {\n return !this.$store.state.instance.disableUpdateNotification &&\n this.$store.state.users.currentUser &&\n this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&\n !this.$store.state.serverSideStorage.prefsStorage.simple.dontShowUpdateNotifs\n }\n },\n methods: {\n toggleShow () {\n this.showingMore = !this.showingMore\n },\n neverShowAgain () {\n this.toggleShow()\n this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })\n this.$store.commit('setPreference', { path: 'simple.dontShowUpdateNotifs', value: true })\n this.$store.dispatch('pushServerSideStorage')\n },\n dismiss () {\n this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n mounted () {\n this.contentHeightNoImage = this.$refs.animatedText.scrollHeight\n\n // Workaround to get the text height only after mask loaded. A bit hacky.\n const newImg = new Image()\n newImg.onload = () => {\n setTimeout(() => { this.showingImage = true }, 100)\n }\n newImg.src = this.pleromaTanVariant === pleromaTan ? pleromaTanMask : pleromaTanFoxMask\n }\n}\n\nexport default UpdateNotification\n","import { toRaw } from 'vue'\nimport { isEqual, cloneDeep, set, get, clamp, flatten, groupBy, findLastIndex, takeRight, uniqWith } from 'lodash'\nimport { CURRENT_UPDATE_COUNTER } from 'src/components/update_notification/update_notification.js'\n\nexport const VERSION = 1\nexport const NEW_USER_DATE = new Date('2022-08-04') // date of writing this, basically\n\nexport const COMMAND_TRIM_FLAGS = 1000\nexport const COMMAND_TRIM_FLAGS_AND_RESET = 1001\n\nexport const defaultState = {\n // do we need to update data on server?\n dirty: false,\n // storage of flags - stuff that can only be set and incremented\n flagStorage: {\n updateCounter: 0, // Counter for most recent update notification seen\n reset: 0 // special flag that can be used to force-reset all flags, debug purposes only\n // special reset codes:\n // 1000: trim keys to those known by currently running FE\n // 1001: same as above + reset everything to 0\n },\n prefsStorage: {\n _journal: [],\n simple: {\n dontShowUpdateNotifs: false,\n collapseNav: false\n },\n collections: {\n pinnedNavItems: ['home', 'dms', 'chats']\n }\n },\n // raw data\n raw: null,\n // local cache\n cache: null\n}\n\nexport const newUserFlags = {\n ...defaultState.flagStorage,\n updateCounter: CURRENT_UPDATE_COUNTER // new users don't need to see update notification\n}\n\nexport const _moveItemInArray = (array, value, movement) => {\n const oldIndex = array.indexOf(value)\n const newIndex = oldIndex + movement\n const newArray = [...array]\n // remove old\n newArray.splice(oldIndex, 1)\n // add new\n newArray.splice(clamp(newIndex, 0, newArray.length + 1), 0, value)\n return newArray\n}\n\nconst _wrapData = (data, userName) => ({\n ...data,\n _user: userName,\n _timestamp: Date.now(),\n _version: VERSION\n})\n\nconst _checkValidity = (data) => data._timestamp > 0 && data._version > 0\n\nconst _verifyPrefs = (state) => {\n state.prefsStorage = state.prefsStorage || {\n simple: {},\n collections: {}\n }\n Object.entries(defaultState.prefsStorage.simple).forEach(([k, v]) => {\n if (typeof v === 'number' || typeof v === 'boolean') return\n console.warn(`Preference simple.${k} as invalid type, reinitializing`)\n set(state.prefsStorage.simple, k, defaultState.prefsStorage.simple[k])\n })\n Object.entries(defaultState.prefsStorage.collections).forEach(([k, v]) => {\n if (Array.isArray(v)) return\n console.warn(`Preference collections.${k} as invalid type, reinitializing`)\n set(state.prefsStorage.collections, k, defaultState.prefsStorage.collections[k])\n })\n}\n\nexport const _getRecentData = (cache, live) => {\n const result = { recent: null, stale: null, needUpload: false }\n const cacheValid = _checkValidity(cache || {})\n const liveValid = _checkValidity(live || {})\n if (!liveValid && cacheValid) {\n result.needUpload = true\n console.debug('Nothing valid stored on server, assuming cache to be source of truth')\n result.recent = cache\n result.stale = live\n } else if (!cacheValid && liveValid) {\n console.debug('Valid storage on server found, no local cache found, using live as source of truth')\n result.recent = live\n result.stale = cache\n } else if (cacheValid && liveValid) {\n console.debug('Both sources have valid data, figuring things out...')\n if (live._timestamp === cache._timestamp && live._version === cache._version) {\n console.debug('Same version/timestamp on both source, source of truth irrelevant')\n result.recent = cache\n result.stale = live\n } else {\n console.debug('Different timestamp, figuring out which one is more recent')\n if (live._timestamp < cache._timestamp) {\n result.recent = cache\n result.stale = live\n } else {\n result.recent = live\n result.stale = cache\n }\n }\n } else {\n console.debug('Both sources are invalid, start from scratch')\n result.needUpload = true\n }\n return result\n}\n\nexport const _getAllFlags = (recent, stale) => {\n return Array.from(new Set([\n ...Object.keys(toRaw((recent || {}).flagStorage || {})),\n ...Object.keys(toRaw((stale || {}).flagStorage || {}))\n ]))\n}\n\nexport const _mergeFlags = (recent, stale, allFlagKeys) => {\n if (!stale.flagStorage) return recent.flagStorage\n if (!recent.flagStorage) return stale.flagStorage\n return Object.fromEntries(allFlagKeys.map(flag => {\n const recentFlag = recent.flagStorage[flag]\n const staleFlag = stale.flagStorage[flag]\n // use flag that is of higher value\n return [flag, Number((recentFlag > staleFlag ? recentFlag : staleFlag) || 0)]\n }))\n}\n\nconst _mergeJournal = (...journals) => {\n // Ignore invalid journal entries\n const allJournals = flatten(\n journals.map(j => Array.isArray(j) ? j : [])\n ).filter(entry =>\n Object.prototype.hasOwnProperty.call(entry, 'path') &&\n Object.prototype.hasOwnProperty.call(entry, 'operation') &&\n Object.prototype.hasOwnProperty.call(entry, 'args') &&\n Object.prototype.hasOwnProperty.call(entry, 'timestamp')\n )\n const grouped = groupBy(allJournals, 'path')\n const trimmedGrouped = Object.entries(grouped).map(([path, journal]) => {\n // side effect\n journal.sort((a, b) => a.timestamp > b.timestamp ? 1 : -1)\n\n if (path.startsWith('collections')) {\n const lastRemoveIndex = findLastIndex(journal, ({ operation }) => operation === 'removeFromCollection')\n // everything before last remove is unimportant\n let remainder\n if (lastRemoveIndex > 0) {\n remainder = journal.slice(lastRemoveIndex)\n } else {\n // everything else doesn't need trimming\n remainder = journal\n }\n return uniqWith(remainder, (a, b) => {\n if (a.path !== b.path) { return false }\n if (a.operation !== b.operation) { return false }\n if (a.operation === 'addToCollection') {\n return a.args[0] === b.args[0]\n }\n return false\n })\n } else if (path.startsWith('simple')) {\n // Only the last record is important\n return takeRight(journal)\n } else {\n return journal\n }\n })\n return flatten(trimmedGrouped)\n .sort((a, b) => a.timestamp > b.timestamp ? 1 : -1)\n}\n\nexport const _mergePrefs = (recent, stale, allFlagKeys) => {\n if (!stale) return recent\n if (!recent) return stale\n const { _journal: recentJournal, ...recentData } = recent\n const { _journal: staleJournal } = stale\n /** Journal entry format:\n * path: path to entry in prefsStorage\n * timestamp: timestamp of the change\n * operation: operation type\n * arguments: array of arguments, depends on operation type\n *\n * currently only supported operation type is \"set\" which just sets the value\n * to requested one. Intended only to be used with simple preferences (boolean, number)\n * shouldn't be used with collections!\n */\n const resultOutput = { ...recentData }\n const totalJournal = _mergeJournal(staleJournal, recentJournal)\n totalJournal.forEach(({ path, timestamp, operation, command, args }) => {\n if (path.startsWith('_')) {\n console.error(`journal contains entry to edit internal (starts with _) field '${path}', something is incorrect here, ignoring.`)\n return\n }\n switch (operation) {\n case 'set':\n set(resultOutput, path, args[0])\n break\n case 'addToCollection':\n set(resultOutput, path, Array.from(new Set(get(resultOutput, path)).add(args[0])))\n break\n case 'removeFromCollection': {\n const newSet = new Set(get(resultOutput, path))\n newSet.delete(args[0])\n set(resultOutput, path, Array.from(newSet))\n break\n }\n case 'reorderCollection': {\n const [value, movement] = args\n set(resultOutput, path, _moveItemInArray(get(resultOutput, path), value, movement))\n break\n }\n default:\n console.error(`Unknown journal operation: '${operation}', did we forget to run reverse migrations beforehand?`)\n }\n })\n return { ...resultOutput, _journal: totalJournal }\n}\n\nexport const _resetFlags = (totalFlags, knownKeys = defaultState.flagStorage) => {\n let result = { ...totalFlags }\n const allFlagKeys = Object.keys(totalFlags)\n // flag reset functionality\n if (totalFlags.reset >= COMMAND_TRIM_FLAGS && totalFlags.reset <= COMMAND_TRIM_FLAGS_AND_RESET) {\n console.debug('Received command to trim the flags')\n const knownKeysSet = new Set(Object.keys(knownKeys))\n\n // Trim\n result = {}\n allFlagKeys.forEach(flag => {\n if (knownKeysSet.has(flag)) {\n result[flag] = totalFlags[flag]\n }\n })\n\n // Reset\n if (totalFlags.reset === COMMAND_TRIM_FLAGS_AND_RESET) {\n // 1001 - and reset everything to 0\n console.debug('Received command to reset the flags')\n Object.keys(knownKeys).forEach(flag => { result[flag] = 0 })\n }\n } else if (totalFlags.reset > 0 && totalFlags.reset < 9000) {\n console.debug('Received command to reset the flags')\n allFlagKeys.forEach(flag => { result[flag] = 0 })\n }\n result.reset = 0\n return result\n}\n\nexport const _doMigrations = (cache) => {\n if (!cache) return cache\n\n if (cache._version < VERSION) {\n console.debug('Local cached data has older version, seeing if there any migrations that can be applied')\n\n // no migrations right now since we only have one version\n console.debug('No migrations found')\n }\n\n if (cache._version > VERSION) {\n console.debug('Local cached data has newer version, seeing if there any reverse migrations that can be applied')\n\n // no reverse migrations right now but we leave a possibility of loading a hotpatch if need be\n if (window._PLEROMA_HOTPATCH) {\n if (window._PLEROMA_HOTPATCH.reverseMigrations) {\n console.debug('Found hotpatch migration, applying')\n return window._PLEROMA_HOTPATCH.reverseMigrations.call({}, 'serverSideStorage', { from: cache._version, to: VERSION }, cache)\n }\n }\n }\n\n return cache\n}\n\nexport const mutations = {\n clearServerSideStorage (state, userData) {\n state = { ...cloneDeep(defaultState) }\n },\n setServerSideStorage (state, userData) {\n const live = userData.storage\n state.raw = live\n let cache = state.cache\n if (cache && cache._user !== userData.fqn) {\n console.warn('cache belongs to another user! reinitializing local cache!')\n cache = null\n }\n\n cache = _doMigrations(cache)\n\n let { recent, stale, needsUpload } = _getRecentData(cache, live)\n\n const userNew = userData.created_at > NEW_USER_DATE\n const flagsTemplate = userNew ? newUserFlags : defaultState.flagStorage\n let dirty = false\n\n if (recent === null) {\n console.debug(`Data is empty, initializing for ${userNew ? 'new' : 'existing'} user`)\n recent = _wrapData({\n flagStorage: { ...flagsTemplate },\n prefsStorage: { ...defaultState.prefsStorage }\n })\n }\n\n if (!needsUpload && recent && stale) {\n console.debug('Checking if data needs merging...')\n // discarding timestamps and versions\n const { _timestamp: _0, _version: _1, ...recentData } = recent\n const { _timestamp: _2, _version: _3, ...staleData } = stale\n dirty = !isEqual(recentData, staleData)\n console.debug(`Data ${dirty ? 'needs' : 'doesn\\'t need'} merging`)\n }\n\n const allFlagKeys = _getAllFlags(recent, stale)\n let totalFlags\n let totalPrefs\n if (dirty) {\n // Merge the flags\n console.debug('Merging the data...')\n totalFlags = _mergeFlags(recent, stale, allFlagKeys)\n _verifyPrefs(recent)\n _verifyPrefs(stale)\n totalPrefs = _mergePrefs(recent.prefsStorage, stale.prefsStorage)\n } else {\n totalFlags = recent.flagStorage\n totalPrefs = recent.prefsStorage\n }\n\n totalFlags = _resetFlags(totalFlags)\n\n recent.flagStorage = { ...flagsTemplate, ...totalFlags }\n recent.prefsStorage = { ...defaultState.prefsStorage, ...totalPrefs }\n\n state.dirty = dirty || needsUpload\n state.cache = recent\n // set local timestamp to smaller one if we don't have any changes\n if (stale && recent && !state.dirty) {\n state.cache._timestamp = Math.min(stale._timestamp, recent._timestamp)\n }\n state.flagStorage = state.cache.flagStorage\n state.prefsStorage = state.cache.prefsStorage\n },\n setFlag (state, { flag, value }) {\n state.flagStorage[flag] = value\n state.dirty = true\n },\n setPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n set(state.prefsStorage, path, value)\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'set', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n addCollectionPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = new Set(get(state.prefsStorage, path))\n collection.add(value)\n set(state.prefsStorage, path, [...collection])\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'addToCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n removeCollectionPreference (state, { path, value }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = new Set(get(state.prefsStorage, path))\n collection.delete(value)\n set(state.prefsStorage, path, [...collection])\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'removeFromCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n reorderCollectionPreference (state, { path, value, movement }) {\n if (path.startsWith('_')) {\n console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)\n return\n }\n const collection = get(state.prefsStorage, path)\n const newCollection = _moveItemInArray(collection, value, movement)\n set(state.prefsStorage, path, newCollection)\n state.prefsStorage._journal = [\n ...state.prefsStorage._journal,\n { operation: 'arrangeCollection', path, args: [value], timestamp: Date.now() }\n ]\n state.dirty = true\n },\n updateCache (state, { username }) {\n state.prefsStorage._journal = _mergeJournal(state.prefsStorage._journal)\n state.cache = _wrapData({\n flagStorage: toRaw(state.flagStorage),\n prefsStorage: toRaw(state.prefsStorage)\n }, username)\n }\n}\n\nconst serverSideStorage = {\n state: {\n ...cloneDeep(defaultState)\n },\n mutations,\n actions: {\n pushServerSideStorage ({ state, rootState, commit }, { force = false } = {}) {\n const needPush = state.dirty || force\n console.log(needPush)\n if (!needPush) return\n commit('updateCache', { username: rootState.users.currentUser.fqn })\n const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }\n rootState.api.backendInteractor\n .updateProfile({ params })\n .then((user) => {\n commit('setServerSideStorage', user)\n state.dirty = false\n })\n }\n }\n}\n\nexport default serverSideStorage\n","import { set, get, cloneDeep, differenceWith, isEqual, flatten } from 'lodash'\n\nexport const defaultState = {\n frontends: [],\n loaded: false,\n needsReboot: null,\n config: null,\n modifiedPaths: null,\n descriptions: null,\n draft: null,\n dbConfigEnabled: null\n}\n\nexport const newUserFlags = {\n ...defaultState.flagStorage\n}\n\nconst adminSettingsStorage = {\n state: {\n ...cloneDeep(defaultState)\n },\n mutations: {\n setInstanceAdminNoDbConfig (state) {\n state.loaded = false\n state.dbConfigEnabled = false\n },\n setAvailableFrontends (state, { frontends }) {\n state.frontends = frontends.map(f => {\n f.installedRefs = f.installed_refs\n if (f.name === 'pleroma-fe') {\n f.refs = ['master', 'develop']\n } else {\n f.refs = [f.ref]\n }\n return f\n })\n },\n updateAdminSettings (state, { config, modifiedPaths }) {\n state.loaded = true\n state.dbConfigEnabled = true\n state.config = config\n state.modifiedPaths = modifiedPaths\n },\n updateAdminDescriptions (state, { descriptions }) {\n state.descriptions = descriptions\n },\n updateAdminDraft (state, { path, value }) {\n const [group, key, subkey] = path\n const parent = [group, key, subkey]\n\n set(state.draft, path, value)\n\n // force-updating grouped draft to trigger refresh of group settings\n if (path.length > parent.length) {\n set(state.draft, parent, cloneDeep(get(state.draft, parent)))\n }\n },\n resetAdminDraft (state) {\n state.draft = cloneDeep(state.config)\n }\n },\n actions: {\n loadFrontendsStuff ({ state, rootState, dispatch, commit }) {\n rootState.api.backendInteractor.fetchAvailableFrontends()\n .then(frontends => commit('setAvailableFrontends', { frontends }))\n },\n loadAdminStuff ({ state, rootState, dispatch, commit }) {\n rootState.api.backendInteractor.fetchInstanceDBConfig()\n .then(backendDbConfig => {\n if (backendDbConfig.error) {\n if (backendDbConfig.error.status === 400) {\n backendDbConfig.error.json().then(errorJson => {\n if (/configurable_from_database/.test(errorJson.error)) {\n commit('setInstanceAdminNoDbConfig')\n }\n })\n }\n } else {\n dispatch('setInstanceAdminSettings', { backendDbConfig })\n }\n })\n if (state.descriptions === null) {\n rootState.api.backendInteractor.fetchInstanceConfigDescriptions()\n .then(backendDescriptions => dispatch('setInstanceAdminDescriptions', { backendDescriptions }))\n }\n },\n setInstanceAdminSettings ({ state, commit, dispatch }, { backendDbConfig }) {\n const config = state.config || {}\n const modifiedPaths = new Set()\n backendDbConfig.configs.forEach(c => {\n const path = [c.group, c.key]\n if (c.db) {\n // Path elements can contain dot, therefore we use ' -> ' as a separator instead\n // Using strings for modified paths for easier searching\n c.db.forEach(x => modifiedPaths.add([...path, x].join(' -> ')))\n }\n const convert = (value) => {\n if (Array.isArray(value) && value.length > 0 && value[0].tuple) {\n return value.reduce((acc, c) => {\n return { ...acc, [c.tuple[0]]: convert(c.tuple[1]) }\n }, {})\n } else {\n return value\n }\n }\n set(config, path, convert(c.value))\n })\n console.log(config[':pleroma'])\n commit('updateAdminSettings', { config, modifiedPaths })\n commit('resetAdminDraft')\n },\n setInstanceAdminDescriptions ({ state, commit, dispatch }, { backendDescriptions }) {\n const convert = ({ children, description, label, key = '<ROOT>', group, suggestions }, path, acc) => {\n const newPath = group ? [group, key] : [key]\n const obj = { description, label, suggestions }\n if (Array.isArray(children)) {\n children.forEach(c => {\n convert(c, newPath, obj)\n })\n }\n set(acc, newPath, obj)\n }\n\n const descriptions = {}\n backendDescriptions.forEach(d => convert(d, '', descriptions))\n console.log(descriptions[':pleroma']['Pleroma.Captcha'])\n commit('updateAdminDescriptions', { descriptions })\n },\n\n // This action takes draft state, diffs it with live config state and then pushes\n // only differences between the two. Difference detection only work up to subkey (third) level.\n pushAdminDraft ({ rootState, state, commit, dispatch }) {\n // TODO cleanup paths in modifiedPaths\n const convert = (value) => {\n if (typeof value !== 'object') {\n return value\n } else if (Array.isArray(value)) {\n return value.map(convert)\n } else {\n return Object.entries(value).map(([k, v]) => ({ tuple: [k, v] }))\n }\n }\n\n // Getting all group-keys used in config\n const allGroupKeys = flatten(\n Object\n .entries(state.config)\n .map(\n ([group, lv1data]) => Object\n .keys(lv1data)\n .map((key) => ({ group, key }))\n )\n )\n\n // Only using group-keys where there are changes detected\n const changedGroupKeys = allGroupKeys.filter(({ group, key }) => {\n return !isEqual(state.config[group][key], state.draft[group][key])\n })\n\n // Here we take all changed group-keys and get all changed subkeys\n const changed = changedGroupKeys.map(({ group, key }) => {\n const config = state.config[group][key]\n const draft = state.draft[group][key]\n\n // We convert group-key value into entries arrays\n const eConfig = Object.entries(config)\n const eDraft = Object.entries(draft)\n\n // Then those entries array we diff so only changed subkey entries remain\n // We use the diffed array to reconstruct the object and then shove it into convert()\n return ({ group, key, value: convert(Object.fromEntries(differenceWith(eDraft, eConfig, isEqual))) })\n })\n\n rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: changed\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n },\n pushAdminSetting ({ rootState, state, commit, dispatch }, { path, value }) {\n const [group, key, ...rest] = Array.isArray(path) ? path : path.split(/\\./g)\n const clone = {} // not actually cloning the entire thing to avoid excessive writes\n set(clone, rest, value)\n\n // TODO cleanup paths in modifiedPaths\n const convert = (value) => {\n if (typeof value !== 'object') {\n return value\n } else if (Array.isArray(value)) {\n return value.map(convert)\n } else {\n return Object.entries(value).map(([k, v]) => ({ tuple: [k, v] }))\n }\n }\n\n rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: [{\n group,\n key,\n value: convert(clone)\n }]\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n },\n resetAdminSetting ({ rootState, state, commit, dispatch }, { path }) {\n const [group, key, subkey] = path.split(/\\./g)\n\n state.modifiedPaths.delete(path)\n\n return rootState.api.backendInteractor.pushInstanceDBConfig({\n payload: {\n configs: [{\n group,\n key,\n delete: true,\n subkeys: [subkey]\n }]\n }\n })\n .then(() => rootState.api.backendInteractor.fetchInstanceDBConfig())\n .then(backendDbConfig => dispatch('setInstanceAdminSettings', { backendDbConfig }))\n }\n }\n}\n\nexport default adminSettingsStorage\n","const shout = {\n state: {\n messages: [],\n channel: { state: '' },\n joined: false\n },\n mutations: {\n setChannel (state, channel) {\n state.channel = channel\n },\n addMessage (state, message) {\n state.messages.push(message)\n state.messages = state.messages.slice(-19, 20)\n },\n setMessages (state, messages) {\n state.messages = messages.slice(-19, 20)\n },\n setJoined (state, joined) {\n state.joined = joined\n }\n },\n actions: {\n initializeShout (store, socket) {\n const channel = socket.channel('chat:public')\n channel.joinPush.receive('ok', () => {\n store.commit('setJoined', true)\n })\n channel.onClose(() => {\n store.commit('setJoined', false)\n })\n channel.onError(() => {\n store.commit('setJoined', false)\n })\n channel.on('new_msg', (msg) => {\n store.commit('addMessage', msg)\n })\n channel.on('messages', ({ messages }) => {\n store.commit('setMessages', messages)\n })\n channel.join()\n store.commit('setChannel', channel)\n }\n }\n}\n\nexport default shout\n","const oauth = {\n state: {\n clientId: false,\n clientSecret: false,\n /* App token is authentication for app without any user, used mostly for\n * MastoAPI's registration of new users, stored so that we can fall back to\n * it on logout\n */\n appToken: false,\n /* User token is authentication for app with user, this is for every calls\n * that need authorized user to be successful (i.e. posting, liking etc)\n */\n userToken: false\n },\n mutations: {\n setClientData (state, { clientId, clientSecret }) {\n state.clientId = clientId\n state.clientSecret = clientSecret\n },\n setAppToken (state, token) {\n state.appToken = token\n },\n setToken (state, token) {\n state.userToken = token\n },\n clearToken (state) {\n state.userToken = false\n // state.token is userToken with older name, coming from persistent state\n // let's clear it as well, since it is being used as a fallback of state.userToken\n delete state.token\n }\n },\n getters: {\n getToken: state => () => {\n // state.token is userToken with older name, coming from persistent state\n // added here for smoother transition, otherwise user will be logged out\n return state.userToken || state.token || state.appToken\n },\n getUserToken: state => () => {\n // state.token is userToken with older name, coming from persistent state\n // added here for smoother transition, otherwise user will be logged out\n return state.userToken || state.token\n }\n }\n}\n\nexport default oauth\n","const PASSWORD_STRATEGY = 'password'\nconst TOKEN_STRATEGY = 'token'\n\n// MFA strategies\nconst TOTP_STRATEGY = 'totp'\nconst RECOVERY_STRATEGY = 'recovery'\n\n// initial state\nconst state = {\n settings: {},\n strategy: PASSWORD_STRATEGY,\n initStrategy: PASSWORD_STRATEGY // default strategy from config\n}\n\nconst resetState = (state) => {\n state.strategy = state.initStrategy\n state.settings = {}\n}\n\n// getters\nconst getters = {\n settings: (state, getters) => {\n return state.settings\n },\n requiredPassword: (state, getters, rootState) => {\n return state.strategy === PASSWORD_STRATEGY\n },\n requiredToken: (state, getters, rootState) => {\n return state.strategy === TOKEN_STRATEGY\n },\n requiredTOTP: (state, getters, rootState) => {\n return state.strategy === TOTP_STRATEGY\n },\n requiredRecovery: (state, getters, rootState) => {\n return state.strategy === RECOVERY_STRATEGY\n }\n}\n\n// mutations\nconst mutations = {\n setInitialStrategy (state, strategy) {\n if (strategy) {\n state.initStrategy = strategy\n state.strategy = strategy\n }\n },\n requirePassword (state) {\n state.strategy = PASSWORD_STRATEGY\n },\n requireToken (state) {\n state.strategy = TOKEN_STRATEGY\n },\n requireMFA (state, { settings }) {\n state.settings = settings\n state.strategy = TOTP_STRATEGY // default strategy of MFA\n },\n requireRecovery (state) {\n state.strategy = RECOVERY_STRATEGY\n },\n requireTOTP (state) {\n state.strategy = TOTP_STRATEGY\n },\n abortMFA (state) {\n resetState(state)\n }\n}\n\n// actions\nconst actions = {\n // eslint-disable-next-line camelcase\n async login ({ state, dispatch, commit }, { access_token }) {\n commit('setToken', access_token, { root: true })\n await dispatch('loginUser', access_token, { root: true })\n resetState(state)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import fileTypeService from '../services/file_type/file_type.service.js'\nconst supportedTypes = new Set(['image', 'video', 'audio', 'flash'])\n\nconst mediaViewer = {\n state: {\n media: [],\n currentIndex: 0,\n activated: false\n },\n mutations: {\n setMedia (state, media) {\n state.media = media\n },\n setCurrentMedia (state, index) {\n state.activated = true\n state.currentIndex = index\n },\n close (state) {\n state.activated = false\n }\n },\n actions: {\n setMedia ({ commit }, attachments) {\n const media = attachments.filter(attachment => {\n const type = fileTypeService.fileType(attachment.mimetype)\n return supportedTypes.has(type)\n })\n commit('setMedia', media)\n },\n setCurrentMedia ({ commit, state }, current) {\n const index = state.media.indexOf(current)\n commit('setCurrentMedia', index || 0)\n },\n closeMediaViewer ({ commit }) {\n commit('close')\n }\n }\n}\n\nexport default mediaViewer\n","const oauthTokens = {\n state: {\n tokens: []\n },\n actions: {\n fetchTokens ({ rootState, commit }) {\n rootState.api.backendInteractor.fetchOAuthTokens().then((tokens) => {\n commit('swapTokens', tokens)\n })\n },\n revokeToken ({ rootState, commit, state }, id) {\n rootState.api.backendInteractor.revokeOAuthToken({ id }).then((response) => {\n if (response.status === 201) {\n commit('swapTokens', state.tokens.filter(token => token.id !== id))\n }\n })\n }\n },\n mutations: {\n swapTokens (state, tokens) {\n state.tokens = tokens\n }\n }\n}\n\nexport default oauthTokens\n","import filter from 'lodash/filter'\n\nconst reports = {\n state: {\n reportModal: {\n userId: null,\n statuses: [],\n preTickedIds: [],\n activated: false\n },\n reports: {}\n },\n mutations: {\n openUserReportingModal (state, { userId, statuses, preTickedIds }) {\n state.reportModal.userId = userId\n state.reportModal.statuses = statuses\n state.reportModal.preTickedIds = preTickedIds\n state.reportModal.activated = true\n },\n closeUserReportingModal (state) {\n state.reportModal.activated = false\n },\n setReportState (reportsState, { id, state }) {\n reportsState.reports[id].state = state\n },\n addReport (state, report) {\n state.reports[report.id] = report\n }\n },\n actions: {\n openUserReportingModal ({ rootState, commit }, { userId, statusIds = [] }) {\n const preTickedStatuses = statusIds.map(id => rootState.statuses.allStatusesObject[id])\n const preTickedIds = statusIds\n const statuses = preTickedStatuses.concat(\n filter(rootState.statuses.allStatuses,\n status => status.user.id === userId && !preTickedIds.includes(status.id)\n )\n )\n commit('openUserReportingModal', { userId, statuses, preTickedIds })\n },\n closeUserReportingModal ({ commit }) {\n commit('closeUserReportingModal')\n },\n setReportState ({ commit, dispatch, rootState }, { id, state }) {\n const oldState = rootState.reports.reports[id].state\n commit('setReportState', { id, state })\n rootState.api.backendInteractor.setReportState({ id, state }).catch(e => {\n console.error('Failed to set report state', e)\n dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'general.generic_error_message',\n messageArgs: [e.message],\n timeout: 5000\n })\n commit('setReportState', { id, state: oldState })\n })\n },\n addReport ({ commit }, report) {\n commit('addReport', report)\n }\n }\n}\n\nexport default reports\n","import { merge } from 'lodash'\n\nconst polls = {\n state: {\n // Contains key = id, value = number of trackers for this poll\n trackedPolls: {},\n pollsObject: {}\n },\n mutations: {\n mergeOrAddPoll (state, poll) {\n const existingPoll = state.pollsObject[poll.id]\n // Make expired-state change trigger re-renders properly\n poll.expired = Date.now() > Date.parse(poll.expires_at)\n if (existingPoll) {\n state.pollsObject[poll.id] = merge(existingPoll, poll)\n } else {\n state.pollsObject[poll.id] = poll\n }\n },\n trackPoll (state, pollId) {\n const currentValue = state.trackedPolls[pollId]\n if (currentValue) {\n state.trackedPolls[pollId] = currentValue + 1\n } else {\n state.trackedPolls[pollId] = 1\n }\n },\n untrackPoll (state, pollId) {\n const currentValue = state.trackedPolls[pollId]\n if (currentValue) {\n state.trackedPolls[pollId] = currentValue - 1\n } else {\n state.trackedPolls[pollId] = 0\n }\n }\n },\n actions: {\n mergeOrAddPoll ({ commit }, poll) {\n commit('mergeOrAddPoll', poll)\n },\n updateTrackedPoll ({ rootState, dispatch, commit }, pollId) {\n rootState.api.backendInteractor.fetchPoll({ pollId }).then(poll => {\n setTimeout(() => {\n if (rootState.polls.trackedPolls[pollId]) {\n dispatch('updateTrackedPoll', pollId)\n }\n }, 30 * 1000)\n commit('mergeOrAddPoll', poll)\n })\n },\n trackPoll ({ rootState, commit, dispatch }, pollId) {\n if (!rootState.polls.trackedPolls[pollId]) {\n setTimeout(() => dispatch('updateTrackedPoll', pollId), 30 * 1000)\n }\n commit('trackPoll', pollId)\n },\n untrackPoll ({ commit }, pollId) {\n commit('untrackPoll', pollId)\n },\n votePoll ({ rootState, commit }, { id, pollId, choices }) {\n return rootState.api.backendInteractor.vote({ pollId, choices }).then(poll => {\n commit('mergeOrAddPoll', poll)\n return poll\n })\n }\n }\n}\n\nexport default polls\n","const postStatus = {\n state: {\n params: null,\n modalActivated: false\n },\n mutations: {\n openPostStatusModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closePostStatusModal (state) {\n state.modalActivated = false\n },\n resetPostStatusModal (state) {\n state.params = null\n }\n },\n actions: {\n openPostStatusModal ({ commit }, params) {\n commit('openPostStatusModal', params)\n },\n closePostStatusModal ({ commit }) {\n commit('closePostStatusModal')\n },\n resetPostStatusModal ({ commit }) {\n commit('resetPostStatusModal')\n }\n }\n}\n\nexport default postStatus\n","const editStatus = {\n state: {\n params: null,\n modalActivated: false\n },\n mutations: {\n openEditStatusModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closeEditStatusModal (state) {\n state.modalActivated = false\n }\n },\n actions: {\n openEditStatusModal ({ commit }, params) {\n commit('openEditStatusModal', params)\n },\n closeEditStatusModal ({ commit }) {\n commit('closeEditStatusModal')\n }\n }\n}\n\nexport default editStatus\n","const statusHistory = {\n state: {\n params: {},\n modalActivated: false\n },\n mutations: {\n openStatusHistoryModal (state, params) {\n state.params = params\n state.modalActivated = true\n },\n closeStatusHistoryModal (state) {\n state.modalActivated = false\n }\n },\n actions: {\n openStatusHistoryModal ({ commit }, params) {\n commit('openStatusHistoryModal', params)\n },\n closeStatusHistoryModal ({ commit }) {\n commit('closeStatusHistoryModal')\n }\n }\n}\n\nexport default statusHistory\n","import _ from 'lodash'\n\nconst empty = (chatId) => {\n return {\n idIndex: {},\n idempotencyKeyIndex: {},\n messages: [],\n newMessageCount: 0,\n lastSeenMessageId: '0',\n chatId,\n minId: undefined,\n maxId: undefined\n }\n}\n\nconst clear = (storage) => {\n const failedMessageIds = []\n\n for (const message of storage.messages) {\n if (message.error) {\n failedMessageIds.push(message.id)\n } else {\n delete storage.idIndex[message.id]\n delete storage.idempotencyKeyIndex[message.idempotency_key]\n }\n }\n\n storage.messages = storage.messages.filter(m => failedMessageIds.includes(m.id))\n storage.newMessageCount = 0\n storage.lastSeenMessageId = '0'\n storage.minId = undefined\n storage.maxId = undefined\n}\n\nconst deleteMessage = (storage, messageId) => {\n if (!storage) { return }\n storage.messages = storage.messages.filter(m => m.id !== messageId)\n delete storage.idIndex[messageId]\n\n if (storage.maxId === messageId) {\n const lastMessage = _.maxBy(storage.messages, 'id')\n storage.maxId = lastMessage.id\n }\n\n if (storage.minId === messageId) {\n const firstMessage = _.minBy(storage.messages, 'id')\n storage.minId = firstMessage.id\n }\n}\n\nconst cullOlderMessages = (storage) => {\n const maxIndex = storage.messages.length\n const minIndex = maxIndex - 50\n if (maxIndex <= 50) return\n\n storage.messages = _.sortBy(storage.messages, ['id'])\n storage.minId = storage.messages[minIndex].id\n for (const message of storage.messages) {\n if (message.id < storage.minId) {\n delete storage.idIndex[message.id]\n delete storage.idempotencyKeyIndex[message.idempotency_key]\n }\n }\n storage.messages = storage.messages.slice(minIndex, maxIndex)\n}\n\nconst handleMessageError = (storage, fakeId, isRetry) => {\n if (!storage) { return }\n const fakeMessage = storage.idIndex[fakeId]\n if (fakeMessage) {\n fakeMessage.error = true\n fakeMessage.pending = false\n if (!isRetry) {\n // Ensure the failed message doesn't stay at the bottom of the list.\n const lastPersistedMessage = _.orderBy(storage.messages, ['pending', 'id'], ['asc', 'desc'])[0]\n if (lastPersistedMessage) {\n const oldId = fakeMessage.id\n fakeMessage.id = `${lastPersistedMessage.id}-${new Date().getTime()}`\n storage.idIndex[fakeMessage.id] = fakeMessage\n delete storage.idIndex[oldId]\n }\n }\n }\n}\n\nconst add = (storage, { messages: newMessages, updateMaxId = true }) => {\n if (!storage) { return }\n for (let i = 0; i < newMessages.length; i++) {\n const message = newMessages[i]\n\n // sanity check\n if (message.chat_id !== storage.chatId) { return }\n\n if (message.fakeId) {\n const fakeMessage = storage.idIndex[message.fakeId]\n if (fakeMessage) {\n // In case the same id exists (chat update before POST response)\n // make sure to remove the older duplicate message.\n if (storage.idIndex[message.id]) {\n delete storage.idIndex[message.id]\n storage.messages = storage.messages.filter(msg => msg.id !== message.id)\n }\n Object.assign(fakeMessage, message, { error: false })\n delete fakeMessage.fakeId\n storage.idIndex[fakeMessage.id] = fakeMessage\n delete storage.idIndex[message.fakeId]\n\n return\n }\n }\n\n if (!storage.minId || (!message.pending && message.id < storage.minId)) {\n storage.minId = message.id\n }\n\n if (!storage.maxId || message.id > storage.maxId) {\n if (updateMaxId) {\n storage.maxId = message.id\n }\n }\n\n if (!storage.idIndex[message.id] && !isConfirmation(storage, message)) {\n if (storage.lastSeenMessageId < message.id) {\n storage.newMessageCount++\n }\n storage.idIndex[message.id] = message\n storage.messages.push(storage.idIndex[message.id])\n storage.idempotencyKeyIndex[message.idempotency_key] = true\n }\n }\n}\n\nconst isConfirmation = (storage, message) => {\n if (!message.idempotency_key) return\n return storage.idempotencyKeyIndex[message.idempotency_key]\n}\n\nconst resetNewMessageCount = (storage) => {\n if (!storage) { return }\n storage.newMessageCount = 0\n storage.lastSeenMessageId = storage.maxId\n}\n\n// Inserts date separators and marks the head and tail if it's the chain of messages made by the same user\nconst getView = (storage) => {\n if (!storage) { return [] }\n\n const result = []\n const messages = _.orderBy(storage.messages, ['pending', 'id'], ['asc', 'asc'])\n const firstMessage = messages[0]\n let previousMessage = messages[messages.length - 1]\n let currentMessageChainId\n\n if (firstMessage) {\n const date = new Date(firstMessage.created_at)\n date.setHours(0, 0, 0, 0)\n result.push({\n type: 'date',\n date,\n id: date.getTime().toString()\n })\n }\n\n let afterDate = false\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]\n const nextMessage = messages[i + 1]\n\n const date = new Date(message.created_at)\n date.setHours(0, 0, 0, 0)\n\n // insert date separator and start a new message chain\n if (previousMessage && previousMessage.date < date) {\n result.push({\n type: 'date',\n date,\n id: date.getTime().toString()\n })\n\n previousMessage.isTail = true\n currentMessageChainId = undefined\n afterDate = true\n }\n\n const object = {\n type: 'message',\n data: message,\n date,\n id: message.id,\n messageChainId: currentMessageChainId\n }\n\n // end a message chian\n if ((nextMessage && nextMessage.account_id) !== message.account_id) {\n object.isTail = true\n currentMessageChainId = undefined\n }\n\n // start a new message chain\n if ((previousMessage && previousMessage.data && previousMessage.data.account_id) !== message.account_id || afterDate) {\n currentMessageChainId = _.uniqueId()\n object.isHead = true\n object.messageChainId = currentMessageChainId\n }\n\n result.push(object)\n previousMessage = object\n afterDate = false\n }\n\n return result\n}\n\nconst ChatService = {\n add,\n empty,\n getView,\n deleteMessage,\n cullOlderMessages,\n resetNewMessageCount,\n clear,\n handleMessageError\n}\n\nexport default ChatService\n","import { reactive } from 'vue'\nimport { find, omitBy, orderBy, sumBy } from 'lodash'\nimport chatService from '../services/chat_service/chat_service.js'\nimport { parseChat, parseChatMessage } from '../services/entity_normalizer/entity_normalizer.service.js'\nimport { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'\nimport { promiseInterval } from '../services/promise_interval/promise_interval.js'\n\nconst emptyChatList = () => ({\n data: [],\n idStore: {}\n})\n\nconst defaultState = {\n chatList: emptyChatList(),\n chatListFetcher: null,\n openedChats: reactive({}),\n openedChatMessageServices: reactive({}),\n fetcher: undefined,\n currentChatId: null,\n lastReadMessageId: null\n}\n\nconst getChatById = (state, id) => {\n return find(state.chatList.data, { id })\n}\n\nconst sortedChatList = (state) => {\n return orderBy(state.chatList.data, ['updated_at'], ['desc'])\n}\n\nconst unreadChatCount = (state) => {\n return sumBy(state.chatList.data, 'unread')\n}\n\nconst chats = {\n state: { ...defaultState },\n getters: {\n currentChat: state => state.openedChats[state.currentChatId],\n currentChatMessageService: state => state.openedChatMessageServices[state.currentChatId],\n findOpenedChatByRecipientId: state => recipientId => find(state.openedChats, c => c.account.id === recipientId),\n sortedChatList,\n unreadChatCount\n },\n actions: {\n // Chat list\n startFetchingChats ({ dispatch, commit }) {\n const fetcher = () => dispatch('fetchChats', { latest: true })\n fetcher()\n commit('setChatListFetcher', {\n fetcher: () => promiseInterval(fetcher, 5000)\n })\n },\n stopFetchingChats ({ commit }) {\n commit('setChatListFetcher', { fetcher: undefined })\n },\n fetchChats ({ dispatch, rootState, commit }, params = {}) {\n return rootState.api.backendInteractor.chats()\n .then(({ chats }) => {\n dispatch('addNewChats', { chats })\n return chats\n })\n },\n addNewChats (store, { chats }) {\n const { commit, dispatch, rootGetters } = store\n const newChatMessageSideEffects = (chat) => {\n maybeShowChatNotification(store, chat)\n }\n commit('addNewUsers', chats.map(k => k.account).filter(k => k))\n commit('addNewChats', { dispatch, chats, rootGetters, newChatMessageSideEffects })\n },\n updateChat ({ commit }, { chat }) {\n commit('updateChat', { chat })\n },\n\n // Opened Chats\n startFetchingCurrentChat ({ commit, dispatch }, { fetcher }) {\n dispatch('setCurrentChatFetcher', { fetcher })\n },\n setCurrentChatFetcher ({ rootState, commit }, { fetcher }) {\n commit('setCurrentChatFetcher', { fetcher })\n },\n addOpenedChat ({ rootState, commit, dispatch }, { chat }) {\n commit('addOpenedChat', { dispatch, chat: parseChat(chat) })\n dispatch('addNewUsers', [chat.account])\n },\n addChatMessages ({ commit }, value) {\n commit('addChatMessages', { commit, ...value })\n },\n resetChatNewMessageCount ({ commit }, value) {\n commit('resetChatNewMessageCount', value)\n },\n clearCurrentChat ({ rootState, commit, dispatch }, value) {\n commit('setCurrentChatId', { chatId: undefined })\n commit('setCurrentChatFetcher', { fetcher: undefined })\n },\n readChat ({ rootState, commit, dispatch }, { id, lastReadId }) {\n const isNewMessage = rootState.chats.lastReadMessageId !== lastReadId\n\n dispatch('resetChatNewMessageCount')\n commit('readChat', { id, lastReadId })\n\n if (isNewMessage) {\n rootState.api.backendInteractor.readChat({ id, lastReadId })\n }\n },\n deleteChatMessage ({ rootState, commit }, value) {\n rootState.api.backendInteractor.deleteChatMessage(value)\n commit('deleteChatMessage', { commit, ...value })\n },\n resetChats ({ commit, dispatch }) {\n dispatch('clearCurrentChat')\n commit('resetChats', { commit })\n },\n clearOpenedChats ({ rootState, commit, dispatch, rootGetters }) {\n commit('clearOpenedChats', { commit })\n },\n handleMessageError ({ commit }, value) {\n commit('handleMessageError', { commit, ...value })\n },\n cullOlderMessages ({ commit }, chatId) {\n commit('cullOlderMessages', chatId)\n }\n },\n mutations: {\n setChatListFetcher (state, { commit, fetcher }) {\n const prevFetcher = state.chatListFetcher\n if (prevFetcher) {\n prevFetcher.stop()\n }\n state.chatListFetcher = fetcher && fetcher()\n },\n setCurrentChatFetcher (state, { fetcher }) {\n const prevFetcher = state.fetcher\n if (prevFetcher) {\n prevFetcher.stop()\n }\n state.fetcher = fetcher && fetcher()\n },\n addOpenedChat (state, { _dispatch, chat }) {\n state.currentChatId = chat.id\n state.openedChats[chat.id] = chat\n\n if (!state.openedChatMessageServices[chat.id]) {\n state.openedChatMessageServices[chat.id] = chatService.empty(chat.id)\n }\n },\n setCurrentChatId (state, { chatId }) {\n state.currentChatId = chatId\n },\n addNewChats (state, { chats, newChatMessageSideEffects }) {\n chats.forEach((updatedChat) => {\n const chat = getChatById(state, updatedChat.id)\n\n if (chat) {\n const isNewMessage = (chat.lastMessage && chat.lastMessage.id) !== (updatedChat.lastMessage && updatedChat.lastMessage.id)\n chat.lastMessage = updatedChat.lastMessage\n chat.unread = updatedChat.unread\n chat.updated_at = updatedChat.updated_at\n if (isNewMessage && chat.unread) {\n newChatMessageSideEffects(updatedChat)\n }\n } else {\n state.chatList.data.push(updatedChat)\n state.chatList.idStore[updatedChat.id] = updatedChat\n }\n })\n },\n updateChat (state, { _dispatch, chat: updatedChat, _rootGetters }) {\n const chat = getChatById(state, updatedChat.id)\n if (chat) {\n chat.lastMessage = updatedChat.lastMessage\n chat.unread = updatedChat.unread\n chat.updated_at = updatedChat.updated_at\n }\n if (!chat) { state.chatList.data.unshift(updatedChat) }\n state.chatList.idStore[updatedChat.id] = updatedChat\n },\n deleteChat (state, { _dispatch, id, _rootGetters }) {\n state.chats.data = state.chats.data.filter(conversation =>\n conversation.last_status.id !== id\n )\n state.chats.idStore = omitBy(state.chats.idStore, conversation => conversation.last_status.id === id)\n },\n resetChats (state, { commit }) {\n state.chatList = emptyChatList()\n state.currentChatId = null\n commit('setChatListFetcher', { fetcher: undefined })\n for (const chatId in state.openedChats) {\n chatService.clear(state.openedChatMessageServices[chatId])\n delete state.openedChats[chatId]\n delete state.openedChatMessageServices[chatId]\n }\n },\n setChatsLoading (state, { value }) {\n state.chats.loading = value\n },\n addChatMessages (state, { chatId, messages, updateMaxId }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n if (chatMessageService) {\n chatService.add(chatMessageService, { messages: messages.map(parseChatMessage), updateMaxId })\n }\n },\n deleteChatMessage (state, { chatId, messageId }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n if (chatMessageService) {\n chatService.deleteMessage(chatMessageService, messageId)\n }\n },\n resetChatNewMessageCount (state, _value) {\n const chatMessageService = state.openedChatMessageServices[state.currentChatId]\n chatService.resetNewMessageCount(chatMessageService)\n },\n // Used when a connection loss occurs\n clearOpenedChats (state) {\n const currentChatId = state.currentChatId\n for (const chatId in state.openedChats) {\n if (currentChatId !== chatId) {\n chatService.clear(state.openedChatMessageServices[chatId])\n delete state.openedChats[chatId]\n delete state.openedChatMessageServices[chatId]\n }\n }\n },\n readChat (state, { id, lastReadId }) {\n state.lastReadMessageId = lastReadId\n const chat = getChatById(state, id)\n if (chat) {\n chat.unread = 0\n }\n },\n handleMessageError (state, { chatId, fakeId, isRetry }) {\n const chatMessageService = state.openedChatMessageServices[chatId]\n chatService.handleMessageError(chatMessageService, fakeId, isRetry)\n },\n cullOlderMessages (state, chatId) {\n chatService.cullOlderMessages(state.openedChatMessageServices[chatId])\n }\n }\n}\n\nexport default chats\n","const FETCH_ANNOUNCEMENT_INTERVAL_MS = 1000 * 60 * 5\n\nexport const defaultState = {\n announcements: [],\n supportsAnnouncements: true,\n fetchAnnouncementsTimer: undefined\n}\n\nexport const mutations = {\n setAnnouncements (state, announcements) {\n state.announcements = announcements\n },\n setAnnouncementRead (state, { id, read }) {\n const index = state.announcements.findIndex(a => a.id === id)\n\n if (index < 0) {\n return\n }\n\n state.announcements[index].read = read\n },\n setFetchAnnouncementsTimer (state, timer) {\n state.fetchAnnouncementsTimer = timer\n },\n setSupportsAnnouncements (state, supportsAnnouncements) {\n state.supportsAnnouncements = supportsAnnouncements\n }\n}\n\nexport const getters = {\n unreadAnnouncementCount (state, _getters, rootState) {\n if (!rootState.users.currentUser) {\n return 0\n }\n\n const unread = state.announcements.filter(announcement => !(announcement.inactive || announcement.read))\n return unread.length\n }\n}\n\nconst announcements = {\n state: defaultState,\n mutations,\n getters,\n actions: {\n fetchAnnouncements (store) {\n if (!store.state.supportsAnnouncements) {\n return Promise.resolve()\n }\n\n const currentUser = store.rootState.users.currentUser\n const isAdmin = currentUser && currentUser.privileges.includes('announcements_manage_announcements')\n\n const getAnnouncements = async () => {\n if (!isAdmin) {\n return store.rootState.api.backendInteractor.fetchAnnouncements()\n }\n\n const all = await store.rootState.api.backendInteractor.adminFetchAnnouncements()\n const visible = await store.rootState.api.backendInteractor.fetchAnnouncements()\n const visibleObject = visible.reduce((a, c) => {\n a[c.id] = c\n return a\n }, {})\n const getWithinVisible = announcement => visibleObject[announcement.id]\n\n all.forEach(announcement => {\n const visibleAnnouncement = getWithinVisible(announcement)\n if (!visibleAnnouncement) {\n announcement.inactive = true\n } else {\n announcement.read = visibleAnnouncement.read\n }\n })\n\n return all\n }\n\n return getAnnouncements()\n .then(announcements => {\n store.commit('setAnnouncements', announcements)\n })\n .catch(error => {\n // If and only if backend does not support announcements, it would return 404.\n // In this case, silently ignores it.\n if (error && error.statusCode === 404) {\n store.commit('setSupportsAnnouncements', false)\n } else {\n throw error\n }\n })\n },\n markAnnouncementAsRead (store, id) {\n return store.rootState.api.backendInteractor.dismissAnnouncement({ id })\n .then(() => {\n store.commit('setAnnouncementRead', { id, read: true })\n })\n },\n startFetchingAnnouncements (store) {\n if (store.state.fetchAnnouncementsTimer) {\n return\n }\n\n const interval = setInterval(() => store.dispatch('fetchAnnouncements'), FETCH_ANNOUNCEMENT_INTERVAL_MS)\n store.commit('setFetchAnnouncementsTimer', interval)\n\n return store.dispatch('fetchAnnouncements')\n },\n stopFetchingAnnouncements (store) {\n const interval = store.state.fetchAnnouncementsTimer\n store.commit('setFetchAnnouncementsTimer', undefined)\n clearInterval(interval)\n },\n postAnnouncement (store, { content, startsAt, endsAt, allDay }) {\n return store.rootState.api.backendInteractor.postAnnouncement({ content, startsAt, endsAt, allDay })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n },\n editAnnouncement (store, { id, content, startsAt, endsAt, allDay }) {\n return store.rootState.api.backendInteractor.editAnnouncement({ id, content, startsAt, endsAt, allDay })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n },\n deleteAnnouncement (store, id) {\n return store.rootState.api.backendInteractor.deleteAnnouncement({ id })\n .then(() => {\n return store.dispatch('fetchAnnouncements')\n })\n }\n }\n}\n\nexport default announcements\n","import merge from 'lodash.merge'\nimport localforage from 'localforage'\nimport { each, get, set, cloneDeep } from 'lodash'\n\nlet loaded = false\n\nconst defaultReducer = (state, paths) => (\n paths.length === 0\n ? state\n : paths.reduce((substate, path) => {\n set(substate, path, get(state, path))\n return substate\n }, {})\n)\n\nconst saveImmedeatelyActions = [\n 'markNotificationsAsSeen',\n 'clearCurrentUser',\n 'setCurrentUser',\n 'setServerSideStorage',\n 'setHighlight',\n 'setOption',\n 'setClientData',\n 'setToken',\n 'clearToken'\n]\n\nconst defaultStorage = (() => {\n return localforage\n})()\n\nexport default function createPersistedState ({\n key = 'vuex-lz',\n paths = [],\n getState = (key, storage) => {\n const value = storage.getItem(key)\n return value\n },\n setState = (key, state, storage) => {\n if (!loaded) {\n console.log('waiting for old state to be loaded...')\n return Promise.resolve()\n } else {\n return storage.setItem(key, state)\n }\n },\n reducer = defaultReducer,\n storage = defaultStorage,\n subscriber = store => handler => store.subscribe(handler)\n} = {}) {\n return getState(key, storage).then((savedState) => {\n return store => {\n try {\n if (savedState !== null && typeof savedState === 'object') {\n // build user cache\n const usersState = savedState.users || {}\n usersState.usersObject = {}\n const users = usersState.users || []\n each(users, (user) => { usersState.usersObject[user.id] = user })\n savedState.users = usersState\n\n store.replaceState(\n merge({}, store.state, savedState)\n )\n }\n loaded = true\n } catch (e) {\n console.log(\"Couldn't load state\")\n console.error(e)\n loaded = true\n }\n subscriber(store)((mutation, state) => {\n try {\n if (saveImmedeatelyActions.includes(mutation.type)) {\n setState(key, reducer(cloneDeep(state), paths), storage)\n .then(success => {\n if (typeof success !== 'undefined') {\n if (mutation.type === 'setOption' || mutation.type === 'setCurrentUser') {\n store.dispatch('settingsSaved', { success })\n }\n }\n }, error => {\n if (mutation.type === 'setOption' || mutation.type === 'setCurrentUser') {\n store.dispatch('settingsSaved', { error })\n }\n })\n }\n } catch (e) {\n console.log(\"Couldn't persist state:\")\n console.log(e)\n }\n })\n }\n })\n}\n","export default (store) => {\n store.subscribe((mutation, state) => {\n const vapidPublicKey = state.instance.vapidPublicKey\n const webPushNotification = state.config.webPushNotifications\n const permission = state.interface.notificationPermission === 'granted'\n const user = state.users.currentUser\n\n const isUserMutation = mutation.type === 'setCurrentUser'\n const isVapidMutation = mutation.type === 'setInstanceOption' && mutation.payload.name === 'vapidPublicKey'\n const isPermMutation = mutation.type === 'setNotificationPermission' && mutation.payload === 'granted'\n const isUserConfigMutation = mutation.type === 'setOption' && mutation.payload.name === 'webPushNotifications'\n const isVisibilityMutation = mutation.type === 'setOption' && mutation.payload.name === 'notificationVisibility'\n\n if (isUserMutation || isVapidMutation || isPermMutation || isUserConfigMutation || isVisibilityMutation) {\n if (user && vapidPublicKey && permission && webPushNotification) {\n return store.dispatch('registerPushNotifications')\n } else if (isUserConfigMutation && !webPushNotification) {\n return store.dispatch('unregisterPushNotifications')\n }\n }\n })\n}\n","<template>\n <div\n id=\"app-loaded\"\n :style=\"bgStyle\"\n >\n <div\n id=\"app_bg_wrapper\"\n class=\"app-bg-wrapper\"\n />\n <MobileNav v-if=\"layoutType === 'mobile'\" />\n <DesktopNav\n v-else\n :class=\"navClasses\"\n />\n <Notifications v-if=\"currentUser\" />\n <div\n id=\"content\"\n class=\"app-layout container\"\n :class=\"classes\"\n >\n <div class=\"underlay\" />\n <div\n id=\"sidebar\"\n class=\"column -scrollable\"\n :class=\"{ '-show-scrollbar': showScrollbars }\"\n >\n <user-panel />\n <template v-if=\"layoutType !== 'mobile'\">\n <nav-panel />\n <instance-specific-panel v-if=\"showInstanceSpecificPanel\" />\n <features-panel v-if=\"!currentUser && showFeaturesPanel\" />\n <who-to-follow-panel v-if=\"currentUser && suggestionsEnabled\" />\n <div id=\"notifs-sidebar\" />\n </template>\n </div>\n <main\n id=\"main-scroller\"\n class=\"column main\"\n :class=\"{ '-full-height': isChats || isListEdit }\"\n >\n <div\n v-if=\"!currentUser\"\n class=\"login-hint panel panel-default\"\n >\n <router-link\n :to=\"{ name: 'login' }\"\n class=\"panel-body\"\n >\n {{ $t(\"login.hint\") }}\n </router-link>\n </div>\n <router-view />\n </main>\n <div\n id=\"notifs-column\"\n class=\"column -scrollable\"\n :class=\"{ '-show-scrollbar': showScrollbars }\"\n />\n </div>\n <MediaModal />\n <shout-panel\n v-if=\"currentUser && shout && !hideShoutbox\"\n :floating=\"true\"\n class=\"floating-shout mobile-hidden\"\n :class=\"{ '-left': shoutboxPosition }\"\n />\n <MobilePostStatusButton />\n <UserReportingModal />\n <PostStatusModal />\n <EditStatusModal v-if=\"editingAvailable\" />\n <StatusHistoryModal v-if=\"editingAvailable\" />\n <SettingsModal />\n <UpdateNotification />\n <GlobalNoticeList />\n </div>\n</template>\n\n<script src=\"./App.js\"></script>\n<style lang=\"scss\" src=\"./App.scss\"></style>\n","<template>\n <aside class=\"user-panel\">\n <div\n v-if=\"signedIn\"\n key=\"user-panel-signed\"\n class=\"panel panel-default signed-in\"\n >\n <UserCard\n :user-id=\"user.id\"\n :hide-bio=\"true\"\n rounded=\"top\"\n />\n <PostStatusForm />\n </div>\n <auth-form\n v-else\n key=\"user-panel\"\n />\n </aside>\n</template>\n\n<script src=\"./user_panel.js\"></script>\n\n<style lang=\"scss\">\n.user-panel .signed-in {\n overflow: visible;\n z-index: 10;\n}\n</style>\n","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.login') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <template v-if=\"isPasswordAuth\">\n <div class=\"form-group\">\n <label for=\"username\">{{ $t('login.username') }}</label>\n <input\n id=\"username\"\n v-model=\"user.username\"\n :disabled=\"loggingIn\"\n class=\"form-control\"\n :placeholder=\"$t('login.placeholder')\"\n >\n </div>\n <div class=\"form-group\">\n <label for=\"password\">{{ $t('login.password') }}</label>\n <input\n id=\"password\"\n ref=\"passwordInput\"\n v-model=\"user.password\"\n :disabled=\"loggingIn\"\n class=\"form-control\"\n type=\"password\"\n >\n </div>\n <div class=\"form-group\">\n <router-link :to=\"{name: 'password-reset'}\">\n {{ $t('password_reset.forgot_password') }}\n </router-link>\n </div>\n </template>\n\n <div\n v-if=\"isTokenAuth\"\n class=\"form-group\"\n >\n <p>{{ $t('login.description') }}</p>\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <router-link\n v-if=\"registrationOpen\"\n :to=\"{name: 'registration'}\"\n class=\"register\"\n >\n {{ $t('login.register') }}\n </router-link>\n </div>\n <button\n :disabled=\"loggingIn\"\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('login.login') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./login_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.login-form {\n display: flex;\n flex-direction: column;\n padding: 0.6em;\n\n .btn {\n min-height: 2em;\n width: 10em;\n }\n\n .register {\n flex: 1 1;\n }\n\n .login-bottom {\n margin-top: 1em;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0.5em 0.6em;\n line-height: 24px;\n }\n\n .form-bottom {\n display: flex;\n padding: 0.5em;\n height: 32px;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n}\n</style>\n","import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport oauthApi from '../../services/new_api/oauth.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst LoginForm = {\n data: () => ({\n user: {},\n error: false\n }),\n computed: {\n isPasswordAuth () { return this.requiredPassword },\n isTokenAuth () { return this.requiredToken },\n ...mapState({\n registrationOpen: state => state.instance.registrationOpen,\n instance: state => state.instance,\n loggingIn: state => state.users.loggingIn,\n oauth: state => state.oauth\n }),\n ...mapGetters(\n 'authFlow', ['requiredPassword', 'requiredToken', 'requiredMFA']\n )\n },\n methods: {\n ...mapMutations('authFlow', ['requireMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n submit () {\n this.isTokenAuth ? this.submitToken() : this.submitPassword()\n },\n submitToken () {\n const { clientId, clientSecret } = this.oauth\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n commit: this.$store.commit\n }\n\n oauthApi.getOrCreateApp(data)\n .then((app) => { oauthApi.login({ ...app, ...data }) })\n },\n submitPassword () {\n const { clientId } = this.oauth\n const data = {\n clientId,\n oauth: this.oauth,\n instance: this.instance.server,\n commit: this.$store.commit\n }\n this.error = false\n\n oauthApi.getOrCreateApp(data).then((app) => {\n oauthApi.getTokenWithCredentials(\n {\n ...app,\n instance: data.instance,\n username: this.user.username,\n password: this.user.password\n }\n ).then((result) => {\n if (result.error) {\n if (result.error === 'mfa_required') {\n this.requireMFA({ settings: result })\n } else if (result.identifier === 'password_reset_required') {\n this.$router.push({ name: 'password-reset', params: { passwordResetRequested: true } })\n } else {\n this.error = result.error\n this.focusOnPasswordInput()\n }\n return\n }\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n })\n },\n clearError () { this.error = false },\n focusOnPasswordInput () {\n const passwordInput = this.$refs.passwordInput\n passwordInput.focus()\n passwordInput.setSelectionRange(0, passwordInput.value.length)\n }\n }\n}\n\nexport default LoginForm\n","import { render } from \"./login_form.vue?vue&type=template&id=508f3ec3\"\nimport script from \"./login_form.js?vue&type=script&lang=js\"\nexport * from \"./login_form.js?vue&type=script&lang=js\"\n\nimport \"./login_form.vue?vue&type=style&index=0&id=508f3ec3&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.heading.recovery') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"form-group\">\n <label for=\"code\">{{ $t('login.recovery_code') }}</label>\n <input\n id=\"code\"\n v-model=\"code\"\n class=\"form-control\"\n >\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"requireTOTP\"\n >\n {{ $t('login.enter_two_factor_code') }}\n </button>\n <br>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"abortMFA\"\n >\n {{ $t('general.cancel') }}\n </button>\n </div>\n <button\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('general.verify') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n<script src=\"./recovery_form.js\"></script>\n","const verifyOTPCode = ({ clientId, clientSecret, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'totp')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst verifyRecoveryCode = ({ clientId, clientSecret, instance, mfaToken, code }) => {\n const url = `${instance}/oauth/mfa/challenge`\n const form = new window.FormData()\n\n form.append('client_id', clientId)\n form.append('client_secret', clientSecret)\n form.append('mfa_token', mfaToken)\n form.append('code', code)\n form.append('challenge_type', 'recovery')\n\n return window.fetch(url, {\n method: 'POST',\n body: form\n }).then((data) => data.json())\n}\n\nconst mfa = {\n verifyOTPCode,\n verifyRecoveryCode\n}\n\nexport default mfa\n","import mfaApi from '../../services/new_api/mfa.js'\nimport { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nexport default {\n data: () => ({\n code: null,\n error: false\n }),\n computed: {\n ...mapGetters({\n authSettings: 'authFlow/settings'\n }),\n ...mapState({\n instance: 'instance',\n oauth: 'oauth'\n })\n },\n methods: {\n ...mapMutations('authFlow', ['requireTOTP', 'abortMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n clearError () { this.error = false },\n submit () {\n const { clientId, clientSecret } = this.oauth\n\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n mfaToken: this.authSettings.mfa_token,\n code: this.code\n }\n\n mfaApi.verifyRecoveryCode(data).then((result) => {\n if (result.error) {\n this.error = result.error\n this.code = null\n return\n }\n\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n }\n }\n}\n","import { render } from \"./recovery_form.vue?vue&type=template&id=e18da610\"\nimport script from \"./recovery_form.js?vue&type=script&lang=js\"\nexport * from \"./recovery_form.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"login panel panel-default\">\n <!-- Default panel contents -->\n\n <div class=\"panel-heading\">\n {{ $t('login.heading.totp') }}\n </div>\n\n <div class=\"panel-body\">\n <form\n class=\"login-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"form-group\">\n <label for=\"code\">\n {{ $t('login.authentication_code') }}\n </label>\n <input\n id=\"code\"\n v-model=\"code\"\n class=\"form-control\"\n >\n </div>\n\n <div class=\"form-group\">\n <div class=\"login-bottom\">\n <div>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"requireRecovery\"\n >\n {{ $t('login.enter_recovery_code') }}\n </button>\n <br>\n <button\n class=\"button-unstyled -link\"\n type=\"button\"\n @click.prevent=\"abortMFA\"\n >\n {{ $t('general.cancel') }}\n </button>\n </div>\n <button\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('general.verify') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div\n v-if=\"error\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n size=\"lg\"\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n<script src=\"./totp_form.js\"></script>\n","import mfaApi from '../../services/new_api/mfa.js'\nimport { mapState, mapGetters, mapActions, mapMutations } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nexport default {\n data: () => ({\n code: null,\n error: false\n }),\n computed: {\n ...mapGetters({\n authSettings: 'authFlow/settings'\n }),\n ...mapState({\n instance: 'instance',\n oauth: 'oauth'\n })\n },\n methods: {\n ...mapMutations('authFlow', ['requireRecovery', 'abortMFA']),\n ...mapActions({ login: 'authFlow/login' }),\n clearError () { this.error = false },\n submit () {\n const { clientId, clientSecret } = this.oauth\n\n const data = {\n clientId,\n clientSecret,\n instance: this.instance.server,\n mfaToken: this.authSettings.mfa_token,\n code: this.code\n }\n\n mfaApi.verifyOTPCode(data).then((result) => {\n if (result.error) {\n this.error = result.error\n this.code = null\n return\n }\n\n this.login(result).then(() => {\n this.$router.push({ name: 'friends' })\n })\n })\n }\n }\n}\n","import { render } from \"./totp_form.vue?vue&type=template&id=6fb04413\"\nimport script from \"./totp_form.js?vue&type=script&lang=js\"\nexport * from \"./totp_form.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { h, resolveComponent } from 'vue'\nimport LoginForm from '../login_form/login_form.vue'\nimport MFARecoveryForm from '../mfa_form/recovery_form.vue'\nimport MFATOTPForm from '../mfa_form/totp_form.vue'\nimport { mapGetters } from 'vuex'\n\nconst AuthForm = {\n name: 'AuthForm',\n render () {\n return h(resolveComponent(this.authForm))\n },\n computed: {\n authForm () {\n if (this.requiredTOTP) { return 'MFATOTPForm' }\n if (this.requiredRecovery) { return 'MFARecoveryForm' }\n return 'LoginForm'\n },\n ...mapGetters('authFlow', ['requiredTOTP', 'requiredRecovery'])\n },\n components: {\n MFARecoveryForm,\n MFATOTPForm,\n LoginForm\n }\n}\n\nexport default AuthForm\n","import AuthForm from '../auth_form/auth_form.js'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport { mapState } from 'vuex'\n\nconst UserPanel = {\n computed: {\n signedIn () { return this.user },\n ...mapState({ user: state => state.users.currentUser })\n },\n components: {\n AuthForm,\n PostStatusForm,\n UserCard\n }\n}\n\nexport default UserPanel\n","import { render } from \"./user_panel.vue?vue&type=template&id=1a2cb8e9\"\nimport script from \"./user_panel.js?vue&type=script&lang=js\"\nexport * from \"./user_panel.js?vue&type=script&lang=js\"\n\nimport \"./user_panel.vue?vue&type=style&index=0&id=1a2cb8e9&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"NavPanel\">\n <div class=\"panel panel-default\">\n <div\n v-if=\"!forceExpand\"\n class=\"panel-heading nav-panel-heading\"\n >\n <NavigationPins :limit=\"6\" />\n <div class=\"spacer\" />\n <button\n class=\"button-unstyled\"\n @click=\"toggleCollapse\"\n >\n <FAIcon\n class=\"navigation-chevron\"\n fixed-width\n :icon=\"collapsed ? 'chevron-down' : 'chevron-up'\"\n />\n </button>\n </div>\n <ul\n v-if=\"!collapsed || forceExpand\"\n class=\"panel-body\"\n >\n <NavigationEntry\n v-if=\"currentUser || !privateMode\"\n :show-pin=\"false\"\n :item=\"{ icon: 'stream', label: 'nav.timelines' }\"\n :aria-expanded=\"showTimelines ? 'true' : 'false'\"\n @click=\"toggleTimelines\"\n >\n <FAIcon\n class=\"timelines-chevron\"\n fixed-width\n :icon=\"showTimelines ? 'chevron-up' : 'chevron-down'\"\n />\n </NavigationEntry>\n <div\n v-show=\"showTimelines\"\n class=\"timelines-background\"\n >\n <div class=\"timelines\">\n <NavigationEntry\n v-for=\"item in timelinesItems\"\n :key=\"item.name\"\n :show-pin=\"editMode || forceEditMode\"\n :item=\"item\"\n />\n </div>\n </div>\n <NavigationEntry\n v-if=\"currentUser\"\n :show-pin=\"false\"\n :item=\"{ icon: 'list', label: 'nav.lists' }\"\n :aria-expanded=\"showLists ? 'true' : 'false'\"\n @click=\"toggleLists\"\n >\n <router-link\n :title=\"$t('lists.manage_lists')\"\n class=\"extra-button\"\n :to=\"{ name: 'lists' }\"\n @click.stop\n >\n <FAIcon\n class=\"extra-button\"\n fixed-width\n icon=\"wrench\"\n />\n </router-link>\n <FAIcon\n class=\"timelines-chevron\"\n fixed-width\n :icon=\"showLists ? 'chevron-up' : 'chevron-down'\"\n />\n </NavigationEntry>\n <div\n v-show=\"showLists\"\n class=\"timelines-background\"\n >\n <ListsMenuContent\n :show-pin=\"editMode || forceEditMode\"\n class=\"timelines\"\n />\n </div>\n <NavigationEntry\n v-for=\"item in rootItems\"\n :key=\"item.name\"\n :show-pin=\"editMode || forceEditMode\"\n :item=\"item\"\n />\n <NavigationEntry\n v-if=\"!forceEditMode && currentUser\"\n :show-pin=\"false\"\n :item=\"{ label: editMode ? $t('nav.edit_finish') : $t('nav.edit_pinned'), icon: editMode ? 'check' : 'wrench' }\"\n @click=\"toggleEditMode\"\n />\n </ul>\n </div>\n </div>\n</template>\n\n<script src=\"./nav_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavPanel {\n .panel {\n overflow: hidden;\n box-shadow: var(--panelShadow);\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n position: relative;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n > li {\n &:first-child .menu-item {\n border-top-right-radius: $fallback--panelRadius;\n border-top-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-top-left-radius: $fallback--panelRadius;\n border-top-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child .menu-item {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n }\n\n li:last-child {\n border: none;\n }\n\n .navigation-chevron {\n margin-left: 0.8em;\n margin-right: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-chevron {\n margin-left: 0.8em;\n font-size: 1.1em;\n }\n\n .timelines-background {\n padding: 0 0 0 0.6em;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n }\n\n .timelines {\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n }\n\n .nav-panel-heading {\n // breaks without a unit\n // stylelint-disable-next-line length-zero-no-unit\n --panel-heading-height-padding: 0px;\n }\n}\n</style>\n","<template>\n <OptionalRouterLink\n v-slot=\"{ isActive, href, navigate } = {}\"\n ass=\"ass\"\n :to=\"routeTo\"\n >\n <li\n class=\"NavigationEntry menu-item\"\n :class=\"{ '-active': isActive }\"\n v-bind=\"$attrs\"\n >\n <component\n :is=\"routeTo ? 'a' : 'button'\"\n class=\"main-link button-unstyled\"\n :href=\"href\"\n @click=\"navigate\"\n >\n <span>\n <FAIcon\n v-if=\"item.icon\"\n fixed-width\n class=\"fa-scale-110 menu-icon\"\n :icon=\"item.icon\"\n />\n </span>\n <span\n v-if=\"item.iconLetter\"\n class=\"icon iconLetter fa-scale-110 menu-icon\"\n >{{ item.iconLetter }}\n </span>\n <span class=\"label\">\n {{ item.labelRaw || $t(item.label) }}\n </span>\n </component>\n <slot />\n <div\n v-if=\"item.badgeGetter && getters[item.badgeGetter]\"\n class=\"badge badge-notification\"\n >\n {{ getters[item.badgeGetter] }}\n </div>\n <button\n v-if=\"showPin && currentUser\"\n type=\"button\"\n class=\"button-unstyled extra-button\"\n :title=\"$t(isPinned ? 'general.unpin' : 'general.pin' )\"\n :aria-pressed=\"!!isPinned\"\n @click.stop.prevent=\"togglePin(item.name)\"\n >\n <FAIcon\n v-if=\"showPin && currentUser\"\n fixed-width\n class=\"fa-scale-110\"\n :class=\"{ 'veryfaint': !isPinned(item.name) }\"\n :transform=\"!isPinned(item.name) ? 'rotate-45' : ''\"\n icon=\"thumbtack\"\n />\n </button>\n </li>\n </OptionalRouterLink>\n</template>\n\n<script src=\"./navigation_entry.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavigationEntry {\n display: flex;\n box-sizing: border-box;\n align-items: baseline;\n height: 3.5em;\n line-height: 3.5em;\n padding: 0 1em;\n width: 100%;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n .timelines-chevron {\n margin-right: 0;\n }\n\n .main-link {\n flex: 1;\n }\n\n .menu-icon {\n margin-right: 0.8em;\n }\n\n .extra-button {\n width: 3em;\n text-align: center;\n\n &:last-child {\n margin-right: -0.8em;\n }\n }\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n }\n\n &.-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n\n .menu-icon {\n --icon: var(--text, $fallback--icon);\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n</style>\n","export const USERNAME_ROUTES = new Set([\n 'bookmarks',\n 'dms',\n 'interactions',\n 'notifications',\n 'chat',\n 'chats',\n 'user-profile'\n])\n\nexport const TIMELINES = {\n home: {\n route: 'friends',\n icon: 'home',\n label: 'nav.home_timeline',\n criteria: ['!private']\n },\n public: {\n route: 'public-timeline',\n anon: true,\n icon: 'users',\n label: 'nav.public_tl',\n criteria: ['!private']\n },\n twkn: {\n route: 'public-external-timeline',\n anon: true,\n icon: 'globe',\n label: 'nav.twkn',\n criteria: ['!private', 'federating']\n },\n bookmarks: {\n route: 'bookmarks',\n icon: 'bookmark',\n label: 'nav.bookmarks'\n },\n favorites: {\n routeObject: { name: 'user-profile', query: { tab: 'favorites' } },\n icon: 'star',\n label: 'user_card.favorites'\n },\n dms: {\n route: 'dms',\n icon: 'envelope',\n label: 'nav.dms'\n }\n}\n\nexport const ROOT_ITEMS = {\n interactions: {\n route: 'interactions',\n icon: 'bell',\n label: 'nav.interactions'\n },\n chats: {\n route: 'chats',\n icon: 'comments',\n label: 'nav.chats',\n badgeGetter: 'unreadChatCount',\n criteria: ['chats']\n },\n friendRequests: {\n route: 'friend-requests',\n icon: 'user-plus',\n label: 'nav.friend_requests',\n criteria: ['lockedUser'],\n badgeGetter: 'followRequestCount'\n },\n about: {\n route: 'about',\n anon: true,\n icon: 'info-circle',\n label: 'nav.about'\n },\n announcements: {\n route: 'announcements',\n icon: 'bullhorn',\n label: 'nav.announcements',\n badgeGetter: 'unreadAnnouncementCount',\n criteria: ['announcements']\n }\n}\n\nexport function routeTo (item, currentUser) {\n if (!item.route && !item.routeObject) return null\n\n let route\n\n if (item.routeObject) {\n route = item.routeObject\n } else {\n route = { name: (item.anon || currentUser) ? item.route : item.anonRoute }\n }\n\n if (USERNAME_ROUTES.has(route.name)) {\n route.params = { username: currentUser.screen_name, name: currentUser.screen_name }\n }\n\n return route\n}\n","<template>\n <!-- eslint-disable vue/no-multiple-template-root -->\n <router-link\n v-if=\"to\"\n v-slot=\"props\"\n :to=\"to\"\n custom\n >\n <slot\n v-bind=\"props\"\n />\n </router-link>\n <slot\n v-else\n v-bind=\"{}\"\n />\n</template>\n\n<script>\nexport default {\n props: ['to']\n}\n</script>\n","import { render } from \"./optional_router_link.vue?vue&type=template&id=0ec30c00\"\nimport script from \"./optional_router_link.vue?vue&type=script&lang=js\"\nexport * from \"./optional_router_link.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport { routeTo } from 'src/components/navigation/navigation.js'\nimport OptionalRouterLink from 'src/components/optional_router_link/optional_router_link.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faThumbtack } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faThumbtack)\n\nconst NavigationEntry = {\n props: ['item', 'showPin'],\n components: {\n OptionalRouterLink\n },\n methods: {\n isPinned (value) {\n return this.pinnedItems.has(value)\n },\n togglePin (value) {\n if (this.isPinned(value)) {\n this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value })\n } else {\n this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value })\n }\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n computed: {\n routeTo () {\n return routeTo(this.item, this.currentUser)\n },\n getters () {\n return this.$store.getters\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)\n })\n }\n}\n\nexport default NavigationEntry\n","import { render } from \"./navigation_entry.vue?vue&type=template&id=de2c2c50\"\nimport script from \"./navigation_entry.js?vue&type=script&lang=js\"\nexport * from \"./navigation_entry.js?vue&type=script&lang=js\"\n\nimport \"./navigation_entry.vue?vue&type=style&index=0&id=de2c2c50&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export const filterNavigation = (list = [], { hasChats, hasAnnouncements, isFederating, isPrivate, currentUser }) => {\n return list.filter(({ criteria, anon, anonRoute }) => {\n const set = new Set(criteria || [])\n if (!isFederating && set.has('federating')) return false\n if (!currentUser && isPrivate && set.has('!private')) return false\n if (!currentUser && !(anon || anonRoute)) return false\n if ((!currentUser || !currentUser.locked) && set.has('lockedUser')) return false\n if (!hasChats && set.has('chats')) return false\n if (!hasAnnouncements && set.has('announcements')) return false\n return true\n })\n}\n\nexport const getListEntries = state => state.lists.allLists.map(list => ({\n name: 'list-' + list.id,\n routeObject: { name: 'lists-timeline', params: { id: list.id } },\n labelRaw: list.title,\n iconLetter: list.title[0]\n}))\n","import { mapState } from 'vuex'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport { getListEntries } from 'src/components/navigation/filter.js'\n\nexport const ListsMenuContent = {\n props: [\n 'showPin'\n ],\n components: {\n NavigationEntry\n },\n computed: {\n ...mapState({\n lists: getListEntries,\n currentUser: state => state.users.currentUser,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating\n })\n }\n}\n\nexport default ListsMenuContent\n","import { render } from \"./lists_menu_content.vue?vue&type=template&id=24f15238\"\nimport script from \"./lists_menu_content.js?vue&type=script&lang=js\"\nexport * from \"./lists_menu_content.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <ul>\n <NavigationEntry\n v-for=\"item in lists\"\n :key=\"item.name\"\n :show-pin=\"showPin\"\n :item=\"item\"\n />\n </ul>\n</template>\n\n<script src=\"./lists_menu_content.js\"></script>\n","<template>\n <span class=\"NavigationPins\">\n <router-link\n v-for=\"item in pinnedList\"\n :key=\"item.name\"\n class=\"pinned-item\"\n :to=\"getRouteTo(item)\"\n :title=\"item.labelRaw || $t(item.label)\"\n >\n <FAIcon\n v-if=\"item.icon\"\n fixed-width\n :icon=\"item.icon\"\n />\n <span\n v-if=\"item.iconLetter\"\n class=\"iconLetter fa-scale-110 fa-old-padding\"\n >{{ item.iconLetter }}</span>\n <div\n v-if=\"item.badgeGetter && getters[item.badgeGetter]\"\n class=\"alert-dot\"\n />\n </router-link>\n </span>\n</template>\n\n<script src=\"./navigation_pins.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.NavigationPins {\n display: flex;\n flex-wrap: wrap;\n overflow: hidden;\n height: 100%;\n\n .alert-dot {\n border-radius: 100%;\n height: 0.5em;\n width: 0.5em;\n position: absolute;\n right: calc(50% - 0.75em);\n top: calc(50% - 0.5em);\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .pinned-item {\n position: relative;\n flex: 1 0 3em;\n min-width: 2em;\n text-align: center;\n overflow: visible;\n box-sizing: border-box;\n height: 100%;\n\n & .svg-inline--fa,\n & .iconLetter {\n margin: 0;\n }\n\n &.router-link-active {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n border-bottom: 4px solid;\n\n & .svg-inline--fa,\n & .iconLetter {\n color: inherit;\n }\n }\n }\n}\n</style>\n","import { mapState } from 'vuex'\nimport { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'\nimport { getListEntries, filterNavigation } from 'src/components/navigation/filter.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList\n)\n\nconst NavPanel = {\n props: ['limit'],\n methods: {\n getRouteTo (item) {\n return routeTo(item, this.currentUser)\n }\n },\n computed: {\n getters () {\n return this.$store.getters\n },\n ...mapState({\n lists: getListEntries,\n currentUser: state => state.users.currentUser,\n followRequestCount: state => state.api.followRequests.length,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating,\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)\n }),\n pinnedList () {\n if (!this.currentUser) {\n return filterNavigation([\n { ...TIMELINES.public, name: 'public' },\n { ...TIMELINES.twkn, name: 'twkn' },\n { ...ROOT_ITEMS.about, name: 'about' }\n ],\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n })\n }\n return filterNavigation(\n [\n ...Object\n .entries({ ...TIMELINES })\n .filter(([k]) => this.pinnedItems.has(k))\n .map(([k, v]) => ({ ...v, name: k })),\n ...this.lists.filter((k) => this.pinnedItems.has(k.name)),\n ...Object\n .entries({ ...ROOT_ITEMS })\n .filter(([k]) => this.pinnedItems.has(k))\n .map(([k, v]) => ({ ...v, name: k }))\n ],\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n ).slice(0, this.limit)\n }\n }\n}\n\nexport default NavPanel\n","import { render } from \"./navigation_pins.vue?vue&type=template&id=61dbea24\"\nimport script from \"./navigation_pins.js?vue&type=script&lang=js\"\nexport * from \"./navigation_pins.js?vue&type=script&lang=js\"\n\nimport \"./navigation_pins.vue?vue&type=style&index=0&id=61dbea24&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import ListsMenuContent from 'src/components/lists_menu/lists_menu_content.vue'\nimport { mapState, mapGetters } from 'vuex'\nimport { TIMELINES, ROOT_ITEMS } from 'src/components/navigation/navigation.js'\nimport { filterNavigation } from 'src/components/navigation/filter.js'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport NavigationPins from 'src/components/navigation/navigation_pins.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faChevronDown,\n faChevronUp,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList,\n faBullhorn\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUsers,\n faGlobe,\n faBookmark,\n faEnvelope,\n faChevronDown,\n faChevronUp,\n faComments,\n faBell,\n faInfoCircle,\n faStream,\n faList,\n faBullhorn\n)\nconst NavPanel = {\n props: ['forceExpand', 'forceEditMode'],\n created () {\n },\n components: {\n ListsMenuContent,\n NavigationEntry,\n NavigationPins,\n Checkbox\n },\n data () {\n return {\n editMode: false,\n showTimelines: false,\n showLists: false,\n timelinesList: Object.entries(TIMELINES).map(([k, v]) => ({ ...v, name: k })),\n rootList: Object.entries(ROOT_ITEMS).map(([k, v]) => ({ ...v, name: k }))\n }\n },\n methods: {\n toggleTimelines () {\n this.showTimelines = !this.showTimelines\n },\n toggleLists () {\n this.showLists = !this.showLists\n },\n toggleEditMode () {\n this.editMode = !this.editMode\n },\n toggleCollapse () {\n this.$store.commit('setPreference', { path: 'simple.collapseNav', value: !this.collapsed })\n this.$store.dispatch('pushServerSideStorage')\n },\n isPinned (item) {\n return this.pinnedItems.has(item)\n },\n togglePin (item) {\n if (this.isPinned(item)) {\n this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value: item })\n } else {\n this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value: item })\n }\n this.$store.dispatch('pushServerSideStorage')\n }\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser,\n followRequestCount: state => state.api.followRequests.length,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating,\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements,\n pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems),\n collapsed: state => state.serverSideStorage.prefsStorage.simple.collapseNav\n }),\n timelinesItems () {\n return filterNavigation(\n Object\n .entries({ ...TIMELINES })\n .map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n },\n rootItems () {\n return filterNavigation(\n Object\n .entries({ ...ROOT_ITEMS })\n .map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n hasAnnouncements: this.supportsAnnouncements,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n }\n}\n\nexport default NavPanel\n","import { render } from \"./nav_panel.vue?vue&type=template&id=7c761001\"\nimport script from \"./nav_panel.js?vue&type=script&lang=js\"\nexport * from \"./nav_panel.js?vue&type=script&lang=js\"\n\nimport \"./nav_panel.vue?vue&type=style&index=0&id=7c761001&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"instance-specific-panel\">\n <div class=\"panel panel-default\">\n <div class=\"panel-body\">\n <!-- eslint-disable vue/no-v-html -->\n <div v-html=\"instanceSpecificPanelContent\" />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./instance_specific_panel.js\"></script>\n","const InstanceSpecificPanel = {\n computed: {\n instanceSpecificPanelContent () {\n return this.$store.state.instance.instanceSpecificPanelContent\n }\n }\n}\n\nexport default InstanceSpecificPanel\n","import { render } from \"./instance_specific_panel.vue?vue&type=template&id=707b4e95\"\nimport script from \"./instance_specific_panel.js?vue&type=script&lang=js\"\nexport * from \"./instance_specific_panel.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"features-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background base04\">\n <div class=\"title\">\n {{ $t('features_panel.title') }}\n </div>\n </div>\n <div class=\"panel-body features-panel\">\n <ul>\n <li v-if=\"shout\">\n {{ $t('features_panel.shout') }}\n </li>\n <li v-if=\"pleromaChatMessages\">\n {{ $t('features_panel.pleroma_chat_messages') }}\n </li>\n <li v-if=\"gopher\">\n {{ $t('features_panel.gopher') }}\n </li>\n <li v-if=\"whoToFollow\">\n {{ $t('features_panel.who_to_follow') }}\n </li>\n <li v-if=\"mediaProxy\">\n {{ $t('features_panel.media_proxy') }}\n </li>\n <li>{{ $t('features_panel.scope_options') }}</li>\n <li>{{ $t('features_panel.text_limit') }} = {{ textlimit }}</li>\n <li>{{ $t('features_panel.upload_limit') }} = {{ uploadlimit.num }} {{ $t('upload.file_size_units.' + uploadlimit.unit) }}</li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./features_panel.js\"></script>\n\n<style lang=\"scss\">\n .features-panel li {\n line-height: 24px;\n }\n</style>\n","import fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nconst FeaturesPanel = {\n computed: {\n shout: function () { return this.$store.state.instance.shoutAvailable },\n pleromaChatMessages: function () { return this.$store.state.instance.pleromaChatMessagesAvailable },\n gopher: function () { return this.$store.state.instance.gopherAvailable },\n whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled },\n mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable },\n minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode },\n textlimit: function () { return this.$store.state.instance.textlimit },\n uploadlimit: function () { return fileSizeFormatService.fileSizeFormat(this.$store.state.instance.uploadlimit) }\n }\n}\n\nexport default FeaturesPanel\n","import { render } from \"./features_panel.vue?vue&type=template&id=76defdfa\"\nimport script from \"./features_panel.js?vue&type=script&lang=js\"\nexport * from \"./features_panel.js?vue&type=script&lang=js\"\n\nimport \"./features_panel.vue?vue&type=style&index=0&id=76defdfa&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"who-to-follow-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background base04\">\n <div class=\"title\">\n {{ $t('who_to_follow.who_to_follow') }}\n </div>\n </div>\n <div class=\"who-to-follow\">\n <p\n v-for=\"user in usersToFollow\"\n :key=\"user.id\"\n class=\"who-to-follow-items\"\n >\n <img :src=\"user.img\">\n <router-link :to=\"userProfileLink(user.id, user.name)\">\n {{ user.name }}\n </router-link><br>\n </p>\n <p class=\"who-to-follow-more\">\n <router-link :to=\"{ name: 'who-to-follow' }\">\n {{ $t('who_to_follow.more') }}\n </router-link>\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./who_to_follow_panel.js\"></script>\n\n<style lang=\"scss\">\n .who-to-follow * {\n vertical-align: middle;\n }\n\n .who-to-follow img {\n width: 32px;\n height: 32px;\n }\n\n .who-to-follow {\n padding: 0 1em;\n margin: 0;\n }\n\n .who-to-follow-items {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0;\n margin: 1em 0;\n }\n\n .who-to-follow-more {\n padding: 0;\n margin: 1em 0;\n text-align: center;\n }\n</style>\n","import apiService from '../../services/api/api.service.js'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { shuffle } from 'lodash'\n\nfunction showWhoToFollow (panel, reply) {\n const shuffled = shuffle(reply)\n\n panel.usersToFollow.forEach((toFollow, index) => {\n const user = shuffled[index]\n const img = user.avatar || this.$store.state.instance.defaultAvatar\n const name = user.acct\n\n toFollow.img = img\n toFollow.name = name\n\n panel.$store.state.api.backendInteractor.fetchUser({ id: name })\n .then((externalUser) => {\n if (!externalUser.error) {\n panel.$store.commit('addNewUsers', [externalUser])\n toFollow.id = externalUser.id\n }\n })\n })\n}\n\nfunction getWhoToFollow (panel) {\n const credentials = panel.$store.state.users.currentUser.credentials\n if (credentials) {\n panel.usersToFollow.forEach(toFollow => {\n toFollow.name = 'Loading...'\n })\n apiService.suggestions({ credentials })\n .then((reply) => {\n showWhoToFollow(panel, reply)\n })\n }\n}\n\nconst WhoToFollowPanel = {\n data: () => ({\n usersToFollow: []\n }),\n computed: {\n user: function () {\n return this.$store.state.users.currentUser.screen_name\n },\n suggestionsEnabled () {\n return this.$store.state.instance.suggestionsEnabled\n }\n },\n methods: {\n userProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n user: function (user, oldUser) {\n if (this.suggestionsEnabled) {\n getWhoToFollow(this)\n }\n }\n },\n mounted:\n function () {\n this.usersToFollow = new Array(3).fill().map(x => (\n {\n img: this.$store.state.instance.defaultAvatar,\n name: '',\n id: 0\n }\n ))\n if (this.suggestionsEnabled) {\n getWhoToFollow(this)\n }\n }\n}\n\nexport default WhoToFollowPanel\n","import { render } from \"./who_to_follow_panel.vue?vue&type=template&id=f150b2ba\"\nimport script from \"./who_to_follow_panel.js?vue&type=script&lang=js\"\nexport * from \"./who_to_follow_panel.js?vue&type=script&lang=js\"\n\nimport \"./who_to_follow_panel.vue?vue&type=style&index=0&id=f150b2ba&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!collapsed || !floating\"\n class=\"shout-panel\"\n >\n <div class=\"panel panel-default\">\n <div\n class=\"panel-heading timeline-heading\"\n :class=\"{ 'shout-heading': floating }\"\n @click.stop.prevent=\"togglePanel\"\n >\n <div class=\"title\">\n {{ $t('shoutbox.title') }}\n <FAIcon\n v-if=\"floating\"\n icon=\"times\"\n class=\"close-icon\"\n />\n </div>\n </div>\n <div class=\"shout-window\">\n <div\n v-for=\"message in messages\"\n :key=\"message.id\"\n class=\"shout-message\"\n >\n <span class=\"shout-avatar\">\n <img :src=\"message.author.avatar\">\n </span>\n <div class=\"shout-content\">\n <router-link\n class=\"shout-name\"\n :to=\"userProfileLink(message.author)\"\n >\n {{ message.author.username }}\n </router-link>\n <br>\n <span class=\"shout-text\">\n {{ message.text }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"shout-input\">\n <textarea\n v-model=\"currentMessage\"\n class=\"shout-input-textarea\"\n rows=\"1\"\n @keyup.enter=\"submit(currentMessage)\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"shout-panel\"\n >\n <div class=\"panel panel-default\">\n <div\n class=\"panel-heading -stub timeline-heading shout-heading\"\n @click.stop.prevent=\"togglePanel\"\n >\n <div class=\"title\">\n <FAIcon\n class=\"icon\"\n icon=\"bullhorn\"\n />\n {{ $t('shoutbox.title') }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./shout_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.floating-shout {\n position: fixed;\n bottom: 0.5em;\n z-index: var(--ZI_popovers);\n max-width: 25em;\n\n &.-left {\n left: 0.5em;\n }\n\n &:not(.-left) {\n right: 0.5em;\n }\n}\n\n.shout-panel {\n .shout-heading {\n cursor: pointer;\n\n .icon {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n margin-right: 0.5em;\n }\n\n .title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n .shout-window {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 20em;\n }\n\n .shout-window-container {\n height: 100%;\n }\n\n .shout-message {\n display: flex;\n padding: 0.2em 0.5em;\n }\n\n .shout-avatar {\n img {\n height: 24px;\n width: 24px;\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n margin-right: 0.5em;\n margin-top: 0.25em;\n }\n }\n\n .shout-input {\n display: flex;\n\n textarea {\n flex: 1;\n margin: 0.6em;\n min-height: 3.5em;\n resize: none;\n }\n }\n\n .shout-panel {\n .title {\n display: flex;\n justify-content: space-between;\n }\n }\n}\n</style>\n","import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBullhorn,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faBullhorn,\n faTimes\n)\n\nconst shoutPanel = {\n props: ['floating'],\n data () {\n return {\n currentMessage: '',\n channel: null,\n collapsed: true\n }\n },\n computed: {\n messages () {\n return this.$store.state.shout.messages\n }\n },\n methods: {\n submit (message) {\n this.$store.state.shout.channel.push('new_msg', { text: message }, 10000)\n this.currentMessage = ''\n },\n togglePanel () {\n this.collapsed = !this.collapsed\n },\n userProfileLink (user) {\n return generateProfileLink(user.id, user.username, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n messages (newVal) {\n const scrollEl = this.$el.querySelector('.chat-window')\n if (!scrollEl) return\n if (scrollEl.scrollTop + scrollEl.offsetHeight + 20 > scrollEl.scrollHeight) {\n this.$nextTick(() => {\n if (!scrollEl) return\n scrollEl.scrollTop = scrollEl.scrollHeight - scrollEl.offsetHeight\n })\n }\n }\n }\n}\n\nexport default shoutPanel\n","import { render } from \"./shout_panel.vue?vue&type=template&id=48f55c04\"\nimport script from \"./shout_panel.js?vue&type=script&lang=js\"\nexport * from \"./shout_panel.js?vue&type=script&lang=js\"\n\nimport \"./shout_panel.vue?vue&type=style&index=0&id=48f55c04&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"showing\"\n class=\"media-modal-view\"\n @backdropClicked=\"hideIfNotSwiped\"\n >\n <SwipeClick\n v-if=\"type === 'image'\"\n ref=\"swipeClick\"\n class=\"modal-image-container\"\n :direction=\"swipeDirection\"\n :threshold=\"swipeThreshold\"\n :disable-click-threshold=\"swipeDisableClickThreshold\"\n @preview-requested=\"handleSwipePreview\"\n @swipe-finished=\"handleSwipeEnd\"\n @swipeless-clicked=\"hide\"\n >\n <PinchZoom\n ref=\"pinchZoom\"\n class=\"modal-image-container-inner\"\n selector=\".modal-image\"\n reach-min-scale-strategy=\"reset\"\n stop-propagate-handled=\"stop-propgate-handled\"\n :allow-pan-min-scale=\"pinchZoomMinScale\"\n :min-scale=\"pinchZoomMinScale\"\n :reset-to-min-scale-limit=\"pinchZoomScaleResetLimit\"\n >\n <img\n :class=\"{ loading }\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n @load=\"onImageLoaded\"\n >\n </PinchZoom>\n </SwipeClick>\n <VideoAttachment\n v-if=\"type === 'video'\"\n class=\"modal-image\"\n :attachment=\"currentMedia\"\n :controls=\"true\"\n />\n <audio\n v-if=\"type === 'audio'\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n controls\n />\n <Flash\n v-if=\"type === 'flash'\"\n class=\"modal-image\"\n :src=\"currentMedia.url\"\n :alt=\"currentMedia.description\"\n :title=\"currentMedia.description\"\n />\n <button\n v-if=\"canNavigate\"\n :title=\"$t('media_modal.previous')\"\n class=\"modal-view-button modal-view-button-arrow modal-view-button-arrow--prev\"\n @click.stop.prevent=\"goPrev\"\n >\n <FAIcon\n class=\"button-icon arrow-icon\"\n icon=\"chevron-left\"\n />\n </button>\n <button\n v-if=\"canNavigate\"\n :title=\"$t('media_modal.next')\"\n class=\"modal-view-button modal-view-button-arrow modal-view-button-arrow--next\"\n @click.stop.prevent=\"goNext\"\n >\n <FAIcon\n class=\"button-icon arrow-icon\"\n icon=\"chevron-right\"\n />\n </button>\n <button\n class=\"modal-view-button modal-view-button-hide\"\n :title=\"$t('media_modal.hide')\"\n @click.stop.prevent=\"hide\"\n >\n <FAIcon\n class=\"button-icon\"\n icon=\"times\"\n />\n </button>\n\n <span\n v-if=\"description\"\n class=\"description\"\n >\n {{ description }}\n </span>\n <span\n class=\"counter\"\n >\n {{ $tc('media_modal.counter', currentIndex + 1, { current: currentIndex + 1, total: media.length }) }}\n </span>\n <span\n v-if=\"loading\"\n class=\"loading-spinner\"\n >\n <FAIcon\n spin\n icon=\"circle-notch\"\n size=\"5x\"\n />\n </span>\n </Modal>\n</template>\n\n<script src=\"./media_modal.js\"></script>\n\n<style lang=\"scss\">\n$modal-view-button-icon-height: 3em;\n$modal-view-button-icon-half-height: calc(#{$modal-view-button-icon-height} / 2);\n$modal-view-button-icon-width: 3em;\n$modal-view-button-icon-margin: 0.5em;\n\n.media-modal-view {\n @keyframes media-fadein {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .modal-image-container {\n display: flex;\n overflow: hidden;\n align-items: center;\n flex-direction: column;\n max-width: 100%;\n max-height: 100%;\n width: 100%;\n height: 100%;\n flex-grow: 1;\n justify-content: center;\n\n &-inner {\n width: 100%;\n height: 100%;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n }\n\n .description,\n .counter {\n /* Hardcoded since background is also hardcoded */\n color: white;\n margin-top: 1em;\n text-shadow: 0 0 10px black, 0 0 10px black;\n padding: 0.2em 2em;\n }\n\n .description {\n flex: 0 0 auto;\n overflow-y: auto;\n min-height: 1em;\n max-width: 500px;\n max-height: 9.5em;\n word-break: break-all;\n }\n\n .modal-image {\n max-width: 100%;\n max-height: 100%;\n image-orientation: from-image; // NOTE: only FF supports this\n animation: 0.1s cubic-bezier(0.7, 0, 1, 0.6) media-fadein;\n\n &.loading {\n opacity: 0.5;\n }\n }\n\n .loading-spinner {\n width: 100%;\n height: 100%;\n position: absolute;\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n color: white;\n }\n }\n\n .modal-view-button {\n border: 0;\n padding: 0;\n opacity: 0;\n box-shadow: none;\n background: none;\n appearance: none;\n overflow: visible;\n cursor: pointer;\n transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n\n .button-icon {\n position: absolute;\n height: $modal-view-button-icon-height;\n width: $modal-view-button-icon-width;\n font-size: 1rem;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n }\n\n .modal-view-button-arrow {\n position: absolute;\n display: block;\n top: 50%;\n margin-top: $modal-view-button-icon-half-height;\n width: $modal-view-button-icon-width;\n height: $modal-view-button-icon-height;\n\n .arrow-icon {\n position: absolute;\n top: 0;\n line-height: $modal-view-button-icon-height;\n color: #fff;\n text-align: center;\n background-color: rgb(0 0 0 / 30%);\n }\n\n &--prev {\n left: 0;\n\n .arrow-icon {\n left: $modal-view-button-icon-margin;\n }\n }\n\n &--next {\n right: 0;\n\n .arrow-icon {\n right: $modal-view-button-icon-margin;\n }\n }\n }\n\n .modal-view-button-hide {\n position: absolute;\n top: 0;\n right: 0;\n\n .button-icon {\n top: $modal-view-button-icon-margin;\n right: $modal-view-button-icon-margin;\n }\n }\n}\n\n.modal-view.media-modal-view {\n z-index: var(--ZI_media_modal);\n flex-direction: column;\n\n .modal-view-button-arrow,\n .modal-view-button-hide {\n opacity: 0.75;\n\n &:focus,\n &:hover {\n outline: none;\n box-shadow: none;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n overflow: hidden;\n}\n</style>\n","import PinchZoom from '@kazvmoe-infra/pinch-zoom-element'\n\nexport default {\n methods: {\n setTransform ({ scale, x, y }) {\n this.$el.setTransform({ scale, x, y })\n }\n },\n created () {\n // Make lint happy\n (() => PinchZoom)()\n }\n}\n","import { render } from \"./pinch_zoom.vue?vue&type=template&id=4608b5bf\"\nimport script from \"./pinch_zoom.js?vue&type=script&lang=js\"\nexport * from \"./pinch_zoom.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <pinch-zoom\n class=\"pinch-zoom-parent\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n >\n <slot />\n </pinch-zoom>\n</template>\n\n<script src=\"./pinch_zoom.js\"></script>\n","\nconst DIRECTION_LEFT = [-1, 0]\nconst DIRECTION_RIGHT = [1, 0]\nconst DIRECTION_UP = [0, -1]\nconst DIRECTION_DOWN = [0, 1]\n\nconst BUTTON_LEFT = 0\n\nconst deltaCoord = (oldCoord, newCoord) => [newCoord[0] - oldCoord[0], newCoord[1] - oldCoord[1]]\n\nconst touchCoord = touch => [touch.screenX, touch.screenY]\n\nconst touchEventCoord = e => touchCoord(e.touches[0])\n\nconst pointerEventCoord = e => [e.clientX, e.clientY]\n\nconst vectorLength = v => Math.sqrt(v[0] * v[0] + v[1] * v[1])\n\nconst perpendicular = v => [v[1], -v[0]]\n\nconst dotProduct = (v1, v2) => v1[0] * v2[0] + v1[1] * v2[1]\n\nconst project = (v1, v2) => {\n const scalar = (dotProduct(v1, v2) / dotProduct(v2, v2))\n return [scalar * v2[0], scalar * v2[1]]\n}\n\n// direction: either use the constants above or an arbitrary 2d vector.\n// threshold: how many Px to move from touch origin before checking if the\n// callback should be called.\n// divergentTolerance: a scalar for much of divergent direction we tolerate when\n// above threshold. for example, with 1.0 we only call the callback if\n// divergent component of delta is < 1.0 * direction component of delta.\nconst swipeGesture = (direction, onSwipe, threshold = 30, perpendicularTolerance = 1.0) => {\n return {\n direction,\n onSwipe,\n threshold,\n perpendicularTolerance,\n _startPos: [0, 0],\n _swiping: false\n }\n}\n\nconst beginSwipe = (event, gesture) => {\n gesture._startPos = touchEventCoord(event)\n gesture._swiping = true\n}\n\nconst updateSwipe = (event, gesture) => {\n if (!gesture._swiping) return\n // movement too small\n const delta = deltaCoord(gesture._startPos, touchEventCoord(event))\n if (vectorLength(delta) < gesture.threshold) return\n // movement is opposite from direction\n if (dotProduct(delta, gesture.direction) < 0) return\n // movement perpendicular to direction is too much\n const towardsDir = project(delta, gesture.direction)\n const perpendicularDir = perpendicular(gesture.direction)\n const towardsPerpendicular = project(delta, perpendicularDir)\n if (\n vectorLength(towardsDir) * gesture.perpendicularTolerance <\n vectorLength(towardsPerpendicular)\n ) return\n\n gesture.onSwipe()\n gesture._swiping = false\n}\n\nclass SwipeAndClickGesture {\n // swipePreviewCallback(offsets: Array[Number])\n // offsets: the offset vector which the underlying component should move, from the starting position\n // swipeEndCallback(sign: 0|-1|1)\n // sign: if the swipe does not meet the threshold, 0\n // if the swipe meets the threshold in the positive direction, 1\n // if the swipe meets the threshold in the negative direction, -1\n constructor ({\n direction,\n // swipeStartCallback\n swipePreviewCallback,\n swipeEndCallback,\n swipeCancelCallback,\n swipelessClickCallback,\n threshold = 30,\n perpendicularTolerance = 1.0,\n disableClickThreshold = 1\n }) {\n const nop = () => {}\n this.direction = direction\n this.swipePreviewCallback = swipePreviewCallback || nop\n this.swipeEndCallback = swipeEndCallback || nop\n this.swipeCancelCallback = swipeCancelCallback || nop\n this.swipelessClickCallback = swipelessClickCallback || nop\n this.threshold = typeof threshold === 'function' ? threshold : () => threshold\n this.disableClickThreshold = typeof disableClickThreshold === 'function' ? disableClickThreshold : () => disableClickThreshold\n this.perpendicularTolerance = perpendicularTolerance\n this._reset()\n }\n\n _reset () {\n this._startPos = [0, 0]\n this._pointerId = -1\n this._swiping = false\n this._swiped = false\n this._preventNextClick = false\n }\n\n start (event) {\n // Only handle left click\n if (event.button !== BUTTON_LEFT) {\n return\n }\n\n this._startPos = pointerEventCoord(event)\n this._pointerId = event.pointerId\n this._swiping = true\n this._swiped = false\n }\n\n move (event) {\n if (this._swiping && this._pointerId === event.pointerId) {\n this._swiped = true\n\n const coord = pointerEventCoord(event)\n const delta = deltaCoord(this._startPos, coord)\n\n this.swipePreviewCallback(delta)\n }\n }\n\n cancel (event) {\n if (!this._swiping || this._pointerId !== event.pointerId) {\n return\n }\n\n this.swipeCancelCallback()\n }\n\n end (event) {\n if (!this._swiping) {\n return\n }\n\n if (this._pointerId !== event.pointerId) {\n return\n }\n\n this._swiping = false\n\n // movement too small\n const coord = pointerEventCoord(event)\n const delta = deltaCoord(this._startPos, coord)\n\n const sign = (() => {\n if (vectorLength(delta) < this.threshold()) {\n return 0\n }\n // movement is opposite from direction\n const isPositive = dotProduct(delta, this.direction) > 0\n\n // movement perpendicular to direction is too much\n const towardsDir = project(delta, this.direction)\n const perpendicularDir = perpendicular(this.direction)\n const towardsPerpendicular = project(delta, perpendicularDir)\n if (\n vectorLength(towardsDir) * this.perpendicularTolerance <\n vectorLength(towardsPerpendicular)\n ) {\n return 0\n }\n\n return isPositive ? 1 : -1\n })()\n\n if (this._swiped) {\n this.swipeEndCallback(sign)\n }\n this._reset()\n // Only a mouse will fire click event when\n // the end point is far from the starting point\n // so for other kinds of pointers do not check\n // whether we have swiped\n if (vectorLength(delta) >= this.disableClickThreshold() && event.pointerType === 'mouse') {\n this._preventNextClick = true\n }\n }\n\n click (event) {\n if (!this._preventNextClick) {\n this.swipelessClickCallback()\n }\n this._reset()\n }\n}\n\nconst GestureService = {\n DIRECTION_LEFT,\n DIRECTION_RIGHT,\n DIRECTION_UP,\n DIRECTION_DOWN,\n swipeGesture,\n beginSwipe,\n updateSwipe,\n SwipeAndClickGesture\n}\n\nexport default GestureService\n","import GestureService from '../../services/gesture_service/gesture_service'\n\n/**\n * props:\n * direction: a vector that indicates the direction of the intended swipe\n * threshold: the minimum distance in pixels the swipe has moved on `direction'\n * for swipe-finished() to have a non-zero sign\n * disableClickThreshold: the minimum distance in pixels for the swipe to\n * not trigger a click\n * perpendicularTolerance: see gesture_service\n *\n * Events:\n * preview-requested(offsets)\n * Emitted when the pointer has moved.\n * offsets: the offsets from the start of the swipe to the current cursor position\n *\n * swipe-canceled()\n * Emitted when the swipe has been canceled due to a pointercancel event.\n *\n * swipe-finished(sign: 0|-1|1)\n * Emitted when the swipe has finished.\n * sign: if the swipe does not meet the threshold, 0\n * if the swipe meets the threshold in the positive direction, 1\n * if the swipe meets the threshold in the negative direction, -1\n *\n * swipeless-clicked()\n * Emitted when there is a click without swipe.\n * This and swipe-finished() cannot be emitted for the same pointerup event.\n */\nconst SwipeClick = {\n props: {\n direction: {\n type: Array\n },\n threshold: {\n type: Function,\n default: () => 30\n },\n disableClickThreshold: {\n type: Function,\n default: () => 1\n },\n perpendicularTolerance: {\n type: Number,\n default: 1.0\n }\n },\n methods: {\n handlePointerDown (event) {\n this.$gesture.start(event)\n },\n handlePointerMove (event) {\n this.$gesture.move(event)\n },\n handlePointerUp (event) {\n this.$gesture.end(event)\n },\n handlePointerCancel (event) {\n this.$gesture.cancel(event)\n },\n handleNativeClick (event) {\n this.$gesture.click(event)\n },\n preview (offsets) {\n this.$emit('preview-requested', offsets)\n },\n end (sign) {\n this.$emit('swipe-finished', sign)\n },\n click () {\n this.$emit('swipeless-clicked')\n },\n cancel () {\n this.$emit('swipe-canceled')\n }\n },\n created () {\n this.$gesture = new GestureService.SwipeAndClickGesture({\n direction: this.direction,\n threshold: this.threshold,\n disableClickThreshold: this.disableClickThreshold,\n perpendicularTolerance: this.perpendicularTolerance,\n swipePreviewCallback: this.preview,\n swipeEndCallback: this.end,\n swipeCancelCallback: this.cancel,\n swipelessClickCallback: this.click\n })\n }\n}\n\nexport default SwipeClick\n","import { render } from \"./swipe_click.vue?vue&type=template&id=4c0f684c\"\nimport script from \"./swipe_click.js?vue&type=script&lang=js\"\nexport * from \"./swipe_click.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-bind=\"$attrs\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerup=\"handlePointerUp\"\n @pointercancel=\"handlePointerCancel\"\n @click=\"handleNativeClick\"\n >\n <slot />\n </div>\n</template>\n\n<script src=\"./swipe_click.js\"></script>\n","import StillImage from '../still-image/still-image.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport Modal from '../modal/modal.vue'\nimport PinchZoom from '../pinch_zoom/pinch_zoom.vue'\nimport SwipeClick from '../swipe_click/swipe_click.vue'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport Flash from 'src/components/flash/flash.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronLeft,\n faChevronRight,\n faCircleNotch,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronLeft,\n faChevronRight,\n faCircleNotch,\n faTimes\n)\n\nconst MediaModal = {\n components: {\n StillImage,\n VideoAttachment,\n PinchZoom,\n SwipeClick,\n Modal,\n Flash\n },\n data () {\n return {\n loading: false,\n swipeDirection: GestureService.DIRECTION_LEFT,\n swipeThreshold: () => {\n const considerableMoveRatio = 1 / 4\n return window.innerWidth * considerableMoveRatio\n },\n pinchZoomMinScale: 1,\n pinchZoomScaleResetLimit: 1.2\n }\n },\n computed: {\n showing () {\n return this.$store.state.mediaViewer.activated\n },\n media () {\n return this.$store.state.mediaViewer.media\n },\n description () {\n return this.currentMedia.description\n },\n currentIndex () {\n return this.$store.state.mediaViewer.currentIndex\n },\n currentMedia () {\n return this.media[this.currentIndex]\n },\n canNavigate () {\n return this.media.length > 1\n },\n type () {\n return this.currentMedia ? this.getType(this.currentMedia) : null\n },\n swipeDisableClickThreshold () {\n // If there is only one media, allow more mouse movements to close the modal\n // because there is less chance that the user wants to switch to another image\n return () => this.canNavigate ? 1 : 30\n }\n },\n methods: {\n getType (media) {\n return fileTypeService.fileType(media.mimetype)\n },\n hide () {\n // HACK: Closing immediately via a touch will cause the click\n // to be processed on the content below the overlay\n const transitionTime = 100 // ms\n setTimeout(() => {\n this.$store.dispatch('closeMediaViewer')\n }, transitionTime)\n },\n hideIfNotSwiped (event) {\n // If we have swiped over SwipeClick, do not trigger hide\n const comp = this.$refs.swipeClick\n if (!comp) {\n this.hide()\n } else {\n comp.$gesture.click(event)\n }\n },\n goPrev () {\n if (this.canNavigate) {\n const prevIndex = this.currentIndex === 0 ? this.media.length - 1 : (this.currentIndex - 1)\n const newMedia = this.media[prevIndex]\n if (this.getType(newMedia) === 'image') {\n this.loading = true\n }\n this.$store.dispatch('setCurrentMedia', newMedia)\n }\n },\n goNext () {\n if (this.canNavigate) {\n const nextIndex = this.currentIndex === this.media.length - 1 ? 0 : (this.currentIndex + 1)\n const newMedia = this.media[nextIndex]\n if (this.getType(newMedia) === 'image') {\n this.loading = true\n }\n this.$store.dispatch('setCurrentMedia', newMedia)\n }\n },\n onImageLoaded () {\n this.loading = false\n },\n handleSwipePreview (offsets) {\n this.$refs.pinchZoom.setTransform({ scale: 1, x: offsets[0], y: 0 })\n },\n handleSwipeEnd (sign) {\n this.$refs.pinchZoom.setTransform({ scale: 1, x: 0, y: 0 })\n if (sign > 0) {\n this.goNext()\n } else if (sign < 0) {\n this.goPrev()\n }\n },\n handleKeyupEvent (e) {\n if (this.showing && e.keyCode === 27) { // escape\n this.hide()\n }\n },\n handleKeydownEvent (e) {\n if (!this.showing) {\n return\n }\n\n if (e.keyCode === 39) { // arrow right\n this.goNext()\n } else if (e.keyCode === 37) { // arrow left\n this.goPrev()\n }\n }\n },\n mounted () {\n window.addEventListener('popstate', this.hide)\n document.addEventListener('keyup', this.handleKeyupEvent)\n document.addEventListener('keydown', this.handleKeydownEvent)\n },\n unmounted () {\n window.removeEventListener('popstate', this.hide)\n document.removeEventListener('keyup', this.handleKeyupEvent)\n document.removeEventListener('keydown', this.handleKeydownEvent)\n }\n}\n\nexport default MediaModal\n","import { render } from \"./media_modal.vue?vue&type=template&id=a080a8e6\"\nimport script from \"./media_modal.js?vue&type=script&lang=js\"\nexport * from \"./media_modal.js?vue&type=script&lang=js\"\n\nimport \"./media_modal.vue?vue&type=style&index=0&id=a080a8e6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"side-drawer-container\"\n :class=\"{ 'side-drawer-container-closed': closed, 'side-drawer-container-open': !closed }\"\n >\n <div\n class=\"side-drawer-darken\"\n :class=\"{ 'side-drawer-darken-closed': closed}\"\n />\n <div\n class=\"side-drawer\"\n :class=\"{'side-drawer-closed': closed}\"\n @touchstart=\"touchStart\"\n @touchmove=\"touchMove\"\n >\n <div\n class=\"side-drawer-heading\"\n @click=\"toggleDrawer\"\n >\n <UserCard\n v-if=\"currentUser\"\n :user-id=\"currentUser.id\"\n :hide-bio=\"true\"\n />\n <div\n v-else\n class=\"side-drawer-logo-wrapper\"\n >\n <img :src=\"logo\">\n <span v-if=\"!hideSitename\">{{ sitename }}</span>\n </div>\n </div>\n <ul>\n <li\n v-if=\"!currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'login' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-in-alt\"\n /> {{ $t(\"login.login\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser || !privateMode\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"timelinesRoute\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"home\"\n /> {{ $t(\"nav.timelines\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'lists' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"list\"\n /> {{ $t(\"nav.lists\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && pleromaChatMessagesAvailable\"\n @click=\"toggleDrawer\"\n >\n <router-link\n :to=\"{ name: 'chats', params: { username: currentUser.screen_name } }\"\n style=\"position: relative;\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"comments\"\n /> {{ $t(\"nav.chats\") }}\n <span\n v-if=\"unreadChatCount\"\n class=\"badge badge-notification\"\n >\n {{ unreadChatCount }}\n </span>\n </router-link>\n </li>\n </ul>\n <ul v-if=\"currentUser\">\n <li @click=\"toggleDrawer\">\n <router-link :to=\"{ name: 'interactions', params: { username: currentUser.screen_name } }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bell\"\n /> {{ $t(\"nav.interactions\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser.locked\"\n @click=\"toggleDrawer\"\n >\n <router-link to=\"/friend-requests\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"user-plus\"\n /> {{ $t(\"nav.friend_requests\") }}\n <span\n v-if=\"followRequestCount > 0\"\n class=\"badge badge-notification\"\n >\n {{ followRequestCount }}\n </span>\n </router-link>\n </li>\n <li\n v-if=\"shout\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'shout-panel' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bullhorn\"\n /> {{ $t(\"shoutbox.title\") }}\n </router-link>\n </li>\n </ul>\n <ul>\n <li\n v-if=\"currentUser || !privateMode\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'search' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search\"\n /> {{ $t(\"nav.search\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && suggestionsEnabled\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'who-to-follow' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"user-plus\"\n /> {{ $t(\"nav.who_to_follow\") }}\n </router-link>\n </li>\n <li @click=\"toggleDrawer\">\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click=\"openSettingsModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"cog\"\n /> {{ $t(\"settings.settings\") }}\n </button>\n </li>\n <li @click=\"toggleDrawer\">\n <router-link :to=\"{ name: 'about'}\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"info-circle\"\n /> {{ $t(\"nav.about\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser && currentUser.role === 'admin'\"\n @click=\"toggleDrawer\"\n >\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click.stop=\"openAdminModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"tachometer-alt\"\n /> {{ $t(\"nav.administration\") }}\n </button>\n </li>\n <li\n v-if=\"currentUser && supportsAnnouncements\"\n @click=\"toggleDrawer\"\n >\n <router-link\n :to=\"{ name: 'announcements' }\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bullhorn\"\n /> {{ $t(\"nav.announcements\") }}\n <span\n v-if=\"unreadAnnouncementCount\"\n class=\"badge badge-notification\"\n >\n {{ unreadAnnouncementCount }}\n </span>\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <router-link :to=\"{ name: 'edit-navigation' }\">\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"compass\"\n /> {{ $t(\"nav.edit_nav_mobile\") }}\n </router-link>\n </li>\n <li\n v-if=\"currentUser\"\n @click=\"toggleDrawer\"\n >\n <button\n class=\"button-unstyled -link -fullwidth\"\n @click=\"doLogout\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-out-alt\"\n /> {{ $t(\"login.logout\") }}\n </button>\n </li>\n </ul>\n </div>\n <div\n class=\"side-drawer-click-outside\"\n :class=\"{'side-drawer-click-outside-closed': closed}\"\n @click.stop.prevent=\"toggleDrawer\"\n />\n </div>\n</template>\n\n<script src=\"./side_drawer.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.side-drawer-container {\n position: fixed;\n z-index: var(--ZI_navbar);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: stretch;\n transition-duration: 0s;\n transition-property: transform;\n}\n\n.side-drawer-container-open {\n transform: translate(0%);\n}\n\n.side-drawer-container-closed {\n transition-delay: 0.35s;\n transform: translate(-100%);\n}\n\n.side-drawer-darken {\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n position: fixed;\n z-index: -1;\n transition: 0.35s;\n transition-property: background-color;\n background-color: rgb(0 0 0 / 50%);\n}\n\n.side-drawer-darken-closed {\n background-color: rgb(0 0 0 / 0%);\n}\n\n.side-drawer-click-outside {\n flex: 1 1 100%;\n}\n\n.side-drawer {\n overflow-x: hidden;\n transition: 0.35s;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-property: transform;\n margin: 0 0 0 -100px;\n padding: 0 0 1em 100px;\n width: 80%;\n max-width: 20em;\n flex: 0 0 80%;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--link;\n color: var(--popoverText, $fallback--link);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --icon: var(--popoverIcon, $fallback--icon);\n\n .badge {\n margin-left: 10px;\n }\n}\n\n.side-drawer-logo-wrapper {\n display: flex;\n align-items: center;\n padding: 0.85em;\n\n img {\n flex: none;\n height: 50px;\n margin-right: 0.85em;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.side-drawer-click-outside-closed {\n flex: 0 0 0;\n}\n\n.side-drawer-closed {\n transform: translate(-100%);\n}\n\n.side-drawer-heading {\n background: transparent;\n flex-direction: column;\n align-items: stretch;\n display: flex;\n padding: 0;\n margin: 0;\n}\n\n.side-drawer ul {\n list-style: none;\n margin: 0;\n padding: 0;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.side-drawer ul:last-child {\n border: 0;\n}\n\n.side-drawer li {\n padding: 0;\n\n a,\n button {\n box-sizing: border-box;\n display: block;\n height: 3em;\n line-height: 3em;\n padding: 0 0.7em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n</style>\n","import { mapState, mapGetters } from 'vuex'\nimport UserCard from '../user_card/user_card.vue'\nimport { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport { USERNAME_ROUTES } from 'src/components/navigation/navigation.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle,\n faCompass,\n faList\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle,\n faCompass,\n faList\n)\n\nconst SideDrawer = {\n props: ['logout'],\n data: () => ({\n closed: true,\n closeGesture: undefined\n }),\n created () {\n this.closeGesture = GestureService.swipeGesture(GestureService.DIRECTION_LEFT, this.toggleDrawer)\n\n if (this.currentUser && this.currentUser.locked) {\n this.$store.dispatch('startFetchingFollowRequests')\n }\n },\n components: { UserCard },\n computed: {\n currentUser () {\n return this.$store.state.users.currentUser\n },\n shout () { return this.$store.state.shout.joined },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n unseenNotificationsCount () {\n return this.unseenNotifications.length\n },\n suggestionsEnabled () {\n return this.$store.state.instance.suggestionsEnabled\n },\n logo () {\n return this.$store.state.instance.logo\n },\n hideSitename () {\n return this.$store.state.instance.hideSitename\n },\n sitename () {\n return this.$store.state.instance.name\n },\n followRequestCount () {\n return this.$store.state.api.followRequests.length\n },\n privateMode () {\n return this.$store.state.instance.private\n },\n federating () {\n return this.$store.state.instance.federating\n },\n timelinesRoute () {\n let name\n if (this.$store.state.interface.lastTimeline) {\n name = this.$store.state.interface.lastTimeline\n }\n name = this.currentUser ? 'friends' : 'public-timeline'\n if (USERNAME_ROUTES.has(name)) {\n return { name, params: { username: this.currentUser.screen_name } }\n } else {\n return { name }\n }\n },\n ...mapState({\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,\n supportsAnnouncements: state => state.announcements.supportsAnnouncements\n }),\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n },\n methods: {\n toggleDrawer () {\n this.closed = !this.closed\n },\n doLogout () {\n this.logout()\n this.toggleDrawer()\n },\n touchStart (e) {\n GestureService.beginSwipe(e, this.closeGesture)\n },\n touchMove (e) {\n GestureService.updateSwipe(e, this.closeGesture)\n },\n openSettingsModal () {\n this.$store.dispatch('openSettingsModal', 'user')\n },\n openAdminModal () {\n this.$store.dispatch('openSettingsModal', 'admin')\n }\n }\n}\n\nexport default SideDrawer\n","import { render } from \"./side_drawer.vue?vue&type=template&id=0c55529b\"\nimport script from \"./side_drawer.js?vue&type=script&lang=js\"\nexport * from \"./side_drawer.js?vue&type=script&lang=js\"\n\nimport \"./side_drawer.vue?vue&type=style&index=0&id=0c55529b&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { debounce } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faPen\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faPen\n)\n\nconst HIDDEN_FOR_PAGES = new Set([\n 'chats',\n 'chat',\n 'lists-edit'\n])\n\nconst MobilePostStatusButton = {\n data () {\n return {\n hidden: false,\n scrollingDown: false,\n inputActive: false,\n oldScrollPos: 0,\n amountScrolled: 0\n }\n },\n created () {\n if (this.autohideFloatingPostButton) {\n this.activateFloatingPostButtonAutohide()\n }\n window.addEventListener('resize', this.handleOSK)\n },\n unmounted () {\n if (this.autohideFloatingPostButton) {\n this.deactivateFloatingPostButtonAutohide()\n }\n window.removeEventListener('resize', this.handleOSK)\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n isHidden () {\n if (HIDDEN_FOR_PAGES.has(this.$route.name)) { return true }\n\n return this.autohideFloatingPostButton && (this.hidden || this.inputActive)\n },\n isPersistent () {\n return !!this.$store.getters.mergedConfig.alwaysShowNewPostButton\n },\n autohideFloatingPostButton () {\n return !!this.$store.getters.mergedConfig.autohideFloatingPostButton\n }\n },\n watch: {\n autohideFloatingPostButton: function (isEnabled) {\n if (isEnabled) {\n this.activateFloatingPostButtonAutohide()\n } else {\n this.deactivateFloatingPostButtonAutohide()\n }\n }\n },\n methods: {\n activateFloatingPostButtonAutohide () {\n window.addEventListener('scroll', this.handleScrollStart)\n window.addEventListener('scroll', this.handleScrollEnd)\n },\n deactivateFloatingPostButtonAutohide () {\n window.removeEventListener('scroll', this.handleScrollStart)\n window.removeEventListener('scroll', this.handleScrollEnd)\n },\n openPostForm () {\n this.$store.dispatch('openPostStatusModal')\n },\n handleOSK () {\n // This is a big hack: we're guessing from changed window sizes if the\n // on-screen keyboard is active or not. This is only really important\n // for phones in portrait mode and it's more important to show the button\n // in normal scenarios on all phones, than it is to hide it when the\n // keyboard is active.\n // Guesswork based on https://www.mydevice.io/#compare-devices\n\n // for example, iphone 4 and android phones from the same time period\n const smallPhone = window.innerWidth < 350\n const smallPhoneKbOpen = smallPhone && window.innerHeight < 345\n\n const biggerPhone = !smallPhone && window.innerWidth < 450\n const biggerPhoneKbOpen = biggerPhone && window.innerHeight < 560\n if (smallPhoneKbOpen || biggerPhoneKbOpen) {\n this.inputActive = true\n } else {\n this.inputActive = false\n }\n },\n handleScrollStart: debounce(function () {\n if (window.scrollY > this.oldScrollPos) {\n this.hidden = true\n } else {\n this.hidden = false\n }\n this.oldScrollPos = window.scrollY\n }, 100, { leading: true, trailing: false }),\n\n handleScrollEnd: debounce(function () {\n this.hidden = false\n this.oldScrollPos = window.scrollY\n }, 100, { leading: false, trailing: true })\n }\n}\n\nexport default MobilePostStatusButton\n","import { render } from \"./mobile_post_status_button.vue?vue&type=template&id=6c0a4c69\"\nimport script from \"./mobile_post_status_button.js?vue&type=script&lang=js\"\nexport * from \"./mobile_post_status_button.js?vue&type=script&lang=js\"\n\nimport \"./mobile_post_status_button.vue?vue&type=style&index=0&id=6c0a4c69&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n v-if=\"isLoggedIn\"\n class=\"MobilePostButton button-default new-status-button\"\n :class=\"{ 'hidden': isHidden, 'always-show': isPersistent }\"\n :title=\"$t('post_status.new_status')\"\n @click=\"openPostForm\"\n >\n <FAIcon icon=\"pen\" />\n </button>\n</template>\n\n<script src=\"./mobile_post_status_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.MobilePostButton {\n &.button-default {\n width: 5em;\n height: 5em;\n border-radius: 100%;\n position: fixed;\n bottom: 1.5em;\n right: 1.5em;\n // TODO: this needs its own color, it has to stand out enough and link color\n // is not very optimal for this particular use.\n background-color: $fallback--fg;\n background-color: var(--btn, $fallback--fg);\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0 2px 2px rgb(0 0 0 / 30%), 0 4px 6px rgb(0 0 0 / 30%);\n z-index: 10;\n transition: 0.35s transform;\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n }\n\n &.hidden {\n transform: translateY(150%);\n }\n\n svg {\n font-size: 1.5em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n@media all and (min-width: 801px) {\n .new-status-button:not(.always-show) {\n display: none;\n }\n}\n\n</style>\n","<template>\n <div\n class=\"MobileNav\"\n >\n <nav\n id=\"nav\"\n class=\"mobile-nav\"\n @click=\"scrollToTop()\"\n >\n <div class=\"item\">\n <button\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('nav.mobile_sidebar')\"\n :aria-expanaded=\"$refs.sideDrawer && !$refs.sideDrawer.closed\"\n @click.stop.prevent=\"toggleMobileSidebar()\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bars\"\n />\n <div\n v-if=\"(unreadChatCount && !chatsPinned) || unreadAnnouncementCount\"\n class=\"alert-dot\"\n />\n </button>\n <NavigationPins class=\"pins\" />\n </div> <div class=\"item right\">\n <button\n v-if=\"currentUser\"\n class=\"button-unstyled mobile-nav-button\"\n :title=\"unseenNotificationsCount ? $t('nav.mobile_notifications_unread_active') : $t('nav.mobile_notifications')\"\n @click.stop.prevent=\"openMobileNotifications()\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"bell\"\n />\n <div\n v-if=\"unseenNotificationsCount\"\n class=\"alert-dot\"\n />\n </button>\n </div>\n </nav>\n <aside\n v-if=\"currentUser\"\n class=\"mobile-notifications-drawer\"\n :class=\"{ '-closed': !notificationsOpen }\"\n @touchstart.stop=\"notificationsTouchStart\"\n @touchmove.stop=\"notificationsTouchMove\"\n >\n <div class=\"mobile-notifications-header\">\n <span class=\"title\">{{ $t('notifications.notifications') }}</span>\n <span class=\"spacer\" />\n <button\n v-if=\"notificationsAtTop\"\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('general.scroll_to_top')\"\n @click.stop.prevent=\"scrollMobileNotificationsToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n <button\n class=\"button-unstyled mobile-nav-button\"\n :title=\"$t('nav.mobile_notifications_close')\"\n @click.stop.prevent=\"closeMobileNotifications(true)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n <div\n id=\"mobile-notifications\"\n ref=\"mobileNotifications\"\n class=\"mobile-notifications\"\n @scroll=\"onScroll\"\n />\n </aside>\n <SideDrawer\n ref=\"sideDrawer\"\n :logout=\"logout\"\n />\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmLogout\"\n :title=\"$t('login.logout_confirm_title')\"\n :confirm-text=\"$t('login.logout_confirm_accept_button')\"\n :cancel-text=\"$t('login.logout_confirm_cancel_button')\"\n @accepted=\"doLogout\"\n @cancelled=\"hideConfirmLogout\"\n >\n {{ $t('login.logout_confirm') }}\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./mobile_nav.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.MobileNav {\n z-index: var(--ZI_navbar);\n\n .mobile-nav {\n display: grid;\n line-height: var(--navbar-height);\n grid-template-rows: 50px;\n grid-template-columns: 2fr auto;\n width: 100%;\n box-sizing: border-box;\n\n a {\n color: var(--topBarLink, $fallback--link);\n }\n }\n\n .mobile-inner-nav {\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .mobile-nav-button {\n display: inline-block;\n text-align: center;\n padding: 0 1em;\n position: relative;\n cursor: pointer;\n }\n\n .site-name {\n padding: 0 0.3em;\n display: inline-block;\n }\n\n .item {\n /* moslty just to get rid of extra whitespaces */\n display: flex;\n }\n\n .alert-dot {\n border-radius: 100%;\n height: 8px;\n width: 8px;\n position: absolute;\n left: calc(50% - 4px);\n top: calc(50% - 4px);\n margin-left: 6px;\n margin-top: -6px;\n background-color: $fallback--cRed;\n background-color: var(--badgeNotification, $fallback--cRed);\n }\n\n .mobile-notifications-drawer {\n width: 100%;\n height: 100vh;\n overflow-x: hidden;\n position: fixed;\n top: 0;\n left: 0;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n transition-property: transform;\n transition-duration: 0.25s;\n transform: translateX(0);\n z-index: var(--ZI_navbar);\n -webkit-overflow-scrolling: touch;\n\n &.-closed {\n transform: translateX(100%);\n box-shadow: none;\n }\n }\n\n .mobile-notifications-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: calc(var(--ZI_navbar) + 100);\n width: 100%;\n height: 50px;\n line-height: 50px;\n position: absolute;\n color: var(--topBarText);\n background-color: $fallback--fg;\n background-color: var(--topBar, $fallback--fg);\n box-shadow: 0 0 4px rgb(0 0 0 / 60%);\n box-shadow: var(--topBarShadow);\n\n .spacer {\n flex: 1;\n }\n\n .title {\n font-size: 1.3em;\n margin-left: 0.6em;\n }\n }\n\n .pins {\n flex: 1;\n\n .pinned-item {\n flex-grow: 1;\n }\n }\n\n .mobile-notifications {\n margin-top: 50px;\n width: 100vw;\n height: calc(100vh - var(--navbar-height));\n overflow-x: hidden;\n overflow-y: scroll;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .notifications {\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n\n .panel {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n }\n\n .panel::after {\n border-radius: 0;\n }\n\n .panel .panel-heading {\n border-radius: 0;\n box-shadow: none;\n }\n }\n }\n\n .confirm-modal.dark-overlay {\n &::before {\n z-index: 3000;\n }\n\n .dialog-modal.panel {\n z-index: 3001;\n }\n }\n}\n\n</style>\n","import SideDrawer from '../side_drawer/side_drawer.vue'\nimport Notifications from '../notifications/notifications.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'\nimport GestureService from '../../services/gesture_service/gesture_service'\nimport NavigationPins from 'src/components/navigation/navigation_pins.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faBell,\n faBars,\n faArrowUp,\n faMinus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faBell,\n faBars,\n faArrowUp,\n faMinus\n)\n\nconst MobileNav = {\n components: {\n SideDrawer,\n Notifications,\n NavigationPins,\n ConfirmModal\n },\n data: () => ({\n notificationsCloseGesture: undefined,\n notificationsOpen: false,\n notificationsAtTop: true,\n showingConfirmLogout: false\n }),\n created () {\n this.notificationsCloseGesture = GestureService.swipeGesture(\n GestureService.DIRECTION_RIGHT,\n () => this.closeMobileNotifications(true),\n 50\n )\n },\n computed: {\n currentUser () {\n return this.$store.state.users.currentUser\n },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n unseenNotificationsCount () {\n return this.unseenNotifications.length\n },\n hideSitename () { return this.$store.state.instance.hideSitename },\n sitename () { return this.$store.state.instance.name },\n isChat () {\n return this.$route.name === 'chat'\n },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']),\n chatsPinned () {\n return new Set(this.$store.state.serverSideStorage.prefsStorage.collections.pinnedNavItems).has('chats')\n },\n shouldConfirmLogout () {\n return this.$store.getters.mergedConfig.modalOnLogout\n },\n ...mapGetters(['unreadChatCount'])\n },\n methods: {\n toggleMobileSidebar () {\n this.$refs.sideDrawer.toggleDrawer()\n },\n openMobileNotifications () {\n this.notificationsOpen = true\n },\n closeMobileNotifications (markRead) {\n if (this.notificationsOpen) {\n // make sure to mark notifs seen only when the notifs were open and not\n // from close-calls.\n this.notificationsOpen = false\n if (markRead) {\n this.markNotificationsAsSeen()\n }\n }\n },\n notificationsTouchStart (e) {\n GestureService.beginSwipe(e, this.notificationsCloseGesture)\n },\n notificationsTouchMove (e) {\n GestureService.updateSwipe(e, this.notificationsCloseGesture)\n },\n scrollToTop () {\n window.scrollTo(0, 0)\n },\n scrollMobileNotificationsToTop () {\n this.$refs.mobileNotifications.scrollTo(0, 0)\n },\n showConfirmLogout () {\n this.showingConfirmLogout = true\n },\n hideConfirmLogout () {\n this.showingConfirmLogout = false\n },\n logout () {\n if (!this.shouldConfirmLogout) {\n this.doLogout()\n } else {\n this.showConfirmLogout()\n }\n },\n doLogout () {\n this.$router.replace('/main/public')\n this.$store.dispatch('logout')\n this.hideConfirmLogout()\n },\n markNotificationsAsSeen () {\n // this.$refs.notifications.markAsSeen()\n this.$store.dispatch('markNotificationsAsSeen')\n },\n onScroll ({ target: { scrollTop, clientHeight, scrollHeight } }) {\n this.notificationsAtTop = scrollTop > 0\n if (scrollTop + clientHeight >= scrollHeight) {\n this.$refs.notifications.fetchOlderNotifications()\n }\n }\n },\n watch: {\n $route () {\n // handles closing notificaitons when you press any router-link on the\n // notifications.\n this.closeMobileNotifications()\n }\n }\n}\n\nexport default MobileNav\n","import { render } from \"./mobile_nav.vue?vue&type=template&id=06094f09\"\nimport script from \"./mobile_nav.js?vue&type=script&lang=js\"\nexport * from \"./mobile_nav.js?vue&type=script&lang=js\"\n\nimport \"./mobile_nav.vue?vue&type=style&index=0&id=06094f09&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <nav\n id=\"nav\"\n class=\"DesktopNav\"\n :class=\"{ '-logoLeft': logoLeft }\"\n @click=\"scrollToTop()\"\n >\n <div class=\"inner-nav\">\n <div class=\"item sitename\">\n <router-link\n v-if=\"!hideSitename\"\n class=\"site-name\"\n :to=\"{ name: 'root' }\"\n active-class=\"home\"\n >\n {{ sitename }}\n </router-link>\n </div>\n <router-link\n class=\"logo\"\n :to=\"{ name: 'root' }\"\n :style=\"logoBgStyle\"\n :title=\"sitename\"\n >\n <div\n class=\"mask\"\n :style=\"logoMaskStyle\"\n />\n <img\n :src=\"logo\"\n :style=\"logoStyle\"\n >\n </router-link>\n <div class=\"item right actions\">\n <search-bar\n v-if=\"currentUser || !privateMode\"\n @toggled=\"onSearchBarToggled\"\n @click.stop\n />\n <button\n class=\"button-unstyled nav-icon\"\n :title=\"$t('nav.preferences')\"\n @click.stop=\"openSettingsModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"cog\"\n />\n </button>\n <button\n v-if=\"currentUser && currentUser.role === 'admin'\"\n class=\"button-unstyled nav-icon\"\n target=\"_blank\"\n :title=\"$t('nav.administration')\"\n @click.stop=\"openAdminModal\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"tachometer-alt\"\n />\n </button>\n <span class=\"spacer\" />\n <button\n v-if=\"currentUser\"\n class=\"button-unstyled nav-icon\"\n :title=\"$t('login.logout')\"\n @click.stop.prevent=\"logout\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"sign-out-alt\"\n />\n </button>\n </div>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmLogout\"\n :title=\"$t('login.logout_confirm_title')\"\n :confirm-text=\"$t('login.logout_confirm_accept_button')\"\n :cancel-text=\"$t('login.logout_confirm_cancel_button')\"\n @accepted=\"doLogout\"\n @cancelled=\"hideConfirmLogout\"\n >\n {{ $t('login.logout_confirm') }}\n </confirm-modal>\n </teleport>\n </nav>\n</template>\n<script src=\"./desktop_nav.js\"></script>\n\n<style src=\"./desktop_nav.scss\" lang=\"scss\"></style>\n","<template>\n <div\n class=\"SearchBar\"\n :class=\"{ '-expanded': !hidden }\"\n >\n <button\n v-if=\"hidden\"\n class=\"button-unstyled nav-icon\"\n :title=\"$t('nav.search')\"\n type=\"button\"\n :aria-expanded=\"!hidden\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </button>\n <template v-else>\n <input\n id=\"search-bar-input\"\n ref=\"searchInput\"\n v-model=\"searchTerm\"\n class=\"search-bar-input\"\n :placeholder=\"$t('nav.search')\"\n type=\"text\"\n @keyup.enter=\"find(searchTerm)\"\n >\n <button\n class=\"button-default search-button\"\n type=\"submit\"\n :title=\"$t('nav.search')\"\n @click=\"find(searchTerm)\"\n >\n <FAIcon\n fixed-width\n icon=\"search\"\n />\n </button>\n <button\n class=\"button-unstyled cancel-search\"\n type=\"button\"\n :title=\"$t('nav.search_close')\"\n :aria-expanded=\"!hidden\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <FAIcon\n fixed-width\n icon=\"times\"\n class=\"cancel-icon fa-scale-110 fa-old-padding\"\n />\n </button>\n <span class=\"spacer\" />\n <span class=\"spacer\" />\n </template>\n </div>\n</template>\n\n<script src=\"./search_bar.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.SearchBar {\n display: inline-flex;\n align-items: baseline;\n vertical-align: baseline;\n justify-content: flex-end;\n\n &.-expanded {\n width: 100%;\n }\n\n .search-bar-input,\n .search-button {\n height: 29px;\n }\n\n .search-bar-input {\n flex: 1 0 auto;\n }\n\n .cancel-search {\n height: 50px;\n }\n\n .cancel-icon {\n color: $fallback--text;\n color: var(--btnTopBarText, $fallback--text);\n }\n}\n\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faSearch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faSearch\n)\n\nconst SearchBar = {\n data: () => ({\n searchTerm: undefined,\n hidden: true,\n error: false\n }),\n watch: {\n $route: function (route) {\n if (route.name === 'search') {\n this.searchTerm = route.query.query\n }\n }\n },\n methods: {\n find (searchTerm) {\n this.$router.push({ name: 'search', query: { query: searchTerm } })\n this.$refs.searchInput.focus()\n },\n toggleHidden () {\n this.hidden = !this.hidden\n this.$emit('toggled', this.hidden)\n this.$nextTick(() => {\n if (!this.hidden) {\n this.$refs.searchInput.focus()\n }\n })\n }\n }\n}\n\nexport default SearchBar\n","import { render } from \"./search_bar.vue?vue&type=template&id=3ff3b2d5\"\nimport script from \"./search_bar.js?vue&type=script&lang=js\"\nexport * from \"./search_bar.js?vue&type=script&lang=js\"\n\nimport \"./search_bar.vue?vue&type=style&index=0&id=3ff3b2d5&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import SearchBar from 'components/search_bar/search_bar.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSignInAlt,\n faSignOutAlt,\n faHome,\n faComments,\n faBell,\n faUserPlus,\n faBullhorn,\n faSearch,\n faTachometerAlt,\n faCog,\n faInfoCircle\n)\n\nexport default {\n components: {\n SearchBar,\n ConfirmModal\n },\n data: () => ({\n searchBarHidden: true,\n supportsMask: window.CSS && window.CSS.supports && (\n window.CSS.supports('mask-size', 'contain') ||\n window.CSS.supports('-webkit-mask-size', 'contain') ||\n window.CSS.supports('-moz-mask-size', 'contain') ||\n window.CSS.supports('-ms-mask-size', 'contain') ||\n window.CSS.supports('-o-mask-size', 'contain')\n ),\n showingConfirmLogout: false\n }),\n computed: {\n enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },\n logoStyle () {\n return {\n visibility: this.enableMask ? 'hidden' : 'visible'\n }\n },\n logoMaskStyle () {\n return this.enableMask\n ? {\n 'mask-image': `url(${this.$store.state.instance.logo})`\n }\n : {\n 'background-color': this.enableMask ? '' : 'transparent'\n }\n },\n logoBgStyle () {\n return Object.assign({\n margin: `${this.$store.state.instance.logoMargin} 0`,\n opacity: this.searchBarHidden ? 1 : 0\n }, this.enableMask\n ? {}\n : {\n 'background-color': this.enableMask ? '' : 'transparent'\n })\n },\n logo () { return this.$store.state.instance.logo },\n sitename () { return this.$store.state.instance.name },\n hideSitename () { return this.$store.state.instance.hideSitename },\n logoLeft () { return this.$store.state.instance.logoLeft },\n currentUser () { return this.$store.state.users.currentUser },\n privateMode () { return this.$store.state.instance.private },\n shouldConfirmLogout () {\n return this.$store.getters.mergedConfig.modalOnLogout\n }\n },\n methods: {\n scrollToTop () {\n window.scrollTo(0, 0)\n },\n showConfirmLogout () {\n this.showingConfirmLogout = true\n },\n hideConfirmLogout () {\n this.showingConfirmLogout = false\n },\n logout () {\n if (!this.shouldConfirmLogout) {\n this.doLogout()\n } else {\n this.showConfirmLogout()\n }\n },\n doLogout () {\n this.$router.replace('/main/public')\n this.$store.dispatch('logout')\n this.hideConfirmLogout()\n },\n onSearchBarToggled (hidden) {\n this.searchBarHidden = hidden\n },\n openSettingsModal () {\n this.$store.dispatch('openSettingsModal', 'user')\n },\n openAdminModal () {\n this.$store.dispatch('openSettingsModal', 'admin')\n }\n }\n}\n","import { render } from \"./desktop_nav.vue?vue&type=template&id=5dbfe449\"\nimport script from \"./desktop_nav.js?vue&type=script&lang=js\"\nexport * from \"./desktop_nav.js?vue&type=script&lang=js\"\n\nimport \"./desktop_nav.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isOpen\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"user-reporting-panel panel\">\n <div class=\"panel-heading\">\n <i18n-t\n tag=\"div\"\n keypath=\"user_reporting.title\"\n class=\"title\"\n >\n <UserLink :user=\"user\" />\n </i18n-t>\n </div>\n <div class=\"panel-body\">\n <div class=\"user-reporting-panel-left\">\n <div>\n <p>{{ $t('user_reporting.add_comment_description') }}</p>\n <textarea\n v-model=\"comment\"\n class=\"form-control\"\n :placeholder=\"$t('user_reporting.additional_comments')\"\n rows=\"1\"\n @input=\"resize\"\n />\n </div>\n <div v-if=\"!user.is_local\">\n <p>{{ $t('user_reporting.forward_description') }}</p>\n <Checkbox v-model=\"forward\">\n {{ $t('user_reporting.forward_to', [remoteInstance]) }}\n </Checkbox>\n </div>\n <div>\n <button\n class=\"btn button-default\"\n :disabled=\"processing\"\n @click=\"reportUser\"\n >\n {{ $t('user_reporting.submit') }}\n </button>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ $t('user_reporting.generic_error') }}\n </div>\n </div>\n </div>\n <div class=\"user-reporting-panel-right\">\n <List :items=\"statuses\">\n <template #item=\"{item}\">\n <div class=\"status-fadein user-reporting-panel-sitem\">\n <Status\n :in-conversation=\"false\"\n :focused=\"false\"\n :statusoid=\"item\"\n />\n <Checkbox\n :model-value=\"isChecked(item.id)\"\n @update:model-value=\"checked => toggleStatus(checked, item.id)\"\n />\n </div>\n </template>\n </List>\n </div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./user_reporting_modal.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-reporting-panel {\n width: 90vw;\n max-width: 700px;\n min-height: 20vh;\n max-height: 80vh;\n\n .panel-body {\n display: flex;\n flex-direction: column-reverse;\n border-top: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n overflow: hidden;\n }\n\n &-left {\n padding: 1.1em 0.7em 0.7em;\n line-height: var(--post-line-height);\n box-sizing: border-box;\n\n > div {\n margin-bottom: 1em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p {\n margin-top: 0;\n }\n\n textarea.form-control {\n line-height: 16px;\n resize: none;\n overflow: hidden;\n transition: min-height 200ms 100ms;\n min-height: 44px;\n width: 100%;\n }\n\n .btn {\n min-width: 10em;\n padding: 0 2em;\n }\n\n .alert {\n margin: 1em 0 0;\n line-height: 1.3em;\n }\n }\n\n &-right {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n &-sitem {\n display: flex;\n justify-content: space-between;\n\n /* TODO cleanup this */\n > .Status {\n flex: 1;\n }\n\n > .checkbox {\n margin: 0.75em;\n }\n }\n\n @media all and (min-width: 801px) {\n .panel-body {\n flex-direction: row;\n }\n\n &-left {\n width: 50%;\n max-width: 320px;\n border-right: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 1.1em;\n\n > div {\n margin-bottom: 2em;\n }\n }\n\n &-right {\n width: 50%;\n flex: 1 1 auto;\n margin-bottom: 12px;\n }\n }\n}\n</style>\n","import Status from '../status/status.vue'\nimport List from '../list/list.vue'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Modal from '../modal/modal.vue'\nimport UserLink from '../user_link/user_link.vue'\n\nconst UserReportingModal = {\n components: {\n Status,\n List,\n Checkbox,\n Modal,\n UserLink\n },\n data () {\n return {\n comment: '',\n forward: false,\n statusIdsToReport: [],\n processing: false,\n error: false\n }\n },\n computed: {\n reportModal () {\n return this.$store.state.reports.reportModal\n },\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n isOpen () {\n return this.isLoggedIn && this.reportModal.activated\n },\n userId () {\n return this.reportModal.userId\n },\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n remoteInstance () {\n return !this.user.is_local && this.user.screen_name.substr(this.user.screen_name.indexOf('@') + 1)\n },\n statuses () {\n return this.reportModal.statuses\n },\n preTickedIds () {\n return this.reportModal.preTickedIds\n }\n },\n watch: {\n userId: 'resetState',\n preTickedIds (newValue) {\n this.statusIdsToReport = newValue\n }\n },\n methods: {\n resetState () {\n // Reset state\n this.comment = ''\n this.forward = false\n this.statusIdsToReport = this.preTickedIds\n this.processing = false\n this.error = false\n },\n closeModal () {\n this.$store.dispatch('closeUserReportingModal')\n },\n reportUser () {\n this.processing = true\n this.error = false\n const params = {\n userId: this.userId,\n comment: this.comment,\n forward: this.forward,\n statusIds: this.statusIdsToReport\n }\n this.$store.state.api.backendInteractor.reportUser({ ...params })\n .then(() => {\n this.processing = false\n this.resetState()\n this.closeModal()\n })\n .catch(() => {\n this.processing = false\n this.error = true\n })\n },\n clearError () {\n this.error = false\n },\n isChecked (statusId) {\n return this.statusIdsToReport.indexOf(statusId) !== -1\n },\n toggleStatus (checked, statusId) {\n if (checked === this.isChecked(statusId)) {\n return\n }\n\n if (checked) {\n this.statusIdsToReport.push(statusId)\n } else {\n this.statusIdsToReport.splice(this.statusIdsToReport.indexOf(statusId), 1)\n }\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n // Auto is needed to make textbox shrink when removing lines\n target.style.height = 'auto'\n target.style.height = `${target.scrollHeight}px`\n if (target.value === '') {\n target.style.height = null\n }\n }\n }\n}\n\nexport default UserReportingModal\n","import { render } from \"./user_reporting_modal.vue?vue&type=template&id=b4c54784\"\nimport script from \"./user_reporting_modal.js?vue&type=script&lang=js\"\nexport * from \"./user_reporting_modal.js?vue&type=script&lang=js\"\n\nimport \"./user_reporting_modal.vue?vue&type=style&index=0&id=b4c54784&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isFormVisible\"\n class=\"edit-form-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"edit-form-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('post_status.edit_status') }}\n </div>\n <PostStatusForm\n class=\"panel-body\"\n v-bind=\"params\"\n :post-handler=\"doEditStatus\"\n :disable-polls=\"true\"\n :disable-visibility-selector=\"true\"\n @posted=\"closeModal\"\n />\n </div>\n </Modal>\n</template>\n\n<script src=\"./edit_status_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.edit-form-modal-view {\n align-items: flex-start;\n}\n\n.edit-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n\n .form-bottom-left {\n max-width: 6.5em;\n\n .emoji-icon {\n justify-content: right;\n }\n }\n}\n</style>\n","import PostStatusForm from '../post_status_form/post_status_form.vue'\nimport Modal from '../modal/modal.vue'\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport get from 'lodash/get'\n\nconst EditStatusModal = {\n components: {\n PostStatusForm,\n Modal\n },\n data () {\n return {\n resettingForm: false\n }\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n modalActivated () {\n return this.$store.state.editStatus.modalActivated\n },\n isFormVisible () {\n return this.isLoggedIn && !this.resettingForm && this.modalActivated\n },\n params () {\n return this.$store.state.editStatus.params || {}\n }\n },\n watch: {\n params (newVal, oldVal) {\n if (get(newVal, 'statusId') !== get(oldVal, 'statusId')) {\n this.resettingForm = true\n this.$nextTick(() => {\n this.resettingForm = false\n })\n }\n },\n isFormVisible (val) {\n if (val) {\n this.$nextTick(() => this.$el && this.$el.querySelector('textarea').focus())\n }\n }\n },\n methods: {\n doEditStatus ({ status, spoilerText, sensitive, media, contentType, poll }) {\n const params = {\n store: this.$store,\n statusId: this.$store.state.editStatus.params.statusId,\n status,\n spoilerText,\n sensitive,\n poll,\n media,\n contentType\n }\n\n return statusPosterService.editStatus(params)\n .then((data) => {\n return data\n })\n .catch((err) => {\n console.error('Error editing status', err)\n return {\n error: err.message\n }\n })\n },\n closeModal () {\n this.$store.dispatch('closeEditStatusModal')\n }\n }\n}\n\nexport default EditStatusModal\n","import { render } from \"./edit_status_modal.vue?vue&type=template&id=7e74cdc2\"\nimport script from \"./edit_status_modal.js?vue&type=script&lang=js\"\nexport * from \"./edit_status_modal.js?vue&type=script&lang=js\"\n\nimport \"./edit_status_modal.vue?vue&type=style&index=0&id=7e74cdc2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"isLoggedIn && !resettingForm\"\n :is-open=\"modalActivated\"\n class=\"post-form-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"post-form-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('post_status.new_status') }}\n </div>\n <PostStatusForm\n class=\"panel-body\"\n v-bind=\"params\"\n @posted=\"resetAndClose\"\n />\n </div>\n </Modal>\n</template>\n\n<script src=\"./post_status_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.post-form-modal-view {\n align-items: flex-start;\n}\n\n.post-form-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n</style>\n","import PostStatusForm from '../post_status_form/post_status_form.vue'\nimport Modal from '../modal/modal.vue'\nimport get from 'lodash/get'\n\nconst PostStatusModal = {\n components: {\n PostStatusForm,\n Modal\n },\n data () {\n return {\n resettingForm: false\n }\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n modalActivated () {\n return this.$store.state.postStatus.modalActivated\n },\n isFormVisible () {\n return this.isLoggedIn && !this.resettingForm && this.modalActivated\n },\n params () {\n return this.$store.state.postStatus.params || {}\n }\n },\n watch: {\n params (newVal, oldVal) {\n if (get(newVal, 'repliedUser.id') !== get(oldVal, 'repliedUser.id')) {\n this.resettingForm = true\n this.$nextTick(() => {\n this.resettingForm = false\n })\n }\n },\n isFormVisible (val) {\n if (val) {\n this.$nextTick(() => this.$el && this.$el.querySelector('textarea').focus())\n }\n }\n },\n methods: {\n closeModal () {\n this.$store.dispatch('closePostStatusModal')\n },\n resetAndClose () {\n this.$store.dispatch('resetPostStatusModal')\n this.$store.dispatch('closePostStatusModal')\n }\n }\n}\n\nexport default PostStatusModal\n","import { render } from \"./post_status_modal.vue?vue&type=template&id=365216ee\"\nimport script from \"./post_status_modal.js?vue&type=script&lang=js\"\nexport * from \"./post_status_modal.js?vue&type=script&lang=js\"\n\nimport \"./post_status_modal.vue?vue&type=style&index=0&id=365216ee&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Modal\n v-if=\"modalActivated\"\n class=\"status-history-modal-view\"\n @backdropClicked=\"closeModal\"\n >\n <div class=\"status-history-modal-panel panel\">\n <div class=\"panel-heading\">\n {{ $t('status.status_history') }} ({{ historyCount }})\n </div>\n <div class=\"panel-body\">\n <div\n v-if=\"historyCount > 0\"\n class=\"history-body\"\n >\n <status\n v-for=\"status in history\"\n :key=\"status.id\"\n :statusoid=\"status\"\n :is-preview=\"true\"\n class=\"conversation-status status-fadein panel-body\"\n />\n </div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script src=\"./status_history_modal.js\"></script>\n\n<style lang=\"scss\">\n.modal-view.status-history-modal-view {\n align-items: flex-start;\n}\n\n.status-history-modal-panel {\n flex-shrink: 0;\n margin-top: 25%;\n margin-bottom: 2em;\n width: 100%;\n max-width: 700px;\n\n @media (orientation: landscape) {\n margin-top: 8%;\n }\n}\n</style>\n","import { get } from 'lodash'\nimport Modal from '../modal/modal.vue'\nimport Status from '../status/status.vue'\n\nconst StatusHistoryModal = {\n components: {\n Modal,\n Status\n },\n data () {\n return {\n statuses: []\n }\n },\n computed: {\n modalActivated () {\n return this.$store.state.statusHistory.modalActivated\n },\n params () {\n return this.$store.state.statusHistory.params\n },\n statusId () {\n return this.params.id\n },\n historyCount () {\n return this.statuses.length\n },\n history () {\n return this.statuses\n }\n },\n watch: {\n params (newVal, oldVal) {\n const newStatusId = get(newVal, 'id') !== get(oldVal, 'id')\n if (newStatusId) {\n this.resetHistory()\n }\n\n if (newStatusId || get(newVal, 'edited_at') !== get(oldVal, 'edited_at')) {\n this.fetchStatusHistory()\n }\n }\n },\n methods: {\n resetHistory () {\n this.statuses = []\n },\n fetchStatusHistory () {\n this.$store.dispatch('fetchStatusHistory', this.params)\n .then(data => {\n this.statuses = data\n })\n },\n closeModal () {\n this.$store.dispatch('closeStatusHistoryModal')\n }\n }\n}\n\nexport default StatusHistoryModal\n","import { render } from \"./status_history_modal.vue?vue&type=template&id=16d58712\"\nimport script from \"./status_history_modal.js?vue&type=script&lang=js\"\nexport * from \"./status_history_modal.js?vue&type=script&lang=js\"\n\nimport \"./status_history_modal.vue?vue&type=style&index=0&id=16d58712&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"global-notice-list\">\n <div\n v-for=\"(notice, index) in notices\"\n :key=\"index\"\n class=\"alert global-notice\"\n :class=\"{ ['global-' + notice.level]: true }\"\n >\n <div class=\"notice-message\">\n {{ $t(notice.messageKey, notice.messageArgs) }}\n </div>\n <button\n class=\"button-unstyled close-notice\"\n @click=\"closeNotice(notice)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<script src=\"./global_notice_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.global-notice-list {\n position: fixed;\n top: calc(var(--navbar-height) + 0.5em);\n width: 100%;\n pointer-events: none;\n z-index: var(--ZI_modals_popovers);\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .global-notice {\n pointer-events: auto;\n text-align: center;\n width: 40em;\n max-width: calc(100% - 3em);\n display: flex;\n padding-left: 1.5em;\n line-height: 2;\n margin-bottom: 0.5em;\n\n .notice-message {\n flex: 1 1 100%;\n }\n }\n\n .global-error {\n background-color: var(--alertPopupError, $fallback--cRed);\n color: var(--alertPopupErrorText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupErrorText, $fallback--text);\n }\n }\n\n .global-warning {\n background-color: var(--alertPopupWarning, $fallback--cOrange);\n color: var(--alertPopupWarningText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupWarningText, $fallback--text);\n }\n }\n\n .global-success {\n background-color: var(--alertPopupSuccess, $fallback--cGreen);\n color: var(--alertPopupSuccessText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupSuccessText, $fallback--text);\n }\n }\n\n .global-info {\n background-color: var(--alertPopupNeutral, $fallback--fg);\n color: var(--alertPopupNeutralText, $fallback--text);\n\n .svg-inline--fa {\n color: var(--alertPopupNeutralText, $fallback--text);\n }\n }\n\n .close-notice {\n padding-right: 0.2em;\n\n .svg-inline--fa:hover {\n opacity: 0.6;\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst GlobalNoticeList = {\n computed: {\n notices () {\n return this.$store.state.interface.globalNotices\n }\n },\n methods: {\n closeNotice (notice) {\n this.$store.dispatch('removeGlobalNotice', notice)\n }\n }\n}\n\nexport default GlobalNoticeList\n","import { render } from \"./global_notice_list.vue?vue&type=template&id=f53eca8e\"\nimport script from \"./global_notice_list.js?vue&type=script&lang=js\"\nexport * from \"./global_notice_list.js?vue&type=script&lang=js\"\n\nimport \"./global_notice_list.vue?vue&type=style&index=0&id=f53eca8e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import UserPanel from './components/user_panel/user_panel.vue'\nimport NavPanel from './components/nav_panel/nav_panel.vue'\nimport InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue'\nimport FeaturesPanel from './components/features_panel/features_panel.vue'\nimport WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue'\nimport ShoutPanel from './components/shout_panel/shout_panel.vue'\nimport MediaModal from './components/media_modal/media_modal.vue'\nimport SideDrawer from './components/side_drawer/side_drawer.vue'\nimport MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'\nimport MobileNav from './components/mobile_nav/mobile_nav.vue'\nimport DesktopNav from './components/desktop_nav/desktop_nav.vue'\nimport UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'\nimport EditStatusModal from './components/edit_status_modal/edit_status_modal.vue'\nimport PostStatusModal from './components/post_status_modal/post_status_modal.vue'\nimport StatusHistoryModal from './components/status_history_modal/status_history_modal.vue'\nimport GlobalNoticeList from './components/global_notice_list/global_notice_list.vue'\nimport { windowWidth, windowHeight } from './services/window_utils/window_utils'\nimport { mapGetters } from 'vuex'\nimport { defineAsyncComponent } from 'vue'\n\nexport default {\n name: 'app',\n components: {\n UserPanel,\n NavPanel,\n Notifications: defineAsyncComponent(() => import('./components/notifications/notifications.vue')),\n InstanceSpecificPanel,\n FeaturesPanel,\n WhoToFollowPanel,\n ShoutPanel,\n MediaModal,\n SideDrawer,\n MobilePostStatusButton,\n MobileNav,\n DesktopNav,\n SettingsModal: defineAsyncComponent(() => import('./components/settings_modal/settings_modal.vue')),\n UpdateNotification: defineAsyncComponent(() => import('./components/update_notification/update_notification.vue')),\n UserReportingModal,\n PostStatusModal,\n EditStatusModal,\n StatusHistoryModal,\n GlobalNoticeList\n },\n data: () => ({\n mobileActivePanel: 'timeline'\n }),\n created () {\n // Load the locale from the storage\n const val = this.$store.getters.mergedConfig.interfaceLanguage\n this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })\n window.addEventListener('resize', this.updateMobileState)\n },\n unmounted () {\n window.removeEventListener('resize', this.updateMobileState)\n },\n computed: {\n classes () {\n return [\n {\n '-reverse': this.reverseLayout,\n '-no-sticky-headers': this.noSticky,\n '-has-new-post-button': this.newPostButtonShown\n },\n '-' + this.layoutType\n ]\n },\n navClasses () {\n const { navbarColumnStretch } = this.$store.getters.mergedConfig\n return [\n '-' + this.layoutType,\n ...(navbarColumnStretch ? ['-column-stretch'] : [])\n ]\n },\n currentUser () { return this.$store.state.users.currentUser },\n userBackground () { return this.currentUser.background_image },\n instanceBackground () {\n return this.mergedConfig.hideInstanceWallpaper\n ? null\n : this.$store.state.instance.background\n },\n background () { return this.userBackground || this.instanceBackground },\n bgStyle () {\n if (this.background) {\n return {\n '--body-background-image': `url(${this.background})`\n }\n }\n },\n shout () { return this.$store.state.shout.joined },\n suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },\n showInstanceSpecificPanel () {\n return this.$store.state.instance.showInstanceSpecificPanel &&\n !this.$store.getters.mergedConfig.hideISP &&\n this.$store.state.instance.instanceSpecificPanelContent\n },\n isChats () {\n return this.$route.name === 'chat' || this.$route.name === 'chats'\n },\n isListEdit () {\n return this.$route.name === 'lists-edit'\n },\n newPostButtonShown () {\n if (this.isChats) return false\n if (this.isListEdit) return false\n return this.$store.getters.mergedConfig.alwaysShowNewPostButton || this.layoutType === 'mobile'\n },\n showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },\n editingAvailable () { return this.$store.state.instance.editingAvailable },\n shoutboxPosition () {\n return this.$store.getters.mergedConfig.alwaysShowNewPostButton || false\n },\n hideShoutbox () {\n return this.$store.getters.mergedConfig.hideShoutbox\n },\n layoutType () { return this.$store.state.interface.layoutType },\n privateMode () { return this.$store.state.instance.private },\n reverseLayout () {\n const { thirdColumnMode, sidebarRight: reverseSetting } = this.$store.getters.mergedConfig\n if (this.layoutType !== 'wide') {\n return reverseSetting\n } else {\n return thirdColumnMode === 'notifications' ? reverseSetting : !reverseSetting\n }\n },\n noSticky () { return this.$store.getters.mergedConfig.disableStickyHeaders },\n showScrollbars () { return this.$store.getters.mergedConfig.showScrollbars },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n updateMobileState () {\n this.$store.dispatch('setLayoutWidth', windowWidth())\n this.$store.dispatch('setLayoutHeight', windowHeight())\n }\n }\n}\n","import { render } from \"./App.vue?vue&type=template&id=8323d9fc\"\nimport script from \"./App.js?vue&type=script&lang=js\"\nexport * from \"./App.js?vue&type=script&lang=js\"\n\nimport \"./App.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div :class=\"['Timeline', classes.root]\">\n <div :class=\"classes.header\">\n <TimelineMenu\n v-if=\"!embedded\"\n :timeline-name=\"timelineName\"\n />\n <div\n v-if=\"showScrollTop && !embedded\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled scroll-to-top-button\"\n type=\"button\"\n :title=\"$t('general.scroll_to_top')\"\n @click=\"scrollToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n </div>\n <template v-if=\"mobileLayout && !embedded\">\n <div\n v-if=\"showLoadButton\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled loadmore-button\"\n :title=\"loadButtonString\"\n @click.prevent=\"showNewStatuses\"\n >\n <FAIcon\n fixed-width\n icon=\"circle-plus\"\n />\n <div class=\"alert-badge\">\n {{ mobileLoadButtonString }}\n </div>\n </button>\n </div>\n <div\n v-else-if=\"!embedded\"\n class=\"loadmore-text faint veryfaint rightside-icon\"\n :title=\"$t('timeline.up_to_date')\"\n :aria-disabled=\"true\"\n @click.prevent\n >\n <FAIcon\n fixed-width\n icon=\"check\"\n />\n </div>\n </template>\n <template v-else>\n <button\n v-if=\"showLoadButton\"\n class=\"button-default loadmore-button\"\n @click.prevent=\"showNewStatuses\"\n >\n {{ loadButtonString }}\n </button>\n <div\n v-else-if=\"!embedded\"\n class=\"loadmore-text faint\"\n @click.prevent\n >\n {{ $t('timeline.up_to_date') }}\n </div>\n </template>\n <QuickFilterSettings\n v-if=\"!embedded\"\n class=\"rightside-button\"\n />\n <QuickViewSettings\n v-if=\"!embedded\"\n class=\"rightside-button\"\n />\n </div>\n <div :class=\"classes.body\">\n <div\n ref=\"timeline\"\n class=\"timeline\"\n role=\"feed\"\n >\n <conversation\n v-for=\"statusId in filteredPinnedStatusIds\"\n :key=\"statusId + '-pinned'\"\n role=\"listitem\"\n class=\"status-fadein\"\n :status-id=\"statusId\"\n :collapsable=\"true\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"userId\"\n />\n <conversation\n v-for=\"status in filteredVisibleStatuses\"\n :key=\"status.id\"\n role=\"listitem\"\n class=\"status-fadein\"\n :status-id=\"status.id\"\n :collapsable=\"true\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"userId\"\n :virtual-hidden=\"virtualScrollingEnabled && !statusesToDisplay.includes(status.id)\"\n />\n </div>\n </div>\n <div :class=\"classes.footer\">\n <teleport\n :to=\"footerSlipgate\"\n :disabled=\"!embedded || !footerSlipgate\"\n >\n <div\n v-if=\"count===0\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('timeline.no_statuses') }}\n </div>\n <div\n v-else-if=\"bottomedOut\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('timeline.no_more_statuses') }}\n </div>\n <button\n v-else-if=\"!timeline.loading\"\n class=\"button-unstyled -link\"\n @click.prevent=\"fetchOlderStatuses()\"\n >\n <div class=\"new-status-notification text-center\">\n {{ $t('timeline.load_older') }}\n </div>\n </button>\n <div\n v-else\n class=\"new-status-notification text-center\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n </teleport>\n </div>\n </div>\n</template>\n\n<script src=\"./timeline.js\"></script>\n\n<style src=\"./timeline.scss\" lang=\"scss\"> </style>\n","<template>\n <div\n v-if=\"!hideStatus\"\n :style=\"hiddenStyle\"\n class=\"Conversation\"\n :class=\"{ '-expanded' : isExpanded, 'panel' : isExpanded }\"\n >\n <div\n v-if=\"isExpanded\"\n class=\"panel-heading conversation-heading -sticky\"\n >\n <span class=\"title\"> {{ $t('timeline.conversation') }} </span>\n <button\n v-if=\"collapsable\"\n class=\"button-unstyled -link\"\n @click.prevent=\"toggleExpanded\"\n >\n {{ $t('timeline.collapse') }}\n </button>\n <QuickFilterSettings\n v-if=\"!collapsable\"\n :conversation=\"true\"\n class=\"rightside-button\"\n />\n <QuickViewSettings\n v-if=\"!collapsable\"\n :conversation=\"true\"\n class=\"rightside-button\"\n />\n </div>\n <div class=\"conversation-body panel-body\">\n <div\n v-if=\"isTreeView\"\n class=\"thread-body\"\n >\n <div\n v-if=\"shouldShowAllConversationButton\"\n class=\"conversation-dive-to-top-level-box\"\n >\n <i18n-t\n keypath=\"status.show_all_conversation_with_icon\"\n tag=\"button\"\n class=\"button-unstyled -link\"\n scope=\"global\"\n @click.prevent=\"diveToTopLevel\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-left\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.show_all_conversation', otherTopLevelCount, { numStatus: otherTopLevelCount }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n <div\n v-if=\"shouldShowAncestors\"\n class=\"thread-ancestors\"\n >\n <article\n v-for=\"status in ancestorsOf(diveRoot)\"\n :key=\"status.id\"\n class=\"thread-ancestor\"\n :class=\"{'thread-ancestor-has-other-replies': getReplies(status.id).length > 1, '-faded': shouldFadeAncestors}\"\n >\n <status\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"getHighlight()\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status status-fadein panel-body\"\n\n :simple-tree=\"treeViewIsSimple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :show-other-replies-as-button=\"showOtherRepliesButtonInsideStatus\"\n :dive=\"() => diveIntoStatus(status.id)\"\n\n :controlled-showing-tall=\"statusContentProperties[status.id].showingTall\"\n :controlled-expanding-subject=\"statusContentProperties[status.id].expandingSubject\"\n :controlled-showing-long-subject=\"statusContentProperties[status.id].showingLongSubject\"\n :controlled-replying=\"statusContentProperties[status.id].replying\"\n :controlled-media-playing=\"statusContentProperties[status.id].mediaPlaying\"\n :controlled-toggle-showing-tall=\"() => toggleStatusContentProperty(status.id, 'showingTall')\"\n :controlled-toggle-expanding-subject=\"() => toggleStatusContentProperty(status.id, 'expandingSubject')\"\n :controlled-toggle-showing-long-subject=\"() => toggleStatusContentProperty(status.id, 'showingLongSubject')\"\n :controlled-toggle-replying=\"() => toggleStatusContentProperty(status.id, 'replying')\"\n :controlled-set-media-playing=\"(newVal) => toggleStatusContentProperty(status.id, 'mediaPlaying', newVal)\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n <div\n v-if=\"showOtherRepliesButtonBelowStatus && getReplies(status.id).length > 1\"\n class=\"thread-ancestor-dive-box\"\n >\n <div\n class=\"thread-ancestor-dive-box-inner\"\n >\n <i18n-t\n tag=\"button\"\n scope=\"global\"\n keypath=\"status.ancestor_follow_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"diveIntoStatus(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-right\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.ancestor_follow', getReplies(status.id).length - 1, { numReplies: getReplies(status.id).length - 1 }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n </div>\n </article>\n </div>\n <thread-tree\n v-for=\"status in showingTopLevel\"\n :key=\"status.id\"\n ref=\"statusComponent\"\n :depth=\"0\"\n\n :status=\"status\"\n :in-profile=\"inProfile\"\n :conversation=\"conversation\"\n :collapsable=\"collapsable\"\n :is-expanded=\"isExpanded\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :profile-user-id=\"profileUserId\"\n\n :focused=\"focused\"\n :get-replies=\"getReplies\"\n :highlight=\"maybeHighlight\"\n :set-highlight=\"setHighlight\"\n :toggle-expanded=\"toggleExpanded\"\n\n :simple=\"treeViewIsSimple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n :dive=\"canDive ? diveIntoStatus : undefined\"\n />\n </div>\n <div\n v-if=\"isLinearView\"\n class=\"thread-body\"\n >\n <article>\n <status\n v-for=\"status in conversation\"\n :key=\"status.id\"\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"getHighlight()\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status status-fadein panel-body\"\n\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n </article>\n </div>\n </div>\n </div>\n <div\n v-else\n :style=\"hiddenStyle\"\n />\n</template>\n\n<script src=\"./conversation.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Conversation {\n z-index: 1;\n\n .conversation-dive-to-top-level-box {\n padding: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n\n .thread-ancestors {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n }\n\n .thread-ancestor.-faded .StatusContent {\n --link: var(--faintLink);\n --text: var(--faint);\n\n color: var(--text);\n }\n\n .thread-ancestor-dive-box {\n padding-left: var(--status-margin, $status-margin);\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n\n /* Make the button stretch along the whole row */\n &,\n &-inner {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n }\n }\n\n .thread-ancestor-dive-box-inner {\n padding: var(--status-margin, $status-margin);\n }\n\n .conversation-status {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n }\n\n .thread-ancestor-has-other-replies .conversation-status,\n &:last-child .conversation-status,\n .thread-ancestor:last-child .conversation-status,\n .thread-ancestor:last-child .thread-ancestor-dive-box,\n &.-expanded .thread-tree .conversation-status {\n border-bottom: none;\n }\n\n .thread-ancestors + .thread-tree > .conversation-status {\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n /* expanded conversation in timeline */\n &.status-fadein.-expanded .thread-body {\n border-left: 4px solid $fallback--cRed;\n border-left-color: var(--cRed, $fallback--cRed);\n border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;\n border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);\n border-bottom: 1px solid var(--border, $fallback--border);\n }\n\n &.-expanded.status-fadein {\n margin: calc(var(--status-margin, $status-margin) / 2);\n }\n}\n</style>\n","<template>\n <article class=\"thread-tree\">\n <status\n :key=\"status.id\"\n ref=\"statusComponent\"\n :inline-expanded=\"collapsable && isExpanded\"\n :statusoid=\"status\"\n :expandable=\"!isExpanded\"\n :show-pinned=\"pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]\"\n :focused=\"focused(status.id)\"\n :in-conversation=\"isExpanded\"\n :highlight=\"highlight\"\n :replies=\"getReplies(status.id)\"\n :in-profile=\"inProfile\"\n :profile-user-id=\"profileUserId\"\n class=\"conversation-status conversation-status-treeview status-fadein panel-body\"\n\n :simple-tree=\"simple\"\n :controlled-thread-display-status=\"threadDisplayStatus[status.id]\"\n :controlled-toggle-thread-display=\"() => toggleThreadDisplay(status.id)\"\n\n :controlled-showing-tall=\"currentProp.showingTall\"\n :controlled-expanding-subject=\"currentProp.expandingSubject\"\n :controlled-showing-long-subject=\"currentProp.showingLongSubject\"\n :controlled-replying=\"currentProp.replying\"\n :controlled-media-playing=\"currentProp.mediaPlaying\"\n :controlled-toggle-showing-tall=\"() => toggleCurrentProp('showingTall')\"\n :controlled-toggle-expanding-subject=\"() => toggleCurrentProp('expandingSubject')\"\n :controlled-toggle-showing-long-subject=\"() => toggleCurrentProp('showingLongSubject')\"\n :controlled-toggle-replying=\"() => toggleCurrentProp('replying')\"\n :controlled-set-media-playing=\"(newVal) => setCurrentProp('mediaPlaying', newVal)\"\n :dive=\"dive ? () => dive(status.id) : undefined\"\n\n @goto=\"setHighlight\"\n @toggleExpanded=\"toggleExpanded\"\n />\n <div\n v-if=\"currentReplies.length && threadShowing\"\n class=\"thread-tree-replies\"\n >\n <thread-tree\n v-for=\"replyStatus in currentReplies\"\n :key=\"replyStatus.id\"\n ref=\"childComponent\"\n :depth=\"depth + 1\"\n :status=\"replyStatus\"\n\n :in-profile=\"inProfile\"\n :conversation=\"conversation\"\n :collapsable=\"collapsable\"\n :is-expanded=\"isExpanded\"\n :pinned-status-ids-object=\"pinnedStatusIdsObject\"\n :profile-user-id=\"profileUserId\"\n\n :focused=\"focused\"\n :get-replies=\"getReplies\"\n :highlight=\"highlight\"\n :set-highlight=\"setHighlight\"\n :toggle-expanded=\"toggleExpanded\"\n\n :simple=\"simple\"\n :toggle-thread-display=\"toggleThreadDisplay\"\n :thread-display-status=\"threadDisplayStatus\"\n :show-thread-recursively=\"showThreadRecursively\"\n :total-reply-count=\"totalReplyCount\"\n :total-reply-depth=\"totalReplyDepth\"\n :status-content-properties=\"statusContentProperties\"\n :set-status-content-property=\"setStatusContentProperty\"\n :toggle-status-content-property=\"toggleStatusContentProperty\"\n :dive=\"dive\"\n />\n </div>\n <div\n v-if=\"currentReplies.length && !threadShowing\"\n class=\"thread-tree-replies thread-tree-replies-hidden\"\n >\n <i18n-t\n v-if=\"simple\"\n scope=\"global\"\n tag=\"button\"\n keypath=\"status.thread_follow_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"dive(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-right\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.thread_follow', totalReplyCount[status.id], { numStatus: totalReplyCount[status.id] }) }}\n </span>\n </template>\n </i18n-t>\n <i18n-t\n v-else\n scope=\"global\"\n tag=\"button\"\n keypath=\"status.thread_show_full_with_icon\"\n class=\"button-unstyled -link thread-tree-show-replies-button\"\n @click.prevent=\"showThreadRecursively(status.id)\"\n >\n <template #icon>\n <FAIcon\n icon=\"angle-double-down\"\n />\n </template>\n <template #text>\n <span>\n {{ $tc('status.thread_show_full', totalReplyCount[status.id], { numStatus: totalReplyCount[status.id], depth: totalReplyDepth[status.id] }) }}\n </span>\n </template>\n </i18n-t>\n </div>\n </article>\n</template>\n\n<script src=\"./thread_tree.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.thread-tree-replies {\n margin-left: var(--status-margin, $status-margin);\n border-left: 2px solid var(--border, $fallback--border);\n}\n\n.thread-tree-replies-hidden {\n padding: var(--status-margin, $status-margin);\n\n /* Make the button stretch along the whole row */\n display: flex;\n align-items: stretch;\n flex-direction: column;\n}\n</style>\n","import Status from '../status/status.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAngleDoubleDown,\n faAngleDoubleRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAngleDoubleDown,\n faAngleDoubleRight\n)\n\nconst ThreadTree = {\n components: {\n Status\n },\n name: 'ThreadTree',\n props: {\n depth: Number,\n status: Object,\n inProfile: Boolean,\n conversation: Array,\n collapsable: Boolean,\n isExpanded: Boolean,\n pinnedStatusIdsObject: Object,\n profileUserId: String,\n\n focused: Function,\n highlight: String,\n getReplies: Function,\n setHighlight: Function,\n toggleExpanded: Function,\n\n simple: Boolean,\n // to control display of the whole thread forest\n toggleThreadDisplay: Function,\n threadDisplayStatus: Object,\n showThreadRecursively: Function,\n totalReplyCount: Object,\n totalReplyDepth: Object,\n statusContentProperties: Object,\n setStatusContentProperty: Function,\n toggleStatusContentProperty: Function,\n dive: Function\n },\n computed: {\n suspendable () {\n const selfSuspendable = this.$refs.statusComponent ? this.$refs.statusComponent.suspendable : true\n if (this.$refs.childComponent) {\n return selfSuspendable && this.$refs.childComponent.every(s => s.suspendable)\n }\n return selfSuspendable\n },\n reverseLookupTable () {\n return this.conversation.reduce((table, status, index) => {\n table[status.id] = index\n return table\n }, {})\n },\n currentReplies () {\n return this.getReplies(this.status.id).map(({ id }) => this.statusById(id))\n },\n threadShowing () {\n return this.threadDisplayStatus[this.status.id] === 'showing'\n },\n currentProp () {\n return this.statusContentProperties[this.status.id]\n }\n },\n methods: {\n statusById (id) {\n return this.conversation[this.reverseLookupTable[id]]\n },\n collapseThread () {\n },\n showThread () {\n },\n showAllSubthreads () {\n },\n toggleCurrentProp (name) {\n this.toggleStatusContentProperty(this.status.id, name)\n },\n setCurrentProp (name, newVal) {\n this.setStatusContentProperty(this.status.id, name)\n }\n }\n}\n\nexport default ThreadTree\n","import { render } from \"./thread_tree.vue?vue&type=template&id=061df1d9\"\nimport script from \"./thread_tree.js?vue&type=script&lang=js\"\nexport * from \"./thread_tree.js?vue&type=script&lang=js\"\n\nimport \"./thread_tree.vue?vue&type=style&index=0&id=061df1d9&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"QuickFilterSettings\"\n :bound-to=\"{ x: 'container' }\"\n :trigger-attrs=\"{ title: $t('timeline.quick_filter_settings') }\"\n >\n <template #content>\n <div\n class=\"dropdown-menu\"\n role=\"menu\"\n >\n <div\n v-if=\"loggedIn\"\n role=\"group\"\n >\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilityAll\"\n role=\"menuitemradio\"\n @click=\"replyVisibilityAll = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilityAll }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_all') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilityFollowing\"\n role=\"menuitemradio\"\n @click=\"replyVisibilityFollowing = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilityFollowing }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_following_short') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n :aria-checked=\"replyVisibilitySelf\"\n role=\"menuitemradio\"\n @click=\"replyVisibilitySelf = true\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': replyVisibilitySelf }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.reply_visibility_self_short') }}\n </button>\n <div\n v-if=\"!conversation\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </div>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"muteBotStatuses\"\n @click=\"muteBotStatuses = !muteBotStatuses\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': muteBotStatuses }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.mute_bot_posts') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"hideMedia\"\n @click=\"hideMedia = !hideMedia\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hideMedia }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.hide_media_previews') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"hideMutedPosts\"\n @click=\"hideMutedPosts = !hideMutedPosts\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hideMutedPosts }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.hide_all_muted_posts') }}\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click=\"openTab('filtering')\"\n >\n <FAIcon icon=\"font\" />{{ $t('settings.word_filter_and_more') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <FAIcon icon=\"filter\" />\n </template>\n </Popover>\n</template>\n\n<script src=\"./quick_filter_settings.js\"></script>\n","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faFilter, faFont, faWrench } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFilter,\n faFont,\n faWrench\n)\n\nconst QuickFilterSettings = {\n props: {\n conversation: Boolean\n },\n components: {\n Popover\n },\n methods: {\n setReplyVisibility (visibility) {\n this.$store.dispatch('setOption', { name: 'replyVisibility', value: visibility })\n this.$store.dispatch('queueFlushAll')\n },\n openTab (tab) {\n this.$store.dispatch('openSettingsModalTab', tab)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n replyVisibilitySelf: {\n get () { return this.mergedConfig.replyVisibility === 'self' },\n set () { this.setReplyVisibility('self') }\n },\n replyVisibilityFollowing: {\n get () { return this.mergedConfig.replyVisibility === 'following' },\n set () { this.setReplyVisibility('following') }\n },\n replyVisibilityAll: {\n get () { return this.mergedConfig.replyVisibility === 'all' },\n set () { this.setReplyVisibility('all') }\n },\n hideMedia: {\n get () { return this.mergedConfig.hideAttachments || this.mergedConfig.hideAttachmentsInConv },\n set () {\n const value = !this.hideMedia\n this.$store.dispatch('setOption', { name: 'hideAttachments', value })\n this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })\n }\n },\n hideMutedPosts: {\n get () { return this.mergedConfig.hideFilteredStatuses },\n set () {\n const value = !this.hideMutedPosts\n this.$store.dispatch('setOption', { name: 'hideFilteredStatuses', value })\n }\n },\n muteBotStatuses: {\n get () { return this.mergedConfig.muteBotStatuses },\n set () {\n const value = !this.muteBotStatuses\n this.$store.dispatch('setOption', { name: 'muteBotStatuses', value })\n }\n }\n }\n}\n\nexport default QuickFilterSettings\n","import { render } from \"./quick_filter_settings.vue?vue&type=template&id=43207d13\"\nimport script from \"./quick_filter_settings.js?vue&type=script&lang=js\"\nexport * from \"./quick_filter_settings.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"QuickViewSettings\"\n :bound-to=\"{ x: 'container' }\"\n :trigger-attrs=\"{ title: $t('timeline.quick_view_settings') }\"\n >\n <template #content>\n <div\n class=\"dropdown-menu\"\n role=\"menu\"\n >\n <div role=\"group\">\n <button\n class=\"button-default dropdown-item\"\n :aria-checked=\"conversationDisplay === 'tree'\"\n role=\"menuitemradio\"\n @click=\"conversationDisplay = 'tree'\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :aria-hidden=\"true\"\n :class=\"{ 'menu-checkbox-checked': conversationDisplay === 'tree' }\"\n /><FAIcon\n icon=\"folder-tree\"\n :aria-hidden=\"true\"\n /> {{ $t('settings.conversation_display_tree_quick') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n :aria-checked=\"conversationDisplay === 'linear'\"\n role=\"menuitemradio\"\n @click=\"conversationDisplay = 'linear'\"\n >\n <span\n class=\"menu-checkbox -radio\"\n :class=\"{ 'menu-checkbox-checked': conversationDisplay === 'linear' }\"\n :aria-hidden=\"true\"\n /><FAIcon\n icon=\"list\"\n :aria-hidden=\"true\"\n /> {{ $t('settings.conversation_display_linear_quick') }}\n </button>\n </div>\n <div\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n <button\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"showUserAvatars\"\n @click=\"showUserAvatars = !showUserAvatars\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': showUserAvatars }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.mention_link_show_avatar_quick') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"autoUpdate\"\n @click=\"autoUpdate = !autoUpdate\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': autoUpdate }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.auto_update') }}\n </button>\n <button\n v-if=\"!conversation\"\n class=\"button-default dropdown-item\"\n role=\"menuitemcheckbox\"\n :aria-checked=\"collapseWithSubjects\"\n @click=\"collapseWithSubjects = !collapseWithSubjects\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': collapseWithSubjects }\"\n :aria-hidden=\"true\"\n />{{ $t('settings.collapse_subject') }}\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click=\"openTab('general')\"\n >\n <FAIcon icon=\"wrench\" />{{ $t('settings.more_settings') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <FAIcon icon=\"bars\" />\n </template>\n </Popover>\n</template>\n\n<script src=\"./quick_view_settings.js\"></script>\n","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faList, faFolderTree, faBars, faWrench } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faList,\n faFolderTree,\n faBars,\n faWrench\n)\n\nconst QuickViewSettings = {\n props: {\n conversation: Boolean\n },\n components: {\n Popover\n },\n methods: {\n setConversationDisplay (visibility) {\n this.$store.dispatch('setOption', { name: 'conversationDisplay', value: visibility })\n },\n openTab (tab) {\n this.$store.dispatch('openSettingsModalTab', tab)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n conversationDisplay: {\n get () { return this.mergedConfig.conversationDisplay },\n set (newVal) { this.setConversationDisplay(newVal) }\n },\n autoUpdate: {\n get () { return this.mergedConfig.streaming },\n set () {\n const value = !this.autoUpdate\n this.$store.dispatch('setOption', { name: 'streaming', value })\n }\n },\n collapseWithSubjects: {\n get () { return this.mergedConfig.collapseMessageWithSubject },\n set () {\n const value = !this.collapseWithSubjects\n this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })\n }\n },\n showUserAvatars: {\n get () { return this.mergedConfig.mentionLinkShowAvatar },\n set () {\n const value = !this.showUserAvatars\n console.log(value)\n this.$store.dispatch('setOption', { name: 'mentionLinkShowAvatar', value })\n }\n },\n muteBotStatuses: {\n get () { return this.mergedConfig.muteBotStatuses },\n set () {\n const value = !this.muteBotStatuses\n this.$store.dispatch('setOption', { name: 'muteBotStatuses', value })\n }\n }\n }\n}\n\nexport default QuickViewSettings\n","import { render } from \"./quick_view_settings.vue?vue&type=template&id=2a929bb0\"\nimport script from \"./quick_view_settings.js?vue&type=script&lang=js\"\nexport * from \"./quick_view_settings.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { reduce, filter, findIndex, clone, get } from 'lodash'\nimport Status from '../status/status.vue'\nimport ThreadTree from '../thread_tree/thread_tree.vue'\nimport { WSConnectionStatus } from '../../services/api/api.service.js'\nimport { mapGetters, mapState } from 'vuex'\nimport QuickFilterSettings from '../quick_filter_settings/quick_filter_settings.vue'\nimport QuickViewSettings from '../quick_view_settings/quick_view_settings.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAngleDoubleDown,\n faAngleDoubleLeft,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAngleDoubleDown,\n faAngleDoubleLeft,\n faChevronLeft\n)\n\nconst sortById = (a, b) => {\n const idA = a.type === 'retweet' ? a.retweeted_status.id : a.id\n const idB = b.type === 'retweet' ? b.retweeted_status.id : b.id\n const seqA = Number(idA)\n const seqB = Number(idB)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA < seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return -1\n } else if (!isSeqA && isSeqB) {\n return 1\n } else {\n return idA < idB ? -1 : 1\n }\n}\n\nconst sortAndFilterConversation = (conversation, statusoid) => {\n if (statusoid.type === 'retweet') {\n conversation = filter(\n conversation,\n (status) => (status.type === 'retweet' || status.id !== statusoid.retweeted_status.id)\n )\n } else {\n conversation = filter(conversation, (status) => status.type !== 'retweet')\n }\n return conversation.filter(_ => _).sort(sortById)\n}\n\nconst conversation = {\n data () {\n return {\n highlight: null,\n expanded: false,\n threadDisplayStatusObject: {}, // id => 'showing' | 'hidden'\n statusContentPropertiesObject: {},\n inlineDivePosition: null\n }\n },\n props: [\n 'statusId',\n 'collapsable',\n 'isPage',\n 'pinnedStatusIdsObject',\n 'inProfile',\n 'profileUserId',\n 'virtualHidden'\n ],\n created () {\n if (this.isPage) {\n this.fetchConversation()\n }\n },\n computed: {\n maxDepthToShowByDefault () {\n // maxDepthInThread = max number of depths that is *visible*\n // since our depth starts with 0 and \"showing\" means \"showing children\"\n // there is a -2 here\n const maxDepth = this.$store.getters.mergedConfig.maxDepthInThread - 2\n return maxDepth >= 1 ? maxDepth : 1\n },\n streamingEnabled () {\n return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED\n },\n displayStyle () {\n return this.$store.getters.mergedConfig.conversationDisplay\n },\n isTreeView () {\n return !this.isLinearView\n },\n treeViewIsSimple () {\n return !this.$store.getters.mergedConfig.conversationTreeAdvanced\n },\n isLinearView () {\n return this.displayStyle === 'linear'\n },\n shouldFadeAncestors () {\n return this.$store.getters.mergedConfig.conversationTreeFadeAncestors\n },\n otherRepliesButtonPosition () {\n return this.$store.getters.mergedConfig.conversationOtherRepliesButton\n },\n showOtherRepliesButtonBelowStatus () {\n return this.otherRepliesButtonPosition === 'below'\n },\n showOtherRepliesButtonInsideStatus () {\n return this.otherRepliesButtonPosition === 'inside'\n },\n suspendable () {\n if (this.isTreeView) {\n return Object.entries(this.statusContentProperties)\n .every(([k, prop]) => !prop.replying && prop.mediaPlaying.length === 0)\n }\n if (this.$refs.statusComponent && this.$refs.statusComponent[0]) {\n return this.$refs.statusComponent.every(s => s.suspendable)\n } else {\n return true\n }\n },\n hideStatus () {\n return this.virtualHidden && this.suspendable\n },\n status () {\n return this.$store.state.statuses.allStatusesObject[this.statusId]\n },\n originalStatusId () {\n if (this.status.retweeted_status) {\n return this.status.retweeted_status.id\n } else {\n return this.statusId\n }\n },\n conversationId () {\n return this.getConversationId(this.statusId)\n },\n conversation () {\n if (!this.status) {\n return []\n }\n\n if (!this.isExpanded) {\n return [this.status]\n }\n\n const conversation = clone(this.$store.state.statuses.conversationsObject[this.conversationId])\n const statusIndex = findIndex(conversation, { id: this.originalStatusId })\n if (statusIndex !== -1) {\n conversation[statusIndex] = this.status\n }\n\n return sortAndFilterConversation(conversation, this.status)\n },\n statusMap () {\n return this.conversation.reduce((res, s) => {\n res[s.id] = s\n return res\n }, {})\n },\n threadTree () {\n const reverseLookupTable = this.conversation.reduce((table, status, index) => {\n table[status.id] = index\n return table\n }, {})\n\n const threads = this.conversation.reduce((a, cur) => {\n const id = cur.id\n a.forest[id] = this.getReplies(id)\n .map(s => s.id)\n\n return a\n }, {\n forest: {}\n })\n\n const walk = (forest, topLevel, depth = 0, processed = {}) => topLevel.map(id => {\n if (processed[id]) {\n return []\n }\n\n processed[id] = true\n return [{\n status: this.conversation[reverseLookupTable[id]],\n id,\n depth\n }, walk(forest, forest[id], depth + 1, processed)].reduce((a, b) => a.concat(b), [])\n }).reduce((a, b) => a.concat(b), [])\n\n const linearized = walk(threads.forest, this.topLevel.map(k => k.id))\n\n return linearized\n },\n replyIds () {\n return this.conversation.map(k => k.id)\n .reduce((res, id) => {\n res[id] = (this.replies[id] || []).map(k => k.id)\n return res\n }, {})\n },\n totalReplyCount () {\n const sizes = {}\n const subTreeSizeFor = (id) => {\n if (sizes[id]) {\n return sizes[id]\n }\n sizes[id] = 1 + this.replyIds[id].map(cid => subTreeSizeFor(cid)).reduce((a, b) => a + b, 0)\n return sizes[id]\n }\n this.conversation.map(k => k.id).map(subTreeSizeFor)\n return Object.keys(sizes).reduce((res, id) => {\n res[id] = sizes[id] - 1 // exclude itself\n return res\n }, {})\n },\n totalReplyDepth () {\n const depths = {}\n const subTreeDepthFor = (id) => {\n if (depths[id]) {\n return depths[id]\n }\n depths[id] = 1 + this.replyIds[id].map(cid => subTreeDepthFor(cid)).reduce((a, b) => a > b ? a : b, 0)\n return depths[id]\n }\n this.conversation.map(k => k.id).map(subTreeDepthFor)\n return Object.keys(depths).reduce((res, id) => {\n res[id] = depths[id] - 1 // exclude itself\n return res\n }, {})\n },\n depths () {\n return this.threadTree.reduce((a, k) => {\n a[k.id] = k.depth\n return a\n }, {})\n },\n topLevel () {\n const topLevel = this.conversation.reduce((tl, cur) =>\n tl.filter(k => this.getReplies(cur.id).map(v => v.id).indexOf(k.id) === -1), this.conversation)\n return topLevel\n },\n otherTopLevelCount () {\n return this.topLevel.length - 1\n },\n showingTopLevel () {\n if (this.canDive && this.diveRoot) {\n return [this.statusMap[this.diveRoot]]\n }\n return this.topLevel\n },\n diveRoot () {\n const statusId = this.inlineDivePosition || this.statusId\n const isTopLevel = !this.parentOf(statusId)\n return isTopLevel ? null : statusId\n },\n diveDepth () {\n return this.canDive && this.diveRoot ? this.depths[this.diveRoot] : 0\n },\n diveMode () {\n return this.canDive && !!this.diveRoot\n },\n shouldShowAllConversationButton () {\n // The \"show all conversation\" button tells the user that there exist\n // other toplevel statuses, so do not show it if there is only a single root\n return this.isTreeView && this.isExpanded && this.diveMode && this.topLevel.length > 1\n },\n shouldShowAncestors () {\n return this.isTreeView && this.isExpanded && this.ancestorsOf(this.diveRoot).length\n },\n replies () {\n let i = 1\n // eslint-disable-next-line camelcase\n return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {\n /* eslint-disable camelcase */\n const irid = in_reply_to_status_id\n /* eslint-enable camelcase */\n if (irid) {\n result[irid] = result[irid] || []\n result[irid].push({\n name: `#${i}`,\n id\n })\n }\n i++\n return result\n }, {})\n },\n isExpanded () {\n return !!(this.expanded || this.isPage)\n },\n hiddenStyle () {\n const height = (this.status && this.status.virtualHeight) || '120px'\n return this.virtualHidden ? { height } : {}\n },\n threadDisplayStatus () {\n return this.conversation.reduce((a, k) => {\n const id = k.id\n const depth = this.depths[id]\n const status = (() => {\n if (this.threadDisplayStatusObject[id]) {\n return this.threadDisplayStatusObject[id]\n }\n if ((depth - this.diveDepth) <= this.maxDepthToShowByDefault) {\n return 'showing'\n } else {\n return 'hidden'\n }\n })()\n\n a[id] = status\n return a\n }, {})\n },\n statusContentProperties () {\n return this.conversation.reduce((a, k) => {\n const id = k.id\n const props = (() => {\n const def = {\n showingTall: false,\n expandingSubject: false,\n showingLongSubject: false,\n isReplying: false,\n mediaPlaying: []\n }\n\n if (this.statusContentPropertiesObject[id]) {\n return {\n ...def,\n ...this.statusContentPropertiesObject[id]\n }\n }\n return def\n })()\n\n a[id] = props\n return a\n }, {})\n },\n canDive () {\n return this.isTreeView && this.isExpanded\n },\n focused () {\n return (id) => {\n return (this.isExpanded) && id === this.highlight\n }\n },\n maybeHighlight () {\n return this.isExpanded ? this.highlight : null\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n mastoUserSocketStatus: state => state.api.mastoUserSocketStatus\n })\n },\n components: {\n Status,\n ThreadTree,\n QuickFilterSettings,\n QuickViewSettings\n },\n watch: {\n statusId (newVal, oldVal) {\n const newConversationId = this.getConversationId(newVal)\n const oldConversationId = this.getConversationId(oldVal)\n if (newConversationId && oldConversationId && newConversationId === oldConversationId) {\n this.setHighlight(this.originalStatusId)\n } else {\n this.fetchConversation()\n }\n },\n expanded (value) {\n if (value) {\n this.fetchConversation()\n } else {\n this.resetDisplayState()\n }\n },\n virtualHidden (value) {\n this.$store.dispatch(\n 'setVirtualHeight',\n { statusId: this.statusId, height: `${this.$el.clientHeight}px` }\n )\n }\n },\n methods: {\n fetchConversation () {\n if (this.status) {\n this.$store.state.api.backendInteractor.fetchConversation({ id: this.statusId })\n .then(({ ancestors, descendants }) => {\n this.$store.dispatch('addNewStatuses', { statuses: ancestors })\n this.$store.dispatch('addNewStatuses', { statuses: descendants })\n this.setHighlight(this.originalStatusId)\n })\n } else {\n this.$store.state.api.backendInteractor.fetchStatus({ id: this.statusId })\n .then((status) => {\n this.$store.dispatch('addNewStatuses', { statuses: [status] })\n this.fetchConversation()\n })\n }\n },\n getReplies (id) {\n return this.replies[id] || []\n },\n getHighlight () {\n return this.isExpanded ? this.highlight : null\n },\n setHighlight (id) {\n if (!id) return\n this.highlight = id\n\n if (!this.streamingEnabled) {\n this.$store.dispatch('fetchStatus', id)\n }\n\n this.$store.dispatch('fetchFavsAndRepeats', id)\n this.$store.dispatch('fetchEmojiReactionsBy', id)\n },\n toggleExpanded () {\n this.expanded = !this.expanded\n },\n getConversationId (statusId) {\n const status = this.$store.state.statuses.allStatusesObject[statusId]\n return get(status, 'retweeted_status.statusnet_conversation_id', get(status, 'statusnet_conversation_id'))\n },\n setThreadDisplay (id, nextStatus) {\n this.threadDisplayStatusObject = {\n ...this.threadDisplayStatusObject,\n [id]: nextStatus\n }\n },\n toggleThreadDisplay (id) {\n const curStatus = this.threadDisplayStatus[id]\n const nextStatus = curStatus === 'showing' ? 'hidden' : 'showing'\n this.setThreadDisplay(id, nextStatus)\n },\n setThreadDisplayRecursively (id, nextStatus) {\n this.setThreadDisplay(id, nextStatus)\n this.getReplies(id).map(k => k.id).map(id => this.setThreadDisplayRecursively(id, nextStatus))\n },\n showThreadRecursively (id) {\n this.setThreadDisplayRecursively(id, 'showing')\n },\n setStatusContentProperty (id, name, value) {\n this.statusContentPropertiesObject = {\n ...this.statusContentPropertiesObject,\n [id]: {\n ...this.statusContentPropertiesObject[id],\n [name]: value\n }\n }\n },\n toggleStatusContentProperty (id, name) {\n this.setStatusContentProperty(id, name, !this.statusContentProperties[id][name])\n },\n leastVisibleAncestor (id) {\n let cur = id\n let parent = this.parentOf(cur)\n while (cur) {\n // if the parent is showing it means cur is visible\n if (this.threadDisplayStatus[parent] === 'showing') {\n return cur\n }\n parent = this.parentOf(parent)\n cur = this.parentOf(cur)\n }\n // nothing found, fall back to toplevel\n return this.topLevel[0] ? this.topLevel[0].id : undefined\n },\n diveIntoStatus (id, preventScroll) {\n this.tryScrollTo(id)\n },\n diveToTopLevel () {\n this.tryScrollTo(this.topLevelAncestorOrSelfId(this.diveRoot) || this.topLevel[0].id)\n },\n // only used when we are not on a page\n undive () {\n this.inlineDivePosition = null\n this.setHighlight(this.statusId)\n },\n tryScrollTo (id) {\n if (!id) {\n return\n }\n if (this.isPage) {\n // set statusId\n this.$router.push({ name: 'conversation', params: { id } })\n } else {\n this.inlineDivePosition = id\n }\n // Because the conversation can be unmounted when out of sight\n // and mounted again when it comes into sight,\n // the `mounted` or `created` function in `status` should not\n // contain scrolling calls, as we do not want the page to jump\n // when we scroll with an expanded conversation.\n //\n // Now the method is to rely solely on the `highlight` watcher\n // in `status` components.\n // In linear views, all statuses are rendered at all times, but\n // in tree views, it is possible that a change in active status\n // removes and adds status components (e.g. an originally child\n // status becomes an ancestor status, and thus they will be\n // different).\n // Here, let the components be rendered first, in order to trigger\n // the `highlight` watcher.\n this.$nextTick(() => {\n this.setHighlight(id)\n })\n },\n goToCurrent () {\n this.tryScrollTo(this.diveRoot || this.topLevel[0].id)\n },\n statusById (id) {\n return this.statusMap[id]\n },\n parentOf (id) {\n const status = this.statusById(id)\n if (!status) {\n return undefined\n }\n const { in_reply_to_status_id: parentId } = status\n if (!this.statusMap[parentId]) {\n return undefined\n }\n return parentId\n },\n parentOrSelf (id) {\n return this.parentOf(id) || id\n },\n // Ancestors of some status, from top to bottom\n ancestorsOf (id) {\n const ancestors = []\n let cur = this.parentOf(id)\n while (cur) {\n ancestors.unshift(this.statusMap[cur])\n cur = this.parentOf(cur)\n }\n return ancestors\n },\n topLevelAncestorOrSelfId (id) {\n let cur = id\n let parent = this.parentOf(id)\n while (parent) {\n cur = this.parentOf(cur)\n parent = this.parentOf(parent)\n }\n return cur\n },\n resetDisplayState () {\n this.undive()\n this.threadDisplayStatusObject = {}\n }\n }\n}\n\nexport default conversation\n","import { render } from \"./conversation.vue?vue&type=template&id=68e3b9cb\"\nimport script from \"./conversation.js?vue&type=script&lang=js\"\nexport * from \"./conversation.js?vue&type=script&lang=js\"\n\nimport \"./conversation.vue?vue&type=style&index=0&id=68e3b9cb&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"TimelineMenu\"\n :class=\"{ 'open': isOpen }\"\n :bound-to=\"{ x: 'container' }\"\n bound-to-selector=\".Timeline\"\n popover-class=\"timeline-menu-popover popover-default\"\n @show=\"openMenu\"\n @close=\"() => isOpen = false\"\n >\n <template #content>\n <ListsMenuContent\n v-if=\"useListsMenu\"\n :show-pin=\"false\"\n class=\"timelines\"\n />\n <ul v-else>\n <NavigationEntry\n v-for=\"item in timelinesList\"\n :key=\"item.name\"\n :show-pin=\"false\"\n :item=\"item\"\n />\n </ul>\n </template>\n <template #trigger>\n <span class=\"button-unstyled title timeline-menu-title\">\n <span class=\"timeline-title\">{{ timelineName() }}</span>\n <span>\n <FAIcon\n size=\"sm\"\n icon=\"chevron-down\"\n />\n </span>\n <span\n class=\"click-blocker\"\n @click=\"blockOpen\"\n />\n </span>\n </template>\n </Popover>\n</template>\n\n<script src=\"./timeline_menu.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.timeline-menu-popover {\n min-width: 24rem;\n max-width: 100vw;\n margin-top: 0.6rem;\n font-size: 1rem;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n a {\n display: block;\n padding: 0 0.65em;\n height: 3.5em;\n line-height: 3.5em;\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n }\n\n &.router-link-active {\n font-weight: bolder;\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--text;\n color: var(--selectedMenuText, $fallback--text);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n --icon: var(--selectedMenuIcon, $fallback--icon);\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n svg {\n margin-right: 0.4em;\n margin-left: -0.2em;\n }\n }\n\n li {\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n padding: 0;\n\n &:last-child a {\n border-bottom-right-radius: $fallback--panelRadius;\n border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);\n border-bottom-left-radius: $fallback--panelRadius;\n border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);\n }\n\n &:last-child {\n border: none;\n }\n }\n}\n\n.TimelineMenu {\n margin-right: auto;\n min-width: 0;\n\n .popover-trigger-button {\n vertical-align: bottom;\n }\n\n .panel::after {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n }\n\n .timeline-menu-title {\n margin: 0;\n cursor: pointer;\n user-select: none;\n width: 100%;\n display: flex;\n\n .timeline-menu-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n svg {\n margin-left: 0.6em;\n transition: transform 100ms;\n }\n\n .click-blocker {\n cursor: default;\n flex-grow: 1;\n }\n }\n\n &.open .timeline-menu-title svg {\n color: $fallback--text;\n color: var(--panelText, $fallback--text);\n transform: rotate(180deg);\n }\n\n .panel {\n box-shadow: var(--popoverShadow);\n }\n}\n</style>\n","import Popover from '../popover/popover.vue'\nimport NavigationEntry from 'src/components/navigation/navigation_entry.vue'\nimport { mapState } from 'vuex'\nimport { ListsMenuContent } from '../lists_menu/lists_menu_content.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { TIMELINES } from 'src/components/navigation/navigation.js'\nimport { filterNavigation } from 'src/components/navigation/filter.js'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faChevronDown)\n\n// Route -> i18n key mapping, exported and not in the computed\n// because nav panel benefits from the same information.\nexport const timelineNames = () => {\n return {\n friends: 'nav.home_timeline',\n bookmarks: 'nav.bookmarks',\n dms: 'nav.dms',\n 'public-timeline': 'nav.public_tl',\n 'public-external-timeline': 'nav.twkn'\n }\n}\n\nconst TimelineMenu = {\n components: {\n Popover,\n NavigationEntry,\n ListsMenuContent\n },\n data () {\n return {\n isOpen: false\n }\n },\n created () {\n if (timelineNames()[this.$route.name]) {\n this.$store.dispatch('setLastTimeline', this.$route.name)\n }\n },\n computed: {\n useListsMenu () {\n const route = this.$route.name\n return route === 'lists-timeline'\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n privateMode: state => state.instance.private,\n federating: state => state.instance.federating\n }),\n timelinesList () {\n return filterNavigation(\n Object.entries(TIMELINES).map(([k, v]) => ({ ...v, name: k })),\n {\n hasChats: this.pleromaChatMessagesAvailable,\n isFederating: this.federating,\n isPrivate: this.privateMode,\n currentUser: this.currentUser\n }\n )\n }\n },\n methods: {\n openMenu () {\n // $nextTick is too fast, animation won't play back but\n // instead starts in fully open position. Low values\n // like 1-5 work on fast machines but not on mobile, 25\n // seems like a good compromise that plays without significant\n // added lag.\n setTimeout(() => {\n this.isOpen = true\n }, 25)\n },\n blockOpen (event) {\n // For the blank area inside the button element.\n // Just setting @click.stop=\"\" makes unintuitive behavior when\n // menu is open and clicking on the blank area doesn't close it.\n if (!this.isOpen) {\n event.stopPropagation()\n }\n },\n timelineName () {\n const route = this.$route.name\n if (route === 'tag-timeline') {\n return '#' + this.$route.params.tag\n }\n if (route === 'lists-timeline') {\n return this.$store.getters.findListTitle(this.$route.params.id)\n }\n const i18nkey = timelineNames()[this.$route.name]\n return i18nkey ? this.$t(i18nkey) : route\n }\n }\n}\n\nexport default TimelineMenu\n","import { render } from \"./timeline_menu.vue?vue&type=template&id=b7d0cae0\"\nimport script from \"./timeline_menu.js?vue&type=script&lang=js\"\nexport * from \"./timeline_menu.js?vue&type=script&lang=js\"\n\nimport \"./timeline_menu.vue?vue&type=style&index=0&id=b7d0cae0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Status from '../status/status.vue'\nimport { mapState } from 'vuex'\nimport timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'\nimport Conversation from '../conversation/conversation.vue'\nimport TimelineMenu from '../timeline_menu/timeline_menu.vue'\nimport QuickFilterSettings from '../quick_filter_settings/quick_filter_settings.vue'\nimport QuickViewSettings from '../quick_view_settings/quick_view_settings.vue'\nimport { debounce, throttle, keyBy } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch, faCirclePlus, faCog, faMinus, faArrowUp, faCheck } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faCog,\n faMinus,\n faArrowUp,\n faCirclePlus,\n faCheck\n)\n\nconst Timeline = {\n props: [\n 'timeline',\n 'timelineName',\n 'title',\n 'userId',\n 'listId',\n 'tag',\n 'embedded',\n 'count',\n 'pinnedStatusIds',\n 'inProfile',\n 'footerSlipgate' // reference to an element where we should put our footer\n ],\n data () {\n return {\n showScrollTop: false,\n paused: false,\n unfocused: false,\n bottomedOut: false,\n virtualScrollIndex: 0,\n blockingClicks: false\n }\n },\n components: {\n Status,\n Conversation,\n TimelineMenu,\n QuickFilterSettings,\n QuickViewSettings\n },\n computed: {\n filteredVisibleStatuses () {\n return this.timeline.visibleStatuses.filter(status => this.timelineName !== 'user' || (status.id >= this.timeline.minId && status.id <= this.timeline.maxId))\n },\n filteredPinnedStatusIds () {\n return (this.pinnedStatusIds || []).filter(statusId => this.timeline.statusesObject[statusId])\n },\n newStatusCount () {\n return this.timeline.newStatusCount\n },\n showLoadButton () {\n return this.timeline.newStatusCount > 0 || this.timeline.flushMarker !== 0\n },\n loadButtonString () {\n if (this.timeline.flushMarker !== 0) {\n return this.$t('timeline.reload')\n } else {\n return `${this.$t('timeline.show_new')} (${this.newStatusCount})`\n }\n },\n mobileLoadButtonString () {\n if (this.timeline.flushMarker !== 0) {\n return '+'\n } else {\n return this.newStatusCount > 99 ? '∞' : this.newStatusCount\n }\n },\n classes () {\n let rootClasses = !this.embedded ? ['panel', 'panel-default'] : ['-nonpanel']\n if (this.blockingClicks) rootClasses = rootClasses.concat(['-blocked', '_misclick-prevention'])\n return {\n root: rootClasses,\n header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading', '-sticky'] : []),\n body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []),\n footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : [])\n }\n },\n // id map of statuses which need to be hidden in the main list due to pinning logic\n pinnedStatusIdsObject () {\n return keyBy(this.pinnedStatusIds)\n },\n statusesToDisplay () {\n const amount = this.timeline.visibleStatuses.length\n const statusesPerSide = Math.ceil(Math.max(3, window.innerHeight / 80))\n const nonPinnedIndex = this.virtualScrollIndex - this.filteredPinnedStatusIds.length\n const min = Math.max(0, nonPinnedIndex - statusesPerSide)\n const max = Math.min(amount, nonPinnedIndex + statusesPerSide)\n return this.timeline.visibleStatuses.slice(min, max).map(_ => _.id)\n },\n virtualScrollingEnabled () {\n return this.$store.getters.mergedConfig.virtualScrolling\n },\n ...mapState({\n mobileLayout: state => state.interface.layoutType === 'mobile'\n })\n },\n created () {\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n const showImmediately = this.timeline.visibleStatuses.length === 0\n\n window.addEventListener('scroll', this.handleScroll)\n\n if (store.state.api.fetchers[this.timelineName]) { return false }\n\n timelineFetcher.fetchAndUpdate({\n store,\n credentials,\n timeline: this.timelineName,\n showImmediately,\n userId: this.userId,\n listId: this.listId,\n tag: this.tag\n })\n },\n mounted () {\n if (typeof document.hidden !== 'undefined') {\n document.addEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.unfocused = document.hidden\n }\n window.addEventListener('keydown', this.handleShortKey)\n setTimeout(this.determineVisibleStatuses, 250)\n },\n unmounted () {\n window.removeEventListener('scroll', this.handleScroll)\n window.removeEventListener('keydown', this.handleShortKey)\n if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.$store.commit('setLoading', { timeline: this.timelineName, value: false })\n },\n methods: {\n scrollToTop () {\n window.scrollTo({ top: this.$el.offsetTop })\n },\n stopBlockingClicks: debounce(function () {\n this.blockingClicks = false\n }, 1000),\n blockClicksTemporarily () {\n if (!this.blockingClicks) {\n this.blockingClicks = true\n }\n this.stopBlockingClicks()\n },\n handleShortKey (e) {\n // Ignore when input fields are focused\n if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return\n if (e.key === '.') this.showNewStatuses()\n },\n showNewStatuses () {\n if (this.timeline.flushMarker !== 0) {\n this.$store.commit('clearTimeline', { timeline: this.timelineName, excludeUserId: true })\n this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })\n if (this.timelineName === 'user') {\n this.$store.dispatch('fetchPinnedStatuses', this.userId)\n }\n this.fetchOlderStatuses()\n } else {\n this.blockClicksTemporarily()\n this.$store.commit('showNewStatuses', { timeline: this.timelineName })\n this.paused = false\n }\n window.scrollTo({ top: 0 })\n },\n fetchOlderStatuses: throttle(function () {\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n store.commit('setLoading', { timeline: this.timelineName, value: true })\n timelineFetcher.fetchAndUpdate({\n store,\n credentials,\n timeline: this.timelineName,\n older: true,\n showImmediately: true,\n userId: this.userId,\n listId: this.listId,\n tag: this.tag\n }).then(({ statuses }) => {\n if (statuses && statuses.length === 0) {\n this.bottomedOut = true\n }\n }).finally(() =>\n store.commit('setLoading', { timeline: this.timelineName, value: false })\n )\n }, 1000, this),\n determineVisibleStatuses () {\n if (!this.$refs.timeline) return\n if (!this.virtualScrollingEnabled) return\n\n const statuses = this.$refs.timeline.children\n const cappedScrollIndex = Math.max(0, Math.min(this.virtualScrollIndex, statuses.length - 1))\n\n if (statuses.length === 0) return\n\n const height = Math.max(document.body.offsetHeight, window.pageYOffset)\n\n const centerOfScreen = window.pageYOffset + (window.innerHeight * 0.5)\n\n // Start from approximating the index of some visible status by using the\n // the center of the screen on the timeline.\n let approxIndex = Math.floor(statuses.length * (centerOfScreen / height))\n let err = statuses[approxIndex].getBoundingClientRect().y\n\n // if we have a previous scroll index that can be used, test if it's\n // closer than the previous approximation, use it if so\n\n const virtualScrollIndexY = statuses[cappedScrollIndex].getBoundingClientRect().y\n if (Math.abs(err) > virtualScrollIndexY) {\n approxIndex = cappedScrollIndex\n err = virtualScrollIndexY\n }\n\n // if the status is too far from viewport, check the next/previous ones if\n // they happen to be better\n while (err < -20 && approxIndex < statuses.length - 1) {\n err += statuses[approxIndex].offsetHeight\n approxIndex++\n }\n while (err > window.innerHeight + 100 && approxIndex > 0) {\n approxIndex--\n err -= statuses[approxIndex].offsetHeight\n }\n\n // this status is now the center point for virtual scrolling and visible\n // statuses will be nearby statuses before and after it\n this.virtualScrollIndex = approxIndex\n },\n scrollLoad (e) {\n const bodyBRect = document.body.getBoundingClientRect()\n const height = Math.max(bodyBRect.height, -(bodyBRect.y))\n if (this.timeline.loading === false &&\n this.$el.offsetHeight > 0 &&\n (window.innerHeight + window.pageYOffset) >= (height - 750)) {\n this.fetchOlderStatuses()\n }\n },\n handleScroll: throttle(function (e) {\n this.showScrollTop = this.$el.offsetTop < window.scrollY\n this.determineVisibleStatuses()\n this.scrollLoad(e)\n }, 200),\n handleVisibilityChange () {\n this.unfocused = document.hidden\n }\n },\n watch: {\n newStatusCount (count) {\n if (!this.$store.getters.mergedConfig.streaming) {\n return\n }\n if (count > 0) {\n // only 'stream' them when you're scrolled to the top\n const doc = document.documentElement\n const top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n if (top < 15 &&\n !this.paused &&\n !(this.unfocused && this.$store.getters.mergedConfig.pauseOnUnfocused)\n ) {\n this.showNewStatuses()\n } else {\n this.paused = true\n }\n }\n }\n }\n}\n\nexport default Timeline\n","import { render } from \"./timeline.vue?vue&type=template&id=79de750e\"\nimport script from \"./timeline.js?vue&type=script&lang=js\"\nexport * from \"./timeline.js?vue&type=script&lang=js\"\n\nimport \"./timeline.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\nconst PublicTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.public }\n },\n created () {\n this.$store.dispatch('startFetchingTimeline', { timeline: 'public' })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'public')\n }\n\n}\n\nexport default PublicTimeline\n","import { render } from \"./public_timeline.vue?vue&type=template&id=5f2a502e\"\nimport script from \"./public_timeline.js?vue&type=script&lang=js\"\nexport * from \"./public_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.public_tl')\"\n :timeline=\"timeline\"\n :timeline-name=\"'public'\"\n />\n</template>\n\n<script src=\"./public_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\nconst PublicAndExternalTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.publicAndExternal }\n },\n created () {\n this.$store.dispatch('startFetchingTimeline', { timeline: 'publicAndExternal' })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'publicAndExternal')\n }\n}\n\nexport default PublicAndExternalTimeline\n","import { render } from \"./public_and_external_timeline.vue?vue&type=template&id=f6923484\"\nimport script from \"./public_and_external_timeline.js?vue&type=script&lang=js\"\nexport * from \"./public_and_external_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.twkn')\"\n :timeline=\"timeline\"\n :timeline-name=\"'publicAndExternal'\"\n />\n</template>\n\n<script src=\"./public_and_external_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\nconst FriendsTimeline = {\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.friends }\n }\n}\n\nexport default FriendsTimeline\n","import { render } from \"./friends_timeline.vue?vue&type=template&id=22490669\"\nimport script from \"./friends_timeline.js?vue&type=script&lang=js\"\nexport * from \"./friends_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.timeline')\"\n :timeline=\"timeline\"\n :timeline-name=\"'friends'\"\n />\n</template>\n\n<script src=\"./friends_timeline.js\"></script>\n","import Timeline from '../timeline/timeline.vue'\n\nconst TagTimeline = {\n created () {\n this.$store.commit('clearTimeline', { timeline: 'tag' })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })\n },\n components: {\n Timeline\n },\n computed: {\n tag () { return this.$route.params.tag },\n timeline () { return this.$store.state.statuses.timelines.tag }\n },\n watch: {\n tag () {\n this.$store.commit('clearTimeline', { timeline: 'tag' })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })\n }\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'tag')\n }\n}\n\nexport default TagTimeline\n","import { render } from \"./tag_timeline.vue?vue&type=template&id=047310d3\"\nimport script from \"./tag_timeline.js?vue&type=script&lang=js\"\nexport * from \"./tag_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"tag\"\n :timeline=\"timeline\"\n :timeline-name=\"'tag'\"\n :tag=\"tag\"\n />\n</template>\n\n<script src='./tag_timeline.js'></script>\n","import Timeline from '../timeline/timeline.vue'\n\nconst Bookmarks = {\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.bookmarks\n }\n },\n components: {\n Timeline\n },\n unmounted () {\n this.$store.commit('clearTimeline', { timeline: 'bookmarks' })\n }\n}\n\nexport default Bookmarks\n","import { render } from \"./bookmark_timeline.vue?vue&type=template&id=2b9c8ba0\"\nimport script from \"./bookmark_timeline.js?vue&type=script&lang=js\"\nexport * from \"./bookmark_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.bookmarks')\"\n :timeline=\"timeline\"\n :timeline-name=\"'bookmarks'\"\n />\n</template>\n\n<script src=\"./bookmark_timeline.js\"></script>\n","import Conversation from '../conversation/conversation.vue'\n\nconst conversationPage = {\n components: {\n Conversation\n },\n computed: {\n statusId () {\n return this.$route.params.id\n }\n }\n}\n\nexport default conversationPage\n","import { render } from \"./conversation-page.vue?vue&type=template&id=46654d24\"\nimport script from \"./conversation-page.js?vue&type=script&lang=js\"\nexport * from \"./conversation-page.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <conversation\n :collapsable=\"false\"\n is-page=\"true\"\n :status-id=\"statusId\"\n />\n</template>\n\n<script src=\"./conversation-page.js\"></script>\n","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t(\"nav.interactions\") }}\n </div>\n </div>\n <tab-switcher\n ref=\"tabSwitcher\"\n :on-switch=\"onModeSwitch\"\n >\n <span\n key=\"mentions\"\n :label=\"$t('nav.mentions')\"\n />\n <span\n key=\"likes+repeats\"\n :label=\"$t('interactions.favs_repeats')\"\n />\n <span\n key=\"follows\"\n :label=\"$t('interactions.follows')\"\n />\n <span\n key=\"reactions\"\n :label=\"$t('interactions.emoji_reactions')\"\n />\n <span\n v-if=\"canSeeReports\"\n key=\"reports\"\n :label=\"$t('interactions.reports')\"\n />\n <span\n v-if=\"!allowFollowingMove\"\n key=\"moves\"\n :label=\"$t('interactions.moves')\"\n />\n </tab-switcher>\n <Notifications\n ref=\"notifications\"\n :no-heading=\"true\"\n :minimal-mode=\"true\"\n :filter-mode=\"filterMode\"\n />\n </div>\n</template>\n\n<script src=\"./interactions.js\"></script>\n","import Notifications from '../notifications/notifications.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\n\nconst tabModeDict = {\n mentions: ['mention'],\n 'likes+repeats': ['repeat', 'like'],\n follows: ['follow'],\n reactions: ['pleroma:emoji_reaction'],\n reports: ['pleroma:report'],\n moves: ['move']\n}\n\nconst Interactions = {\n data () {\n return {\n allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,\n filterMode: tabModeDict.mentions,\n canSeeReports: this.$store.state.users.currentUser.privileges.includes('reports_manage_reports')\n }\n },\n methods: {\n onModeSwitch (key) {\n this.filterMode = tabModeDict[key]\n }\n },\n components: {\n Notifications,\n TabSwitcher\n }\n}\n\nexport default Interactions\n","import { render } from \"./interactions.vue?vue&type=template&id=3b173532\"\nimport script from \"./interactions.js?vue&type=script&lang=js\"\nexport * from \"./interactions.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\n\nconst DMs = {\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.dms\n }\n },\n components: {\n Timeline\n }\n}\n\nexport default DMs\n","import { render } from \"./dm_timeline.vue?vue&type=template&id=294f8b6d\"\nimport script from \"./dm_timeline.js?vue&type=script&lang=js\"\nexport * from \"./dm_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n :title=\"$t('nav.dms')\"\n :timeline=\"timeline\"\n :timeline-name=\"'dms'\"\n />\n</template>\n\n<script src=\"./dm_timeline.js\"></script>\n","<template>\n <div v-if=\"isNew\">\n <ChatNew @cancel=\"cancelNewChat\" />\n </div>\n <div\n v-else\n class=\"chat-list panel panel-default\"\n >\n <div class=\"panel-heading -sticky\">\n <span class=\"title\">\n {{ $t(\"chats.chats\") }}\n </span>\n <button\n class=\"button-default\"\n @click=\"newChat\"\n >\n {{ $t(\"chats.new\") }}\n </button>\n </div>\n <div class=\"panel-body\">\n <div\n v-if=\"sortedChatList.length > 0\"\n class=\"timeline\"\n >\n <List :items=\"sortedChatList\">\n <template #item=\"{item}\">\n <ChatListItem\n :key=\"item.id\"\n :compact=\"false\"\n :chat=\"item\"\n />\n </template>\n </List>\n </div>\n <div\n v-else\n class=\"emtpy-chat-list-alert\"\n >\n <span>{{ $t('chats.empty_chat_list_placeholder') }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.chat-list {\n min-height: 25em;\n margin-bottom: 0;\n}\n\n.emtpy-chat-list-alert {\n padding: 3em;\n font-size: 1.2em;\n display: flex;\n justify-content: center;\n color: $fallback--text;\n color: var(--faint, $fallback--text);\n}\n\n</style>\n","<template>\n <div\n class=\"chat-list-item\"\n @click.capture.prevent=\"openChat\"\n >\n <div class=\"chat-list-item-left\">\n <UserAvatar\n :user=\"chat.account\"\n height=\"48px\"\n width=\"48px\"\n />\n </div>\n <div class=\"chat-list-item-center\">\n <div class=\"heading\">\n <span\n v-if=\"chat.account\"\n class=\"name-and-account-name\"\n >\n <ChatTitle\n :user=\"chat.account\"\n />\n </span>\n <span class=\"heading-right\" />\n <div class=\"time-wrapper\">\n <Timeago\n :time=\"chat.updated_at\"\n :auto-update=\"60\"\n />\n </div>\n </div>\n <div class=\"chat-preview\">\n <StatusBody\n class=\"chat-preview-body\"\n :status=\"messageForStatusContent\"\n :single-line=\"true\"\n />\n <div\n v-if=\"chat.unread > 0\"\n class=\"badge badge-notification unread-chat-count\"\n >\n {{ chat.unread }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_list_item.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat_list_item\";\n</style>\n","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport { defineAsyncComponent } from 'vue'\n\nexport default {\n name: 'ChatTitle',\n components: {\n UserAvatar,\n RichContent,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n props: [\n 'user', 'withAvatar'\n ],\n computed: {\n title () {\n return this.user ? this.user.screen_name_ui : ''\n },\n htmlTitle () {\n return this.user ? this.user.name_html : ''\n }\n }\n}\n","import { render } from \"./chat_title.vue?vue&type=template&id=e9d70b10\"\nimport script from \"./chat_title.js?vue&type=script&lang=js\"\nexport * from \"./chat_title.js?vue&type=script&lang=js\"\n\nimport \"./chat_title.vue?vue&type=style&index=0&id=e9d70b10&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"chat-title\"\n :title=\"title\"\n >\n <UserPopover\n v-if=\"withAvatar && user\"\n class=\"avatar-container\"\n :user-id=\"user.id\"\n >\n <UserAvatar\n class=\"titlebar-avatar\"\n :user=\"user\"\n />\n </UserPopover>\n <RichContent\n v-if=\"user\"\n class=\"username\"\n :title=\"'@'+(user && user.screen_name_ui)\"\n :html=\"htmlTitle\"\n :emoji=\"user.emoji || []\"\n />\n </div>\n</template>\n\n<script src=\"./chat_title.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.chat-title {\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n --emoji-size: 14px;\n\n .username {\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: inline;\n word-wrap: break-word;\n overflow: hidden;\n }\n\n .avatar-container {\n align-self: center;\n line-height: 1;\n }\n\n .titlebar-avatar {\n margin-right: 0.5em;\n height: 1.5em;\n width: 1.5em;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n\n &.animated::before {\n display: none;\n }\n }\n}\n</style>\n","import { mapState } from 'vuex'\nimport StatusBody from '../status_content/status_content.vue'\nimport fileType from 'src/services/file_type/file_type.service'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport ChatTitle from '../chat_title/chat_title.vue'\n\nconst ChatListItem = {\n name: 'ChatListItem',\n props: [\n 'chat'\n ],\n components: {\n UserAvatar,\n AvatarList,\n Timeago,\n ChatTitle,\n StatusBody\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n attachmentInfo () {\n if (this.chat.lastMessage.attachments.length === 0) { return }\n\n const types = this.chat.lastMessage.attachments.map(file => fileType.fileType(file.mimetype))\n if (types.includes('video')) {\n return this.$t('file_type.video')\n } else if (types.includes('audio')) {\n return this.$t('file_type.audio')\n } else if (types.includes('image')) {\n return this.$t('file_type.image')\n } else {\n return this.$t('file_type.file')\n }\n },\n messageForStatusContent () {\n const message = this.chat.lastMessage\n const messageEmojis = message ? message.emojis : []\n const isYou = message && message.account_id === this.currentUser.id\n const content = message ? (this.attachmentInfo || message.content) : ''\n const messagePreview = isYou ? `<i>${this.$t('chats.you')}</i> ${content}` : content\n return {\n summary: '',\n emojis: messageEmojis,\n raw_html: messagePreview,\n text: messagePreview,\n attachments: []\n }\n }\n },\n methods: {\n openChat (_e) {\n if (this.chat.id) {\n this.$router.push({\n name: 'chat',\n params: {\n username: this.currentUser.screen_name,\n recipient_id: this.chat.account.id\n }\n })\n }\n }\n }\n}\n\nexport default ChatListItem\n","import { render } from \"./chat_list_item.vue?vue&type=template&id=a202646c\"\nimport script from \"./chat_list_item.js?vue&type=script&lang=js\"\nexport * from \"./chat_list_item.js?vue&type=script&lang=js\"\n\nimport \"./chat_list_item.vue?vue&type=style&index=0&id=a202646c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"panel-default panel chat-new\"\n >\n <div\n ref=\"header\"\n class=\"panel-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"goBack\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n </div>\n <div class=\"input-wrap\">\n <div class=\"input-search\">\n <FAIcon\n class=\"search-icon fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </div>\n <input\n ref=\"search\"\n v-model=\"query\"\n placeholder=\"Search people\"\n @input=\"onInput\"\n >\n </div>\n <div class=\"member-list\">\n <div\n v-for=\"user in availableUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <div @click.capture.prevent=\"goToChat(user)\">\n <BasicUserCard :user=\"user\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat_new.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat_new\";\n</style>\n","import { mapState, mapGetters } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst chatNew = {\n components: {\n BasicUserCard,\n UserAvatar\n },\n data () {\n return {\n suggestions: [],\n userIds: [],\n loading: false,\n query: ''\n }\n },\n async created () {\n const { chats } = await this.backendInteractor.chats()\n chats.forEach(chat => this.suggestions.push(chat.account))\n },\n computed: {\n users () {\n return this.userIds.map(userId => this.findUser(userId))\n },\n availableUsers () {\n if (this.query.length !== 0) {\n return this.users\n } else {\n return this.suggestions\n }\n },\n ...mapState({\n currentUser: state => state.users.currentUser,\n backendInteractor: state => state.api.backendInteractor\n }),\n ...mapGetters(['findUser'])\n },\n methods: {\n goBack () {\n this.$emit('cancel')\n },\n goToChat (user) {\n this.$router.push({ name: 'chat', params: { recipient_id: user.id } })\n },\n onInput () {\n this.search(this.query)\n },\n addUser (user) {\n this.selectedUserIds.push(user.id)\n this.query = ''\n },\n removeUser (userId) {\n this.selectedUserIds = this.selectedUserIds.filter(id => id !== userId)\n },\n search (query) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.userIds = []\n this.$store.dispatch('search', { q: query, resolve: true, type: 'accounts' })\n .then(data => {\n this.loading = false\n this.userIds = data.accounts.map(a => a.id)\n })\n }\n }\n}\n\nexport default chatNew\n","import { render } from \"./chat_new.vue?vue&type=template&id=527ae593\"\nimport script from \"./chat_new.js?vue&type=script&lang=js\"\nexport * from \"./chat_new.js?vue&type=script&lang=js\"\n\nimport \"./chat_new.vue?vue&type=style&index=0&id=527ae593&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport ChatListItem from '../chat_list_item/chat_list_item.vue'\nimport ChatNew from '../chat_new/chat_new.vue'\nimport List from '../list/list.vue'\n\nconst ChatList = {\n components: {\n ChatListItem,\n List,\n ChatNew\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n ...mapGetters(['sortedChatList'])\n },\n data () {\n return {\n isNew: false\n }\n },\n created () {\n this.$store.dispatch('fetchChats', { latest: true })\n },\n methods: {\n cancelNewChat () {\n this.isNew = false\n this.$store.dispatch('fetchChats', { latest: true })\n },\n newChat () {\n this.isNew = true\n }\n }\n}\n\nexport default ChatList\n","import { render } from \"./chat_list.vue?vue&type=template&id=66fabc09\"\nimport script from \"./chat_list.js?vue&type=script&lang=js\"\nexport * from \"./chat_list.js?vue&type=script&lang=js\"\n\nimport \"./chat_list.vue?vue&type=style&index=0&id=66fabc09&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"chat-view\">\n <div class=\"chat-view-inner\">\n <div\n ref=\"inner\"\n class=\"panel-default panel chat-view-body\"\n >\n <div\n ref=\"header\"\n class=\"panel-heading -sticky chat-view-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"goBack\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n <div class=\"title text-center\">\n <ChatTitle\n :user=\"recipient\"\n :with-avatar=\"true\"\n />\n </div>\n </div>\n <div\n class=\"message-list\"\n :style=\"{ height: scrollableContainerHeight }\"\n >\n <template v-if=\"!errorLoadingChat\">\n <ChatMessage\n v-for=\"chatViewItem in chatViewItems\"\n :key=\"chatViewItem.id\"\n :author=\"recipient\"\n :chat-view-item=\"chatViewItem\"\n :hovered-message-chain=\"chatViewItem.messageChainId === hoveredMessageChainId\"\n @hover=\"onMessageHover\"\n />\n </template>\n <div\n v-else\n class=\"chat-loading-error\"\n >\n <div class=\"alert error\">\n {{ $t('chats.error_loading_chat') }}\n </div>\n </div>\n </div>\n <div\n ref=\"footer\"\n class=\"panel-body footer\"\n >\n <div\n class=\"jump-to-bottom-button\"\n :class=\"{ 'visible': jumpToBottomButtonVisible }\"\n @click=\"scrollDown({ behavior: 'smooth' })\"\n >\n <span>\n <FAIcon icon=\"chevron-down\" />\n <div\n v-if=\"newMessageCount\"\n class=\"badge badge-notification unread-chat-count unread-message-count\"\n >\n {{ newMessageCount }}\n </div>\n </span>\n </div>\n <PostStatusForm\n :disable-subject=\"true\"\n :disable-scope-selector=\"true\"\n :disable-notice=\"true\"\n :disable-lock-warning=\"true\"\n :disable-polls=\"true\"\n :disable-sensitivity-checkbox=\"true\"\n :disable-submit=\"errorLoadingChat || !currentChat\"\n :disable-preview=\"true\"\n :optimistic-posting=\"true\"\n :post-handler=\"sendMessage\"\n :submit-on-enter=\"!mobileLayout\"\n :preserve-focus=\"!mobileLayout\"\n :auto-focus=\"!mobileLayout\"\n :placeholder=\"formPlaceholder\"\n :file-limit=\"1\"\n max-height=\"160\"\n emoji-picker-placement=\"top\"\n @resize=\"handleResize\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./chat.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./chat\";\n</style>\n","<template>\n <div\n v-if=\"isMessage\"\n class=\"chat-message-wrapper\"\n :class=\"{ 'hovered-message-chain': hoveredMessageChain }\"\n @mouseover=\"onHover(true)\"\n @mouseleave=\"onHover(false)\"\n >\n <div\n class=\"chat-message\"\n :class=\"[{ 'outgoing': isCurrentUser, 'incoming': !isCurrentUser }]\"\n >\n <div\n v-if=\"!isCurrentUser\"\n class=\"avatar-wrapper\"\n >\n <UserPopover\n v-if=\"chatViewItem.isHead\"\n :user-id=\"author.id\"\n >\n <UserAvatar\n :compact=\"true\"\n :better-shadow=\"betterShadow\"\n :user=\"author\"\n />\n </UserPopover>\n </div>\n <div class=\"chat-message-inner\">\n <div\n class=\"status-body\"\n :style=\"{ 'min-width': message.attachment ? '80%' : '' }\"\n >\n <div\n class=\"media status\"\n :class=\"{ 'without-attachment': !hasAttachment, 'pending': chatViewItem.data.pending, 'error': chatViewItem.data.error }\"\n style=\"position: relative;\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n >\n <div\n class=\"chat-message-menu\"\n :class=\"{ 'visible': hovered || menuOpened }\"\n >\n <Popover\n trigger=\"click\"\n placement=\"top\"\n bound-to-selector=\".chat-view-inner\"\n :bound-to=\"{ x: 'container' }\"\n :margin=\"popoverMarginStyle\"\n @show=\"menuOpened = true\"\n @close=\"menuOpened = false\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n @click=\"deleteMessage\"\n >\n <FAIcon icon=\"times\" /> {{ $t(\"chats.delete\") }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"button-default menu-icon\"\n :title=\"$t('chats.more')\"\n >\n <FAIcon icon=\"ellipsis-h\" />\n </button>\n </template>\n </Popover>\n </div>\n <StatusContent\n class=\"message-content\"\n :status=\"messageForStatusContent\"\n :full-content=\"true\"\n >\n <template #footer>\n <span\n class=\"created-at\"\n >\n {{ createdAt }}\n </span>\n </template>\n </StatusContent>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"chat-message-date-separator\"\n >\n <ChatMessageDate :date=\"chatViewItem.date\" />\n </div>\n</template>\n\n<script src=\"./chat_message.js\"></script>\n<style lang=\"scss\">\n@import \"./chat_message\";\n\n</style>\n","<template>\n <time>\n {{ displayDate }}\n </time>\n</template>\n\n<script>\nimport localeService from 'src/services/locale/locale.service.js'\n\nexport default {\n name: 'Timeago',\n props: ['date'],\n computed: {\n displayDate () {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (this.date.getTime() === today.getTime()) {\n return this.$t('display_date.today')\n } else {\n return this.date.toLocaleDateString(localeService.internalToBrowserLocale(this.$i18n.locale), { day: 'numeric', month: 'long' })\n }\n }\n }\n}\n</script>\n","import { render } from \"./chat_message_date.vue?vue&type=template&id=23377998\"\nimport script from \"./chat_message_date.vue?vue&type=script&lang=js\"\nexport * from \"./chat_message_date.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport Popover from '../popover/popover.vue'\nimport Attachment from '../attachment/attachment.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport ChatMessageDate from '../chat_message_date/chat_message_date.vue'\nimport { defineAsyncComponent } from 'vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faEllipsisH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faEllipsisH\n)\n\nconst ChatMessage = {\n name: 'ChatMessage',\n props: [\n 'author',\n 'edited',\n 'noHeading',\n 'chatViewItem',\n 'hoveredMessageChain'\n ],\n emits: ['hover'],\n components: {\n Popover,\n Attachment,\n StatusContent,\n UserAvatar,\n Gallery,\n LinkPreview,\n ChatMessageDate,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n computed: {\n // Returns HH:MM (hours and minutes) in local time.\n createdAt () {\n const time = this.chatViewItem.data.created_at\n return time.toLocaleTimeString('en', { hour: '2-digit', minute: '2-digit', hour12: false })\n },\n isCurrentUser () {\n return this.message.account_id === this.currentUser.id\n },\n message () {\n return this.chatViewItem.data\n },\n isMessage () {\n return this.chatViewItem.type === 'message'\n },\n messageForStatusContent () {\n return {\n summary: '',\n emojis: this.message.emojis,\n raw_html: this.message.content || '',\n text: this.message.content || '',\n attachments: this.message.attachments\n }\n },\n hasAttachment () {\n return this.message.attachments.length > 0\n },\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser,\n restrictedNicknames: state => state.instance.restrictedNicknames\n }),\n popoverMarginStyle () {\n if (this.isCurrentUser) {\n return {}\n } else {\n return { left: 50 }\n }\n },\n ...mapGetters(['mergedConfig', 'findUser'])\n },\n data () {\n return {\n hovered: false,\n menuOpened: false\n }\n },\n methods: {\n onHover (bool) {\n this.$emit('hover', { isHovered: bool, messageChainId: this.chatViewItem.messageChainId })\n },\n async deleteMessage () {\n const confirmed = window.confirm(this.$t('chats.delete_confirm'))\n if (confirmed) {\n await this.$store.dispatch('deleteChatMessage', {\n messageId: this.chatViewItem.data.id,\n chatId: this.chatViewItem.data.chat_id\n })\n }\n this.hovered = false\n this.menuOpened = false\n }\n }\n}\n\nexport default ChatMessage\n","import { render } from \"./chat_message.vue?vue&type=template&id=e61e03a2\"\nimport script from \"./chat_message.js?vue&type=script&lang=js\"\nexport * from \"./chat_message.js?vue&type=script&lang=js\"\n\nimport \"./chat_message.vue?vue&type=style&index=0&id=e61e03a2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// Captures a scroll position\nexport const getScrollPosition = () => {\n return {\n scrollTop: window.scrollY,\n scrollHeight: document.documentElement.scrollHeight,\n offsetHeight: window.innerHeight\n }\n}\n\n// A helper function that is used to keep the scroll position fixed as the new elements are added to the top\n// Takes two scroll positions, before and after the update.\nexport const getNewTopPosition = (previousPosition, newPosition) => {\n return previousPosition.scrollTop + (newPosition.scrollHeight - previousPosition.scrollHeight)\n}\n\nexport const isBottomedOut = (offset = 0) => {\n const scrollHeight = window.scrollY + offset\n const totalHeight = document.documentElement.scrollHeight - window.innerHeight\n return totalHeight <= scrollHeight\n}\n// Returns whether or not the scrollbar is visible.\nexport const isScrollable = () => {\n return document.documentElement.scrollHeight > window.innerHeight\n}\n","import _ from 'lodash'\nimport { WSConnectionStatus } from '../../services/api/api.service.js'\nimport { mapGetters, mapState } from 'vuex'\nimport ChatMessage from '../chat_message/chat_message.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport ChatTitle from '../chat_title/chat_title.vue'\nimport chatService from '../../services/chat_service/chat_service.js'\nimport { promiseInterval } from '../../services/promise_interval/promise_interval.js'\nimport { getScrollPosition, getNewTopPosition, isBottomedOut, isScrollable } from './chat_layout_utils.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\nimport { buildFakeMessage } from '../../services/chat_utils/chat_utils.js'\n\nlibrary.add(\n faChevronDown,\n faChevronLeft\n)\n\nconst BOTTOMED_OUT_OFFSET = 10\nconst JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET = 10\nconst SAFE_RESIZE_TIME_OFFSET = 100\nconst MARK_AS_READ_DELAY = 1500\nconst MAX_RETRIES = 10\n\nconst Chat = {\n components: {\n ChatMessage,\n ChatTitle,\n PostStatusForm\n },\n data () {\n return {\n jumpToBottomButtonVisible: false,\n hoveredMessageChainId: undefined,\n lastScrollPosition: {},\n scrollableContainerHeight: '100%',\n errorLoadingChat: false,\n messageRetriers: {}\n }\n },\n created () {\n this.startFetching()\n window.addEventListener('resize', this.handleResize)\n },\n mounted () {\n window.addEventListener('scroll', this.handleScroll)\n if (typeof document.hidden !== 'undefined') {\n document.addEventListener('visibilitychange', this.handleVisibilityChange, false)\n }\n\n this.$nextTick(() => {\n this.handleResize()\n })\n },\n unmounted () {\n window.removeEventListener('scroll', this.handleScroll)\n window.removeEventListener('resize', this.handleResize)\n if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)\n this.$store.dispatch('clearCurrentChat')\n },\n computed: {\n recipient () {\n return this.currentChat && this.currentChat.account\n },\n recipientId () {\n return this.$route.params.recipient_id\n },\n formPlaceholder () {\n if (this.recipient) {\n return this.$t('chats.message_user', { nickname: this.recipient.screen_name_ui })\n } else {\n return ''\n }\n },\n chatViewItems () {\n return chatService.getView(this.currentChatMessageService)\n },\n newMessageCount () {\n return this.currentChatMessageService && this.currentChatMessageService.newMessageCount\n },\n streamingEnabled () {\n return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED\n },\n ...mapGetters([\n 'currentChat',\n 'currentChatMessageService',\n 'findOpenedChatByRecipientId',\n 'mergedConfig'\n ]),\n ...mapState({\n backendInteractor: state => state.api.backendInteractor,\n mastoUserSocketStatus: state => state.api.mastoUserSocketStatus,\n mobileLayout: state => state.interface.layoutType === 'mobile',\n currentUser: state => state.users.currentUser\n })\n },\n watch: {\n chatViewItems () {\n // We don't want to scroll to the bottom on a new message when the user is viewing older messages.\n // Therefore we need to know whether the scroll position was at the bottom before the DOM update.\n const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)\n this.$nextTick(() => {\n if (bottomedOutBeforeUpdate) {\n this.scrollDown()\n }\n })\n },\n $route: function () {\n this.startFetching()\n },\n mastoUserSocketStatus (newValue) {\n if (newValue === WSConnectionStatus.JOINED) {\n this.fetchChat({ isFirstFetch: true })\n }\n }\n },\n methods: {\n // Used to animate the avatar near the first message of the message chain when any message belonging to the chain is hovered\n onMessageHover ({ isHovered, messageChainId }) {\n this.hoveredMessageChainId = isHovered ? messageChainId : undefined\n },\n onFilesDropped () {\n this.$nextTick(() => {\n this.handleResize()\n })\n },\n handleVisibilityChange () {\n this.$nextTick(() => {\n if (!document.hidden && this.bottomedOut(BOTTOMED_OUT_OFFSET)) {\n this.scrollDown({ forceRead: true })\n }\n })\n },\n // \"Sticks\" scroll to bottom instead of top, helps with OSK resizing the viewport\n handleResize (opts = {}) {\n const { delayed = false } = opts\n\n if (delayed) {\n setTimeout(() => {\n this.handleResize({ ...opts, delayed: false })\n }, SAFE_RESIZE_TIME_OFFSET)\n return\n }\n\n this.$nextTick(() => {\n const { offsetHeight = undefined } = getScrollPosition()\n const diff = offsetHeight - this.lastScrollPosition.offsetHeight\n if (diff !== 0 && !this.bottomedOut()) {\n this.$nextTick(() => {\n window.scrollBy({ top: -Math.trunc(diff) })\n })\n }\n this.lastScrollPosition = getScrollPosition()\n })\n },\n scrollDown (options = {}) {\n const { behavior = 'auto', forceRead = false } = options\n this.$nextTick(() => {\n window.scrollTo({ top: document.documentElement.scrollHeight, behavior })\n })\n if (forceRead) {\n this.readChat()\n }\n },\n readChat () {\n if (!(this.currentChatMessageService && this.currentChatMessageService.maxId)) { return }\n if (document.hidden) { return }\n const lastReadId = this.currentChatMessageService.maxId\n this.$store.dispatch('readChat', {\n id: this.currentChat.id,\n lastReadId\n })\n },\n bottomedOut (offset) {\n return isBottomedOut(offset)\n },\n reachedTop () {\n return window.scrollY <= 0\n },\n cullOlderCheck () {\n window.setTimeout(() => {\n if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {\n this.$store.dispatch('cullOlderMessages', this.currentChatMessageService.chatId)\n }\n }, 5000)\n },\n handleScroll: _.throttle(function () {\n this.lastScrollPosition = getScrollPosition()\n if (!this.currentChat) { return }\n\n if (this.reachedTop()) {\n this.fetchChat({ maxId: this.currentChatMessageService.minId })\n } else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {\n this.jumpToBottomButtonVisible = false\n this.cullOlderCheck()\n if (this.newMessageCount > 0) {\n // Use a delay before marking as read to prevent situation where new messages\n // arrive just as you're leaving the view and messages that you didn't actually\n // get to see get marked as read.\n window.setTimeout(() => {\n // Don't mark as read if the element doesn't exist, user has left chat view\n if (this.$el) this.readChat()\n }, MARK_AS_READ_DELAY)\n }\n } else {\n this.jumpToBottomButtonVisible = true\n }\n }, 200),\n handleScrollUp (positionBeforeLoading) {\n const positionAfterLoading = getScrollPosition()\n window.scrollTo({\n top: getNewTopPosition(positionBeforeLoading, positionAfterLoading)\n })\n },\n fetchChat ({ isFirstFetch = false, fetchLatest = false, maxId }) {\n const chatMessageService = this.currentChatMessageService\n if (!chatMessageService) { return }\n if (fetchLatest && this.streamingEnabled) { return }\n\n const chatId = chatMessageService.chatId\n const fetchOlderMessages = !!maxId\n const sinceId = fetchLatest && chatMessageService.maxId\n\n return this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })\n .then((messages) => {\n // Clear the current chat in case we're recovering from a ws connection loss.\n if (isFirstFetch) {\n chatService.clear(chatMessageService)\n }\n\n const positionBeforeUpdate = getScrollPosition()\n this.$store.dispatch('addChatMessages', { chatId, messages }).then(() => {\n this.$nextTick(() => {\n if (fetchOlderMessages) {\n this.handleScrollUp(positionBeforeUpdate)\n }\n\n // In vertical screens, the first batch of fetched messages may not always take the\n // full height of the scrollable container.\n // If this is the case, we want to fetch the messages until the scrollable container\n // is fully populated so that the user has the ability to scroll up and load the history.\n if (!isScrollable() && messages.length > 0) {\n this.fetchChat({ maxId: this.currentChatMessageService.minId })\n }\n })\n })\n })\n },\n async startFetching () {\n let chat = this.findOpenedChatByRecipientId(this.recipientId)\n if (!chat) {\n try {\n chat = await this.backendInteractor.getOrCreateChat({ accountId: this.recipientId })\n } catch (e) {\n console.error('Error creating or getting a chat', e)\n this.errorLoadingChat = true\n }\n }\n if (chat) {\n this.$nextTick(() => {\n this.scrollDown({ forceRead: true })\n })\n this.$store.dispatch('addOpenedChat', { chat })\n this.doStartFetching()\n }\n },\n doStartFetching () {\n this.$store.dispatch('startFetchingCurrentChat', {\n fetcher: () => promiseInterval(() => this.fetchChat({ fetchLatest: true }), 5000)\n })\n this.fetchChat({ isFirstFetch: true })\n },\n handleAttachmentPosting () {\n this.$nextTick(() => {\n this.handleResize()\n // When the posting form size changes because of a media attachment, we need an extra resize\n // to account for the potential delay in the DOM update.\n this.scrollDown({ forceRead: true })\n })\n },\n sendMessage ({ status, media, idempotencyKey }) {\n const params = {\n id: this.currentChat.id,\n content: status,\n idempotencyKey\n }\n\n if (media[0]) {\n params.mediaId = media[0].id\n }\n\n const fakeMessage = buildFakeMessage({\n attachments: media,\n chatId: this.currentChat.id,\n content: status,\n userId: this.currentUser.id,\n idempotencyKey\n })\n\n this.$store.dispatch('addChatMessages', {\n chatId: this.currentChat.id,\n messages: [fakeMessage]\n }).then(() => {\n this.handleAttachmentPosting()\n })\n\n return this.doSendMessage({ params, fakeMessage, retriesLeft: MAX_RETRIES })\n },\n doSendMessage ({ params, fakeMessage, retriesLeft = MAX_RETRIES }) {\n if (retriesLeft <= 0) return\n\n this.backendInteractor.sendChatMessage(params)\n .then(data => {\n this.$store.dispatch('addChatMessages', {\n chatId: this.currentChat.id,\n updateMaxId: false,\n messages: [{ ...data, fakeId: fakeMessage.id }]\n })\n\n return data\n })\n .catch(error => {\n console.error('Error sending message', error)\n this.$store.dispatch('handleMessageError', {\n chatId: this.currentChat.id,\n fakeId: fakeMessage.id,\n isRetry: retriesLeft !== MAX_RETRIES\n })\n if ((error.statusCode >= 500 && error.statusCode < 600) || error.message === 'Failed to fetch') {\n this.messageRetriers[fakeMessage.id] = setTimeout(() => {\n this.doSendMessage({ params, fakeMessage, retriesLeft: retriesLeft - 1 })\n }, 1000 * (2 ** (MAX_RETRIES - retriesLeft)))\n }\n return {}\n })\n\n return Promise.resolve(fakeMessage)\n },\n goBack () {\n this.$router.push({ name: 'chats', params: { username: this.currentUser.screen_name } })\n }\n }\n}\n\nexport default Chat\n","import { render } from \"./chat.vue?vue&type=template&id=796d1749\"\nimport script from \"./chat.js?vue&type=script&lang=js\"\nexport * from \"./chat.js?vue&type=script&lang=js\"\n\nimport \"./chat.vue?vue&type=style&index=0&id=796d1749&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <div\n v-if=\"user\"\n class=\"user-profile panel panel-default\"\n >\n <UserCard\n :user-id=\"userId\"\n :switcher=\"true\"\n :selected=\"timeline.viewing\"\n avatar-action=\"zoom\"\n rounded=\"top\"\n :has-note-editor=\"true\"\n />\n <span\n v-if=\"!!user.birthday\"\n class=\"user-birthday\"\n >\n <FAIcon\n class=\"fa-old-padding\"\n icon=\"birthday-cake\"\n />\n {{ $t('user_card.birthday', { birthday: formattedBirthday }) }}\n </span>\n <div\n v-if=\"user.fields_html && user.fields_html.length > 0\"\n class=\"user-profile-fields\"\n >\n <dl\n v-for=\"(field, index) in user.fields_html\"\n :key=\"index\"\n class=\"user-profile-field\"\n >\n <dt\n :title=\"user.fields_text[index].name\"\n class=\"user-profile-field-name\"\n >\n <RichContent\n :html=\"field.name\"\n :emoji=\"user.emoji\"\n />\n </dt>\n <dd\n :title=\"user.fields_text[index].value\"\n class=\"user-profile-field-value\"\n >\n <RichContent\n :html=\"field.value\"\n :emoji=\"user.emoji\"\n />\n </dd>\n </dl>\n </div>\n <tab-switcher\n :active-tab=\"tab\"\n :render-only-focused=\"true\"\n :on-switch=\"onTabSwitch\"\n >\n <Timeline\n key=\"statuses\"\n :label=\"$t('user_card.statuses')\"\n :count=\"user.statuses_count\"\n :embedded=\"true\"\n :title=\"$t('user_profile.timeline_title')\"\n :timeline=\"timeline\"\n timeline-name=\"user\"\n :user-id=\"userId\"\n :pinned-status-ids=\"user.pinnedStatusIds\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n <div\n v-if=\"followsTabVisible\"\n key=\"followees\"\n :label=\"$t('user_card.followees')\"\n :disabled=\"!user.friends_count\"\n >\n <FriendList :user-id=\"userId\">\n <template #item=\"{item}\">\n <FollowCard :user=\"item\" />\n </template>\n </FriendList>\n </div>\n <div\n v-if=\"followersTabVisible\"\n key=\"followers\"\n :label=\"$t('user_card.followers')\"\n :disabled=\"!user.followers_count\"\n >\n <FollowerList :user-id=\"userId\">\n <template #item=\"{item}\">\n <FollowCard\n :user=\"item\"\n :no-follows-you=\"isUs\"\n />\n </template>\n </FollowerList>\n </div>\n <Timeline\n key=\"media\"\n :label=\"$t('user_card.media')\"\n :disabled=\"!media.visibleStatuses.length\"\n :embedded=\"true\"\n :title=\"$t('user_card.media')\"\n timeline-name=\"media\"\n :timeline=\"media\"\n :user-id=\"userId\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n <Timeline\n v-if=\"isUs\"\n key=\"favorites\"\n :label=\"$t('user_card.favorites')\"\n :disabled=\"!favorites.visibleStatuses.length\"\n :embedded=\"true\"\n :title=\"$t('user_card.favorites')\"\n timeline-name=\"favorites\"\n :timeline=\"favorites\"\n :in-profile=\"true\"\n :footer-slipgate=\"footerRef\"\n />\n </tab-switcher>\n <div\n :ref=\"setFooterRef\"\n class=\"panel-footer\"\n />\n </div>\n <div\n v-else\n class=\"panel user-profile-placeholder\"\n >\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('settings.profile_tab') }}\n </div>\n </div>\n <div class=\"panel-body\">\n <span v-if=\"error\">{{ error }}</span>\n <FAIcon\n v-else\n spin\n icon=\"circle-notch\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./user_profile.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-profile {\n flex: 2;\n flex-basis: 500px;\n\n // No sticky header on user profile\n --currentPanelStack: 1;\n\n .user-birthday {\n margin: 0 0.75em 0.5em;\n }\n\n .user-profile-fields {\n margin: 0 0.5em;\n\n img {\n object-fit: contain;\n vertical-align: middle;\n max-width: 100%;\n max-height: 400px;\n\n &.emoji {\n width: 18px;\n height: 18px;\n }\n }\n\n .user-profile-field {\n display: flex;\n margin: 0.25em;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--inputRadius;\n border-radius: var(--inputRadius, $fallback--inputRadius);\n\n .user-profile-field-name {\n flex: 0 1 30%;\n font-weight: 500;\n text-align: right;\n color: var(--lightText);\n min-width: 120px;\n border-right: 1px solid var(--border, $fallback--border);\n }\n\n .user-profile-field-value {\n flex: 1 1 70%;\n color: var(--text);\n margin: 0 0 0 0.25em;\n }\n\n .user-profile-field-name,\n .user-profile-field-value {\n line-height: 1.3;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n padding: 0.5em 1.5em;\n box-sizing: border-box;\n }\n }\n }\n\n .userlist-placeholder {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 2em;\n }\n}\n\n.user-profile-placeholder {\n .panel-body {\n display: flex;\n justify-content: center;\n align-items: middle;\n padding: 7em;\n }\n}\n</style>\n","<template>\n <basic-user-card :user=\"user\">\n <div class=\"follow-card-content-container\">\n <span\n v-if=\"isMe || (!noFollowsYou && relationship.followed_by)\"\n class=\"faint\"\n >\n {{ isMe ? $t('user_card.its_you') : $t('user_card.follows_you') }}\n </span>\n <template v-if=\"!loggedIn\">\n <div\n v-if=\"!relationship.following\"\n class=\"follow-card-follow-button\"\n >\n <RemoteFollow :user=\"user\" />\n </div>\n </template>\n <template v-else-if=\"!isMe\">\n <FollowButton\n :relationship=\"relationship\"\n :label-following=\"$t('user_card.follow_unfollow')\"\n class=\"follow-card-follow-button\"\n :user=\"user\"\n />\n <RemoveFollowerButton\n v-if=\"noFollowsYou && relationship.followed_by\"\n :user=\"user\"\n :relationship=\"relationship\"\n class=\"follow-card-button\"\n />\n </template>\n </div>\n </basic-user-card>\n</template>\n\n<script src=\"./follow_card.js\"></script>\n\n<style lang=\"scss\">\n.follow-card {\n &-content-container {\n flex-shrink: 0;\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n line-height: 1.5em;\n }\n\n &-button {\n margin-top: 0.5em;\n padding: 0 1.5em;\n margin-left: 1em;\n }\n\n &-follow-button {\n margin-top: 0.5em;\n margin-left: auto;\n width: 10em;\n }\n}\n</style>\n","import ConfirmModal from '../confirm_modal/confirm_modal.vue'\n\nexport default {\n props: ['user', 'relationship'],\n data () {\n return {\n inProgress: false,\n showingConfirmRemoveFollower: false\n }\n },\n components: {\n ConfirmModal\n },\n computed: {\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else {\n return this.$t('user_card.remove_follower')\n }\n },\n shouldConfirmRemoveUserFromFollowers () {\n return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers\n }\n },\n methods: {\n showConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = true\n },\n hideConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = false\n },\n onClick () {\n if (!this.shouldConfirmRemoveUserFromFollowers) {\n this.doRemoveUserFromFollowers()\n } else {\n this.showConfirmRemoveUserFromFollowers()\n }\n },\n doRemoveUserFromFollowers () {\n this.inProgress = true\n this.$store.dispatch('removeUserFromFollowers', this.relationship.id).then(() => {\n this.inProgress = false\n })\n this.hideConfirmRemoveUserFromFollowers()\n }\n }\n}\n","import { render } from \"./remove_follower_button.vue?vue&type=template&id=bc80064a\"\nimport script from \"./remove_follower_button.js?vue&type=script&lang=js\"\nexport * from \"./remove_follower_button.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"btn button-default follow-button\"\n :class=\"{ toggled: inProgress }\"\n :disabled=\"inProgress\"\n :title=\"$t('user_card.remove_follower')\"\n @click=\"onClick\"\n >\n {{ label }}\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmRemoveFollower\"\n :title=\"$t('user_card.remove_follower_confirm_title')\"\n :confirm-text=\"$t('user_card.remove_follower_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.remove_follower_confirm_cancel_button')\"\n @accepted=\"doRemoveUserFromFollowers\"\n @cancelled=\"hideConfirmRemoveUserFromFollowers\"\n >\n <i18n-t\n keypath=\"user_card.remove_follower_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </button>\n</template>\n\n<script src=\"./remove_follower_button.js\"></script>\n","import BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport RemoveFollowerButton from '../remove_follower_button/remove_follower_button.vue'\n\nconst FollowCard = {\n props: [\n 'user',\n 'noFollowsYou'\n ],\n components: {\n BasicUserCard,\n RemoteFollow,\n FollowButton,\n RemoveFollowerButton\n },\n computed: {\n isMe () {\n return this.$store.state.users.currentUser.id === this.user.id\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n relationship () {\n return this.$store.getters.relationship(this.user.id)\n }\n }\n}\n\nexport default FollowCard\n","import { render } from \"./follow_card.vue?vue&type=template&id=e6b6839c\"\nimport script from \"./follow_card.js?vue&type=script&lang=js\"\nexport * from \"./follow_card.js?vue&type=script&lang=js\"\n\nimport \"./follow_card.vue?vue&type=style&index=0&id=e6b6839c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import get from 'lodash/get'\nimport UserCard from '../user_card/user_card.vue'\nimport FollowCard from '../follow_card/follow_card.vue'\nimport Timeline from '../timeline/timeline.vue'\nimport Conversation from '../conversation/conversation.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport List from '../list/list.vue'\nimport withLoadMore from '../../hocs/with_load_more/with_load_more'\nimport localeService from 'src/services/locale/locale.service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faBirthdayCake\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faBirthdayCake\n)\n\nconst FollowerList = withLoadMore({\n fetch: (props, $store) => $store.dispatch('fetchFollowers', props.userId),\n select: (props, $store) => get($store.getters.findUser(props.userId), 'followerIds', []).map(id => $store.getters.findUser(id)),\n destroy: (props, $store) => $store.dispatch('clearFollowers', props.userId),\n childPropName: 'items',\n additionalPropNames: ['userId']\n})(List)\n\nconst FriendList = withLoadMore({\n fetch: (props, $store) => $store.dispatch('fetchFriends', props.userId),\n select: (props, $store) => get($store.getters.findUser(props.userId), 'friendIds', []).map(id => $store.getters.findUser(id)),\n destroy: (props, $store) => $store.dispatch('clearFriends', props.userId),\n childPropName: 'items',\n additionalPropNames: ['userId']\n})(List)\n\nconst defaultTabKey = 'statuses'\n\nconst UserProfile = {\n data () {\n return {\n error: false,\n userId: null,\n tab: defaultTabKey,\n footerRef: null\n }\n },\n created () {\n const routeParams = this.$route.params\n this.load({ name: routeParams.name, id: routeParams.id })\n this.tab = get(this.$route, 'query.tab', defaultTabKey)\n },\n unmounted () {\n this.stopFetching()\n },\n computed: {\n timeline () {\n return this.$store.state.statuses.timelines.user\n },\n favorites () {\n return this.$store.state.statuses.timelines.favorites\n },\n media () {\n return this.$store.state.statuses.timelines.media\n },\n isUs () {\n return this.userId && this.$store.state.users.currentUser.id &&\n this.userId === this.$store.state.users.currentUser.id\n },\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n isExternal () {\n return this.$route.name === 'external-user-profile'\n },\n followsTabVisible () {\n return this.isUs || !this.user.hide_follows\n },\n followersTabVisible () {\n return this.isUs || !this.user.hide_followers\n },\n formattedBirthday () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return this.user.birthday && new Date(Date.parse(this.user.birthday)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })\n }\n },\n methods: {\n setFooterRef (el) {\n this.footerRef = el\n },\n load (userNameOrId) {\n const startFetchingTimeline = (timeline, userId) => {\n // Clear timeline only if load another user's profile\n if (userId !== this.$store.state.statuses.timelines[timeline].userId) {\n this.$store.commit('clearTimeline', { timeline })\n }\n this.$store.dispatch('startFetchingTimeline', { timeline, userId })\n }\n\n const loadById = (userId) => {\n this.userId = userId\n startFetchingTimeline('user', userId)\n startFetchingTimeline('media', userId)\n if (this.isUs) {\n startFetchingTimeline('favorites', userId)\n }\n // Fetch all pinned statuses immediately\n this.$store.dispatch('fetchPinnedStatuses', userId)\n }\n\n // Reset view\n this.userId = null\n this.error = false\n\n const maybeId = userNameOrId.id\n const maybeName = userNameOrId.name\n\n // Check if user data is already loaded in store\n const user = maybeId ? this.$store.getters.findUser(maybeId) : this.$store.getters.findUserByName(maybeName)\n if (user) {\n loadById(user.id)\n } else {\n (maybeId\n ? this.$store.dispatch('fetchUser', maybeId)\n : this.$store.dispatch('fetchUserByName', maybeName))\n .then(({ id }) => loadById(id))\n .catch((reason) => {\n const errorMessage = get(reason, 'error.error')\n if (errorMessage === 'No user with such user_id') { // Known error\n this.error = this.$t('user_profile.profile_does_not_exist')\n } else if (errorMessage) {\n this.error = errorMessage\n } else {\n this.error = this.$t('user_profile.profile_loading_error')\n }\n })\n }\n },\n stopFetching () {\n this.$store.dispatch('stopFetchingTimeline', 'user')\n this.$store.dispatch('stopFetchingTimeline', 'favorites')\n this.$store.dispatch('stopFetchingTimeline', 'media')\n },\n switchUser (userNameOrId) {\n this.stopFetching()\n this.load(userNameOrId)\n },\n onTabSwitch (tab) {\n this.tab = tab\n this.$router.replace({ query: { tab } })\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n }\n },\n watch: {\n '$route.params.id': function (newVal) {\n if (newVal) {\n this.switchUser({ id: newVal })\n }\n },\n '$route.params.name': function (newVal) {\n if (newVal) {\n this.switchUser({ name: newVal })\n }\n },\n '$route.query': function (newVal) {\n this.tab = newVal.tab || defaultTabKey\n }\n },\n components: {\n UserCard,\n Timeline,\n FollowerList,\n FriendList,\n FollowCard,\n TabSwitcher,\n Conversation,\n RichContent\n }\n}\n\nexport default UserProfile\n","import { render } from \"./user_profile.vue?vue&type=template&id=3af4c11e\"\nimport script from \"./user_profile.js?vue&type=script&lang=js\"\nexport * from \"./user_profile.js?vue&type=script&lang=js\"\n\nimport \"./user_profile.vue?vue&type=style&index=0&id=3af4c11e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('nav.search') }}\n </div>\n </div>\n <div class=\"search-input-container\">\n <input\n ref=\"searchInput\"\n v-model=\"searchTerm\"\n class=\"search-input\"\n :placeholder=\"$t('nav.search')\"\n @keyup.enter=\"newQuery(searchTerm)\"\n >\n <button\n class=\"btn button-default search-button\"\n type=\"submit\"\n @click=\"newQuery(searchTerm)\"\n >\n <FAIcon icon=\"search\" />\n </button>\n </div>\n <div\n v-if=\"loading && statusesOffset == 0\"\n class=\"text-center loading-icon\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n <div v-else-if=\"loaded\">\n <div class=\"search-nav-heading\">\n <tab-switcher\n ref=\"tabSwitcher\"\n :on-switch=\"onResultTabSwitch\"\n :active-tab=\"currenResultTab\"\n >\n <span\n key=\"statuses\"\n :label=\"$t('user_card.statuses') + resultCount('visibleStatuses')\"\n />\n <span\n key=\"people\"\n :label=\"$t('search.people') + resultCount('users')\"\n />\n <span\n key=\"hashtags\"\n :label=\"$t('search.hashtags') + resultCount('hashtags')\"\n />\n </tab-switcher>\n </div>\n </div>\n <div class=\"panel-body\">\n <div v-if=\"currenResultTab === 'statuses'\">\n <Status\n v-for=\"status in visibleStatuses\"\n :key=\"status.id\"\n :collapsable=\"false\"\n :expandable=\"false\"\n :compact=\"false\"\n class=\"search-result\"\n :statusoid=\"status\"\n :no-heading=\"false\"\n />\n <button\n v-if=\"!loading && loaded && lastStatusFetchCount > 0\"\n class=\"more-statuses-button button-unstyled -link -fullwidth\"\n @click.prevent=\"search(searchTerm, 'statuses')\"\n >\n <div class=\"new-status-notification text-center\">\n {{ $t('search.load_more') }}\n </div>\n </button>\n <div\n v-else-if=\"loading && statusesOffset > 0\"\n class=\"text-center loading-icon\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n <div\n v-if=\"(visibleStatuses.length === 0 || lastStatusFetchCount === 0) && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>\n {{ visibleStatuses.length === 0 ? $t('search.no_results') : $t('search.no_more_results') }}\n </h4>\n </div>\n </div>\n <div v-else-if=\"currenResultTab === 'people'\">\n <div\n v-if=\"users.length === 0 && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>{{ $t('search.no_results') }}</h4>\n </div>\n <FollowCard\n v-for=\"user in users\"\n :key=\"user.id\"\n :user=\"user\"\n class=\"list-item search-result\"\n />\n </div>\n <div v-else-if=\"currenResultTab === 'hashtags'\">\n <div\n v-if=\"hashtags.length === 0 && !loading && loaded\"\n class=\"search-result-heading\"\n >\n <h4>{{ $t('search.no_results') }}</h4>\n </div>\n <div\n v-for=\"hashtag in hashtags\"\n :key=\"hashtag.url\"\n class=\"status trend search-result\"\n >\n <div class=\"hashtag\">\n <router-link :to=\"{ name: 'tag-timeline', params: { tag: hashtag.name } }\">\n #{{ hashtag.name }}\n </router-link>\n <div v-if=\"lastHistoryRecord(hashtag)\">\n <span v-if=\"lastHistoryRecord(hashtag).accounts == 1\">\n {{ $t('search.person_talking', { count: lastHistoryRecord(hashtag).accounts }) }}\n </span>\n <span v-else>\n {{ $t('search.people_talking', { count: lastHistoryRecord(hashtag).accounts }) }}\n </span>\n </div>\n </div>\n <div\n v-if=\"lastHistoryRecord(hashtag)\"\n class=\"count\"\n >\n {{ lastHistoryRecord(hashtag).uses }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"search-result-footer text-center panel-footer faint\" />\n </div>\n</template>\n\n<script src=\"./search.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.search-result-heading {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n padding: 0.75rem;\n text-align: center;\n}\n\n@media all and (max-width: 800px) {\n .search-nav-heading {\n .tab-switcher .tabs .tab-wrapper {\n display: block;\n justify-content: center;\n flex: 1 1 auto;\n text-align: center;\n }\n }\n}\n\n.search-result {\n box-sizing: border-box;\n border-bottom: 1px solid;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n\n.search-result-footer {\n border-width: 1px 0 0;\n border-style: solid;\n border-color: var(--border, $fallback--border);\n padding: 10px;\n background-color: $fallback--fg;\n background-color: var(--panel, $fallback--fg);\n}\n\n.search-input-container {\n padding: 0.8rem;\n display: flex;\n justify-content: center;\n\n .search-input {\n width: 100%;\n line-height: 1.125rem;\n font-size: 1rem;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n\n .search-button {\n margin-left: 0.5em;\n }\n}\n\n.loading-icon {\n padding: 1em;\n}\n\n.trend {\n display: flex;\n align-items: center;\n\n .hashtag {\n flex: 1 1 auto;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .count {\n flex: 0 0 auto;\n width: 2rem;\n font-size: 1.5rem;\n line-height: 2.25rem;\n font-weight: 500;\n text-align: center;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n\n.more-statuses-button {\n height: 3.5em;\n line-height: 3.5em;\n}\n\n</style>\n","import FollowCard from '../follow_card/follow_card.vue'\nimport Conversation from '../conversation/conversation.vue'\nimport Status from '../status/status.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport map from 'lodash/map'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faSearch\n} from '@fortawesome/free-solid-svg-icons'\nimport { uniqBy } from 'lodash'\n\nlibrary.add(\n faCircleNotch,\n faSearch\n)\n\nconst Search = {\n components: {\n FollowCard,\n Conversation,\n Status,\n TabSwitcher\n },\n props: [\n 'query'\n ],\n data () {\n return {\n loaded: false,\n loading: false,\n searchTerm: this.query || '',\n userIds: [],\n statuses: [],\n hashtags: [],\n currenResultTab: 'statuses',\n\n statusesOffset: 0,\n lastStatusFetchCount: 0,\n lastQuery: ''\n }\n },\n computed: {\n users () {\n return this.userIds.map(userId => this.$store.getters.findUser(userId))\n },\n visibleStatuses () {\n const allStatusesObject = this.$store.state.statuses.allStatusesObject\n\n return this.statuses.filter(status =>\n allStatusesObject[status.id] && !allStatusesObject[status.id].deleted\n )\n }\n },\n mounted () {\n this.search(this.query)\n },\n watch: {\n query (newValue) {\n this.searchTerm = newValue\n this.search(newValue)\n }\n },\n methods: {\n newQuery (query) {\n this.$router.push({ name: 'search', query: { query } })\n this.$refs.searchInput.focus()\n },\n search (query, searchType = null) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.$refs.searchInput.blur()\n if (this.lastQuery !== query) {\n this.userIds = []\n this.hashtags = []\n this.statuses = []\n\n this.statusesOffset = 0\n this.lastStatusFetchCount = 0\n }\n\n this.$store.dispatch('search', { q: query, resolve: true, offset: this.statusesOffset, type: searchType })\n .then(data => {\n this.loading = false\n\n const oldLength = this.statuses.length\n\n // Always append to old results. If new results are empty, this doesn't change anything\n this.userIds = this.userIds.concat(map(data.accounts, 'id'))\n this.statuses = uniqBy(this.statuses.concat(data.statuses), 'id')\n this.hashtags = this.hashtags.concat(data.hashtags)\n\n this.currenResultTab = this.getActiveTab()\n this.loaded = true\n\n // Offset from whatever we already have\n this.statusesOffset = this.statuses.length\n // Because the amount of new statuses can actually be zero, compare to old lenght instead\n this.lastStatusFetchCount = this.statuses.length - oldLength\n this.lastQuery = query\n })\n },\n resultCount (tabName) {\n const length = this[tabName].length\n return length === 0 ? '' : ` (${length})`\n },\n onResultTabSwitch (key) {\n this.currenResultTab = key\n },\n getActiveTab () {\n if (this.visibleStatuses.length > 0) {\n return 'statuses'\n } else if (this.users.length > 0) {\n return 'people'\n } else if (this.hashtags.length > 0) {\n return 'hashtags'\n }\n\n return 'statuses'\n },\n lastHistoryRecord (hashtag) {\n return hashtag.history && hashtag.history[0]\n }\n }\n}\n\nexport default Search\n","import { render } from \"./search.vue?vue&type=template&id=29ec17bc\"\nimport script from \"./search.js?vue&type=script&lang=js\"\nexport * from \"./search.js?vue&type=script&lang=js\"\n\nimport \"./search.vue?vue&type=style&index=0&id=29ec17bc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('registration.registration') }}\n </div>\n <div class=\"panel-body\">\n <form\n class=\"registration-form\"\n @submit.prevent=\"submit(user)\"\n >\n <div class=\"container\">\n <div class=\"text-fields\">\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.username.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-username\"\n >{{ $t('login.username') }}</label>\n <input\n id=\"sign-up-username\"\n v-model.trim=\"v$.user.username.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :aria-required=\"true\"\n :placeholder=\"$t('registration.username_placeholder')\"\n >\n </div>\n <div\n v-if=\"v$.user.username.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.username.required\">\n <span>{{ $t('registration.validations.username_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.fullname.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-fullname\"\n >{{ $t('registration.fullname') }}</label>\n <input\n id=\"sign-up-fullname\"\n v-model.trim=\"v$.user.fullname.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :aria-required=\"true\"\n :placeholder=\"$t('registration.fullname_placeholder')\"\n >\n </div>\n <div\n v-if=\"v$.user.fullname.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.fullname.required\">\n <span>{{ $t('registration.validations.fullname_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.email.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"email\"\n >{{ accountActivationRequired ? $t('registration.email') : $t('registration.email_optional') }}</label>\n <input\n id=\"email\"\n v-model=\"v$.user.email.$model\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"email\"\n :aria-required=\"accountActivationRequired\"\n >\n </div>\n <div\n v-if=\"v$.user.email.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.email.required\">\n <span>{{ $t('registration.validations.email_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\">\n <label\n class=\"form--label\"\n for=\"bio\"\n >{{ $t('registration.bio_optional') }}</label>\n <textarea\n id=\"bio\"\n v-model=\"user.bio\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :placeholder=\"bioPlaceholder\"\n />\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.password.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-password\"\n >{{ $t('login.password') }}</label>\n <input\n id=\"sign-up-password\"\n v-model=\"user.password\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"password\"\n :aria-required=\"true\"\n >\n </div>\n <div\n v-if=\"v$.user.password.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"!v$.user.password.required\">\n <span>{{ $t('registration.validations.password_required') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.confirm.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-password-confirmation\"\n >{{ $t('registration.password_confirm') }}</label>\n <input\n id=\"sign-up-password-confirmation\"\n v-model=\"user.confirm\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"password\"\n :aria-required=\"true\"\n >\n </div>\n <div\n v-if=\"v$.user.confirm.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"v$.user.confirm.required.$invalid\">\n <span>{{ $t('registration.validations.password_confirmation_required') }}</span>\n </li>\n <li v-if=\"v$.user.confirm.sameAs.$invalid\">\n <span>{{ $t('registration.validations.password_confirmation_match') }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.birthday.$error }\"\n >\n <label\n class=\"form--label\"\n for=\"sign-up-birthday\"\n >\n {{ birthdayRequired ? $t('registration.birthday') : $t('registration.birthday_optional') }}\n </label>\n <input\n id=\"sign-up-birthday\"\n v-model=\"user.birthday\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"date\"\n :max=\"birthdayRequired ? birthdayMinAttr : undefined\"\n :aria-required=\"birthdayRequired\"\n >\n </div>\n <div\n v-if=\"v$.user.birthday.$dirty\"\n class=\"form-error\"\n >\n <ul>\n <li v-if=\"v$.user.birthday.required.$invalid\">\n <span>{{ $t('registration.validations.birthday_required') }}</span>\n </li>\n <li v-if=\"v$.user.birthday.maxValue.$invalid\">\n <span>{{ $tc('registration.validations.birthday_min_age', { date: birthdayMinFormatted }) }}</span>\n </li>\n </ul>\n </div>\n\n <div\n class=\"form-group\"\n :class=\"{ 'form-group--error': v$.user.language.$error }\"\n >\n <interface-language-switcher\n for=\"email-language\"\n :prompt-text=\"$t('registration.email_language')\"\n :language=\"v$.user.language.$model\"\n :set-language=\"val => v$.user.language.$model = val\"\n @click.stop.prevent\n />\n </div>\n\n <div\n v-if=\"accountApprovalRequired\"\n class=\"form-group\"\n >\n <label\n class=\"form--label\"\n for=\"reason\"\n >{{ $t('registration.reason') }}</label>\n <textarea\n id=\"reason\"\n v-model=\"user.reason\"\n :disabled=\"isPending\"\n class=\"form-control\"\n :placeholder=\"reasonPlaceholder\"\n />\n </div>\n\n <div\n v-if=\"captcha.type != 'none'\"\n id=\"captcha-group\"\n class=\"form-group\"\n >\n <label\n class=\"form--label\"\n for=\"captcha-label\"\n >{{ $t('registration.captcha') }}</label>\n\n <template v-if=\"['kocaptcha', 'native'].includes(captcha.type)\">\n <img\n :src=\"captcha.url\"\n @click=\"setCaptcha\"\n >\n\n <sub>{{ $t('registration.new_captcha') }}</sub>\n\n <input\n id=\"captcha-answer\"\n v-model=\"captcha.solution\"\n :disabled=\"isPending\"\n class=\"form-control\"\n type=\"text\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n >\n </template>\n </div>\n\n <div\n v-if=\"token\"\n class=\"form-group\"\n >\n <label for=\"token\">{{ $t('registration.token') }}</label>\n <input\n id=\"token\"\n v-model=\"token\"\n disabled=\"true\"\n class=\"form-control\"\n type=\"text\"\n >\n </div>\n <div class=\"form-group\">\n <button\n :disabled=\"isPending\"\n type=\"submit\"\n class=\"btn button-default\"\n >\n {{ $t('registration.register') }}\n </button>\n </div>\n </div>\n\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"terms-of-service\"\n v-html=\"termsOfService\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n <div\n v-if=\"serverValidationErrors.length\"\n class=\"form-group\"\n >\n <div class=\"alert error\">\n <span\n v-for=\"error in serverValidationErrors\"\n :key=\"error\"\n >{{ error }}</span>\n </div>\n </div>\n </form>\n </div>\n </div>\n</template>\n\n<script src=\"./registration.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n$validations-cRed: #f04124;\n\n.registration-form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex-direction: row;\n\n > * {\n min-width: 0;\n }\n }\n\n .terms-of-service {\n flex: 0 1 50%;\n margin: 0.8em;\n }\n\n .text-fields {\n margin-top: 0.6em;\n flex: 1 0;\n display: flex;\n flex-direction: column;\n }\n\n textarea {\n min-height: 100px;\n resize: vertical;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.3em 0;\n line-height: 2;\n margin-bottom: 1em;\n }\n\n .form-group--error {\n animation-name: shakeError;\n animation-duration: 0.6s;\n animation-timing-function: ease-in-out;\n }\n\n .form-group--error .form--label {\n color: $validations-cRed;\n color: var(--cRed, $validations-cRed);\n }\n\n .form-error {\n margin-top: -0.7em;\n text-align: left;\n\n span {\n font-size: 0.85em;\n }\n }\n\n .form-error ul {\n list-style: none;\n padding: 0 0 0 5px;\n margin-top: 0;\n\n li::before {\n content: \"• \";\n }\n }\n\n form textarea {\n line-height: 16px;\n resize: vertical;\n }\n\n .captcha {\n max-width: 350px;\n margin-bottom: 0.4em;\n }\n\n .btn {\n margin-top: 0.6em;\n height: 2em;\n }\n\n .error {\n text-align: center;\n }\n}\n\n@media all and (max-width: 800px) {\n .registration-form .container {\n flex-direction: column-reverse;\n }\n}\n</style>\n","import useVuelidate from '@vuelidate/core'\nimport { required, requiredIf, sameAs } from '@vuelidate/validators'\nimport { mapActions, mapState } from 'vuex'\nimport InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue'\nimport localeService from '../../services/locale/locale.service.js'\nimport { DAY } from 'src/services/date_utils/date_utils.js'\n\nconst registration = {\n setup () { return { v$: useVuelidate() } },\n data: () => ({\n user: {\n email: '',\n fullname: '',\n username: '',\n password: '',\n confirm: '',\n birthday: '',\n reason: '',\n language: ['']\n },\n captcha: {}\n }),\n components: {\n InterfaceLanguageSwitcher\n },\n validations () {\n return {\n user: {\n email: { required: requiredIf(() => this.accountActivationRequired) },\n username: { required },\n fullname: { required },\n password: { required },\n confirm: {\n required,\n sameAs: sameAs(this.user.password)\n },\n birthday: {\n required: requiredIf(() => this.birthdayRequired),\n maxValue: value => {\n return !this.birthdayRequired || new Date(value).getTime() <= this.birthdayMin.getTime()\n }\n },\n reason: { required: requiredIf(() => this.accountApprovalRequired) },\n language: {}\n }\n }\n },\n created () {\n if ((!this.registrationOpen && !this.token) || this.signedIn) {\n this.$router.push({ name: 'root' })\n }\n\n this.setCaptcha()\n },\n computed: {\n token () { return this.$route.params.token },\n bioPlaceholder () {\n return this.replaceNewlines(this.$t('registration.bio_placeholder'))\n },\n reasonPlaceholder () {\n return this.replaceNewlines(this.$t('registration.reason_placeholder'))\n },\n birthdayMin () {\n const minAge = this.birthdayMinAge\n const today = new Date()\n today.setUTCMilliseconds(0)\n today.setUTCSeconds(0)\n today.setUTCMinutes(0)\n today.setUTCHours(0)\n const minDate = new Date()\n minDate.setTime(today.getTime() - minAge * DAY)\n return minDate\n },\n birthdayMinAttr () {\n return this.birthdayMin.toJSON().replace(/T.+$/, '')\n },\n birthdayMinFormatted () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return this.user.birthday && new Date(Date.parse(this.birthdayMin)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })\n },\n ...mapState({\n registrationOpen: (state) => state.instance.registrationOpen,\n signedIn: (state) => !!state.users.currentUser,\n isPending: (state) => state.users.signUpPending,\n serverValidationErrors: (state) => state.users.signUpErrors,\n termsOfService: (state) => state.instance.tos,\n accountActivationRequired: (state) => state.instance.accountActivationRequired,\n accountApprovalRequired: (state) => state.instance.accountApprovalRequired,\n birthdayRequired: (state) => state.instance.birthdayRequired,\n birthdayMinAge: (state) => state.instance.birthdayMinAge\n })\n },\n methods: {\n ...mapActions(['signUp', 'getCaptcha']),\n async submit () {\n this.user.nickname = this.user.username\n this.user.token = this.token\n\n this.user.captcha_solution = this.captcha.solution\n this.user.captcha_token = this.captcha.token\n this.user.captcha_answer_data = this.captcha.answer_data\n if (this.user.language) {\n this.user.language = localeService.internalToBackendLocaleMulti(this.user.language.filter(k => k))\n }\n\n this.v$.$touch()\n\n if (!this.v$.$invalid) {\n try {\n await this.signUp(this.user)\n this.$router.push({ name: 'friends' })\n } catch (error) {\n console.warn('Registration failed: ', error)\n this.setCaptcha()\n }\n }\n },\n setCaptcha () {\n this.getCaptcha().then(cpt => { this.captcha = cpt })\n },\n replaceNewlines (str) {\n return str.replace(/\\s*\\n\\s*/g, ' \\n')\n }\n }\n}\n\nexport default registration\n","import { render } from \"./registration.vue?vue&type=template&id=f9488ca2\"\nimport script from \"./registration.js?vue&type=script&lang=js\"\nexport * from \"./registration.js?vue&type=script&lang=js\"\n\nimport \"./registration.vue?vue&type=style&index=0&id=f9488ca2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('password_reset.password_reset') }}\n </div>\n <div class=\"panel-body\">\n <form\n class=\"password-reset-form\"\n @submit.prevent=\"submit\"\n >\n <div class=\"container\">\n <div v-if=\"!mailerEnabled\">\n <p v-if=\"passwordResetRequested\">\n {{ $t('password_reset.password_reset_required_but_mailer_is_disabled') }}\n </p>\n <p v-else>\n {{ $t('password_reset.password_reset_disabled') }}\n </p>\n </div>\n <div v-else-if=\"success || throttled\">\n <p v-if=\"success\">\n {{ $t('password_reset.check_email') }}\n </p>\n <div class=\"form-group text-center\">\n <router-link :to=\"{name: 'root'}\">\n {{ $t('password_reset.return_home') }}\n </router-link>\n </div>\n </div>\n <div v-else>\n <p\n v-if=\"passwordResetRequested\"\n class=\"password-reset-required error\"\n >\n {{ $t('password_reset.password_reset_required') }}\n </p>\n <p>\n {{ $t('password_reset.instruction') }}\n </p>\n <div class=\"form-group\">\n <input\n ref=\"email\"\n v-model=\"user.email\"\n :disabled=\"isPending\"\n :placeholder=\"$t('password_reset.placeholder')\"\n class=\"form-control\"\n type=\"input\"\n >\n </div>\n <div class=\"form-group\">\n <button\n :disabled=\"isPending\"\n type=\"submit\"\n class=\"btn button-default btn-block\"\n >\n {{ $t('settings.save') }}\n </button>\n </div>\n </div>\n <p\n v-if=\"error\"\n class=\"alert error notice-dismissible\"\n >\n <span>{{ error }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n @click.prevent=\"dismissError()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n </div>\n </form>\n </div>\n </div>\n</template>\n\n<script src=\"./password_reset.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.password-reset-form {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0.6em;\n\n .container {\n display: flex;\n flex: 1 0;\n flex-direction: column;\n margin-top: 0.6em;\n max-width: 18rem;\n\n > * {\n min-width: 0;\n }\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 1em;\n padding: 0.3em 0;\n line-height: 1.85em;\n }\n\n .error {\n text-align: center;\n animation-name: shakeError;\n animation-duration: 0.4s;\n animation-timing-function: ease-in-out;\n }\n\n .alert {\n padding: 0.5em;\n margin: 0.3em 0 1em;\n }\n\n .password-reset-required {\n background-color: var(--alertError, $fallback--alertError);\n padding: 10px 0;\n }\n\n .notice-dismissible {\n padding-right: 2rem;\n }\n\n .dismiss {\n cursor: pointer;\n }\n}\n\n</style>\n","import { mapState } from 'vuex'\nimport passwordResetApi from '../../services/new_api/password_reset.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes\n)\n\nconst passwordReset = {\n data: () => ({\n user: {\n email: ''\n },\n isPending: false,\n success: false,\n throttled: false,\n error: null\n }),\n computed: {\n ...mapState({\n signedIn: (state) => !!state.users.currentUser,\n instance: state => state.instance\n }),\n mailerEnabled () {\n return this.instance.mailerEnabled\n }\n },\n created () {\n if (this.signedIn) {\n this.$router.push({ name: 'root' })\n }\n },\n props: {\n passwordResetRequested: {\n default: false,\n type: Boolean\n }\n },\n methods: {\n dismissError () {\n this.error = null\n },\n submit () {\n this.isPending = true\n const email = this.user.email\n const instance = this.instance.server\n\n passwordResetApi({ instance, email }).then(({ status }) => {\n this.isPending = false\n this.user.email = ''\n\n if (status === 204) {\n this.success = true\n this.error = null\n } else if (status === 429) {\n this.throttled = true\n this.error = this.$t('password_reset.too_many_requests')\n }\n }).catch(() => {\n this.isPending = false\n this.user.email = ''\n this.error = this.$t('general.generic_error')\n })\n }\n }\n}\n\nexport default passwordReset\n","import { reduce } from 'lodash'\n\nconst MASTODON_PASSWORD_RESET_URL = '/auth/password'\n\nconst resetPassword = ({ instance, email }) => {\n const params = { email }\n const query = reduce(params, (acc, v, k) => {\n const encoded = `${k}=${encodeURIComponent(v)}`\n return `${acc}&${encoded}`\n }, '')\n const url = `${instance}${MASTODON_PASSWORD_RESET_URL}?${query}`\n\n return window.fetch(url, {\n method: 'POST'\n })\n}\n\nexport default resetPassword\n","import { render } from \"./password_reset.vue?vue&type=template&id=0a88ea38\"\nimport script from \"./password_reset.js?vue&type=script&lang=js\"\nexport * from \"./password_reset.js?vue&type=script&lang=js\"\n\nimport \"./password_reset.vue?vue&type=style&index=0&id=0a88ea38&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"settings panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('nav.friend_requests') }}\n </div>\n </div>\n <div class=\"panel-body\">\n <FollowRequestCard\n v-for=\"request in requests\"\n :key=\"request.id\"\n :user=\"request\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./follow_requests.js\"></script>\n","<template>\n <basic-user-card :user=\"user\">\n <div class=\"follow-request-card-content-container\">\n <button\n class=\"btn button-default\"\n @click=\"approveUser\"\n >\n {{ $t('user_card.approve') }}\n </button>\n <button\n class=\"btn button-default\"\n @click=\"denyUser\"\n >\n {{ $t('user_card.deny') }}\n </button>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingApproveConfirmDialog\"\n :title=\"$t('user_card.approve_confirm_title')\"\n :confirm-text=\"$t('user_card.approve_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.approve_confirm_cancel_button')\"\n @accepted=\"doApprove\"\n @cancelled=\"hideApproveConfirmDialog\"\n >\n {{ $t('user_card.approve_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n <confirm-modal\n v-if=\"showingDenyConfirmDialog\"\n :title=\"$t('user_card.deny_confirm_title')\"\n :confirm-text=\"$t('user_card.deny_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.deny_confirm_cancel_button')\"\n @accepted=\"doDeny\"\n @cancelled=\"hideDenyConfirmDialog\"\n >\n {{ $t('user_card.deny_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n </teleport>\n </basic-user-card>\n</template>\n\n<script src=\"./follow_request_card.js\"></script>\n\n<style lang=\"scss\">\n.follow-request-card-content-container {\n display: flex;\n flex-flow: row wrap;\n\n button {\n margin-top: 0.5em;\n margin-right: 0.5em;\n flex: 1 1;\n max-width: 12em;\n min-width: 8em;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n</style>\n","import BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { notificationsFromStore } from '../../services/notification_utils/notification_utils.js'\n\nconst FollowRequestCard = {\n props: ['user'],\n components: {\n BasicUserCard,\n ConfirmModal\n },\n data () {\n return {\n showingApproveConfirmDialog: false,\n showingDenyConfirmDialog: false\n }\n },\n methods: {\n findFollowRequestNotificationId () {\n const notif = notificationsFromStore(this.$store).find(\n (notif) => notif.from_profile.id === this.user.id && notif.type === 'follow_request'\n )\n return notif && notif.id\n },\n showApproveConfirmDialog () {\n this.showingApproveConfirmDialog = true\n },\n hideApproveConfirmDialog () {\n this.showingApproveConfirmDialog = false\n },\n showDenyConfirmDialog () {\n this.showingDenyConfirmDialog = true\n },\n hideDenyConfirmDialog () {\n this.showingDenyConfirmDialog = false\n },\n approveUser () {\n if (this.shouldConfirmApprove) {\n this.showApproveConfirmDialog()\n } else {\n this.doApprove()\n }\n },\n doApprove () {\n this.$store.state.api.backendInteractor.approveUser({ id: this.user.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n\n const notifId = this.findFollowRequestNotificationId()\n this.$store.dispatch('markSingleNotificationAsSeen', { id: notifId })\n this.$store.dispatch('updateNotification', {\n id: notifId,\n updater: notification => {\n notification.type = 'follow'\n }\n })\n this.hideApproveConfirmDialog()\n },\n denyUser () {\n if (this.shouldConfirmDeny) {\n this.showDenyConfirmDialog()\n } else {\n this.doDeny()\n }\n },\n doDeny () {\n const notifId = this.findFollowRequestNotificationId()\n this.$store.state.api.backendInteractor.denyUser({ id: this.user.id })\n .then(() => {\n this.$store.dispatch('dismissNotificationLocal', { id: notifId })\n this.$store.dispatch('removeFollowRequest', this.user)\n })\n this.hideDenyConfirmDialog()\n }\n },\n computed: {\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n shouldConfirmApprove () {\n return this.mergedConfig.modalOnApproveFollow\n },\n shouldConfirmDeny () {\n return this.mergedConfig.modalOnDenyFollow\n }\n }\n}\n\nexport default FollowRequestCard\n","import FollowRequestCard from '../follow_request_card/follow_request_card.vue'\n\nconst FollowRequests = {\n components: {\n FollowRequestCard\n },\n computed: {\n requests () {\n return this.$store.state.api.followRequests\n }\n }\n}\n\nexport default FollowRequests\n","import { render } from \"./follow_request_card.vue?vue&type=template&id=3bb26ea8\"\nimport script from \"./follow_request_card.js?vue&type=script&lang=js\"\nexport * from \"./follow_request_card.js?vue&type=script&lang=js\"\n\nimport \"./follow_request_card.vue?vue&type=style&index=0&id=3bb26ea8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./follow_requests.vue?vue&type=template&id=62e19784\"\nimport script from \"./follow_requests.js?vue&type=script&lang=js\"\nexport * from \"./follow_requests.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import oauth from '../../services/new_api/oauth.js'\n\nconst oac = {\n props: ['code'],\n mounted () {\n if (this.code) {\n const { clientId, clientSecret } = this.$store.state.oauth\n\n oauth.getToken({\n clientId,\n clientSecret,\n instance: this.$store.state.instance.server,\n code: this.code\n }).then((result) => {\n this.$store.commit('setToken', result.access_token)\n this.$store.dispatch('loginUser', result.access_token)\n this.$router.push({ name: 'friends' })\n })\n }\n }\n}\n\nexport default oac\n","import { render } from \"./oauth_callback.vue?vue&type=template&id=f514124c\"\nimport script from \"./oauth_callback.js?vue&type=script&lang=js\"\nexport * from \"./oauth_callback.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <h1>...</h1>\n</template>\n\n<script src=\"./oauth_callback.js\"></script>\n","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('who_to_follow.who_to_follow') }}\n </div>\n <div class=\"panel-body\">\n <FollowCard\n v-for=\"user in users\"\n :key=\"user.id\"\n :user=\"user\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./who_to_follow.js\"></script>\n","import apiService from '../../services/api/api.service.js'\nimport FollowCard from '../follow_card/follow_card.vue'\n\nconst WhoToFollow = {\n components: {\n FollowCard\n },\n data () {\n return {\n users: []\n }\n },\n mounted () {\n this.getWhoToFollow()\n },\n methods: {\n showWhoToFollow (reply) {\n reply.forEach((i, index) => {\n this.$store.state.api.backendInteractor.fetchUser({ id: i.acct })\n .then((externalUser) => {\n if (!externalUser.error) {\n this.$store.commit('addNewUsers', [externalUser])\n this.users.push(externalUser)\n }\n })\n })\n },\n getWhoToFollow () {\n const credentials = this.$store.state.users.currentUser.credentials\n if (credentials) {\n apiService.suggestions({ credentials })\n .then((reply) => {\n this.showWhoToFollow(reply)\n })\n }\n }\n }\n}\n\nexport default WhoToFollow\n","import { render } from \"./who_to_follow.vue?vue&type=template&id=1d38a2c8\"\nimport script from \"./who_to_follow.js?vue&type=script&lang=js\"\nexport * from \"./who_to_follow.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"column-inner\">\n <instance-specific-panel v-if=\"showInstanceSpecificPanel\" />\n <staff-panel />\n <terms-of-service-panel />\n <MRFTransparencyPanel />\n <features-panel v-if=\"showFeaturesPanel\" />\n </div>\n</template>\n\n<script src=\"./about.js\"></script>\n","<template>\n <div>\n <div class=\"panel panel-default\">\n <div class=\"panel-body\">\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"tos-content\"\n v-html=\"content\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./terms_of_service_panel.js\"></script>\n\n<style lang=\"scss\">\n.tos-content {\n margin: 1em;\n}\n</style>\n","const TermsOfServicePanel = {\n computed: {\n content () {\n return this.$store.state.instance.tos\n }\n }\n}\n\nexport default TermsOfServicePanel\n","import { render } from \"./terms_of_service_panel.vue?vue&type=template&id=22763f84\"\nimport script from \"./terms_of_service_panel.js?vue&type=script&lang=js\"\nexport * from \"./terms_of_service_panel.js?vue&type=script&lang=js\"\n\nimport \"./terms_of_service_panel.vue?vue&type=style&index=0&id=22763f84&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"staff-panel\">\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background\">\n <div class=\"title\">\n {{ $t(\"about.staff\") }}\n </div>\n </div>\n <div class=\"panel-body\">\n <div\n v-for=\"group in groupedStaffAccounts\"\n :key=\"group.role\"\n class=\"staff-group\"\n >\n <h4>{{ $t('general.role.' + group.role) }}</h4>\n <basic-user-card\n v-for=\"user in group.users\"\n :key=\"user.screen_name\"\n :user=\"user\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./staff_panel.js\"></script>\n\n<style lang=\"scss\">\n.staff-group {\n padding-left: 1em;\n padding-top: 1em;\n\n .basic-user-card {\n padding-left: 0;\n }\n}\n\n</style>\n","import map from 'lodash/map'\nimport groupBy from 'lodash/groupBy'\nimport { mapGetters, mapState } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\n\nconst StaffPanel = {\n created () {\n const nicknames = this.$store.state.instance.staffAccounts\n nicknames.forEach(nickname => this.$store.dispatch('fetchUserIfMissing', nickname))\n },\n components: {\n BasicUserCard\n },\n computed: {\n groupedStaffAccounts () {\n const staffAccounts = map(this.staffAccounts, this.findUserByName).filter(_ => _)\n const groupedStaffAccounts = groupBy(staffAccounts, 'role')\n\n return [\n { role: 'admin', users: groupedStaffAccounts.admin },\n { role: 'moderator', users: groupedStaffAccounts.moderator }\n ].filter(group => group.users)\n },\n ...mapGetters([\n 'findUserByName'\n ]),\n ...mapState({\n staffAccounts: state => state.instance.staffAccounts\n })\n }\n}\n\nexport default StaffPanel\n","import { render } from \"./staff_panel.vue?vue&type=template&id=56c37220\"\nimport script from \"./staff_panel.js?vue&type=script&lang=js\"\nexport * from \"./staff_panel.js?vue&type=script&lang=js\"\n\nimport \"./staff_panel.vue?vue&type=style&index=0&id=56c37220&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"federationPolicy\"\n class=\"mrf-transparency-panel\"\n >\n <div class=\"panel panel-default base01-background\">\n <div class=\"panel-heading timeline-heading base02-background\">\n <div class=\"title\">\n {{ $t(\"about.mrf.federation\") }}\n </div>\n </div>\n <div class=\"panel-body\">\n <div class=\"mrf-section\">\n <h2>{{ $t(\"about.mrf.mrf_policies\") }}</h2>\n <p>{{ $t(\"about.mrf.mrf_policies_desc\") }}</p>\n\n <ul>\n <li\n v-for=\"policy in mrfPolicies\"\n :key=\"policy\"\n v-text=\"policy\"\n />\n </ul>\n\n <h2 v-if=\"hasInstanceSpecificPolicies\">\n {{ $t(\"about.mrf.simple.simple_policies\") }}\n </h2>\n\n <div v-if=\"acceptInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.accept\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.accept_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in acceptInstances\"\n :key=\"entry.instance + '_accept'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"rejectInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.reject\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.reject_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in rejectInstances\"\n :key=\"entry.instance + '_reject'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"quarantineInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.quarantine\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.quarantine_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in quarantineInstances\"\n :key=\"entry.instance + '_quarantine'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"ftlRemovalInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.ftl_removal\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.ftl_removal_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in ftlRemovalInstances\"\n :key=\"entry.instance + '_ftl_removal'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"mediaNsfwInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.media_nsfw\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.media_nsfw_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in mediaNsfwInstances\"\n :key=\"entry.instance + '_media_nsfw'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <div v-if=\"mediaRemovalInstances.length\">\n <h4>{{ $t(\"about.mrf.simple.media_removal\") }}</h4>\n\n <p>{{ $t(\"about.mrf.simple.media_removal_desc\") }}</p>\n\n <table>\n <tr>\n <th>{{ $t(\"about.mrf.simple.instance\") }}</th>\n <th>{{ $t(\"about.mrf.simple.reason\") }}</th>\n </tr>\n <tr\n v-for=\"entry in mediaRemovalInstances\"\n :key=\"entry.instance + '_media_removal'\"\n >\n <td>{{ entry.instance }}</td>\n <td v-if=\"entry.reason === ''\">\n {{ $t(\"about.mrf.simple.not_applicable\") }}\n </td>\n <td v-else>\n {{ entry.reason }}\n </td>\n </tr>\n </table>\n </div>\n\n <h2 v-if=\"hasKeywordPolicies\">\n {{ $t(\"about.mrf.keyword.keyword_policies\") }}\n </h2>\n\n <div v-if=\"keywordsFtlRemoval.length\">\n <h4>{{ $t(\"about.mrf.keyword.ftl_removal\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsFtlRemoval\"\n :key=\"keyword\"\n v-text=\"keyword\"\n />\n </ul>\n </div>\n\n <div v-if=\"keywordsReject.length\">\n <h4>{{ $t(\"about.mrf.keyword.reject\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsReject\"\n :key=\"keyword\"\n v-text=\"keyword\"\n />\n </ul>\n </div>\n\n <div v-if=\"keywordsReplace.length\">\n <h4>{{ $t(\"about.mrf.keyword.replace\") }}</h4>\n\n <ul>\n <li\n v-for=\"keyword in keywordsReplace\"\n :key=\"keyword\"\n >\n {{ keyword.pattern }}\n {{ $t(\"about.mrf.keyword.is_replaced_by\") }}\n {{ keyword.replacement }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./mrf_transparency_panel.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"./mrf_transparency_panel\";\n</style>\n","import { mapState } from 'vuex'\nimport { get } from 'lodash'\n\n/**\n * This is for backwards compatibility. We originally didn't recieve\n * extra info like a reason why an instance was rejected/quarantined/etc.\n * Because we didn't want to break backwards compatibility it was decided\n * to add an extra \"info\" key.\n */\nconst toInstanceReasonObject = (instances, info, key) => {\n return instances.map(instance => {\n if (info[key] && info[key][instance] && info[key][instance].reason) {\n return { instance, reason: info[key][instance].reason }\n }\n return { instance, reason: '' }\n })\n}\n\nconst MRFTransparencyPanel = {\n computed: {\n ...mapState({\n federationPolicy: state => get(state, 'instance.federationPolicy'),\n mrfPolicies: state => get(state, 'instance.federationPolicy.mrf_policies', []),\n quarantineInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.quarantined_instances', []),\n get(state, 'instance.federationPolicy.quarantined_instances_info', []),\n 'quarantined_instances'\n ),\n acceptInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.accept', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'accept'\n ),\n rejectInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.reject', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'reject'\n ),\n ftlRemovalInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.federated_timeline_removal', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'federated_timeline_removal'\n ),\n mediaNsfwInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.media_nsfw', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'media_nsfw'\n ),\n mediaRemovalInstances: state => toInstanceReasonObject(\n get(state, 'instance.federationPolicy.mrf_simple.media_removal', []),\n get(state, 'instance.federationPolicy.mrf_simple_info', []),\n 'media_removal'\n ),\n keywordsFtlRemoval: state => get(state, 'instance.federationPolicy.mrf_keyword.federated_timeline_removal', []),\n keywordsReject: state => get(state, 'instance.federationPolicy.mrf_keyword.reject', []),\n keywordsReplace: state => get(state, 'instance.federationPolicy.mrf_keyword.replace', [])\n }),\n hasInstanceSpecificPolicies () {\n return this.quarantineInstances.length ||\n this.acceptInstances.length ||\n this.rejectInstances.length ||\n this.ftlRemovalInstances.length ||\n this.mediaNsfwInstances.length ||\n this.mediaRemovalInstances.length\n },\n hasKeywordPolicies () {\n return this.keywordsFtlRemoval.length ||\n this.keywordsReject.length ||\n this.keywordsReplace.length\n }\n }\n}\n\nexport default MRFTransparencyPanel\n","import InstanceSpecificPanel from '../instance_specific_panel/instance_specific_panel.vue'\nimport FeaturesPanel from '../features_panel/features_panel.vue'\nimport TermsOfServicePanel from '../terms_of_service_panel/terms_of_service_panel.vue'\nimport StaffPanel from '../staff_panel/staff_panel.vue'\nimport MRFTransparencyPanel from '../mrf_transparency_panel/mrf_transparency_panel.vue'\n\nconst About = {\n components: {\n InstanceSpecificPanel,\n FeaturesPanel,\n TermsOfServicePanel,\n StaffPanel,\n MRFTransparencyPanel\n },\n computed: {\n showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },\n showInstanceSpecificPanel () {\n return this.$store.state.instance.showInstanceSpecificPanel &&\n !this.$store.getters.mergedConfig.hideISP &&\n this.$store.state.instance.instanceSpecificPanelContent\n }\n }\n}\n\nexport default About\n","import { render } from \"./mrf_transparency_panel.vue?vue&type=template&id=67a05c5c\"\nimport script from \"./mrf_transparency_panel.js?vue&type=script&lang=js\"\nexport * from \"./mrf_transparency_panel.js?vue&type=script&lang=js\"\n\nimport \"./mrf_transparency_panel.vue?vue&type=style&index=0&id=67a05c5c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./about.vue?vue&type=template&id=4d996902\"\nimport script from \"./about.js?vue&type=script&lang=js\"\nexport * from \"./about.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n {{ $t('remote_user_resolver.remote_user_resolver') }}\n </div>\n <div class=\"panel-body\">\n <p>\n {{ $t('remote_user_resolver.searching_for') }} @{{ $route.params.username }}@{{ $route.params.hostname }}\n </p>\n <p v-if=\"error\">\n {{ $t('remote_user_resolver.error') }}\n </p>\n </div>\n </div>\n</template>\n\n<script src=\"./remote_user_resolver.js\"></script>\n","const RemoteUserResolver = {\n data: () => ({\n error: false\n }),\n mounted () {\n this.redirect()\n },\n methods: {\n redirect () {\n const acct = this.$route.params.username + '@' + this.$route.params.hostname\n this.$store.state.api.backendInteractor.fetchUser({ id: acct })\n .then((externalUser) => {\n if (externalUser.error) {\n this.error = true\n } else {\n this.$store.commit('addNewUsers', [externalUser])\n const id = externalUser.id\n this.$router.replace({\n name: 'external-user-profile',\n params: { id }\n })\n }\n })\n .catch(() => {\n this.error = true\n })\n }\n }\n}\n\nexport default RemoteUserResolver\n","import { render } from \"./remote_user_resolver.vue?vue&type=template&id=147deeb8\"\nimport script from \"./remote_user_resolver.js?vue&type=script&lang=js\"\nexport * from \"./remote_user_resolver.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"Lists panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"title\">\n {{ $t('lists.lists') }}\n </div>\n <router-link\n :to=\"{ name: 'lists-new' }\"\n class=\"button-default btn new-list-button\"\n >\n {{ $t(\"lists.new\") }}\n </router-link>\n </div>\n <div class=\"panel-body\">\n <ListsCard\n v-for=\"list in lists.slice().reverse()\"\n :key=\"list\"\n :list=\"list\"\n class=\"list-item\"\n />\n </div>\n </div>\n</template>\n\n<script src=\"./lists.js\"></script>\n\n<style lang=\"scss\">\n.Lists {\n .new-list-button {\n padding: 0 0.5em;\n }\n}\n</style>\n","<template>\n <div class=\"list-card\">\n <router-link\n :to=\"{ name: 'lists-timeline', params: { id: list.id } }\"\n class=\"list-name\"\n >\n {{ list.title }}\n </router-link>\n <router-link\n :to=\"{ name: 'lists-edit', params: { id: list.id } }\"\n class=\"button-list-edit\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"ellipsis-h\"\n />\n </router-link>\n </div>\n</template>\n\n<script src=\"./lists_card.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.list-card {\n display: flex;\n}\n\n.list-name {\n flex-grow: 1;\n}\n\n.list-name,\n.button-list-edit {\n margin: 0;\n padding: 1em;\n color: $fallback--link;\n color: var(--link, $fallback--link);\n\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenu, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuText, $fallback--link);\n\n --faint: var(--selectedMenuFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuLightText, $fallback--lightText);\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEllipsisH\n)\n\nconst ListsCard = {\n props: [\n 'list'\n ]\n}\n\nexport default ListsCard\n","import ListsCard from '../lists_card/lists_card.vue'\n\nconst Lists = {\n data () {\n return {\n isNew: false\n }\n },\n components: {\n ListsCard\n },\n computed: {\n lists () {\n return this.$store.state.lists.allLists\n }\n },\n methods: {\n cancelNewList () {\n this.isNew = false\n },\n newList () {\n this.isNew = true\n }\n }\n}\n\nexport default Lists\n","import { render } from \"./lists_card.vue?vue&type=template&id=cb7330aa\"\nimport script from \"./lists_card.js?vue&type=script&lang=js\"\nexport * from \"./lists_card.js?vue&type=script&lang=js\"\n\nimport \"./lists_card.vue?vue&type=style&index=0&id=cb7330aa&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./lists.vue?vue&type=template&id=273aca3d\"\nimport script from \"./lists.js?vue&type=script&lang=js\"\nexport * from \"./lists.js?vue&type=script&lang=js\"\n\nimport \"./lists.vue?vue&type=style&index=0&id=273aca3d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Timeline from '../timeline/timeline.vue'\nconst ListsTimeline = {\n data () {\n return {\n listId: null\n }\n },\n components: {\n Timeline\n },\n computed: {\n timeline () { return this.$store.state.statuses.timelines.list }\n },\n watch: {\n $route: function (route) {\n if (route.name === 'lists-timeline' && route.params.id !== this.listId) {\n this.listId = route.params.id\n this.$store.dispatch('stopFetchingTimeline', 'list')\n this.$store.commit('clearTimeline', { timeline: 'list' })\n this.$store.dispatch('fetchList', { listId: this.listId })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'list', listId: this.listId })\n }\n }\n },\n created () {\n this.listId = this.$route.params.id\n this.$store.dispatch('fetchList', { listId: this.listId })\n this.$store.dispatch('startFetchingTimeline', { timeline: 'list', listId: this.listId })\n },\n unmounted () {\n this.$store.dispatch('stopFetchingTimeline', 'list')\n this.$store.commit('clearTimeline', { timeline: 'list' })\n }\n}\n\nexport default ListsTimeline\n","import { render } from \"./lists_timeline.vue?vue&type=template&id=464584d8\"\nimport script from \"./lists_timeline.js?vue&type=script&lang=js\"\nexport * from \"./lists_timeline.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Timeline\n title=\"list.name\"\n :timeline=\"timeline\"\n :list-id=\"listId\"\n timeline-name=\"list\"\n />\n</template>\n\n<script src=\"./lists_timeline.js\"></script>\n","<template>\n <div class=\"panel-default panel ListEdit\">\n <div\n ref=\"header\"\n class=\"panel-heading list-edit-heading\"\n >\n <button\n class=\"button-unstyled go-back-button\"\n @click=\"$router.back\"\n >\n <FAIcon\n size=\"lg\"\n icon=\"chevron-left\"\n />\n </button>\n <div class=\"title\">\n <i18n-t\n v-if=\"id\"\n keypath=\"lists.editing_list\"\n >\n <template #listTitle>\n {{ title }}\n </template>\n </i18n-t>\n <i18n-t\n v-else\n keypath=\"lists.creating_list\"\n />\n </div>\n </div>\n <div class=\"panel-body\">\n <div class=\"input-wrap\">\n <label for=\"list-edit-title\">{{ $t('lists.title') }}</label>\n {{ ' ' }}\n <input\n id=\"list-edit-title\"\n ref=\"title\"\n v-model=\"titleDraft\"\n >\n <button\n v-if=\"id\"\n class=\"btn button-default follow-button\"\n @click=\"updateListTitle\"\n >\n {{ $t('lists.update_title') }}\n </button>\n </div>\n <tab-switcher\n class=\"list-member-management\"\n :scrollable-tabs=\"true\"\n >\n <div\n v-if=\"id || addedUserIds.size > 0\"\n :label=\"$t('lists.manage_members')\"\n class=\"members-list\"\n >\n <div class=\"users-list\">\n <div\n v-for=\"user in membersUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <BasicUserCard\n :user=\"user\"\n >\n <button\n class=\"btn button-default follow-button\"\n @click=\"toggleRemoveMember(user)\"\n >\n {{ isRemoved(user) ? $t('general.undo') : $t('lists.remove_from_list') }}\n </button>\n </BasicUserCard>\n </div>\n </div>\n </div>\n\n <div\n class=\"search-list\"\n :label=\"$t('lists.add_members')\"\n >\n <ListsUserSearch\n @results=\"onSearchResults\"\n @loading=\"onSearchLoading\"\n @loadingDone=\"onSearchLoadingDone\"\n />\n <div\n v-if=\"searchLoading\"\n class=\"loading\"\n >\n <PanelLoading />\n </div>\n <div\n v-else\n class=\"users-list\"\n >\n <div\n v-for=\"user in searchUsers\"\n :key=\"user.id\"\n class=\"member\"\n >\n <BasicUserCard\n :user=\"user\"\n >\n <span\n v-if=\"membersUserIds.includes(user.id)\"\n >\n {{ $t('lists.is_in_list') }}\n </span>\n <button\n v-if=\"!membersUserIds.includes(user.id)\"\n class=\"btn button-default follow-button\"\n @click=\"toggleAddFromSearch(user)\"\n >\n {{ isAdded(user) ? $t('general.undo') : $t('lists.add_to_list') }}\n </button>\n <button\n v-else\n class=\"btn button-default follow-button\"\n @click=\"toggleRemoveMember(user)\"\n >\n {{ isRemoved(user) ? $t('general.undo') : $t('lists.remove_from_list') }}\n </button>\n </BasicUserCard>\n </div>\n </div>\n </div>\n </tab-switcher>\n </div>\n <div class=\"panel-footer\">\n <span class=\"spacer\" />\n <button\n v-if=\"!id\"\n class=\"btn button-default footer-button\"\n @click=\"createList\"\n >\n {{ $t('lists.create') }}\n </button>\n <button\n v-else-if=\"!reallyDelete\"\n class=\"btn button-default footer-button\"\n @click=\"reallyDelete = true\"\n >\n {{ $t('lists.delete') }}\n </button>\n <template v-else>\n {{ $t('lists.really_delete') }}\n <button\n class=\"btn button-default footer-button\"\n @click=\"deleteList\"\n >\n {{ $t('general.yes') }}\n </button>\n <button\n class=\"btn button-default footer-button\"\n @click=\"reallyDelete = false\"\n >\n {{ $t('general.no') }}\n </button>\n </template>\n </div>\n </div>\n</template>\n\n<script src=\"./lists_edit.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ListEdit {\n --panel-body-padding: 0.5em;\n\n height: calc(100vh - var(--navbar-height));\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .list-edit-heading {\n grid-template-columns: auto minmax(50%, 1fr);\n }\n\n .panel-body {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n }\n\n .list-member-management {\n flex: 1 0 auto;\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n\n .users-list {\n padding-bottom: 0.7rem;\n overflow-y: auto;\n }\n\n & .search-list,\n & .members-list {\n overflow: hidden;\n flex-direction: column;\n min-height: 0;\n }\n\n .go-back-button {\n text-align: center;\n line-height: 1;\n height: 100%;\n align-self: start;\n width: var(--__panel-heading-height-inner);\n }\n\n .btn {\n margin: 0 0.5em;\n }\n\n .panel-footer {\n grid-template-columns: minmax(10%, 1fr);\n\n .footer-button {\n min-width: 9em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"ListsUserSearch\">\n <div class=\"input-wrap\">\n <div class=\"input-search\">\n <FAIcon\n class=\"search-icon fa-scale-110 fa-old-padding\"\n icon=\"search\"\n />\n </div>\n <input\n ref=\"search\"\n v-model=\"query\"\n :placeholder=\"$t('lists.search')\"\n @input=\"onInput\"\n >\n </div>\n <div class=\"input-wrap\">\n <Checkbox\n v-model=\"followingOnly\"\n @change=\"onInput\"\n >\n {{ $t('lists.following_only') }}\n </Checkbox>\n </div>\n </div>\n</template>\n\n<script src=\"./lists_user_search.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ListsUserSearch {\n .input-wrap {\n display: flex;\n margin: 0.7em 0.5em;\n\n input {\n width: 100%;\n }\n }\n\n .search-icon {\n margin-right: 0.3em;\n }\n}\n\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\nimport { debounce } from 'lodash'\nimport Checkbox from '../checkbox/checkbox.vue'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst ListsUserSearch = {\n components: {\n Checkbox\n },\n emits: ['loading', 'loadingDone', 'results'],\n data () {\n return {\n loading: false,\n query: '',\n followingOnly: true\n }\n },\n methods: {\n onInput: debounce(function () {\n this.search(this.query)\n }, 2000),\n search (query) {\n if (!query) {\n this.loading = false\n return\n }\n\n this.loading = true\n this.$emit('loading')\n this.userIds = []\n this.$store.dispatch('search', { q: query, resolve: true, type: 'accounts', following: this.followingOnly })\n .then(data => {\n this.$emit('results', data.accounts.map(a => a.id))\n })\n .finally(() => {\n this.loading = false\n this.$emit('loadingDone')\n })\n }\n }\n}\n\nexport default ListsUserSearch\n","import { render } from \"./lists_user_search.vue?vue&type=template&id=f65a8ae4\"\nimport script from \"./lists_user_search.js?vue&type=script&lang=js\"\nexport * from \"./lists_user_search.js?vue&type=script&lang=js\"\n\nimport \"./lists_user_search.vue?vue&type=style&index=0&id=f65a8ae4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState, mapGetters } from 'vuex'\nimport BasicUserCard from '../basic_user_card/basic_user_card.vue'\nimport ListsUserSearch from '../lists_user_search/lists_user_search.vue'\nimport PanelLoading from 'src/components/panel_loading/panel_loading.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSearch,\n faChevronLeft\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSearch,\n faChevronLeft\n)\n\nconst ListsNew = {\n components: {\n BasicUserCard,\n UserAvatar,\n ListsUserSearch,\n TabSwitcher,\n PanelLoading\n },\n data () {\n return {\n title: '',\n titleDraft: '',\n membersUserIds: [],\n removedUserIds: new Set([]), // users we added for members, to undo\n searchUserIds: [],\n addedUserIds: new Set([]), // users we added from search, to undo\n searchLoading: false,\n reallyDelete: false\n }\n },\n created () {\n if (!this.id) return\n this.$store.dispatch('fetchList', { listId: this.id })\n .then(() => {\n this.title = this.findListTitle(this.id)\n this.titleDraft = this.title\n })\n this.$store.dispatch('fetchListAccounts', { listId: this.id })\n .then(() => {\n this.membersUserIds = this.findListAccounts(this.id)\n this.membersUserIds.forEach(userId => {\n this.$store.dispatch('fetchUserIfMissing', userId)\n })\n })\n },\n computed: {\n id () {\n return this.$route.params.id\n },\n membersUsers () {\n return [...this.membersUserIds, ...this.addedUserIds]\n .map(userId => this.findUser(userId)).filter(user => user)\n },\n searchUsers () {\n return this.searchUserIds.map(userId => this.findUser(userId)).filter(user => user)\n },\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n ...mapGetters(['findUser', 'findListTitle', 'findListAccounts'])\n },\n methods: {\n onInput () {\n this.search(this.query)\n },\n toggleRemoveMember (user) {\n if (this.removedUserIds.has(user.id)) {\n this.id && this.addUser(user)\n this.removedUserIds.delete(user.id)\n } else {\n this.id && this.removeUser(user.id)\n this.removedUserIds.add(user.id)\n }\n },\n toggleAddFromSearch (user) {\n if (this.addedUserIds.has(user.id)) {\n this.id && this.removeUser(user.id)\n this.addedUserIds.delete(user.id)\n } else {\n this.id && this.addUser(user)\n this.addedUserIds.add(user.id)\n }\n },\n isRemoved (user) {\n return this.removedUserIds.has(user.id)\n },\n isAdded (user) {\n return this.addedUserIds.has(user.id)\n },\n addUser (user) {\n this.$store.dispatch('addListAccount', { accountId: user.id, listId: this.id })\n },\n removeUser (userId) {\n this.$store.dispatch('removeListAccount', { accountId: userId, listId: this.id })\n },\n onSearchLoading (results) {\n this.searchLoading = true\n },\n onSearchLoadingDone (results) {\n this.searchLoading = false\n },\n onSearchResults (results) {\n this.searchLoading = false\n this.searchUserIds = results\n },\n updateListTitle () {\n this.$store.dispatch('setList', { listId: this.id, title: this.titleDraft })\n .then(() => {\n this.title = this.findListTitle(this.id)\n })\n },\n createList () {\n this.$store.dispatch('createList', { title: this.titleDraft })\n .then((list) => {\n return this\n .$store\n .dispatch('setListAccounts', { listId: list.id, accountIds: [...this.addedUserIds] })\n .then(() => list.id)\n })\n .then((listId) => {\n this.$router.push({ name: 'lists-timeline', params: { id: listId } })\n })\n .catch((e) => {\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'lists.error',\n messageArgs: [e.message],\n level: 'error'\n })\n })\n },\n deleteList () {\n this.$store.dispatch('deleteList', { listId: this.id })\n this.$router.push({ name: 'lists' })\n }\n }\n}\n\nexport default ListsNew\n","import { render } from \"./lists_edit.vue?vue&type=template&id=722535f4\"\nimport script from \"./lists_edit.js?vue&type=script&lang=js\"\nexport * from \"./lists_edit.js?vue&type=script&lang=js\"\n\nimport \"./lists_edit.vue?vue&type=style&index=0&id=722535f4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel panel-default announcements-page\">\n <div class=\"panel-heading\">\n <span>\n {{ $t('announcements.page_header') }}\n </span>\n </div>\n <div class=\"panel-body\">\n <section\n v-if=\"canPostAnnouncement\"\n >\n <div class=\"post-form\">\n <div class=\"heading\">\n <h4>{{ $t('announcements.post_form_header') }}</h4>\n </div>\n <div class=\"body\">\n <announcement-editor\n :announcement=\"newAnnouncement\"\n :disabled=\"posting\"\n />\n </div>\n <div class=\"footer\">\n <button\n class=\"btn button-default post-button\"\n :disabled=\"posting\"\n @click.prevent=\"postAnnouncement\"\n >\n {{ $t('announcements.post_action') }}\n </button>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ $t('announcements.post_error', { error }) }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n :title=\"$t('announcements.close_error')\"\n />\n </button>\n </div>\n </div>\n </div>\n </section>\n <section\n v-for=\"announcement in announcements\"\n :key=\"announcement.id\"\n >\n <announcement\n :announcement=\"announcement\"\n />\n </section>\n </div>\n </div>\n</template>\n\n<script src=\"./announcements_page.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.announcements-page {\n .post-form {\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .post-button {\n min-width: 10em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"announcement\">\n <div class=\"heading\">\n <h4>{{ $t('announcements.title') }}</h4>\n </div>\n <div class=\"body\">\n <rich-content\n v-if=\"!editing\"\n :html=\"content\"\n :emoji=\"announcement.emojis\"\n :handle-links=\"true\"\n />\n <announcement-editor\n v-else\n :announcement=\"editedAnnouncement\"\n />\n </div>\n <div class=\"footer\">\n <div\n v-if=\"!editing\"\n class=\"times\"\n >\n <span v-if=\"publishedAt\">\n {{ $t('announcements.published_time_display', { time: publishedAt }) }}\n </span>\n <span v-if=\"startsAt\">\n {{ $t('announcements.start_time_display', { time: startsAt }) }}\n </span>\n <span v-if=\"endsAt\">\n {{ $t('announcements.end_time_display', { time: endsAt }) }}\n </span>\n </div>\n <div\n v-if=\"!editing\"\n class=\"actions\"\n >\n <button\n v-if=\"currentUser\"\n class=\"btn button-default\"\n :class=\"{ toggled: isRead }\"\n :disabled=\"inactive\"\n :title=\"inactive ? $t('announcements.inactive_message') : ''\"\n @click=\"markAsRead\"\n >\n {{ $t('announcements.mark_as_read_action') }}\n </button>\n <button\n v-if=\"canEditAnnouncement\"\n class=\"btn button-default\"\n @click=\"enterEditMode\"\n >\n {{ $t('announcements.edit_action') }}\n </button>\n <button\n v-if=\"canEditAnnouncement\"\n class=\"btn button-default\"\n @click=\"deleteAnnouncement\"\n >\n {{ $t('announcements.delete_action') }}\n </button>\n </div>\n <div\n v-else\n class=\"actions\"\n >\n <button\n class=\"btn button-default\"\n @click=\"submitEdit\"\n >\n {{ $t('announcements.submit_edit_action') }}\n </button>\n <button\n class=\"btn button-default\"\n @click=\"cancelEdit\"\n >\n {{ $t('announcements.cancel_edit_action') }}\n </button>\n <div\n v-if=\"editing && editError\"\n class=\"alert error\"\n >\n {{ $t('announcements.edit_error', { error }) }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n :title=\"$t('announcements.close_error')\"\n />\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./announcement.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.announcement {\n border-bottom: 1px solid var(--border, $fallback--border);\n border-radius: 0;\n padding: var(--status-margin, $status-margin);\n\n .heading,\n .body {\n margin-bottom: var(--status-margin, $status-margin);\n }\n\n .footer {\n display: flex;\n flex-direction: column;\n\n .times {\n display: flex;\n flex-direction: column;\n }\n }\n\n .footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n\n .btn {\n flex: 1;\n margin: 1em;\n max-width: 10em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"announcement-editor\">\n <textarea\n ref=\"textarea\"\n v-model=\"announcement.content\"\n class=\"post-textarea\"\n rows=\"1\"\n cols=\"1\"\n :placeholder=\"$t('announcements.post_placeholder')\"\n :disabled=\"disabled\"\n />\n <span class=\"announcement-metadata\">\n <label for=\"announcement-start-time\">{{ $t('announcements.start_time_prompt') }}</label>\n <input\n id=\"announcement-start-time\"\n v-model=\"announcement.startsAt\"\n :type=\"announcement.allDay ? 'date' : 'datetime-local'\"\n :disabled=\"disabled\"\n >\n </span>\n <span class=\"announcement-metadata\">\n <label for=\"announcement-end-time\">{{ $t('announcements.end_time_prompt') }}</label>\n <input\n id=\"announcement-end-time\"\n v-model=\"announcement.endsAt\"\n :type=\"announcement.allDay ? 'date' : 'datetime-local'\"\n :disabled=\"disabled\"\n >\n </span>\n <span class=\"announcement-metadata\">\n <Checkbox\n id=\"announcement-all-day\"\n v-model=\"announcement.allDay\"\n :disabled=\"disabled\"\n />\n <label for=\"announcement-all-day\">{{ $t('announcements.all_day_prompt') }}</label>\n </span>\n </div>\n</template>\n\n<script src=\"./announcement_editor.js\"></script>\n\n<style lang=\"scss\">\n.announcement-editor {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n\n .announcement-metadata {\n margin-top: 0.5em;\n }\n\n .post-textarea {\n resize: vertical;\n height: 10em;\n overflow: none;\n box-sizing: content-box;\n }\n}\n</style>\n","import Checkbox from '../checkbox/checkbox.vue'\n\nconst AnnouncementEditor = {\n components: {\n Checkbox\n },\n props: {\n announcement: Object,\n disabled: Boolean\n }\n}\n\nexport default AnnouncementEditor\n","import { render } from \"./announcement_editor.vue?vue&type=template&id=357f0d7c\"\nimport script from \"./announcement_editor.js?vue&type=script&lang=js\"\nexport * from \"./announcement_editor.js?vue&type=script&lang=js\"\n\nimport \"./announcement_editor.vue?vue&type=style&index=0&id=357f0d7c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport AnnouncementEditor from '../announcement_editor/announcement_editor.vue'\nimport RichContent from '../rich_content/rich_content.jsx'\nimport localeService from '../../services/locale/locale.service.js'\n\nconst Announcement = {\n components: {\n AnnouncementEditor,\n RichContent\n },\n data () {\n return {\n editing: false,\n editedAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: undefined\n },\n editError: ''\n }\n },\n props: {\n announcement: Object\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n canEditAnnouncement () {\n return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')\n },\n content () {\n return this.announcement.content\n },\n isRead () {\n return this.announcement.read\n },\n publishedAt () {\n const time = this.announcement.published_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n startsAt () {\n const time = this.announcement.starts_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n endsAt () {\n const time = this.announcement.ends_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))\n },\n inactive () {\n return this.announcement.inactive\n }\n },\n methods: {\n markAsRead () {\n if (!this.isRead) {\n return this.$store.dispatch('markAnnouncementAsRead', this.announcement.id)\n }\n },\n deleteAnnouncement () {\n return this.$store.dispatch('deleteAnnouncement', this.announcement.id)\n },\n formatTimeOrDate (time, locale) {\n const d = new Date(time)\n return this.announcement.all_day ? d.toLocaleDateString(locale) : d.toLocaleString(locale)\n },\n enterEditMode () {\n this.editedAnnouncement.content = this.announcement.pleroma.raw_content\n this.editedAnnouncement.startsAt = this.announcement.starts_at\n this.editedAnnouncement.endsAt = this.announcement.ends_at\n this.editedAnnouncement.allDay = this.announcement.all_day\n this.editing = true\n },\n submitEdit () {\n this.$store.dispatch('editAnnouncement', {\n id: this.announcement.id,\n ...this.editedAnnouncement\n })\n .then(() => {\n this.editing = false\n })\n .catch(error => {\n this.editError = error.error\n })\n },\n cancelEdit () {\n this.editing = false\n },\n clearError () {\n this.editError = undefined\n }\n }\n}\n\nexport default Announcement\n","import { mapState } from 'vuex'\nimport Announcement from '../announcement/announcement.vue'\nimport AnnouncementEditor from '../announcement_editor/announcement_editor.vue'\n\nconst AnnouncementsPage = {\n components: {\n Announcement,\n AnnouncementEditor\n },\n data () {\n return {\n newAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: false\n },\n posting: false,\n error: undefined\n }\n },\n mounted () {\n this.$store.dispatch('fetchAnnouncements')\n },\n computed: {\n ...mapState({\n currentUser: state => state.users.currentUser\n }),\n announcements () {\n return this.$store.state.announcements.announcements\n },\n canPostAnnouncement () {\n return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')\n }\n },\n methods: {\n postAnnouncement () {\n this.posting = true\n this.$store.dispatch('postAnnouncement', this.newAnnouncement)\n .then(() => {\n this.newAnnouncement.content = ''\n this.startsAt = undefined\n this.endsAt = undefined\n })\n .catch(error => {\n this.error = error.error\n })\n .finally(() => {\n this.posting = false\n })\n },\n clearError () {\n this.error = undefined\n }\n }\n}\n\nexport default AnnouncementsPage\n","import { render } from \"./announcement.vue?vue&type=template&id=c07fccd0\"\nimport script from \"./announcement.js?vue&type=script&lang=js\"\nexport * from \"./announcement.js?vue&type=script&lang=js\"\n\nimport \"./announcement.vue?vue&type=style&index=0&id=c07fccd0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./announcements_page.vue?vue&type=template&id=33196ec2\"\nimport script from \"./announcements_page.js?vue&type=script&lang=js\"\nexport * from \"./announcements_page.js?vue&type=script&lang=js\"\n\nimport \"./announcements_page.vue?vue&type=style&index=0&id=33196ec2&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import PublicTimeline from 'components/public_timeline/public_timeline.vue'\nimport PublicAndExternalTimeline from 'components/public_and_external_timeline/public_and_external_timeline.vue'\nimport FriendsTimeline from 'components/friends_timeline/friends_timeline.vue'\nimport TagTimeline from 'components/tag_timeline/tag_timeline.vue'\nimport BookmarkTimeline from 'components/bookmark_timeline/bookmark_timeline.vue'\nimport ConversationPage from 'components/conversation-page/conversation-page.vue'\nimport Interactions from 'components/interactions/interactions.vue'\nimport DMs from 'components/dm_timeline/dm_timeline.vue'\nimport ChatList from 'components/chat_list/chat_list.vue'\nimport Chat from 'components/chat/chat.vue'\nimport UserProfile from 'components/user_profile/user_profile.vue'\nimport Search from 'components/search/search.vue'\nimport Registration from 'components/registration/registration.vue'\nimport PasswordReset from 'components/password_reset/password_reset.vue'\nimport FollowRequests from 'components/follow_requests/follow_requests.vue'\nimport OAuthCallback from 'components/oauth_callback/oauth_callback.vue'\nimport Notifications from 'components/notifications/notifications.vue'\nimport AuthForm from 'components/auth_form/auth_form.js'\nimport ShoutPanel from 'components/shout_panel/shout_panel.vue'\nimport WhoToFollow from 'components/who_to_follow/who_to_follow.vue'\nimport About from 'components/about/about.vue'\nimport RemoteUserResolver from 'components/remote_user_resolver/remote_user_resolver.vue'\nimport Lists from 'components/lists/lists.vue'\nimport ListsTimeline from 'components/lists_timeline/lists_timeline.vue'\nimport ListsEdit from 'components/lists_edit/lists_edit.vue'\nimport NavPanel from 'src/components/nav_panel/nav_panel.vue'\nimport AnnouncementsPage from 'components/announcements_page/announcements_page.vue'\n\nexport default (store) => {\n const validateAuthenticatedRoute = (to, from, next) => {\n if (store.state.users.currentUser) {\n next()\n } else {\n next(store.state.instance.redirectRootNoLogin || '/main/all')\n }\n }\n\n let routes = [\n {\n name: 'root',\n path: '/',\n redirect: _to => {\n return (store.state.users.currentUser\n ? store.state.instance.redirectRootLogin\n : store.state.instance.redirectRootNoLogin) || '/main/all'\n }\n },\n { name: 'public-external-timeline', path: '/main/all', component: PublicAndExternalTimeline },\n { name: 'public-timeline', path: '/main/public', component: PublicTimeline },\n { name: 'friends', path: '/main/friends', component: FriendsTimeline, beforeEnter: validateAuthenticatedRoute },\n { name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline },\n { name: 'bookmarks', path: '/bookmarks', component: BookmarkTimeline },\n { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },\n {\n name: 'remote-user-profile-acct',\n path: '/remote-users/:_(@)?:username([^/@]+)@:hostname([^/@]+)',\n component: RemoteUserResolver,\n beforeEnter: validateAuthenticatedRoute\n },\n {\n name: 'remote-user-profile',\n path: '/remote-users/:hostname/:username',\n component: RemoteUserResolver,\n beforeEnter: validateAuthenticatedRoute\n },\n { name: 'external-user-profile', path: '/users/$:id', component: UserProfile },\n { name: 'interactions', path: '/users/:username/interactions', component: Interactions, beforeEnter: validateAuthenticatedRoute },\n { name: 'dms', path: '/users/:username/dms', component: DMs, beforeEnter: validateAuthenticatedRoute },\n { name: 'registration', path: '/registration', component: Registration },\n { name: 'password-reset', path: '/password-reset', component: PasswordReset, props: true },\n { name: 'registration-token', path: '/registration/:token', component: Registration },\n { name: 'friend-requests', path: '/friend-requests', component: FollowRequests, beforeEnter: validateAuthenticatedRoute },\n { name: 'notifications', path: '/:username/notifications', component: Notifications, props: () => ({ disableTeleport: true }), beforeEnter: validateAuthenticatedRoute },\n { name: 'login', path: '/login', component: AuthForm },\n { name: 'shout-panel', path: '/shout-panel', component: ShoutPanel, props: () => ({ floating: false }) },\n { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },\n { name: 'search', path: '/search', component: Search, props: (route) => ({ query: route.query.query }) },\n { name: 'who-to-follow', path: '/who-to-follow', component: WhoToFollow, beforeEnter: validateAuthenticatedRoute },\n { name: 'about', path: '/about', component: About },\n { name: 'announcements', path: '/announcements', component: AnnouncementsPage },\n { name: 'user-profile', path: '/users/:name', component: UserProfile },\n { name: 'legacy-user-profile', path: '/:name', component: UserProfile },\n { name: 'lists', path: '/lists', component: Lists },\n { name: 'lists-timeline', path: '/lists/:id', component: ListsTimeline },\n { name: 'lists-edit', path: '/lists/:id/edit', component: ListsEdit },\n { name: 'lists-new', path: '/lists/new', component: ListsEdit },\n { name: 'edit-navigation', path: '/nav-edit', component: NavPanel, props: () => ({ forceExpand: true, forceEditMode: true }), beforeEnter: validateAuthenticatedRoute }\n ]\n\n if (store.state.instance.pleromaChatMessagesAvailable) {\n routes = routes.concat([\n { name: 'chat', path: '/users/:username/chats/:recipient_id', component: Chat, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute },\n { name: 'chats', path: '/users/:username/chats', component: ChatList, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute }\n ])\n }\n\n return routes\n}\n","import * as bodyScrollLock from 'body-scroll-lock'\n\nlet previousNavPaddingRight\nlet previousAppBgWrapperRight\nconst lockerEls = new Set([])\n\nconst disableBodyScroll = (el) => {\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n bodyScrollLock.disableBodyScroll(el, {\n reserveScrollBarGap: true\n })\n lockerEls.add(el)\n setTimeout(() => {\n if (lockerEls.size <= 1) {\n // If previousNavPaddingRight is already set, don't set it again.\n if (previousNavPaddingRight === undefined) {\n const navEl = document.getElementById('nav')\n previousNavPaddingRight = window.getComputedStyle(navEl).getPropertyValue('padding-right')\n navEl.style.paddingRight = previousNavPaddingRight ? `calc(${previousNavPaddingRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`\n }\n // If previousAppBgWrapeprRight is already set, don't set it again.\n if (previousAppBgWrapperRight === undefined) {\n const appBgWrapperEl = document.getElementById('app_bg_wrapper')\n previousAppBgWrapperRight = window.getComputedStyle(appBgWrapperEl).getPropertyValue('right')\n appBgWrapperEl.style.right = previousAppBgWrapperRight ? `calc(${previousAppBgWrapperRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`\n }\n document.body.classList.add('scroll-locked')\n }\n })\n}\n\nconst enableBodyScroll = (el) => {\n lockerEls.delete(el)\n setTimeout(() => {\n if (lockerEls.size === 0) {\n if (previousNavPaddingRight !== undefined) {\n document.getElementById('nav').style.paddingRight = previousNavPaddingRight\n // Restore previousNavPaddingRight to undefined so disableBodyScroll knows it can be set again.\n previousNavPaddingRight = undefined\n }\n if (previousAppBgWrapperRight !== undefined) {\n document.getElementById('app_bg_wrapper').style.right = previousAppBgWrapperRight\n // Restore previousAppBgWrapperRight to undefined so disableBodyScroll knows it can be set again.\n previousAppBgWrapperRight = undefined\n }\n document.body.classList.remove('scroll-locked')\n }\n })\n bodyScrollLock.enableBodyScroll(el)\n}\n\nconst directive = {\n mounted: (el, binding) => {\n if (binding.value) {\n disableBodyScroll(el)\n }\n },\n updated: (el, binding) => {\n if (binding.oldValue === binding.value) {\n return\n }\n\n if (binding.value) {\n disableBodyScroll(el)\n } else {\n enableBodyScroll(el)\n }\n },\n unmounted: (el) => {\n enableBodyScroll(el)\n }\n}\n\nexport default (Vue) => {\n Vue.directive('body-scroll-lock', directive)\n}\n","import { createApp } from 'vue'\nimport { createRouter, createWebHistory } from 'vue-router'\nimport vClickOutside from 'click-outside-vue3'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\n\nimport { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'\n\nimport App from '../App.vue'\nimport routes from './routes'\nimport VBodyScrollLock from 'src/directives/body_scroll_lock'\n\nimport { windowWidth, windowHeight } from '../services/window_utils/window_utils'\nimport { getOrCreateApp, getClientToken } from '../services/new_api/oauth.js'\nimport backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'\nimport { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'\nimport { applyTheme, applyConfig } from '../services/style_setter/style_setter.js'\nimport FaviconService from '../services/favicon_service/favicon_service.js'\n\nlet staticInitialResults = null\n\nconst parsedInitialResults = () => {\n if (!document.getElementById('initial-results')) {\n return null\n }\n if (!staticInitialResults) {\n staticInitialResults = JSON.parse(document.getElementById('initial-results').textContent)\n }\n return staticInitialResults\n}\n\nconst decodeUTF8Base64 = (data) => {\n const rawData = atob(data)\n const array = Uint8Array.from([...rawData].map((char) => char.charCodeAt(0)))\n const text = new TextDecoder().decode(array)\n return text\n}\n\nconst preloadFetch = async (request) => {\n const data = parsedInitialResults()\n if (!data || !data[request]) {\n return window.fetch(request)\n }\n const decoded = decodeUTF8Base64(data[request])\n const requestData = JSON.parse(decoded)\n return {\n ok: true,\n json: () => requestData,\n text: () => requestData\n }\n}\n\nconst getInstanceConfig = async ({ store }) => {\n try {\n const res = await preloadFetch('/api/v1/instance')\n if (res.ok) {\n const data = await res.json()\n const textlimit = data.max_toot_chars\n const vapidPublicKey = data.pleroma.vapid_public_key\n\n store.dispatch('setInstanceOption', { name: 'textlimit', value: textlimit })\n store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })\n store.dispatch('setInstanceOption', { name: 'birthdayRequired', value: !!data.pleroma.metadata.birthday_required })\n store.dispatch('setInstanceOption', { name: 'birthdayMinAge', value: data.pleroma.metadata.birthday_min_age || 0 })\n\n if (vapidPublicKey) {\n store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })\n }\n } else {\n throw (res)\n }\n } catch (error) {\n console.error('Could not load instance config, potentially fatal')\n console.error(error)\n }\n}\n\nconst getBackendProvidedConfig = async ({ store }) => {\n try {\n const res = await window.fetch('/api/pleroma/frontend_configurations')\n if (res.ok) {\n const data = await res.json()\n return data.pleroma_fe\n } else {\n throw (res)\n }\n } catch (error) {\n console.error('Could not load backend-provided frontend config, potentially fatal')\n console.error(error)\n }\n}\n\nconst getStaticConfig = async () => {\n try {\n const res = await window.fetch('/static/config.json')\n if (res.ok) {\n return res.json()\n } else {\n throw (res)\n }\n } catch (error) {\n console.warn('Failed to load static/config.json, continuing without it.')\n console.warn(error)\n return {}\n }\n}\n\nconst setSettings = async ({ apiConfig, staticConfig, store }) => {\n const overrides = window.___pleromafe_dev_overrides || {}\n const env = window.___pleromafe_mode.NODE_ENV\n\n // This takes static config and overrides properties that are present in apiConfig\n let config = {}\n if (overrides.staticConfigPreference && env === 'development') {\n console.warn('OVERRIDING API CONFIG WITH STATIC CONFIG')\n config = Object.assign({}, apiConfig, staticConfig)\n } else {\n config = Object.assign({}, staticConfig, apiConfig)\n }\n\n const copyInstanceOption = (name) => {\n store.dispatch('setInstanceOption', { name, value: config[name] })\n }\n\n copyInstanceOption('nsfwCensorImage')\n copyInstanceOption('background')\n copyInstanceOption('hidePostStats')\n copyInstanceOption('hideBotIndication')\n copyInstanceOption('hideUserStats')\n copyInstanceOption('hideFilteredStatuses')\n copyInstanceOption('logo')\n\n store.dispatch('setInstanceOption', {\n name: 'logoMask',\n value: typeof config.logoMask === 'undefined'\n ? true\n : config.logoMask\n })\n\n store.dispatch('setInstanceOption', {\n name: 'logoMargin',\n value: typeof config.logoMargin === 'undefined'\n ? 0\n : config.logoMargin\n })\n copyInstanceOption('logoLeft')\n store.commit('authFlow/setInitialStrategy', config.loginMethod)\n\n copyInstanceOption('redirectRootNoLogin')\n copyInstanceOption('redirectRootLogin')\n copyInstanceOption('showInstanceSpecificPanel')\n copyInstanceOption('minimalScopesMode')\n copyInstanceOption('hideMutedPosts')\n copyInstanceOption('collapseMessageWithSubject')\n copyInstanceOption('scopeCopy')\n copyInstanceOption('subjectLineBehavior')\n copyInstanceOption('postContentType')\n copyInstanceOption('alwaysShowSubjectInput')\n copyInstanceOption('showFeaturesPanel')\n copyInstanceOption('hideSitename')\n copyInstanceOption('sidebarRight')\n\n return store.dispatch('setTheme', config.theme)\n}\n\nconst getTOS = async ({ store }) => {\n try {\n const res = await window.fetch('/static/terms-of-service.html')\n if (res.ok) {\n const html = await res.text()\n store.dispatch('setInstanceOption', { name: 'tos', value: html })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load TOS\")\n console.warn(e)\n }\n}\n\nconst getInstancePanel = async ({ store }) => {\n try {\n const res = await preloadFetch('/instance/panel.html')\n if (res.ok) {\n const html = await res.text()\n store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load instance panel\")\n console.warn(e)\n }\n}\n\nconst getStickers = async ({ store }) => {\n try {\n const res = await window.fetch('/static/stickers.json')\n if (res.ok) {\n const values = await res.json()\n const stickers = (await Promise.all(\n Object.entries(values).map(async ([name, path]) => {\n const resPack = await window.fetch(path + 'pack.json')\n let meta = {}\n if (resPack.ok) {\n meta = await resPack.json()\n }\n return {\n pack: name,\n path,\n meta\n }\n })\n )).sort((a, b) => {\n return a.meta.title.localeCompare(b.meta.title)\n })\n store.dispatch('setInstanceOption', { name: 'stickers', value: stickers })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn(\"Can't load stickers\")\n console.warn(e)\n }\n}\n\nconst getAppSecret = async ({ store }) => {\n const { state, commit } = store\n const { oauth, instance } = state\n return getOrCreateApp({ ...oauth, instance: instance.server, commit })\n .then((app) => getClientToken({ ...app, instance: instance.server }))\n .then((token) => {\n commit('setAppToken', token.access_token)\n commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))\n })\n}\n\nconst resolveStaffAccounts = ({ store, accounts }) => {\n const nicknames = accounts.map(uri => uri.split('/').pop())\n store.dispatch('setInstanceOption', { name: 'staffAccounts', value: nicknames })\n}\n\nconst getNodeInfo = async ({ store }) => {\n try {\n const res = await preloadFetch('/nodeinfo/2.0.json')\n if (res.ok) {\n const data = await res.json()\n const metadata = data.metadata\n const features = metadata.features\n store.dispatch('setInstanceOption', { name: 'name', value: metadata.nodeName })\n store.dispatch('setInstanceOption', { name: 'registrationOpen', value: data.openRegistrations })\n store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') })\n store.dispatch('setInstanceOption', { name: 'safeDM', value: features.includes('safe_dm_mentions') })\n store.dispatch('setInstanceOption', { name: 'shoutAvailable', value: features.includes('chat') })\n store.dispatch('setInstanceOption', { name: 'pleromaChatMessagesAvailable', value: features.includes('pleroma_chat_messages') })\n store.dispatch('setInstanceOption', { name: 'pleromaCustomEmojiReactionsAvailable', value: features.includes('pleroma_custom_emoji_reactions') })\n store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })\n store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })\n store.dispatch('setInstanceOption', { name: 'editingAvailable', value: features.includes('editing') })\n store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })\n store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })\n store.dispatch('setInstanceOption', { name: 'quotingAvailable', value: features.includes('quote_posting') })\n\n const uploadLimits = metadata.uploadLimits\n store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) })\n store.dispatch('setInstanceOption', { name: 'avatarlimit', value: parseInt(uploadLimits.avatar) })\n store.dispatch('setInstanceOption', { name: 'backgroundlimit', value: parseInt(uploadLimits.background) })\n store.dispatch('setInstanceOption', { name: 'bannerlimit', value: parseInt(uploadLimits.banner) })\n store.dispatch('setInstanceOption', { name: 'fieldsLimits', value: metadata.fieldsLimits })\n\n store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames })\n store.dispatch('setInstanceOption', { name: 'postFormats', value: metadata.postFormats })\n\n const suggestions = metadata.suggestions\n store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })\n store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })\n\n const software = data.software\n store.dispatch('setInstanceOption', { name: 'backendVersion', value: software.version })\n store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: software.name === 'pleroma' })\n\n const priv = metadata.private\n store.dispatch('setInstanceOption', { name: 'private', value: priv })\n\n const frontendVersion = window.___pleromafe_commit_hash\n store.dispatch('setInstanceOption', { name: 'frontendVersion', value: frontendVersion })\n\n const federation = metadata.federation\n\n store.dispatch('setInstanceOption', {\n name: 'tagPolicyAvailable',\n value: typeof federation.mrf_policies === 'undefined'\n ? false\n : metadata.federation.mrf_policies.includes('TagPolicy')\n })\n\n store.dispatch('setInstanceOption', { name: 'federationPolicy', value: federation })\n store.dispatch('setInstanceOption', {\n name: 'federating',\n value: typeof federation.enabled === 'undefined'\n ? true\n : federation.enabled\n })\n\n const accountActivationRequired = metadata.accountActivationRequired\n store.dispatch('setInstanceOption', { name: 'accountActivationRequired', value: accountActivationRequired })\n\n const accounts = metadata.staffAccounts\n resolveStaffAccounts({ store, accounts })\n } else {\n throw (res)\n }\n } catch (e) {\n console.warn('Could not load nodeinfo')\n console.warn(e)\n }\n}\n\nconst setConfig = async ({ store }) => {\n // apiConfig, staticConfig\n const configInfos = await Promise.all([getBackendProvidedConfig({ store }), getStaticConfig()])\n const apiConfig = configInfos[0]\n const staticConfig = configInfos[1]\n\n await setSettings({ store, apiConfig, staticConfig }).then(getAppSecret({ store }))\n}\n\nconst checkOAuthToken = async ({ store }) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n if (store.getters.getUserToken()) {\n try {\n await store.dispatch('loginUser', store.getters.getUserToken())\n } catch (e) {\n console.error(e)\n }\n }\n resolve()\n })\n}\n\nconst afterStoreSetup = async ({ store, i18n }) => {\n store.dispatch('setLayoutWidth', windowWidth())\n store.dispatch('setLayoutHeight', windowHeight())\n\n FaviconService.initFaviconService()\n\n const overrides = window.___pleromafe_dev_overrides || {}\n const server = (typeof overrides.target !== 'undefined') ? overrides.target : window.location.origin\n store.dispatch('setInstanceOption', { name: 'server', value: server })\n\n await setConfig({ store })\n\n const { customTheme, customThemeSource } = store.state.config\n const { theme } = store.state.instance\n const customThemePresent = customThemeSource || customTheme\n\n if (customThemePresent) {\n if (customThemeSource && customThemeSource.themeEngineVersion === CURRENT_VERSION) {\n applyTheme(customThemeSource)\n } else {\n applyTheme(customTheme)\n }\n } else if (theme) {\n // do nothing, it will load asynchronously\n } else {\n console.error('Failed to load any theme!')\n }\n\n applyConfig(store.state.config)\n\n // Now we can try getting the server settings and logging in\n // Most of these are preloaded into the index.html so blocking is minimized\n await Promise.all([\n checkOAuthToken({ store }),\n getInstancePanel({ store }),\n getNodeInfo({ store }),\n getInstanceConfig({ store })\n ])\n\n // Start fetching things that don't need to block the UI\n store.dispatch('fetchMutes')\n store.dispatch('startFetchingAnnouncements')\n getTOS({ store })\n getStickers({ store })\n\n const router = createRouter({\n history: createWebHistory(),\n routes: routes(store),\n scrollBehavior: (to, _from, savedPosition) => {\n if (to.matched.some(m => m.meta.dontScroll)) {\n return false\n }\n return savedPosition || { left: 0, top: 0 }\n }\n })\n\n const app = createApp(App)\n\n app.use(router)\n app.use(store)\n app.use(i18n)\n\n app.use(vClickOutside)\n app.use(VBodyScrollLock)\n app.use(VueVirtualScroller)\n\n app.component('FAIcon', FontAwesomeIcon)\n app.component('FALayers', FontAwesomeLayers)\n\n // remove after vue 3.3\n app.config.unwrapInjectedRef = true\n\n app.mount('#app')\n\n return app\n}\n\nexport default afterStoreSetup\n","import { createStore } from 'vuex'\n\nimport 'custom-event-polyfill'\nimport './lib/event_target_polyfill.js'\n\nimport interfaceModule from './modules/interface.js'\nimport instanceModule from './modules/instance.js'\nimport statusesModule from './modules/statuses.js'\nimport listsModule from './modules/lists.js'\nimport usersModule from './modules/users.js'\nimport apiModule from './modules/api.js'\nimport configModule from './modules/config.js'\nimport profileConfigModule from './modules/profileConfig.js'\nimport serverSideStorageModule from './modules/serverSideStorage.js'\nimport adminSettingsModule from './modules/adminSettings.js'\nimport shoutModule from './modules/shout.js'\nimport oauthModule from './modules/oauth.js'\nimport authFlowModule from './modules/auth_flow.js'\nimport mediaViewerModule from './modules/media_viewer.js'\nimport oauthTokensModule from './modules/oauth_tokens.js'\nimport reportsModule from './modules/reports.js'\nimport pollsModule from './modules/polls.js'\nimport postStatusModule from './modules/postStatus.js'\nimport editStatusModule from './modules/editStatus.js'\nimport statusHistoryModule from './modules/statusHistory.js'\n\nimport chatsModule from './modules/chats.js'\nimport announcementsModule from './modules/announcements.js'\n\nimport { createI18n } from 'vue-i18n'\n\nimport createPersistedState from './lib/persisted_state.js'\nimport pushNotifications from './lib/push_notifications_plugin.js'\n\nimport messages from './i18n/messages.js'\n\nimport afterStoreSetup from './boot/after_store.js'\n\nconst currentLocale = (window.navigator.language || 'en').split('-')[0]\n\nconst i18n = createI18n({\n // By default, use the browser locale, we will update it if neccessary\n locale: 'en',\n fallbackLocale: 'en',\n messages: messages.default\n})\n\nmessages.setLanguage(i18n.global, currentLocale)\n\nconst persistedStateOptions = {\n paths: [\n 'serverSideStorage.cache',\n 'config',\n 'users.lastLoginName',\n 'oauth'\n ]\n};\n\n(async () => {\n let storageError = false\n const plugins = [pushNotifications]\n try {\n const persistedState = await createPersistedState(persistedStateOptions)\n plugins.push(persistedState)\n } catch (e) {\n console.error(e)\n storageError = true\n }\n const store = createStore({\n modules: {\n i18n: {\n getters: {\n i18n: () => i18n.global\n }\n },\n interface: interfaceModule,\n instance: instanceModule,\n // TODO refactor users/statuses modules, they depend on each other\n users: usersModule,\n statuses: statusesModule,\n lists: listsModule,\n api: apiModule,\n config: configModule,\n profileConfig: profileConfigModule,\n serverSideStorage: serverSideStorageModule,\n adminSettings: adminSettingsModule,\n shout: shoutModule,\n oauth: oauthModule,\n authFlow: authFlowModule,\n mediaViewer: mediaViewerModule,\n oauthTokens: oauthTokensModule,\n reports: reportsModule,\n polls: pollsModule,\n postStatus: postStatusModule,\n editStatus: editStatusModule,\n statusHistory: statusHistoryModule,\n chats: chatsModule,\n announcements: announcementsModule\n },\n plugins,\n strict: false // Socket modifies itself, let's ignore this for now.\n // strict: process.env.NODE_ENV !== 'production'\n })\n if (storageError) {\n store.dispatch('pushGlobalNotice', { messageKey: 'errors.storage_unavailable', level: 'error' })\n }\n afterStoreSetup({ store, i18n })\n})()\n\n// These are inlined by webpack's DefinePlugin\n/* eslint-disable */\nwindow.___pleromafe_mode = process.env\nwindow.___pleromafe_commit_hash = COMMIT_HASH\nwindow.___pleromafe_dev_overrides = DEV_OVERRIDES\n","import Cookies from 'js-cookie'\nimport { setPreset, applyTheme, applyConfig } from '../services/style_setter/style_setter.js'\nimport messages from '../i18n/messages'\nimport { set } from 'lodash'\nimport localeService from '../services/locale/locale.service.js'\n\nconst BACKEND_LANGUAGE_COOKIE_NAME = 'userLanguage'\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 'conversationDisplay', // tree | linear\n 'conversationOtherRepliesButton', // below | inside\n 'mentionLinkDisplay', // short | full_for_remote | full\n 'userPopoverAvatarAction' // close | zoom | open\n]\n\nexport const defaultState = {\n expertLevel: 0, // used to track which settings to show and hide\n colors: {},\n theme: undefined,\n customTheme: undefined,\n customThemeSource: undefined,\n hideISP: false,\n hideInstanceWallpaper: false,\n hideShoutbox: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: undefined, // instance default\n hideMutedThreads: undefined, // instance default\n hideWordFilteredPosts: undefined, // instance default\n muteBotStatuses: undefined, // instance default\n collapseMessageWithSubject: undefined, // instance default\n padEmoji: true,\n hideAttachments: false,\n hideAttachmentsInConv: false,\n maxThumbnails: 16,\n hideNsfw: true,\n preloadImage: true,\n loopVideo: true,\n loopVideoSilentOnly: true,\n streaming: false,\n emojiReactionsOnTimeline: true,\n alwaysShowNewPostButton: false,\n autohideFloatingPostButton: false,\n pauseOnUnfocused: true,\n stopGifs: true,\n replyVisibility: 'all',\n thirdColumnMode: 'notifications',\n notificationVisibility: {\n follows: true,\n mentions: true,\n likes: true,\n repeats: true,\n moves: true,\n emojiReactions: true,\n followRequest: true,\n reports: true,\n chatMention: true,\n polls: true\n },\n webPushNotifications: false,\n muteWords: [],\n highlight: {},\n interfaceLanguage: browserLocale,\n hideScopeNotice: false,\n useStreamingApi: false,\n sidebarRight: undefined, // instance default\n scopeCopy: undefined, // instance default\n subjectLineBehavior: undefined, // instance default\n alwaysShowSubjectInput: undefined, // instance default\n postContentType: undefined, // instance default\n minimalScopesMode: undefined, // instance default\n // This hides statuses filtered via a word filter\n hideFilteredStatuses: undefined, // instance default\n modalOnRepeat: undefined, // instance default\n modalOnUnfollow: undefined, // instance default\n modalOnBlock: undefined, // instance default\n modalOnMute: undefined, // instance default\n modalOnDelete: undefined, // instance default\n modalOnLogout: undefined, // instance default\n modalOnApproveFollow: undefined, // instance default\n modalOnDenyFollow: undefined, // instance default\n modalOnRemoveUserFromFollowers: undefined, // instance default\n playVideosInModal: false,\n useOneClickNsfw: false,\n useContainFit: true,\n disableStickyHeaders: false,\n showScrollbars: false,\n userPopoverAvatarAction: 'open',\n userPopoverOverlay: false,\n sidebarColumnWidth: '25rem',\n contentColumnWidth: '45rem',\n notifsColumnWidth: '25rem',\n emojiReactionsScale: 1.0,\n navbarColumnStretch: false,\n greentext: undefined, // instance default\n useAtIcon: undefined, // instance default\n mentionLinkDisplay: undefined, // instance default\n mentionLinkShowTooltip: undefined, // instance default\n mentionLinkShowAvatar: undefined, // instance default\n mentionLinkFadeDomain: undefined, // instance default\n mentionLinkShowYous: undefined, // instance default\n mentionLinkBoldenYou: undefined, // instance default\n hidePostStats: undefined, // instance default\n hideBotIndication: undefined, // instance default\n hideUserStats: undefined, // instance default\n virtualScrolling: undefined, // instance default\n sensitiveByDefault: undefined, // instance default\n conversationDisplay: undefined, // instance default\n conversationTreeAdvanced: undefined, // instance default\n conversationOtherRepliesButton: undefined, // instance default\n conversationTreeFadeAncestors: undefined, // instance default\n maxDepthInThread: undefined, // instance default\n autocompleteSelect: undefined // instance default\n}\n\n// caching the instance default properties\nexport const instanceDefaultProperties = Object.entries(defaultState)\n .filter(([key, value]) => value === undefined)\n .map(([key, value]) => key)\n\nconst config = {\n state: { ...defaultState },\n getters: {\n defaultConfig (state, getters, rootState, rootGetters) {\n const { instance } = rootState\n return {\n ...defaultState,\n ...Object.fromEntries(\n instanceDefaultProperties.map(key => [key, instance[key]])\n )\n }\n },\n mergedConfig (state, getters, rootState, rootGetters) {\n const { defaultConfig } = rootGetters\n return {\n ...defaultConfig,\n // Do not override with undefined\n ...Object.fromEntries(Object.entries(state).filter(([k, v]) => v !== undefined))\n }\n }\n },\n mutations: {\n setOption (state, { name, value }) {\n set(state, name, value)\n },\n setHighlight (state, { user, color, type }) {\n const data = this.state.config.highlight[user]\n if (color || type) {\n state.highlight[user] = { color: color || data.color, type: type || data.type }\n } else {\n delete state.highlight[user]\n }\n }\n },\n actions: {\n loadSettings ({ dispatch }, data) {\n const knownKeys = new Set(Object.keys(defaultState))\n const presentKeys = new Set(Object.keys(data))\n const intersection = new Set()\n for (const elem of presentKeys) {\n if (knownKeys.has(elem)) {\n intersection.add(elem)\n }\n }\n\n intersection.forEach(\n name => dispatch('setOption', { name, value: data[name] })\n )\n },\n setHighlight ({ commit, dispatch }, { user, color, type }) {\n commit('setHighlight', { user, color, type })\n },\n setOption ({ commit, dispatch, state }, { name, value }) {\n const exceptions = new Set([\n 'useStreamingApi'\n ])\n\n if (exceptions.has(name)) {\n switch (name) {\n case 'useStreamingApi': {\n const action = value ? 'enableMastoSockets' : 'disableMastoSockets'\n\n dispatch(action).then(() => {\n commit('setOption', { name: 'useStreamingApi', value })\n }).catch((e) => {\n console.error('Failed starting MastoAPI Streaming socket', e)\n dispatch('disableMastoSockets')\n dispatch('setOption', { name: 'useStreamingApi', value: false })\n })\n }\n }\n } else {\n commit('setOption', { name, value })\n switch (name) {\n case 'theme':\n setPreset(value)\n break\n case 'sidebarColumnWidth':\n case 'contentColumnWidth':\n case 'notifsColumnWidth':\n case 'emojiReactionsScale':\n applyConfig(state)\n break\n case 'customTheme':\n case 'customThemeSource':\n applyTheme(value)\n break\n case 'interfaceLanguage':\n messages.setLanguage(this.getters.i18n, value)\n dispatch('loadUnicodeEmojiData', value)\n Cookies.set(\n BACKEND_LANGUAGE_COOKIE_NAME,\n localeService.internalToBackendLocaleMulti(value)\n )\n break\n case 'thirdColumnMode':\n dispatch('setLayoutWidth', undefined)\n break\n }\n }\n }\n }\n}\n\nexport default config\n","import { humanizeErrors } from '../../modules/errors'\n\nexport function StatusCodeError (statusCode, body, options, response) {\n this.name = 'StatusCodeError'\n this.statusCode = statusCode\n this.message = statusCode + ' - ' + (JSON && JSON.stringify ? JSON.stringify(body) : body)\n this.error = body // legacy attribute\n this.options = options\n this.response = response\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this)\n }\n}\nStatusCodeError.prototype = Object.create(Error.prototype)\nStatusCodeError.prototype.constructor = StatusCodeError\n\nexport class RegistrationError extends Error {\n constructor (error) {\n super()\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this)\n }\n\n try {\n // the error is probably a JSON object with a single key, \"errors\", whose value is another JSON object containing the real errors\n if (typeof error === 'string') {\n error = JSON.parse(error)\n // eslint-disable-next-line\n if (error.hasOwnProperty('error')) {\n error = JSON.parse(error.error)\n }\n }\n\n if (typeof error === 'object') {\n const errorContents = JSON.parse(error.error)\n // keys will have the property that has the error, for example 'ap_id',\n // 'email' or 'captcha', the value will be an array of its error\n // like \"ap_id\": [\"has been taken\"] or \"captcha\": [\"Invalid CAPTCHA\"]\n\n // replace ap_id with username\n if (errorContents.ap_id) {\n errorContents.username = errorContents.ap_id\n delete errorContents.ap_id\n }\n\n this.message = humanizeErrors(errorContents)\n } else {\n this.message = error\n }\n } catch (e) {\n // can't parse it, so just treat it like a string\n this.message = error\n }\n }\n}\n","import { capitalize } from 'lodash'\n\nexport function humanizeErrors (errors) {\n return Object.entries(errors).reduce((errs, [k, val]) => {\n const message = val.reduce((acc, message) => {\n const key = capitalize(k.replace(/_/g, ' '))\n return acc + [key, message].join(' ') + '. '\n }, '')\n return [...errs, message]\n }, [])\n}\n","import { each, map, concat, last, get } from 'lodash'\nimport { parseStatus, parseSource, parseUser, parseNotification, parseAttachment, parseChat, parseLinkHeaderPagination } from '../entity_normalizer/entity_normalizer.service.js'\nimport { RegistrationError, StatusCodeError } from '../errors/errors'\n\n/* eslint-env browser */\nconst MUTES_IMPORT_URL = '/api/pleroma/mutes_import'\nconst BLOCKS_IMPORT_URL = '/api/pleroma/blocks_import'\nconst FOLLOW_IMPORT_URL = '/api/pleroma/follow_import'\nconst DELETE_ACCOUNT_URL = '/api/pleroma/delete_account'\nconst CHANGE_EMAIL_URL = '/api/pleroma/change_email'\nconst CHANGE_PASSWORD_URL = '/api/pleroma/change_password'\nconst MOVE_ACCOUNT_URL = '/api/pleroma/move_account'\nconst ALIASES_URL = '/api/pleroma/aliases'\nconst TAG_USER_URL = '/api/pleroma/admin/users/tag'\nconst PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${screenName}/permission_group/${right}`\nconst ACTIVATE_USER_URL = '/api/pleroma/admin/users/activate'\nconst DEACTIVATE_USER_URL = '/api/pleroma/admin/users/deactivate'\nconst ADMIN_USERS_URL = '/api/pleroma/admin/users'\nconst SUGGESTIONS_URL = '/api/v1/suggestions'\nconst NOTIFICATION_SETTINGS_URL = '/api/pleroma/notification_settings'\nconst NOTIFICATION_READ_URL = '/api/v1/pleroma/notifications/read'\n\nconst MFA_SETTINGS_URL = '/api/pleroma/accounts/mfa'\nconst MFA_BACKUP_CODES_URL = '/api/pleroma/accounts/mfa/backup_codes'\n\nconst MFA_SETUP_OTP_URL = '/api/pleroma/accounts/mfa/setup/totp'\nconst MFA_CONFIRM_OTP_URL = '/api/pleroma/accounts/mfa/confirm/totp'\nconst MFA_DISABLE_OTP_URL = '/api/pleroma/accounts/mfa/totp'\n\nconst MASTODON_LOGIN_URL = '/api/v1/accounts/verify_credentials'\nconst MASTODON_REGISTRATION_URL = '/api/v1/accounts'\nconst MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'\nconst MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications'\nconst MASTODON_DISMISS_NOTIFICATION_URL = id => `/api/v1/notifications/${id}/dismiss`\nconst MASTODON_FAVORITE_URL = id => `/api/v1/statuses/${id}/favourite`\nconst MASTODON_UNFAVORITE_URL = id => `/api/v1/statuses/${id}/unfavourite`\nconst MASTODON_RETWEET_URL = id => `/api/v1/statuses/${id}/reblog`\nconst MASTODON_UNRETWEET_URL = id => `/api/v1/statuses/${id}/unreblog`\nconst MASTODON_DELETE_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_FOLLOW_URL = id => `/api/v1/accounts/${id}/follow`\nconst MASTODON_UNFOLLOW_URL = id => `/api/v1/accounts/${id}/unfollow`\nconst MASTODON_FOLLOWING_URL = id => `/api/v1/accounts/${id}/following`\nconst MASTODON_FOLLOWERS_URL = id => `/api/v1/accounts/${id}/followers`\nconst MASTODON_FOLLOW_REQUESTS_URL = '/api/v1/follow_requests'\nconst MASTODON_APPROVE_USER_URL = id => `/api/v1/follow_requests/${id}/authorize`\nconst MASTODON_DENY_USER_URL = id => `/api/v1/follow_requests/${id}/reject`\nconst MASTODON_DIRECT_MESSAGES_TIMELINE_URL = '/api/v1/timelines/direct'\nconst MASTODON_PUBLIC_TIMELINE = '/api/v1/timelines/public'\nconst MASTODON_USER_HOME_TIMELINE_URL = '/api/v1/timelines/home'\nconst MASTODON_STATUS_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_STATUS_CONTEXT_URL = id => `/api/v1/statuses/${id}/context`\nconst MASTODON_STATUS_SOURCE_URL = id => `/api/v1/statuses/${id}/source`\nconst MASTODON_STATUS_HISTORY_URL = id => `/api/v1/statuses/${id}/history`\nconst MASTODON_USER_URL = '/api/v1/accounts'\nconst MASTODON_USER_LOOKUP_URL = '/api/v1/accounts/lookup'\nconst MASTODON_USER_RELATIONSHIPS_URL = '/api/v1/accounts/relationships'\nconst MASTODON_USER_TIMELINE_URL = id => `/api/v1/accounts/${id}/statuses`\nconst MASTODON_USER_IN_LISTS = id => `/api/v1/accounts/${id}/lists`\nconst MASTODON_LIST_URL = id => `/api/v1/lists/${id}`\nconst MASTODON_LIST_TIMELINE_URL = id => `/api/v1/timelines/list/${id}`\nconst MASTODON_LIST_ACCOUNTS_URL = id => `/api/v1/lists/${id}/accounts`\nconst MASTODON_TAG_TIMELINE_URL = tag => `/api/v1/timelines/tag/${tag}`\nconst MASTODON_BOOKMARK_TIMELINE_URL = '/api/v1/bookmarks'\nconst MASTODON_USER_BLOCKS_URL = '/api/v1/blocks/'\nconst MASTODON_USER_MUTES_URL = '/api/v1/mutes/'\nconst MASTODON_BLOCK_USER_URL = id => `/api/v1/accounts/${id}/block`\nconst MASTODON_UNBLOCK_USER_URL = id => `/api/v1/accounts/${id}/unblock`\nconst MASTODON_MUTE_USER_URL = id => `/api/v1/accounts/${id}/mute`\nconst MASTODON_UNMUTE_USER_URL = id => `/api/v1/accounts/${id}/unmute`\nconst MASTODON_REMOVE_USER_FROM_FOLLOWERS = id => `/api/v1/accounts/${id}/remove_from_followers`\nconst MASTODON_SUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/subscribe`\nconst MASTODON_UNSUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/unsubscribe`\nconst MASTODON_USER_NOTE_URL = id => `/api/v1/accounts/${id}/note`\nconst MASTODON_BOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/bookmark`\nconst MASTODON_UNBOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/unbookmark`\nconst MASTODON_POST_STATUS_URL = '/api/v1/statuses'\nconst MASTODON_MEDIA_UPLOAD_URL = '/api/v1/media'\nconst MASTODON_VOTE_URL = id => `/api/v1/polls/${id}/votes`\nconst MASTODON_POLL_URL = id => `/api/v1/polls/${id}`\nconst MASTODON_STATUS_FAVORITEDBY_URL = id => `/api/v1/statuses/${id}/favourited_by`\nconst MASTODON_STATUS_REBLOGGEDBY_URL = id => `/api/v1/statuses/${id}/reblogged_by`\nconst MASTODON_PROFILE_UPDATE_URL = '/api/v1/accounts/update_credentials'\nconst MASTODON_REPORT_USER_URL = '/api/v1/reports'\nconst MASTODON_PIN_OWN_STATUS = id => `/api/v1/statuses/${id}/pin`\nconst MASTODON_UNPIN_OWN_STATUS = id => `/api/v1/statuses/${id}/unpin`\nconst MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute`\nconst MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute`\nconst MASTODON_SEARCH_2 = '/api/v2/search'\nconst MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search'\nconst MASTODON_DOMAIN_BLOCKS_URL = '/api/v1/domain_blocks'\nconst MASTODON_LISTS_URL = '/api/v1/lists'\nconst MASTODON_STREAMING = '/api/v1/streaming'\nconst MASTODON_KNOWN_DOMAIN_LIST_URL = '/api/v1/instance/peers'\nconst MASTODON_ANNOUNCEMENTS_URL = '/api/v1/announcements'\nconst MASTODON_ANNOUNCEMENTS_DISMISS_URL = id => `/api/v1/announcements/${id}/dismiss`\nconst PLEROMA_EMOJI_REACTIONS_URL = id => `/api/v1/pleroma/statuses/${id}/reactions`\nconst PLEROMA_EMOJI_REACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_EMOJI_UNREACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_CHATS_URL = '/api/v1/pleroma/chats'\nconst PLEROMA_CHAT_URL = id => `/api/v1/pleroma/chats/by-account-id/${id}`\nconst PLEROMA_CHAT_MESSAGES_URL = id => `/api/v1/pleroma/chats/${id}/messages`\nconst PLEROMA_CHAT_READ_URL = id => `/api/v1/pleroma/chats/${id}/read`\nconst PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => `/api/v1/pleroma/chats/${chatId}/messages/${messageId}`\nconst PLEROMA_ADMIN_REPORTS = '/api/pleroma/admin/reports'\nconst PLEROMA_BACKUP_URL = '/api/v1/pleroma/backups'\nconst PLEROMA_ANNOUNCEMENTS_URL = '/api/v1/pleroma/admin/announcements'\nconst PLEROMA_POST_ANNOUNCEMENT_URL = '/api/v1/pleroma/admin/announcements'\nconst PLEROMA_EDIT_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`\nconst PLEROMA_DELETE_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`\n\nconst PLEROMA_ADMIN_CONFIG_URL = '/api/pleroma/admin/config'\nconst PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/pleroma/admin/config/descriptions'\nconst PLEROMA_ADMIN_FRONTENDS_URL = '/api/pleroma/admin/frontends'\nconst PLEROMA_ADMIN_FRONTENDS_INSTALL_URL = '/api/pleroma/admin/frontends/install'\n\nconst oldfetch = window.fetch\n\nconst fetch = (url, options) => {\n options = options || {}\n const baseUrl = ''\n const fullUrl = baseUrl + url\n options.credentials = 'same-origin'\n return oldfetch(fullUrl, options)\n}\n\nconst promisedRequest = ({ method, url, params, payload, credentials, headers = {} }) => {\n const options = {\n method,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...headers\n }\n }\n if (params) {\n url += '?' + Object.entries(params)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n }\n if (payload) {\n options.body = JSON.stringify(payload)\n }\n if (credentials) {\n options.headers = {\n ...options.headers,\n ...authHeaders(credentials)\n }\n }\n return fetch(url, options)\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url, options }, response))\n }\n return resolve(json)\n })\n .catch((error) => {\n return reject(new StatusCodeError(response.status, error, { url, options }, response))\n })\n )\n })\n}\n\nconst updateNotificationSettings = ({ credentials, settings }) => {\n const form = new FormData()\n\n each(settings, (value, key) => {\n form.append(key, value)\n })\n\n return fetch(`${NOTIFICATION_SETTINGS_URL}?${new URLSearchParams(settings)}`, {\n headers: authHeaders(credentials),\n method: 'PUT',\n body: form\n }).then((data) => data.json())\n}\n\nconst updateProfileImages = ({ credentials, avatar = null, avatarName = null, banner = null, background = null }) => {\n const form = new FormData()\n if (avatar !== null) {\n if (avatarName !== null) {\n form.append('avatar', avatar, avatarName)\n } else {\n form.append('avatar', avatar)\n }\n }\n if (banner !== null) form.append('header', banner)\n if (background !== null) form.append('pleroma_background_image', background)\n return fetch(MASTODON_PROFILE_UPDATE_URL, {\n headers: authHeaders(credentials),\n method: 'PATCH',\n body: form\n })\n .then((data) => data.json())\n .then((data) => {\n if (data.error) {\n throw new Error(data.error)\n }\n return parseUser(data)\n })\n}\n\nconst updateProfile = ({ credentials, params }) => {\n return promisedRequest({\n url: MASTODON_PROFILE_UPDATE_URL,\n method: 'PATCH',\n payload: params,\n credentials\n }).then((data) => parseUser(data))\n}\n\n// Params needed:\n// nickname\n// email\n// fullname\n// password\n// password_confirm\n//\n// Optional\n// bio\n// homepage\n// location\n// token\n// language\nconst register = ({ params, credentials }) => {\n const { nickname, ...rest } = params\n return fetch(MASTODON_REGISTRATION_URL, {\n method: 'POST',\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n nickname,\n locale: 'en_US',\n agreement: true,\n ...rest\n })\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return response.json().then((error) => { throw new RegistrationError(error) })\n }\n })\n}\n\nconst getCaptcha = () => fetch('/api/pleroma/captcha').then(resp => resp.json())\n\nconst authHeaders = (accessToken) => {\n if (accessToken) {\n return { Authorization: `Bearer ${accessToken}` }\n } else {\n return { }\n }\n}\n\nconst followUser = ({ id, credentials, ...options }) => {\n const url = MASTODON_FOLLOW_URL(id)\n const form = {}\n if (options.reblogs !== undefined) { form.reblogs = options.reblogs }\n return fetch(url, {\n body: JSON.stringify(form),\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unfollowUser = ({ id, credentials }) => {\n const url = MASTODON_UNFOLLOW_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst fetchUserInLists = ({ id, credentials }) => {\n const url = MASTODON_USER_IN_LISTS(id)\n return fetch(url, {\n headers: authHeaders(credentials)\n }).then((data) => data.json())\n}\n\nconst pinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_PIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unpinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNPIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst muteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_MUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unmuteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst blockUser = ({ id, credentials }) => {\n return fetch(MASTODON_BLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unblockUser = ({ id, credentials }) => {\n return fetch(MASTODON_UNBLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst removeUserFromFollowers = ({ id, credentials }) => {\n return fetch(MASTODON_REMOVE_USER_FROM_FOLLOWERS(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst editUserNote = ({ id, credentials, comment }) => {\n return promisedRequest({\n url: MASTODON_USER_NOTE_URL(id),\n credentials,\n payload: {\n comment\n },\n method: 'POST'\n })\n}\n\nconst approveUser = ({ id, credentials }) => {\n const url = MASTODON_APPROVE_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst denyUser = ({ id, credentials }) => {\n const url = MASTODON_DENY_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst fetchUser = ({ id, credentials }) => {\n const url = `${MASTODON_USER_URL}/${id}`\n return promisedRequest({ url, credentials })\n .then((data) => parseUser(data))\n}\n\nconst fetchUserByName = ({ name, credentials }) => {\n return promisedRequest({\n url: MASTODON_USER_LOOKUP_URL,\n credentials,\n params: { acct: name }\n })\n .then(data => data.id)\n .catch(error => {\n if (error && error.statusCode === 404) {\n // Either the backend does not support lookup endpoint,\n // or there is no user with such name. Fallback and treat name as id.\n return name\n } else {\n throw error\n }\n })\n .then(id => fetchUser({ id, credentials }))\n}\n\nconst fetchUserRelationship = ({ id, credentials }) => {\n const url = `${MASTODON_USER_RELATIONSHIPS_URL}/?id=${id}`\n return fetch(url, { headers: authHeaders(credentials) })\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url }, response))\n }\n return resolve(json)\n }))\n })\n}\n\nconst fetchFriends = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWING_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n 'with_relationships=true'\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst exportFriends = ({ id, credentials }) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let friends = []\n let more = true\n while (more) {\n const maxId = friends.length > 0 ? last(friends).id : undefined\n const users = await fetchFriends({ id, maxId, credentials })\n friends = concat(friends, users)\n if (users.length === 0) {\n more = false\n }\n }\n resolve(friends)\n } catch (err) {\n reject(err)\n }\n })\n}\n\nconst fetchFollowers = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWERS_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n 'with_relationships=true'\n ].filter(_ => _).join('&')\n\n url += args ? '?' + args : ''\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchFollowRequests = ({ credentials }) => {\n const url = MASTODON_FOLLOW_REQUESTS_URL\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchLists = ({ credentials }) => {\n const url = MASTODON_LISTS_URL\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n}\n\nconst createList = ({ title, credentials }) => {\n const url = MASTODON_LISTS_URL\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'POST',\n body: JSON.stringify({ title })\n }).then((data) => data.json())\n}\n\nconst getList = ({ listId, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n}\n\nconst updateList = ({ listId, title, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'PUT',\n body: JSON.stringify({ title })\n })\n}\n\nconst getListAccounts = ({ listId, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(({ id }) => id))\n}\n\nconst addAccountsToList = ({ listId, accountIds, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'POST',\n body: JSON.stringify({ account_ids: accountIds })\n })\n}\n\nconst removeAccountsFromList = ({ listId, accountIds, credentials }) => {\n const url = MASTODON_LIST_ACCOUNTS_URL(listId)\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(url, {\n headers,\n method: 'DELETE',\n body: JSON.stringify({ account_ids: accountIds })\n })\n}\n\nconst deleteList = ({ listId, credentials }) => {\n const url = MASTODON_LIST_URL(listId)\n return fetch(url, {\n method: 'DELETE',\n headers: authHeaders(credentials)\n })\n}\n\nconst fetchConversation = ({ id, credentials }) => {\n const urlContext = MASTODON_STATUS_CONTEXT_URL(id)\n return fetch(urlContext, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then(({ ancestors, descendants }) => ({\n ancestors: ancestors.map(parseStatus),\n descendants: descendants.map(parseStatus)\n }))\n}\n\nconst fetchStatus = ({ id, credentials }) => {\n const url = MASTODON_STATUS_URL(id)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then((data) => parseStatus(data))\n}\n\nconst fetchStatusSource = ({ id, credentials }) => {\n const url = MASTODON_STATUS_SOURCE_URL(id)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching source', data)\n })\n .then((data) => data.json())\n .then((data) => parseSource(data))\n}\n\nconst fetchStatusHistory = ({ status, credentials }) => {\n const url = MASTODON_STATUS_HISTORY_URL(status.id)\n return promisedRequest({ url, credentials })\n .then((data) => {\n data.reverse()\n return data.map((item) => {\n item.originalStatus = status\n return parseStatus(item)\n })\n })\n}\n\nconst tagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const form = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'PUT',\n headers,\n body: JSON.stringify(form)\n })\n}\n\nconst untagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const body = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'DELETE',\n headers,\n body: JSON.stringify(body)\n })\n}\n\nconst addRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'POST',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst deleteRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'DELETE',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst activateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: ACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deactivateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: DEACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deleteUser = ({ credentials, user }) => {\n const screenName = user.screen_name\n const headers = authHeaders(credentials)\n\n return fetch(`${ADMIN_USERS_URL}?nickname=${screenName}`, {\n method: 'DELETE',\n headers\n })\n}\n\nconst fetchTimeline = ({\n timeline,\n credentials,\n since = false,\n until = false,\n userId = false,\n listId = false,\n tag = false,\n withMuted = false,\n replyVisibility = 'all',\n includeTypes = []\n}) => {\n const timelineUrls = {\n public: MASTODON_PUBLIC_TIMELINE,\n friends: MASTODON_USER_HOME_TIMELINE_URL,\n dms: MASTODON_DIRECT_MESSAGES_TIMELINE_URL,\n notifications: MASTODON_USER_NOTIFICATIONS_URL,\n publicAndExternal: MASTODON_PUBLIC_TIMELINE,\n user: MASTODON_USER_TIMELINE_URL,\n media: MASTODON_USER_TIMELINE_URL,\n list: MASTODON_LIST_TIMELINE_URL,\n favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,\n tag: MASTODON_TAG_TIMELINE_URL,\n bookmarks: MASTODON_BOOKMARK_TIMELINE_URL\n }\n const isNotifications = timeline === 'notifications'\n const params = []\n\n let url = timelineUrls[timeline]\n\n if (timeline === 'user' || timeline === 'media') {\n url = url(userId)\n }\n\n if (timeline === 'list') {\n url = url(listId)\n }\n\n if (since) {\n params.push(['since_id', since])\n }\n if (until) {\n params.push(['max_id', until])\n }\n if (tag) {\n url = url(tag)\n }\n if (timeline === 'media') {\n params.push(['only_media', 1])\n }\n if (timeline === 'public') {\n params.push(['local', true])\n }\n if (timeline === 'public' || timeline === 'publicAndExternal') {\n params.push(['only_media', false])\n }\n if (timeline !== 'favorites' && timeline !== 'bookmarks') {\n params.push(['with_muted', withMuted])\n }\n if (replyVisibility !== 'all') {\n params.push(['reply_visibility', replyVisibility])\n }\n if (includeTypes.length > 0) {\n includeTypes.forEach(type => {\n params.push(['include_types[]', type])\n })\n }\n\n params.push(['limit', 20])\n\n const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n\n return fetch(url, { headers: authHeaders(credentials) })\n .then(async (response) => {\n const success = response.ok\n\n const data = await response.json()\n\n if (success && !data.errors) {\n const pagination = parseLinkHeaderPagination(response.headers.get('Link'), {\n flakeId: timeline !== 'bookmarks' && timeline !== 'notifications'\n })\n\n return { data: data.map(isNotifications ? parseNotification : parseStatus), pagination }\n } else {\n data.errors ||= []\n data.status = response.status\n data.statusText = response.statusText\n return data\n }\n })\n}\n\nconst fetchPinnedStatuses = ({ id, credentials }) => {\n const url = MASTODON_USER_TIMELINE_URL(id) + '?pinned=true'\n return promisedRequest({ url, credentials })\n .then((data) => data.map(parseStatus))\n}\n\nconst verifyCredentials = (user) => {\n return fetch(MASTODON_LOGIN_URL, {\n headers: authHeaders(user)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n .then((data) => data.error ? data : parseUser(data))\n}\n\nconst favorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_FAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unfavorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNFAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst retweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_RETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unretweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNRETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst bookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_BOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst unbookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_UNBOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst postStatus = ({\n credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n poll,\n mediaIds = [],\n inReplyToStatusId,\n quoteId,\n contentType,\n preview,\n idempotencyKey\n}) => {\n const form = new FormData()\n const pollOptions = poll.options || []\n\n form.append('status', status)\n form.append('source', 'Pleroma FE')\n if (spoilerText) form.append('spoiler_text', spoilerText)\n if (visibility) form.append('visibility', visibility)\n if (sensitive) form.append('sensitive', sensitive)\n if (contentType) form.append('content_type', contentType)\n mediaIds.forEach(val => {\n form.append('media_ids[]', val)\n })\n if (pollOptions.some(option => option !== '')) {\n const normalizedPoll = {\n expires_in: parseInt(poll.expiresIn, 10),\n multiple: poll.multiple\n }\n Object.keys(normalizedPoll).forEach(key => {\n form.append(`poll[${key}]`, normalizedPoll[key])\n })\n\n pollOptions.forEach(option => {\n form.append('poll[options][]', option)\n })\n }\n if (inReplyToStatusId) {\n form.append('in_reply_to_id', inReplyToStatusId)\n }\n if (quoteId) {\n form.append('quote_id', quoteId)\n }\n if (preview) {\n form.append('preview', 'true')\n }\n\n const postHeaders = authHeaders(credentials)\n if (idempotencyKey) {\n postHeaders['idempotency-key'] = idempotencyKey\n }\n\n return fetch(MASTODON_POST_STATUS_URL, {\n body: form,\n method: 'POST',\n headers: postHeaders\n })\n .then((response) => {\n return response.json()\n })\n .then((data) => data.error ? data : parseStatus(data))\n}\n\nconst editStatus = ({\n id,\n credentials,\n status,\n spoilerText,\n sensitive,\n poll,\n mediaIds = [],\n contentType\n}) => {\n const form = new FormData()\n const pollOptions = poll.options || []\n\n form.append('status', status)\n if (spoilerText) form.append('spoiler_text', spoilerText)\n if (sensitive) form.append('sensitive', sensitive)\n if (contentType) form.append('content_type', contentType)\n mediaIds.forEach(val => {\n form.append('media_ids[]', val)\n })\n\n if (pollOptions.some(option => option !== '')) {\n const normalizedPoll = {\n expires_in: parseInt(poll.expiresIn, 10),\n multiple: poll.multiple\n }\n Object.keys(normalizedPoll).forEach(key => {\n form.append(`poll[${key}]`, normalizedPoll[key])\n })\n\n pollOptions.forEach(option => {\n form.append('poll[options][]', option)\n })\n }\n\n const putHeaders = authHeaders(credentials)\n\n return fetch(MASTODON_STATUS_URL(id), {\n body: form,\n method: 'PUT',\n headers: putHeaders\n })\n .then((response) => {\n return response.json()\n })\n .then((data) => data.error ? data : parseStatus(data))\n}\n\nconst deleteStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_DELETE_URL(id),\n credentials,\n method: 'DELETE'\n })\n}\n\nconst uploadMedia = ({ formData, credentials }) => {\n return fetch(MASTODON_MEDIA_UPLOAD_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((data) => data.json())\n .then((data) => parseAttachment(data))\n}\n\nconst setMediaDescription = ({ id, description, credentials }) => {\n return promisedRequest({\n url: `${MASTODON_MEDIA_UPLOAD_URL}/${id}`,\n method: 'PUT',\n headers: authHeaders(credentials),\n payload: {\n description\n }\n }).then((data) => parseAttachment(data))\n}\n\nconst importMutes = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(MUTES_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst importBlocks = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(BLOCKS_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst importFollows = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(FOLLOW_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst deleteAccount = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(DELETE_ACCOUNT_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst changeEmail = ({ credentials, email, password }) => {\n const form = new FormData()\n\n form.append('email', email)\n form.append('password', password)\n\n return fetch(CHANGE_EMAIL_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst moveAccount = ({ credentials, password, targetAccount }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('target_account', targetAccount)\n\n return fetch(MOVE_ACCOUNT_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst addAlias = ({ credentials, alias }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'PUT',\n credentials,\n payload: { alias }\n })\n}\n\nconst deleteAlias = ({ credentials, alias }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'DELETE',\n credentials,\n payload: { alias }\n })\n}\n\nconst listAliases = ({ credentials }) => {\n return promisedRequest({\n url: ALIASES_URL,\n method: 'GET',\n credentials,\n params: {\n _cacheBooster: (new Date()).getTime()\n }\n })\n}\n\nconst changePassword = ({ credentials, password, newPassword, newPasswordConfirmation }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('new_password', newPassword)\n form.append('new_password_confirmation', newPasswordConfirmation)\n\n return fetch(CHANGE_PASSWORD_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst settingsMFA = ({ credentials }) => {\n return fetch(MFA_SETTINGS_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst mfaDisableOTP = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(MFA_DISABLE_OTP_URL, {\n body: form,\n method: 'DELETE',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst mfaConfirmOTP = ({ credentials, password, token }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('code', token)\n\n return fetch(MFA_CONFIRM_OTP_URL, {\n body: form,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\nconst mfaSetupOTP = ({ credentials }) => {\n return fetch(MFA_SETUP_OTP_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\nconst generateMfaBackupCodes = ({ credentials }) => {\n return fetch(MFA_BACKUP_CODES_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst fetchMutes = ({ maxId, credentials }) => {\n const query = new URLSearchParams({ with_relationships: true })\n if (maxId) {\n query.append('max_id', maxId)\n }\n return promisedRequest({ url: `${MASTODON_USER_MUTES_URL}?${query.toString()}`, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst muteUser = ({ id, expiresIn, credentials }) => {\n const payload = {}\n if (expiresIn) {\n payload.expires_in = expiresIn\n }\n return promisedRequest({ url: MASTODON_MUTE_USER_URL(id), credentials, method: 'POST', payload })\n}\n\nconst unmuteUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_USER_URL(id), credentials, method: 'POST' })\n}\n\nconst subscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_SUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst unsubscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNSUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst fetchBlocks = ({ maxId, credentials }) => {\n const query = new URLSearchParams({ with_relationships: true })\n if (maxId) {\n query.append('max_id', maxId)\n }\n return promisedRequest({ url: `${MASTODON_USER_BLOCKS_URL}?${query.toString()}`, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst addBackup = ({ credentials }) => {\n return promisedRequest({\n url: PLEROMA_BACKUP_URL,\n method: 'POST',\n credentials\n })\n}\n\nconst listBackups = ({ credentials }) => {\n return promisedRequest({\n url: PLEROMA_BACKUP_URL,\n method: 'GET',\n credentials,\n params: {\n _cacheBooster: (new Date()).getTime()\n }\n })\n}\n\nconst fetchOAuthTokens = ({ credentials }) => {\n const url = '/api/oauth_tokens.json'\n\n return fetch(url, {\n headers: authHeaders(credentials)\n }).then((data) => {\n if (data.ok) {\n return data.json()\n }\n throw new Error('Error fetching auth tokens', data)\n })\n}\n\nconst revokeOAuthToken = ({ id, credentials }) => {\n const url = `/api/oauth_tokens/${id}`\n\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'DELETE'\n })\n}\n\nconst suggestions = ({ credentials }) => {\n return fetch(SUGGESTIONS_URL, {\n headers: authHeaders(credentials)\n }).then((data) => data.json())\n}\n\nconst markNotificationsAsSeen = ({ id, credentials, single = false }) => {\n const body = new FormData()\n\n if (single) {\n body.append('id', id)\n } else {\n body.append('max_id', id)\n }\n\n return fetch(NOTIFICATION_READ_URL, {\n body,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst vote = ({ pollId, choices, credentials }) => {\n const form = new FormData()\n form.append('choices', choices)\n\n return promisedRequest({\n url: MASTODON_VOTE_URL(encodeURIComponent(pollId)),\n method: 'POST',\n credentials,\n payload: {\n choices\n }\n })\n}\n\nconst fetchPoll = ({ pollId, credentials }) => {\n return promisedRequest(\n {\n url: MASTODON_POLL_URL(encodeURIComponent(pollId)),\n method: 'GET',\n credentials\n }\n )\n}\n\nconst fetchFavoritedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_FAVORITEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchRebloggedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_REBLOGGEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchEmojiReactions = ({ id, credentials }) => {\n return promisedRequest({ url: PLEROMA_EMOJI_REACTIONS_URL(id), credentials })\n .then((reactions) => reactions.map(r => {\n r.accounts = r.accounts.map(parseUser)\n return r\n }))\n}\n\nconst reactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_REACT_URL(id, emoji),\n method: 'PUT',\n credentials\n }).then(parseStatus)\n}\n\nconst unreactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_UNREACT_URL(id, emoji),\n method: 'DELETE',\n credentials\n }).then(parseStatus)\n}\n\nconst reportUser = ({ credentials, userId, statusIds, comment, forward }) => {\n return promisedRequest({\n url: MASTODON_REPORT_USER_URL,\n method: 'POST',\n payload: {\n account_id: userId,\n status_ids: statusIds,\n comment,\n forward\n },\n credentials\n })\n}\n\nconst searchUsers = ({ credentials, query }) => {\n return promisedRequest({\n url: MASTODON_USER_SEARCH_URL,\n params: {\n q: query,\n resolve: true\n },\n credentials\n })\n .then((data) => data.map(parseUser))\n}\n\nconst search2 = ({ credentials, q, resolve, limit, offset, following, type }) => {\n let url = MASTODON_SEARCH_2\n const params = []\n\n if (q) {\n params.push(['q', encodeURIComponent(q)])\n }\n\n if (resolve) {\n params.push(['resolve', resolve])\n }\n\n if (limit) {\n params.push(['limit', limit])\n }\n\n if (offset) {\n params.push(['offset', offset])\n }\n\n if (following) {\n params.push(['following', true])\n }\n\n if (type) {\n params.push(['following', type])\n }\n\n params.push(['with_relationships', true])\n\n const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching search result', data)\n })\n .then((data) => { return data.json() })\n .then((data) => {\n data.accounts = data.accounts.slice(0, limit).map(u => parseUser(u))\n data.statuses = data.statuses.slice(0, limit).map(s => parseStatus(s))\n return data\n })\n}\n\nconst fetchKnownDomains = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_KNOWN_DOMAIN_LIST_URL, credentials })\n}\n\nconst fetchDomainMutes = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_DOMAIN_BLOCKS_URL, credentials })\n}\n\nconst muteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'POST',\n payload: { domain },\n credentials\n })\n}\n\nconst unmuteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'DELETE',\n payload: { domain },\n credentials\n })\n}\n\nconst dismissNotification = ({ credentials, id }) => {\n return promisedRequest({\n url: MASTODON_DISMISS_NOTIFICATION_URL(id),\n method: 'POST',\n payload: { id },\n credentials\n })\n}\n\nconst adminFetchAnnouncements = ({ credentials }) => {\n return promisedRequest({ url: PLEROMA_ANNOUNCEMENTS_URL, credentials })\n}\n\nconst fetchAnnouncements = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_ANNOUNCEMENTS_URL, credentials })\n}\n\nconst dismissAnnouncement = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_ANNOUNCEMENTS_DISMISS_URL(id),\n credentials,\n method: 'POST'\n })\n}\n\nconst announcementToPayload = ({ content, startsAt, endsAt, allDay }) => {\n const payload = { content }\n\n if (typeof startsAt !== 'undefined') {\n payload.starts_at = startsAt ? new Date(startsAt).toISOString() : null\n }\n\n if (typeof endsAt !== 'undefined') {\n payload.ends_at = endsAt ? new Date(endsAt).toISOString() : null\n }\n\n if (typeof allDay !== 'undefined') {\n payload.all_day = allDay\n }\n\n return payload\n}\n\nconst postAnnouncement = ({ credentials, content, startsAt, endsAt, allDay }) => {\n return promisedRequest({\n url: PLEROMA_POST_ANNOUNCEMENT_URL,\n credentials,\n method: 'POST',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay })\n })\n}\n\nconst editAnnouncement = ({ id, credentials, content, startsAt, endsAt, allDay }) => {\n return promisedRequest({\n url: PLEROMA_EDIT_ANNOUNCEMENT_URL(id),\n credentials,\n method: 'PATCH',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay })\n })\n}\n\nconst deleteAnnouncement = ({ id, credentials }) => {\n return promisedRequest({\n url: PLEROMA_DELETE_ANNOUNCEMENT_URL(id),\n credentials,\n method: 'DELETE'\n })\n}\n\nexport const getMastodonSocketURI = ({ credentials, stream, args = {} }) => {\n return Object.entries({\n ...(credentials\n ? { access_token: credentials }\n : {}\n ),\n stream,\n ...args\n }).reduce((acc, [key, val]) => {\n return acc + `${key}=${val}&`\n }, MASTODON_STREAMING + '?')\n}\n\nconst MASTODON_STREAMING_EVENTS = new Set([\n 'update',\n 'notification',\n 'delete',\n 'filters_changed',\n 'status.update'\n])\n\nconst PLEROMA_STREAMING_EVENTS = new Set([\n 'pleroma:chat_update'\n])\n\n// A thin wrapper around WebSocket API that allows adding a pre-processor to it\n// Uses EventTarget and a CustomEvent to proxy events\nexport const ProcessedWS = ({\n url,\n preprocessor = handleMastoWS,\n id = 'Unknown'\n}) => {\n const eventTarget = new EventTarget()\n const socket = new WebSocket(url)\n if (!socket) throw new Error(`Failed to create socket ${id}`)\n const proxy = (original, eventName, processor = a => a) => {\n original.addEventListener(eventName, (eventData) => {\n eventTarget.dispatchEvent(new CustomEvent(\n eventName,\n { detail: processor(eventData) }\n ))\n })\n }\n socket.addEventListener('open', (wsEvent) => {\n console.debug(`[WS][${id}] Socket connected`, wsEvent)\n })\n socket.addEventListener('error', (wsEvent) => {\n console.debug(`[WS][${id}] Socket errored`, wsEvent)\n })\n socket.addEventListener('close', (wsEvent) => {\n console.debug(\n `[WS][${id}] Socket disconnected with code ${wsEvent.code}`,\n wsEvent\n )\n })\n // Commented code reason: very spammy, uncomment to enable message debug logging\n /*\n socket.addEventListener('message', (wsEvent) => {\n console.debug(\n `[WS][${id}] Message received`,\n wsEvent\n )\n })\n /**/\n\n proxy(socket, 'open')\n proxy(socket, 'close')\n proxy(socket, 'message', preprocessor)\n proxy(socket, 'error')\n\n // 1000 = Normal Closure\n eventTarget.close = () => { socket.close(1000, 'Shutting down socket') }\n eventTarget.getState = () => socket.readyState\n\n return eventTarget\n}\n\nexport const handleMastoWS = (wsEvent) => {\n const { data } = wsEvent\n if (!data) return\n const parsedEvent = JSON.parse(data)\n const { event, payload } = parsedEvent\n if (MASTODON_STREAMING_EVENTS.has(event) || PLEROMA_STREAMING_EVENTS.has(event)) {\n // MastoBE and PleromaBE both send payload for delete as a PLAIN string\n if (event === 'delete') {\n return { event, id: payload }\n }\n const data = payload ? JSON.parse(payload) : null\n if (event === 'update') {\n return { event, status: parseStatus(data) }\n } else if (event === 'status.update') {\n return { event, status: parseStatus(data) }\n } else if (event === 'notification') {\n return { event, notification: parseNotification(data) }\n } else if (event === 'pleroma:chat_update') {\n return { event, chatUpdate: parseChat(data) }\n }\n } else {\n console.warn('Unknown event', wsEvent)\n return null\n }\n}\n\nexport const WSConnectionStatus = Object.freeze({\n JOINED: 1,\n CLOSED: 2,\n ERROR: 3,\n DISABLED: 4,\n STARTING: 5,\n STARTING_INITIAL: 6\n})\n\nconst chats = ({ credentials }) => {\n return fetch(PLEROMA_CHATS_URL, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => {\n return { chats: data.map(parseChat).filter(c => c) }\n })\n}\n\nconst getOrCreateChat = ({ accountId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_URL(accountId),\n method: 'POST',\n credentials\n })\n}\n\nconst chatMessages = ({ id, credentials, maxId, sinceId, limit = 20 }) => {\n let url = PLEROMA_CHAT_MESSAGES_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n\n return promisedRequest({\n url,\n method: 'GET',\n credentials\n })\n}\n\nconst sendChatMessage = ({ id, content, mediaId = null, idempotencyKey, credentials }) => {\n const payload = {\n content\n }\n\n if (mediaId) {\n payload.media_id = mediaId\n }\n\n const headers = {}\n\n if (idempotencyKey) {\n headers['idempotency-key'] = idempotencyKey\n }\n\n return promisedRequest({\n url: PLEROMA_CHAT_MESSAGES_URL(id),\n method: 'POST',\n payload,\n credentials,\n headers\n })\n}\n\nconst readChat = ({ id, lastReadId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_READ_URL(id),\n method: 'POST',\n payload: {\n last_read_id: lastReadId\n },\n credentials\n })\n}\n\nconst deleteChatMessage = ({ chatId, messageId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_DELETE_CHAT_MESSAGE_URL(chatId, messageId),\n method: 'DELETE',\n credentials\n })\n}\n\nconst setReportState = ({ id, state, credentials }) => {\n // TODO: Can't use promisedRequest because on OK this does not return json\n // See https://git.pleroma.social/pleroma/pleroma-fe/-/merge_requests/1322\n return fetch(PLEROMA_ADMIN_REPORTS, {\n headers: {\n ...authHeaders(credentials),\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'PATCH',\n body: JSON.stringify({\n reports: [{\n id,\n state\n }]\n })\n })\n .then(data => {\n if (data.status >= 500) {\n throw Error(data.statusText)\n } else if (data.status >= 400) {\n return data.json()\n }\n return data\n })\n .then(data => {\n if (data.errors) {\n throw Error(data.errors[0].message)\n }\n })\n}\n\n// ADMIN STUFF // EXPERIMENTAL\nconst fetchInstanceDBConfig = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_CONFIG_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst fetchInstanceConfigDescriptions = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_DESCRIPTIONS_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst fetchAvailableFrontends = ({ credentials }) => {\n return fetch(PLEROMA_ADMIN_FRONTENDS_URL, {\n headers: authHeaders(credentials)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst pushInstanceDBConfig = ({ credentials, payload }) => {\n return fetch(PLEROMA_ADMIN_CONFIG_URL, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...authHeaders(credentials)\n },\n method: 'POST',\n body: JSON.stringify(payload)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst installFrontend = ({ credentials, payload }) => {\n return fetch(PLEROMA_ADMIN_FRONTENDS_INSTALL_URL, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...authHeaders(credentials)\n },\n method: 'POST',\n body: JSON.stringify(payload)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n}\n\nconst apiService = {\n verifyCredentials,\n fetchTimeline,\n fetchPinnedStatuses,\n fetchConversation,\n fetchStatus,\n fetchStatusSource,\n fetchStatusHistory,\n fetchFriends,\n exportFriends,\n fetchFollowers,\n followUser,\n unfollowUser,\n pinOwnStatus,\n unpinOwnStatus,\n muteConversation,\n unmuteConversation,\n blockUser,\n unblockUser,\n removeUserFromFollowers,\n editUserNote,\n fetchUser,\n fetchUserByName,\n fetchUserRelationship,\n favorite,\n unfavorite,\n retweet,\n unretweet,\n bookmarkStatus,\n unbookmarkStatus,\n postStatus,\n editStatus,\n deleteStatus,\n uploadMedia,\n setMediaDescription,\n fetchMutes,\n muteUser,\n unmuteUser,\n subscribeUser,\n unsubscribeUser,\n fetchBlocks,\n fetchOAuthTokens,\n revokeOAuthToken,\n tagUser,\n untagUser,\n deleteUser,\n addRight,\n deleteRight,\n activateUser,\n deactivateUser,\n register,\n getCaptcha,\n updateProfileImages,\n updateProfile,\n importMutes,\n importBlocks,\n importFollows,\n deleteAccount,\n changeEmail,\n moveAccount,\n addAlias,\n deleteAlias,\n listAliases,\n changePassword,\n settingsMFA,\n mfaDisableOTP,\n generateMfaBackupCodes,\n mfaSetupOTP,\n mfaConfirmOTP,\n addBackup,\n listBackups,\n fetchFollowRequests,\n fetchLists,\n createList,\n getList,\n updateList,\n getListAccounts,\n addAccountsToList,\n removeAccountsFromList,\n deleteList,\n approveUser,\n denyUser,\n suggestions,\n markNotificationsAsSeen,\n dismissNotification,\n vote,\n fetchPoll,\n fetchFavoritedByUsers,\n fetchRebloggedByUsers,\n fetchEmojiReactions,\n reactWithEmoji,\n unreactWithEmoji,\n reportUser,\n updateNotificationSettings,\n search2,\n searchUsers,\n fetchKnownDomains,\n fetchDomainMutes,\n muteDomain,\n unmuteDomain,\n chats,\n getOrCreateChat,\n chatMessages,\n sendChatMessage,\n readChat,\n deleteChatMessage,\n setReportState,\n fetchUserInLists,\n fetchAnnouncements,\n dismissAnnouncement,\n postAnnouncement,\n editAnnouncement,\n deleteAnnouncement,\n adminFetchAnnouncements,\n fetchInstanceDBConfig,\n fetchInstanceConfigDescriptions,\n fetchAvailableFrontends,\n pushInstanceDBConfig,\n installFrontend\n}\n\nexport default apiService\n","import { kebabCase } from 'lodash'\n\nconst propsToNative = props => Object.keys(props).reduce((acc, cur) => {\n acc[kebabCase(cur)] = props[cur]\n return acc\n}, {})\n\nexport { propsToNative }\n","import { invertLightness, contrastRatio } from 'chromatism'\n\n// useful for visualizing color when debugging\nexport const consoleColor = (color) => console.log('%c##########', 'background: ' + color + '; color: ' + color)\n\n/**\n * Convert r, g, b values into hex notation. All components are [0-255]\n *\n * @param {Number|String|Object} r - Either red component, {r,g,b} object, or hex string\n * @param {Number} [g] - Green component\n * @param {Number} [b] - Blue component\n */\nexport const rgb2hex = (r, g, b) => {\n if (r === null || typeof r === 'undefined') {\n return undefined\n }\n // TODO: clean up this mess\n if (r[0] === '#' || r === 'transparent') {\n return r\n }\n if (typeof r === 'object') {\n ({ r, g, b } = r)\n }\n [r, g, b] = [r, g, b].map(val => {\n val = Math.ceil(val)\n val = val < 0 ? 0 : val\n val = val > 255 ? 255 : val\n return val\n })\n return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`\n}\n\n/**\n * Converts 8-bit RGB component into linear component\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n * https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation\n *\n * @param {Number} bit - color component [0..255]\n * @returns {Number} linear component [0..1]\n */\nconst c2linear = (bit) => {\n // W3C gives 0.03928 while wikipedia states 0.04045\n // what those magical numbers mean - I don't know.\n // something about gamma-correction, i suppose.\n // Sticking with W3C example.\n const c = bit / 255\n if (c < 0.03928) {\n return c / 12.92\n } else {\n return Math.pow((c + 0.055) / 1.055, 2.4)\n }\n}\n\n/**\n * Converts sRGB into linear RGB\n * @param {Object} srgb - sRGB color\n * @returns {Object} linear rgb color\n */\nconst srgbToLinear = (srgb) => {\n return 'rgb'.split('').reduce((acc, c) => { acc[c] = c2linear(srgb[c]); return acc }, {})\n}\n\n/**\n * Calculates relative luminance for given color\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n *\n * @param {Object} srgb - sRGB color\n * @returns {Number} relative luminance\n */\nexport const relativeLuminance = (srgb) => {\n const { r, g, b } = srgbToLinear(srgb)\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\n/**\n * Generates color ratio between two colors. Order is unimporant\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n *\n * @param {Object} a - sRGB color\n * @param {Object} b - sRGB color\n * @returns {Number} color ratio\n */\nexport const getContrastRatio = (a, b) => {\n const la = relativeLuminance(a)\n const lb = relativeLuminance(b)\n const [l1, l2] = la > lb ? [la, lb] : [lb, la]\n\n return (l1 + 0.05) / (l2 + 0.05)\n}\n\n/**\n * Same as `getContrastRatio` but for multiple layers in-between\n *\n * @param {Object} text - text color (topmost layer)\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n * @param {Object} bedrock - layer at the very bottom\n */\nexport const getContrastRatioLayers = (text, layers, bedrock) => {\n return getContrastRatio(alphaBlendLayers(bedrock, layers), text)\n}\n\n/**\n * This performs alpha blending between solid background and semi-transparent foreground\n *\n * @param {Object} fg - top layer color\n * @param {Number} fga - top layer's alpha\n * @param {Object} bg - bottom layer color\n * @returns {Object} sRGB of resulting color\n */\nexport const alphaBlend = (fg, fga, bg) => {\n if (fga === 1 || typeof fga === 'undefined') return fg\n return 'rgb'.split('').reduce((acc, c) => {\n // Simplified https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending\n // for opaque bg and transparent fg\n acc[c] = (fg[c] * fga + bg[c] * (1 - fga))\n return acc\n }, {})\n}\n\n/**\n * Same as `alphaBlend` but for multiple layers in-between\n *\n * @param {Object} bedrock - layer at the very bottom\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n */\nexport const alphaBlendLayers = (bedrock, layers) => layers.reduce((acc, [color, opacity]) => {\n return alphaBlend(color, opacity, acc)\n}, bedrock)\n\nexport const invert = (rgb) => {\n return 'rgb'.split('').reduce((acc, c) => {\n acc[c] = 255 - rgb[c]\n return acc\n }, {})\n}\n\n/**\n * Converts #rrggbb hex notation into an {r, g, b} object\n *\n * @param {String} hex - #rrggbb string\n * @returns {Object} rgb representation of the color, values are 0-255\n */\nexport const hex2rgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n }\n : null\n}\n\n/**\n * Old somewhat weird function for mixing two colors together\n *\n * @param {Object} a - one color (rgb)\n * @param {Object} b - other color (rgb)\n * @returns {Object} result\n */\nexport const mixrgb = (a, b) => {\n return 'rgb'.split('').reduce((acc, k) => {\n acc[k] = (a[k] + b[k]) / 2\n return acc\n }, {})\n}\n/**\n * Converts rgb object into a CSS rgba() color\n *\n * @param {Object} color - rgb\n * @returns {String} CSS rgba() color\n */\nexport const rgba2css = function (rgba) {\n return `rgba(${Math.floor(rgba.r)}, ${Math.floor(rgba.g)}, ${Math.floor(rgba.b)}, ${rgba.a})`\n}\n\n/**\n * Get text color for given background color and intended text color\n * This checks if text and background don't have enough color and inverts\n * text color's lightness if needed. If text color is still not enough it\n * will fall back to black or white\n *\n * @param {Object} bg - background color\n * @param {Object} text - intended text color\n * @param {Boolean} preserve - try to preserve intended text color's hue/saturation (i.e. no BW)\n */\nexport const getTextColor = function (bg, text, preserve) {\n const contrast = getContrastRatio(bg, text)\n\n if (contrast < 4.5) {\n const base = typeof text.a !== 'undefined' ? { a: text.a } : {}\n const result = Object.assign(base, invertLightness(text).rgb)\n if (!preserve && getContrastRatio(bg, result) < 4.5) {\n // B&W\n return contrastRatio(bg, text).rgb\n }\n // Inverted color\n return result\n }\n return text\n}\n\n/**\n * Converts color to CSS Color value\n *\n * @param {Object|String} input - color\n * @param {Number} [a] - alpha value\n * @returns {String} a CSS Color value\n */\nexport const getCssColor = (input, a) => {\n let rgb = {}\n if (typeof input === 'object') {\n rgb = input\n } else if (typeof input === 'string') {\n if (input.startsWith('#')) {\n rgb = hex2rgb(input)\n } else {\n return input\n }\n }\n return rgba2css({ ...rgb, a })\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","export const SECOND = 1000\nexport const MINUTE = 60 * SECOND\nexport const HOUR = 60 * MINUTE\nexport const DAY = 24 * HOUR\nexport const WEEK = 7 * DAY\nexport const MONTH = 30 * DAY\nexport const YEAR = 365.25 * DAY\n\nexport const relativeTime = (date, nowThreshold = 1) => {\n if (typeof date === 'string') date = Date.parse(date)\n const round = Date.now() > date ? Math.floor : Math.ceil\n const d = Math.abs(Date.now() - date)\n const r = { num: round(d / YEAR), key: 'time.unit.years' }\n if (d < nowThreshold * SECOND) {\n r.num = 0\n r.key = 'time.now'\n } else if (d < MINUTE) {\n r.num = round(d / SECOND)\n r.key = 'time.unit.seconds'\n } else if (d < HOUR) {\n r.num = round(d / MINUTE)\n r.key = 'time.unit.minutes'\n } else if (d < DAY) {\n r.num = round(d / HOUR)\n r.key = 'time.unit.hours'\n } else if (d < WEEK) {\n r.num = round(d / DAY)\n r.key = 'time.unit.days'\n } else if (d < MONTH) {\n r.num = round(d / WEEK)\n r.key = 'time.unit.weeks'\n } else if (d < YEAR) {\n r.num = round(d / MONTH)\n r.key = 'time.unit.months'\n }\n return r\n}\n\nexport const relativeTimeShort = (date, nowThreshold = 1) => {\n const r = relativeTime(date, nowThreshold)\n r.key += '_short'\n return r\n}\n\nexport const unitToSeconds = (unit, amount) => {\n switch (unit) {\n case 'minutes': return 0.001 * amount * MINUTE\n case 'hours': return 0.001 * amount * HOUR\n case 'days': return 0.001 * amount * DAY\n }\n}\n\nexport const secondsToUnit = (unit, amount) => {\n switch (unit) {\n case 'minutes': return (1000 * amount) / MINUTE\n case 'hours': return (1000 * amount) / HOUR\n case 'days': return (1000 * amount) / DAY\n }\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","import escape from 'escape-html'\nimport parseLinkHeader from 'parse-link-header'\nimport { isStatusNotification } from '../notification_utils/notification_utils.js'\nimport punycode from 'punycode.js'\n\n/** NOTICE! **\n * Do not initialize UI-generated data here.\n * It will override existing data.\n *\n * i.e. user.pinnedStatusIds was set to [] here\n * UI code would update it with data but upon next user fetch\n * it would be reverted back to []\n */\n\nconst qvitterStatusType = (status) => {\n if (status.is_post_verb) {\n return 'status'\n }\n\n if (status.retweeted_status) {\n return 'retweet'\n }\n\n if ((typeof status.uri === 'string' && status.uri.match(/(fave|objectType=Favourite)/)) ||\n (typeof status.text === 'string' && status.text.match(/favorited/))) {\n return 'favorite'\n }\n\n if (status.text.match(/deleted notice {{tag/) || status.qvitter_delete_notice) {\n return 'deletion'\n }\n\n if (status.text.match(/started following/) || status.activity_type === 'follow') {\n return 'follow'\n }\n\n return 'unknown'\n}\n\nexport const parseUser = (data) => {\n const output = {}\n const masto = Object.prototype.hasOwnProperty.call(data, 'acct')\n // case for users in \"mentions\" property for statuses in MastoAPI\n const mastoShort = masto && !Object.prototype.hasOwnProperty.call(data, 'avatar')\n\n output.inLists = null\n output.id = String(data.id)\n output._original = data // used for server-side settings\n\n if (masto) {\n output.screen_name = data.acct\n output.fqn = data.fqn\n output.statusnet_profile_url = data.url\n\n // There's nothing else to get\n if (mastoShort) {\n return output\n }\n\n output.emoji = data.emojis\n output.name = escape(data.display_name)\n output.name_html = output.name\n output.name_unescaped = data.display_name\n\n output.description = data.note\n // TODO cleanup this shit, output.description is overriden with source data\n output.description_html = data.note\n\n output.fields = data.fields\n output.fields_html = data.fields.map(field => {\n return {\n name: escape(field.name),\n value: field.value\n }\n })\n output.fields_text = data.fields.map(field => {\n return {\n name: unescape(field.name.replace(/<[^>]*>/g, '')),\n value: unescape(field.value.replace(/<[^>]*>/g, ''))\n }\n })\n\n // Utilize avatar_static for gif avatars?\n output.profile_image_url = data.avatar\n output.profile_image_url_original = data.avatar\n\n // Same, utilize header_static?\n output.cover_photo = data.header\n\n output.friends_count = data.following_count\n\n output.bot = data.bot\n\n if (data.pleroma) {\n if (data.pleroma.settings_store) {\n output.storage = data.pleroma.settings_store['pleroma-fe']\n }\n const relationship = data.pleroma.relationship\n\n output.background_image = data.pleroma.background_image\n output.favicon = data.pleroma.favicon\n output.token = data.pleroma.chat_token\n\n if (relationship) {\n output.relationship = relationship\n }\n\n output.allow_following_move = data.pleroma.allow_following_move\n\n output.hide_follows = data.pleroma.hide_follows\n output.hide_followers = data.pleroma.hide_followers\n output.hide_follows_count = data.pleroma.hide_follows_count\n output.hide_followers_count = data.pleroma.hide_followers_count\n\n output.rights = {\n moderator: data.pleroma.is_moderator,\n admin: data.pleroma.is_admin\n }\n // TODO: Clean up in UI? This is duplication from what BE does for qvitterapi\n if (output.rights.admin) {\n output.role = 'admin'\n } else if (output.rights.moderator) {\n output.role = 'moderator'\n } else {\n output.role = 'member'\n }\n\n output.birthday = data.pleroma.birthday\n\n if (data.pleroma.privileges) {\n output.privileges = data.pleroma.privileges\n } else if (data.pleroma.is_admin) {\n output.privileges = [\n 'users_read',\n 'users_manage_invites',\n 'users_manage_activation_state',\n 'users_manage_tags',\n 'users_manage_credentials',\n 'users_delete',\n 'messages_read',\n 'messages_delete',\n 'instances_delete',\n 'reports_manage_reports',\n 'moderation_log_read',\n 'announcements_manage_announcements',\n 'emoji_manage_emoji',\n 'statistics_read'\n ]\n } else if (data.pleroma.is_moderator) {\n output.privileges = [\n 'messages_delete',\n 'reports_manage_reports'\n ]\n } else {\n output.privileges = []\n }\n }\n\n if (data.source) {\n output.description = data.source.note\n output.default_scope = data.source.privacy\n output.fields = data.source.fields\n if (data.source.pleroma) {\n output.no_rich_text = data.source.pleroma.no_rich_text\n output.show_role = data.source.pleroma.show_role\n output.discoverable = data.source.pleroma.discoverable\n output.show_birthday = data.pleroma.show_birthday\n }\n }\n\n // TODO: handle is_local\n output.is_local = !output.screen_name.includes('@')\n } else {\n output.screen_name = data.screen_name\n\n output.name = data.name\n output.name_html = data.name_html\n\n output.description = data.description\n output.description_html = data.description_html\n\n output.profile_image_url = data.profile_image_url\n output.profile_image_url_original = data.profile_image_url_original\n\n output.cover_photo = data.cover_photo\n\n output.friends_count = data.friends_count\n\n // output.bot = ??? missing\n\n output.statusnet_profile_url = data.statusnet_profile_url\n\n output.is_local = data.is_local\n output.role = data.role\n output.show_role = data.show_role\n\n if (data.rights) {\n output.rights = {\n moderator: data.rights.delete_others_notice,\n admin: data.rights.admin\n }\n }\n output.no_rich_text = data.no_rich_text\n output.default_scope = data.default_scope\n output.hide_follows = data.hide_follows\n output.hide_followers = data.hide_followers\n output.hide_follows_count = data.hide_follows_count\n output.hide_followers_count = data.hide_followers_count\n output.background_image = data.background_image\n // Websocket token\n output.token = data.token\n\n // Convert relationsip data to expected format\n output.relationship = {\n muting: data.muted,\n blocking: data.statusnet_blocking,\n followed_by: data.follows_you,\n following: data.following\n }\n }\n\n output.created_at = new Date(data.created_at)\n output.locked = data.locked\n output.followers_count = data.followers_count\n output.statuses_count = data.statuses_count\n\n if (data.pleroma) {\n output.follow_request_count = data.pleroma.follow_request_count\n\n output.tags = data.pleroma.tags\n\n // deactivated was changed to is_active in Pleroma 2.3.0\n // so check if is_active is present\n output.deactivated = typeof data.pleroma.is_active !== 'undefined'\n ? !data.pleroma.is_active // new backend\n : data.pleroma.deactivated // old backend\n\n output.notification_settings = data.pleroma.notification_settings\n output.unread_chat_count = data.pleroma.unread_chat_count\n }\n\n output.tags = output.tags || []\n output.rights = output.rights || {}\n output.notification_settings = output.notification_settings || {}\n\n // Convert punycode to unicode for UI\n output.screen_name_ui = output.screen_name\n if (output.screen_name && output.screen_name.includes('@')) {\n const parts = output.screen_name.split('@')\n const unicodeDomain = punycode.toUnicode(parts[1])\n if (unicodeDomain !== parts[1]) {\n // Add some identifier so users can potentially spot spoofing attempts:\n // lain.com and xn--lin-6cd.com would appear identical otherwise.\n output.screen_name_ui_contains_non_ascii = true\n output.screen_name_ui = [parts[0], unicodeDomain].join('@')\n } else {\n output.screen_name_ui_contains_non_ascii = false\n }\n }\n\n return output\n}\n\nexport const parseAttachment = (data) => {\n const output = {}\n const masto = !Object.prototype.hasOwnProperty.call(data, 'oembed')\n\n if (masto) {\n // Not exactly same...\n output.mimetype = data.pleroma ? data.pleroma.mime_type : data.type\n output.meta = data.meta // not present in BE yet\n output.id = data.id\n } else {\n output.mimetype = data.mimetype\n // output.meta = ??? missing\n }\n\n output.url = data.url\n output.large_thumb_url = data.preview_url\n output.description = data.description\n\n return output\n}\n\nexport const parseSource = (data) => {\n const output = {}\n\n output.text = data.text\n output.spoiler_text = data.spoiler_text\n output.content_type = data.content_type\n\n return output\n}\n\nexport const parseStatus = (data) => {\n const output = {}\n const masto = Object.prototype.hasOwnProperty.call(data, 'account')\n\n if (masto) {\n output.favorited = data.favourited\n output.fave_num = data.favourites_count\n\n output.repeated = data.reblogged\n output.repeat_num = data.reblogs_count\n\n output.bookmarked = data.bookmarked\n\n output.type = data.reblog ? 'retweet' : 'status'\n output.nsfw = data.sensitive\n\n output.raw_html = data.content\n output.emojis = data.emojis\n\n output.tags = data.tags\n\n output.edited_at = data.edited_at\n\n if (data.pleroma) {\n const { pleroma } = data\n output.text = pleroma.content ? data.pleroma.content['text/plain'] : data.content\n output.summary = pleroma.spoiler_text ? data.pleroma.spoiler_text['text/plain'] : data.spoiler_text\n output.statusnet_conversation_id = data.pleroma.conversation_id\n output.is_local = pleroma.local\n output.in_reply_to_screen_name = data.pleroma.in_reply_to_account_acct\n output.thread_muted = pleroma.thread_muted\n output.emoji_reactions = pleroma.emoji_reactions\n output.parent_visible = pleroma.parent_visible === undefined ? true : pleroma.parent_visible\n output.quote = pleroma.quote ? parseStatus(pleroma.quote) : undefined\n output.quote_id = pleroma.quote_id ? pleroma.quote_id : (output.quote ? output.quote.id : undefined)\n output.quote_url = pleroma.quote_url\n output.quote_visible = pleroma.quote_visible\n } else {\n output.text = data.content\n output.summary = data.spoiler_text\n }\n\n output.in_reply_to_status_id = data.in_reply_to_id\n output.in_reply_to_user_id = data.in_reply_to_account_id\n output.replies_count = data.replies_count\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.reblog)\n }\n\n output.summary_raw_html = escape(data.spoiler_text)\n output.external_url = data.url\n output.poll = data.poll\n if (output.poll) {\n output.poll.options = (output.poll.options || []).map(field => ({\n ...field,\n title_html: escape(field.title)\n }))\n }\n output.pinned = data.pinned\n output.muted = data.muted\n } else {\n output.favorited = data.favorited\n output.fave_num = data.fave_num\n\n output.repeated = data.repeated\n output.repeat_num = data.repeat_num\n\n // catchall, temporary\n // Object.assign(output, data)\n\n output.type = qvitterStatusType(data)\n\n if (data.nsfw === undefined) {\n output.nsfw = isNsfw(data)\n if (data.retweeted_status) {\n output.nsfw = data.retweeted_status.nsfw\n }\n } else {\n output.nsfw = data.nsfw\n }\n\n output.raw_html = data.statusnet_html\n output.text = data.text\n\n output.in_reply_to_status_id = data.in_reply_to_status_id\n output.in_reply_to_user_id = data.in_reply_to_user_id\n output.in_reply_to_screen_name = data.in_reply_to_screen_name\n output.statusnet_conversation_id = data.statusnet_conversation_id\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.retweeted_status)\n }\n\n output.summary = data.summary\n output.summary_html = data.summary_html\n output.external_url = data.external_url\n output.is_local = data.is_local\n }\n\n output.id = String(data.id)\n output.visibility = data.visibility\n output.card = data.card\n output.created_at = new Date(data.created_at)\n\n // Converting to string, the right way.\n output.in_reply_to_status_id = output.in_reply_to_status_id\n ? String(output.in_reply_to_status_id)\n : null\n output.in_reply_to_user_id = output.in_reply_to_user_id\n ? String(output.in_reply_to_user_id)\n : null\n\n output.user = parseUser(masto ? data.account : data.user)\n\n output.attentions = ((masto ? data.mentions : data.attentions) || []).map(parseUser)\n\n output.attachments = ((masto ? data.media_attachments : data.attachments) || [])\n .map(parseAttachment)\n\n const retweetedStatus = masto ? data.reblog : data.retweeted_status\n if (retweetedStatus) {\n output.retweeted_status = parseStatus(retweetedStatus)\n }\n\n output.favoritedBy = []\n output.rebloggedBy = []\n\n if (Object.prototype.hasOwnProperty.call(data, 'originalStatus')) {\n Object.assign(output, data.originalStatus)\n }\n\n return output\n}\n\nexport const parseNotification = (data) => {\n const mastoDict = {\n favourite: 'like',\n reblog: 'repeat'\n }\n const masto = !Object.prototype.hasOwnProperty.call(data, 'ntype')\n const output = {}\n\n if (masto) {\n output.type = mastoDict[data.type] || data.type\n output.seen = data.pleroma.is_seen\n output.status = isStatusNotification(output.type) ? parseStatus(data.status) : null\n output.action = output.status // TODO: Refactor, this is unneeded\n output.target = output.type !== 'move'\n ? null\n : parseUser(data.target)\n output.from_profile = parseUser(data.account)\n output.emoji = data.emoji\n output.emoji_url = data.emoji_url\n if (data.report) {\n output.report = data.report\n output.report.content = data.report.content\n output.report.acct = parseUser(data.report.account)\n output.report.actor = parseUser(data.report.actor)\n output.report.statuses = data.report.statuses.map(parseStatus)\n }\n } else {\n const parsedNotice = parseStatus(data.notice)\n output.type = data.ntype\n output.seen = Boolean(data.is_seen)\n output.status = output.type === 'like'\n ? parseStatus(data.notice.favorited_status)\n : parsedNotice\n output.action = parsedNotice\n output.from_profile = output.type === 'pleroma:chat_mention' ? parseUser(data.account) : parseUser(data.from_profile)\n }\n\n output.created_at = new Date(data.created_at)\n output.id = parseInt(data.id)\n\n return output\n}\n\nconst isNsfw = (status) => {\n const nsfwRegex = /#nsfw/i\n return (status.tags || []).includes('nsfw') || !!(status.text || '').match(nsfwRegex)\n}\n\nexport const parseLinkHeaderPagination = (linkHeader, opts = {}) => {\n const flakeId = opts.flakeId\n const parsedLinkHeader = parseLinkHeader(linkHeader)\n if (!parsedLinkHeader) return\n const maxId = parsedLinkHeader.next.max_id\n const minId = parsedLinkHeader.prev.min_id\n\n return {\n maxId: flakeId ? maxId : parseInt(maxId, 10),\n minId: flakeId ? minId : parseInt(minId, 10)\n }\n}\n\nexport const parseChat = (chat) => {\n const output = {}\n output.id = chat.id\n output.account = parseUser(chat.account)\n output.unread = chat.unread\n output.lastMessage = parseChatMessage(chat.last_message)\n output.updated_at = new Date(chat.updated_at)\n return output\n}\n\nexport const parseChatMessage = (message) => {\n if (!message) { return }\n if (message.isNormalized) { return message }\n const output = message\n output.id = message.id\n output.created_at = new Date(message.created_at)\n output.chat_id = message.chat_id\n output.emojis = message.emojis\n output.content = message.content\n if (message.attachment) {\n output.attachments = [parseAttachment(message.attachment)]\n } else {\n output.attachments = []\n }\n output.pending = !!message.pending\n output.error = false\n output.idempotency_key = message.idempotency_key\n output.isNormalized = true\n return output\n}\n","const createFaviconService = () => {\n const favicons = []\n const faviconWidth = 128\n const faviconHeight = 128\n const badgeRadius = 32\n\n const initFaviconService = () => {\n const nodes = document.querySelectorAll('link[rel=\"icon\"]')\n nodes.forEach(favicon => {\n if (favicon) {\n const favcanvas = document.createElement('canvas')\n favcanvas.width = faviconWidth\n favcanvas.height = faviconHeight\n const favimg = new Image()\n favimg.crossOrigin = 'anonymous'\n favimg.src = favicon.href\n const favcontext = favcanvas.getContext('2d')\n favicons.push({ favcanvas, favimg, favcontext, favicon })\n }\n })\n }\n\n const isImageLoaded = (img) => img.complete && img.naturalHeight !== 0\n\n const clearFaviconBadge = () => {\n if (favicons.length === 0) return\n favicons.forEach(({ favimg, favcanvas, favcontext, favicon }) => {\n if (!favimg || !favcontext || !favicon) return\n\n favcontext.clearRect(0, 0, faviconWidth, faviconHeight)\n if (isImageLoaded(favimg)) {\n favcontext.drawImage(favimg, 0, 0, favimg.width, favimg.height, 0, 0, faviconWidth, faviconHeight)\n }\n favicon.href = favcanvas.toDataURL('image/png')\n })\n }\n\n const drawFaviconBadge = () => {\n if (favicons.length === 0) return\n clearFaviconBadge()\n favicons.forEach(({ favimg, favcanvas, favcontext, favicon }) => {\n if (!favimg || !favcontext || !favcontext) return\n\n const style = getComputedStyle(document.body)\n const badgeColor = `${style.getPropertyValue('--badgeNotification') || 'rgb(240, 100, 100)'}`\n\n if (isImageLoaded(favimg)) {\n favcontext.drawImage(favimg, 0, 0, favimg.width, favimg.height, 0, 0, faviconWidth, faviconHeight)\n }\n favcontext.fillStyle = badgeColor\n favcontext.beginPath()\n favcontext.arc(faviconWidth - badgeRadius, badgeRadius, badgeRadius, 0, 2 * Math.PI, false)\n favcontext.fill()\n favicon.href = favcanvas.toDataURL('image/png')\n })\n }\n\n return {\n initFaviconService,\n clearFaviconBadge,\n drawFaviconBadge\n }\n}\n\nconst FaviconService = createFaviconService()\n\nexport default FaviconService\n","const fileSizeFormat = (numArg) => {\n const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']\n let num = numArg\n if (num < 1) {\n return num + ' ' + units[0]\n }\n\n const 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 const unit = units[exponent]\n return { num, unit }\n}\nconst fileSizeFormatService = {\n fileSizeFormat\n}\nexport default fileSizeFormatService\n","// TODO this func might as well take the entire file and use its mimetype\n// or the entire service could be just mimetype service that only operates\n// on mimetypes and not files. Currently the naming is confusing.\nexport const fileType = mimetype => {\n if (mimetype.match(/flash/)) {\n return 'flash'\n }\n\n if (mimetype.match(/text\\/html/)) {\n return 'html'\n }\n\n if (mimetype.match(/image/)) {\n return 'image'\n }\n\n if (mimetype.match(/video/)) {\n return 'video'\n }\n\n if (mimetype.match(/audio/)) {\n return 'audio'\n }\n\n return 'unknown'\n}\n\nexport const fileTypeExt = url => {\n if (url.match(/\\.(png|jpe?g|gif|webp|avif)$/)) {\n return 'image'\n }\n if (url.match(/\\.(ogv|mp4|webm|mov)$/)) {\n return 'video'\n }\n if (url.match(/\\.(it|s3m|mod|umx|mp3|aac|m4a|flac|alac|ogg|oga|opus|wav|ape|midi?)$/)) {\n return 'audio'\n }\n return 'unknown'\n}\n\nexport const fileMatchesSomeType = (types, file) =>\n types.some(type => fileType(file.mimetype) === type)\n\nconst fileTypeService = {\n fileType,\n fileTypeExt,\n fileMatchesSomeType\n}\n\nexport default fileTypeService\n","import languagesObject from '../../i18n/messages'\nimport ISO6391 from 'iso-639-1'\nimport _ from 'lodash'\n\nconst specialLanguageCodes = {\n ja_easy: 'ja',\n zh_Hant: 'zh-HANT',\n zh: 'zh-Hans'\n}\n\nconst internalToBrowserLocale = code => specialLanguageCodes[code] || code\n\nconst internalToBackendLocale = code => internalToBrowserLocale(code).replace('_', '-')\nconst internalToBackendLocaleMulti = codes => {\n const langs = Array.isArray(codes) ? codes : [codes]\n return langs.map(internalToBackendLocale).join(',')\n}\n\nconst getLanguageName = (code) => {\n const specialLanguageNames = {\n ja_easy: 'やさしいにほんご',\n 'nan-TW': '臺語(閩南語)',\n zh: '简体中文',\n zh_Hant: '繁體中文'\n }\n const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)\n const browserLocale = internalToBrowserLocale(code)\n return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)\n}\n\nconst languages = _.map(languagesObject.languages, (code) => ({ code, name: getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))\n\nconst localeService = {\n internalToBrowserLocale,\n internalToBackendLocale,\n internalToBackendLocaleMulti,\n languages,\n getLanguageName\n}\n\nexport default localeService\n","import { filter, sortBy, includes } from 'lodash'\nimport { muteWordHits } from '../status_parser/status_parser.js'\nimport { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'\n\nexport const notificationsFromStore = store => store.state.statuses.notifications.data\n\nexport const visibleTypes = store => {\n const rootState = store.rootState || store.state\n\n return ([\n rootState.config.notificationVisibility.likes && 'like',\n rootState.config.notificationVisibility.mentions && 'mention',\n rootState.config.notificationVisibility.repeats && 'repeat',\n rootState.config.notificationVisibility.follows && 'follow',\n rootState.config.notificationVisibility.followRequest && 'follow_request',\n rootState.config.notificationVisibility.moves && 'move',\n rootState.config.notificationVisibility.emojiReactions && 'pleroma:emoji_reaction',\n rootState.config.notificationVisibility.reports && 'pleroma:report',\n rootState.config.notificationVisibility.polls && 'poll'\n ].filter(_ => _))\n}\n\nconst statusNotifications = ['like', 'mention', 'repeat', 'pleroma:emoji_reaction', 'poll']\n\nexport const isStatusNotification = (type) => includes(statusNotifications, type)\n\nexport const isValidNotification = (notification) => {\n if (isStatusNotification(notification.type) && !notification.status) {\n return false\n }\n return true\n}\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nconst isMutedNotification = (store, notification) => {\n if (!notification.status) return\n return notification.status.muted || muteWordHits(notification.status, store.rootGetters.mergedConfig.muteWords).length > 0\n}\n\nexport const maybeShowNotification = (store, notification) => {\n const rootState = store.rootState || store.state\n\n if (notification.seen) return\n if (!visibleTypes(store).includes(notification.type)) return\n if (notification.type === 'mention' && isMutedNotification(store, notification)) return\n\n const notificationObject = prepareNotificationObject(notification, store.rootGetters.i18n)\n showDesktopNotification(rootState, notificationObject)\n}\n\nexport const filteredNotificationsFromStore = (store, types) => {\n // map is just to clone the array since sort mutates it and it causes some issues\n let sortedNotifications = notificationsFromStore(store).map(_ => _).sort(sortById)\n sortedNotifications = sortBy(sortedNotifications, 'seen')\n return sortedNotifications.filter(\n (notification) => (types || visibleTypes(store)).includes(notification.type)\n )\n}\n\nexport const unseenNotificationsFromStore = store =>\n filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)\n\nexport const prepareNotificationObject = (notification, i18n) => {\n const notifObj = {\n tag: notification.id\n }\n const status = notification.status\n const title = notification.from_profile.name\n notifObj.title = title\n notifObj.icon = notification.from_profile.profile_image_url\n let i18nString\n switch (notification.type) {\n case 'like':\n i18nString = 'favorited_you'\n break\n case 'repeat':\n i18nString = 'repeated_you'\n break\n case 'follow':\n i18nString = 'followed_you'\n break\n case 'move':\n i18nString = 'migrated_to'\n break\n case 'follow_request':\n i18nString = 'follow_request'\n break\n case 'pleroma:report':\n i18nString = 'submitted_report'\n break\n case 'poll':\n i18nString = 'poll_ended'\n break\n }\n\n if (notification.type === 'pleroma:emoji_reaction') {\n notifObj.body = i18n.t('notifications.reacted_with', [notification.emoji])\n } else if (i18nString) {\n notifObj.body = i18n.t('notifications.' + i18nString)\n } else if (isStatusNotification(notification.type)) {\n notifObj.body = notification.status.text\n }\n\n // Shows first attached non-nsfw image, if any. Should add configuration for this somehow...\n if (status && status.attachments && status.attachments.length > 0 && !status.nsfw &&\n status.attachments[0].mimetype.startsWith('image/')) {\n notifObj.image = status.attachments[0].url\n }\n\n return notifObj\n}\n","import apiService from '../api/api.service.js'\nimport { promiseInterval } from '../promise_interval/promise_interval.js'\n\n// For using include_types when fetching notifications.\n// Note: chat_mention excluded as pleroma-fe polls them separately\nconst mastoApiNotificationTypes = [\n 'mention',\n 'favourite',\n 'reblog',\n 'follow',\n 'move',\n 'pleroma:emoji_reaction',\n 'pleroma:report'\n]\n\nconst update = ({ store, notifications, older }) => {\n store.dispatch('addNewNotifications', { notifications, older })\n}\n\nconst fetchAndUpdate = ({ store, credentials, older = false, since }) => {\n const args = { credentials }\n const { getters } = store\n const rootState = store.rootState || store.state\n const timelineData = rootState.statuses.notifications\n const hideMutedPosts = getters.mergedConfig.hideMutedPosts\n\n args.includeTypes = mastoApiNotificationTypes\n args.withMuted = !hideMutedPosts\n\n args.timeline = 'notifications'\n if (older) {\n if (timelineData.minId !== Number.POSITIVE_INFINITY) {\n args.until = timelineData.minId\n }\n return fetchNotifications({ store, args, older })\n } else {\n // fetch new notifications\n if (since === undefined && timelineData.maxId !== Number.POSITIVE_INFINITY) {\n args.since = timelineData.maxId\n } else if (since !== null) {\n args.since = since\n }\n const result = fetchNotifications({ store, args, older })\n\n // If there's any unread notifications, try fetch notifications since\n // the newest read notification to check if any of the unread notifs\n // have changed their 'seen' state (marked as read in another session), so\n // we can update the state in this session to mark them as read as well.\n // The normal maxId-check does not tell if older notifications have changed\n const notifications = timelineData.data\n const readNotifsIds = notifications.filter(n => n.seen).map(n => n.id)\n const numUnseenNotifs = notifications.length - readNotifsIds.length\n if (numUnseenNotifs > 0 && readNotifsIds.length > 0) {\n args.since = Math.max(...readNotifsIds)\n fetchNotifications({ store, args, older })\n }\n\n return result\n }\n}\n\nconst fetchNotifications = ({ store, args, older }) => {\n return apiService.fetchTimeline(args)\n .then((response) => {\n if (response.errors) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n const notifications = response.data\n update({ store, notifications, older })\n return notifications\n })\n .catch((error) => {\n store.dispatch('pushGlobalNotice', {\n level: 'error',\n messageKey: 'notifications.error',\n messageArgs: [error.message],\n timeout: 5000\n })\n console.error(error)\n })\n}\n\nconst startFetching = ({ credentials, store }) => {\n // Initially there's set flag to silence all desktop notifications so\n // that there won't spam of them when user just opened up the FE we\n // reset that flag after a while to show new notifications once again.\n setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)\n const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })\n boundFetchAndUpdate()\n return promiseInterval(boundFetchAndUpdate, 10000)\n}\n\nconst notificationsFetcher = {\n fetchAndUpdate,\n startFetching\n}\n\nexport default notificationsFetcher\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 && window.getComputedStyle(child.offsetParent).position !== 'sticky' && (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","\n// promiseInterval - replacement for setInterval for promises, starts counting\n// the interval only after a promise is done instead of immediately.\n// - promiseCall is a function that returns a promise, it's called the first\n// time after the first interval.\n// - interval is the interval delay in ms.\n\nexport const promiseInterval = (promiseCall, interval) => {\n let stopped = false\n let timeout = null\n\n const func = () => {\n const promise = promiseCall()\n // something unexpected happened and promiseCall did not\n // return a promise, abort the loop.\n if (!(promise && promise.finally)) {\n console.warn('promiseInterval: promise call did not return a promise, stopping interval.')\n return\n }\n promise.finally(() => {\n if (stopped) return\n timeout = window.setTimeout(func, interval)\n })\n }\n\n const stopFetcher = () => {\n stopped = true\n window.clearTimeout(timeout)\n }\n\n timeout = window.setTimeout(func, interval)\n\n return { stop: stopFetcher }\n}\n","const genRandomSeed = () => `${Math.random()}`.replace('.', '-')\n\nexport default genRandomSeed\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","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 quoteId = 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 quoteId,\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 editStatus = ({\n store,\n statusId,\n status,\n spoilerText,\n sensitive,\n poll,\n media = [],\n contentType = 'text/plain'\n}) => {\n const mediaIds = map(media, 'id')\n\n return apiService.editStatus({\n id: statusId,\n credentials: store.state.users.currentUser.credentials,\n status,\n spoilerText,\n sensitive,\n poll,\n mediaIds,\n contentType\n })\n .then((data) => {\n if (!data.error) {\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 console.error('Error editing status', 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 editStatus,\n uploadMedia,\n setMediaDescription\n}\n\nexport default statusPosterService\n","import { convert } from 'chromatism'\nimport { rgb2hex, hex2rgb, rgba2css, getCssColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { getColors, computeDynamicColor, getOpacitySlot } from '../theme_data/theme_data.service.js'\nimport { defaultState } from '../../modules/config.js'\n\nexport const applyTheme = (input) => {\n const { rules } = generatePreset(input)\n const head = document.head\n const body = document.body\n body.classList.add('hidden')\n\n const styleEl = document.createElement('style')\n head.appendChild(styleEl)\n const styleSheet = styleEl.sheet\n\n styleSheet.toString()\n styleSheet.insertRule(`:root { ${rules.radii} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.colors} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.shadows} }`, 'index-max')\n styleSheet.insertRule(`:root { ${rules.fonts} }`, 'index-max')\n body.classList.remove('hidden')\n}\n\nconst configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale }) =>\n ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale })\n\nconst defaultConfigColumns = configColumns(defaultState)\n\nexport const applyConfig = (config) => {\n const columns = configColumns(config)\n\n if (columns === defaultConfigColumns) {\n return\n }\n\n const head = document.head\n const body = document.body\n body.classList.add('hidden')\n\n const rules = Object\n .entries(columns)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}: ${v}`).join(';')\n\n const styleEl = document.createElement('style')\n head.appendChild(styleEl)\n const styleSheet = styleEl.sheet\n\n styleSheet.toString()\n styleSheet.insertRule(`:root { ${rules} }`, 'index-max')\n body.classList.remove('hidden')\n}\n\nexport const getCssShadow = (input, usesDropShadow) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n .filter(_ => usesDropShadow ? _.inset : _)\n .map((shad) => [\n shad.x,\n shad.y,\n shad.blur,\n shad.spread\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha),\n shad.inset ? 'inset' : ''\n ]).join(' ')).join(', ')\n}\n\nconst getCssShadowFilter = (input) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n // drop-shadow doesn't support inset or spread\n .filter((shad) => !shad.inset && Number(shad.spread) === 0)\n .map((shad) => [\n shad.x,\n shad.y,\n // drop-shadow's blur is twice as strong compared to box-shadow\n shad.blur / 2\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha)\n ]).join(' '))\n .map(_ => `drop-shadow(${_})`)\n .join(' ')\n}\n\nexport const generateColors = (themeData) => {\n const sourceColors = !themeData.themeEngineVersion\n ? colors2to3(themeData.colors || themeData)\n : themeData.colors || themeData\n\n const { colors, opacity } = getColors(sourceColors, themeData.opacity || {})\n\n const htmlColors = Object.entries(colors)\n .reduce((acc, [k, v]) => {\n if (!v) return acc\n acc.solid[k] = rgb2hex(v)\n acc.complete[k] = typeof v.a === 'undefined' ? rgb2hex(v) : rgba2css(v)\n return acc\n }, { complete: {}, solid: {} })\n return {\n rules: {\n colors: Object.entries(htmlColors.complete)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}: ${v}`)\n .join(';')\n },\n theme: {\n colors: htmlColors.solid,\n opacity\n }\n }\n}\n\nexport const generateRadii = (input) => {\n let inputRadii = input.radii || {}\n // v1 -> v2\n if (typeof input.btnRadius !== 'undefined') {\n inputRadii = Object\n .entries(input)\n .filter(([k, v]) => k.endsWith('Radius'))\n .reduce((acc, e) => { acc[e[0].split('Radius')[0]] = e[1]; return acc }, {})\n }\n const radii = Object.entries(inputRadii).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {\n btn: 4,\n input: 4,\n checkbox: 2,\n panel: 10,\n avatar: 5,\n avatarAlt: 50,\n tooltip: 2,\n attachment: 5,\n chatMessage: inputRadii.panel\n })\n\n return {\n rules: {\n radii: Object.entries(radii).filter(([k, v]) => v).map(([k, v]) => `--${k}Radius: ${v}px`).join(';')\n },\n theme: {\n radii\n }\n }\n}\n\nexport const generateFonts = (input) => {\n const fonts = Object.entries(input.fonts || {}).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = Object.entries(v).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, acc[k])\n return acc\n }, {\n interface: {\n family: 'sans-serif'\n },\n input: {\n family: 'inherit'\n },\n post: {\n family: 'inherit'\n },\n postCode: {\n family: 'monospace'\n }\n })\n\n return {\n rules: {\n fonts: Object\n .entries(fonts)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}Font: ${v.family}`).join(';')\n },\n theme: {\n fonts\n }\n }\n}\n\nconst border = (top, shadow) => ({\n x: 0,\n y: top ? 1 : -1,\n blur: 0,\n spread: 0,\n color: shadow ? '#000000' : '#FFFFFF',\n alpha: 0.2,\n inset: true\n})\nconst buttonInsetFakeBorders = [border(true, false), border(false, true)]\nconst inputInsetFakeBorders = [border(true, true), border(false, false)]\nconst hoverGlow = {\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '--faint',\n alpha: 1\n}\n\nexport const DEFAULT_SHADOWS = {\n panel: [{\n x: 1,\n y: 1,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n topBar: [{\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n popup: [{\n x: 2,\n y: 2,\n blur: 3,\n spread: 0,\n color: '#000000',\n alpha: 0.5\n }],\n avatar: [{\n x: 0,\n y: 1,\n blur: 8,\n spread: 0,\n color: '#000000',\n alpha: 0.7\n }],\n avatarStatus: [],\n panelHeader: [],\n button: [{\n x: 0,\n y: 0,\n blur: 2,\n spread: 0,\n color: '#000000',\n alpha: 1\n }, ...buttonInsetFakeBorders],\n buttonHover: [hoverGlow, ...buttonInsetFakeBorders],\n buttonPressed: [hoverGlow, ...inputInsetFakeBorders],\n input: [...inputInsetFakeBorders, {\n x: 0,\n y: 0,\n blur: 2,\n inset: true,\n spread: 0,\n color: '#000000',\n alpha: 1\n }]\n}\nexport const generateShadows = (input, colors) => {\n // TODO this is a small hack for `mod` to work with shadows\n // this is used to get the \"context\" of shadow, i.e. for `mod` properly depend on background color of element\n const hackContextDict = {\n button: 'btn',\n panel: 'bg',\n top: 'topBar',\n popup: 'popover',\n avatar: 'bg',\n panelHeader: 'panel',\n input: 'input'\n }\n\n const cleanInputShadows = Object.fromEntries(\n Object.entries(input.shadows || {})\n .map(([name, shadowSlot]) => [\n name,\n // defaulting color to black to avoid potential problems\n shadowSlot.map(shadowDef => ({ color: '#000000', ...shadowDef }))\n ])\n )\n const inputShadows = cleanInputShadows && !input.themeEngineVersion\n ? shadows2to3(cleanInputShadows, input.opacity)\n : cleanInputShadows || {}\n const shadows = Object.entries({\n ...DEFAULT_SHADOWS,\n ...inputShadows\n }).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const slotFirstWord = slotName.replace(/[A-Z].*$/, '')\n const colorSlotName = hackContextDict[slotFirstWord]\n const isLightOnDark = relativeLuminance(convert(colors[colorSlotName]).rgb) < 0.5\n const mod = isLightOnDark ? 1 : -1\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n color: rgb2hex(computeDynamicColor(\n def.color,\n (variableSlot) => convert(colors[variableSlot]).rgb,\n mod\n ))\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n\n return {\n rules: {\n shadows: Object\n .entries(shadows)\n // TODO for v2.2: if shadow doesn't have non-inset shadows with spread > 0 - optionally\n // convert all non-inset shadows into filter: drop-shadow() to boost performance\n .map(([k, v]) => [\n `--${k}Shadow: ${getCssShadow(v)}`,\n `--${k}ShadowFilter: ${getCssShadowFilter(v)}`,\n `--${k}ShadowInset: ${getCssShadow(v, true)}`\n ].join(';'))\n .join(';')\n },\n theme: {\n shadows\n }\n }\n}\n\nexport const composePreset = (colors, radii, shadows, fonts) => {\n return {\n rules: {\n ...shadows.rules,\n ...colors.rules,\n ...radii.rules,\n ...fonts.rules\n },\n theme: {\n ...shadows.theme,\n ...colors.theme,\n ...radii.theme,\n ...fonts.theme\n }\n }\n}\n\nexport const generatePreset = (input) => {\n const colors = generateColors(input)\n return composePreset(\n colors,\n generateRadii(input),\n generateShadows(input, colors.theme.colors, colors.mod),\n generateFonts(input)\n )\n}\n\nexport const getThemes = () => {\n const cache = 'no-store'\n\n return window.fetch('/static/styles.json', { cache })\n .then((data) => data.json())\n .then((themes) => {\n return Object.entries(themes).map(([k, v]) => {\n let promise = null\n if (typeof v === 'object') {\n promise = Promise.resolve(v)\n } else if (typeof v === 'string') {\n promise = window.fetch(v, { cache })\n .then((data) => data.json())\n .catch((e) => {\n console.error(e)\n return null\n })\n }\n return [k, promise]\n })\n })\n .then((promises) => {\n return promises\n .reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {})\n })\n}\nexport const colors2to3 = (colors) => {\n return Object.entries(colors).reduce((acc, [slotName, color]) => {\n const btnPositions = ['', 'Panel', 'TopBar']\n switch (slotName) {\n case 'lightBg':\n return { ...acc, highlight: color }\n case 'btnText':\n return {\n ...acc,\n ...btnPositions\n .reduce(\n (statePositionAcc, position) =>\n ({ ...statePositionAcc, ['btn' + position + 'Text']: color })\n , {}\n )\n }\n default:\n return { ...acc, [slotName]: color }\n }\n }, {})\n}\n\n/**\n * This handles compatibility issues when importing v2 theme's shadows to current format\n *\n * Back in v2 shadows allowed you to use dynamic colors however those used pure CSS3 variables\n */\nexport const shadows2to3 = (shadows, opacity) => {\n return Object.entries(shadows).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const isDynamic = ({ color = '#000000' }) => color.startsWith('--')\n const getOpacity = ({ color }) => opacity[getOpacitySlot(color.substring(2).split(',')[0])]\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n alpha: isDynamic(def) ? getOpacity(def) || 1 : def.alpha\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n}\n\nexport const getPreset = (val) => {\n return getThemes()\n .then((themes) => themes[val] ? themes[val] : themes['pleroma-dark'])\n .then((theme) => {\n const isV1 = Array.isArray(theme)\n const data = isV1 ? {} : theme.theme\n\n if (isV1) {\n const bg = hex2rgb(theme[1])\n const fg = hex2rgb(theme[2])\n const text = hex2rgb(theme[3])\n const link = hex2rgb(theme[4])\n\n const cRed = hex2rgb(theme[5] || '#FF0000')\n const cGreen = hex2rgb(theme[6] || '#00FF00')\n const cBlue = hex2rgb(theme[7] || '#0000FF')\n const cOrange = hex2rgb(theme[8] || '#E3FF00')\n\n data.colors = { bg, fg, text, link, cRed, cBlue, cGreen, cOrange }\n }\n\n return { theme: data, source: theme.source }\n })\n}\n\nexport const setPreset = (val) => getPreset(val).then(data => applyTheme(data.theme))\n","import { invertLightness, brightness } from 'chromatism'\nimport { alphaBlend, mixrgb } from '../color_convert/color_convert.js'\n/* This is a definition of all layer combinations\n * each key is a topmost layer, each value represents layer underneath\n * this is essentially a simplified tree\n */\nexport const LAYERS = {\n undelay: null, // root\n topBar: null, // no transparency support\n badge: null, // no transparency support\n profileTint: null, // doesn't matter\n fg: null,\n bg: 'underlay',\n highlight: 'bg',\n panel: 'bg',\n popover: 'bg',\n selectedMenu: 'popover',\n btn: 'bg',\n btnPanel: 'panel',\n btnTopBar: 'topBar',\n input: 'bg',\n inputPanel: 'panel',\n inputTopBar: 'topBar',\n alert: 'bg',\n alertPanel: 'panel',\n poll: 'bg',\n chatBg: 'underlay',\n chatMessage: 'chatBg'\n}\n\n/* By default opacity slots have 1 as default opacity\n * this allows redefining it to something else\n */\nexport const DEFAULT_OPACITY = {\n profileTint: 0.5,\n alert: 0.5,\n input: 0.5,\n faint: 0.5,\n underlay: 0.15,\n alertPopup: 0.95\n}\n\n/** SUBJECT TO CHANGE IN THE FUTURE, this is all beta\n * Color and opacity slots definitions. Each key represents a slot.\n *\n * Short-hands:\n * String beginning with `--` - value after dashes treated as sole\n * dependency - i.e. `--value` equivalent to { depends: ['value']}\n * String beginning with `#` - value would be treated as solid color\n * defined in hexadecimal representation (i.e. #FFFFFF) and will be\n * used as default. `#FFFFFF` is equivalent to { default: '#FFFFFF'}\n *\n * Full definition:\n * @property {String[]} depends - color slot names this color depends ones.\n * cyclic dependencies are supported to some extent but not recommended.\n * @property {String} [opacity] - opacity slot used by this color slot.\n * opacity is inherited from parents. To break inheritance graph use null\n * @property {Number} [priority] - EXPERIMENTAL. used to pre-sort slots so\n * that slots with higher priority come earlier\n * @property {Function(mod, ...colors)} [color] - function that will be\n * used to determine the color. By default it just copies first color in\n * dependency list.\n * @argument {Number} mod - `1` (light-on-dark) or `-1` (dark-on-light)\n * depending on background color (for textColor)/given color.\n * @argument {...Object} deps - each argument after mod represents each\n * color from `depends` array. All colors take user customizations into\n * account and represented by { r, g, b } objects.\n * @returns {Object} resulting color, should be in { r, g, b } form\n *\n * @property {Boolean|String} [textColor] - true to mark color slot as text\n * color. This enables automatic text color generation for the slot. Use\n * 'preserve' string if you don't want text color to fall back to\n * black/white. Use 'bw' to only ever use black or white. This also makes\n * following properties required:\n * @property {String} [layer] - which layer the text sit on top on - used\n * to account for transparency in text color calculation\n * layer is inherited from parents. To break inheritance graph use null\n * @property {String} [variant] - which color slot is background (same as\n * above, used to account for transparency)\n */\nexport const SLOT_INHERITANCE = {\n bg: {\n depends: [],\n opacity: 'bg',\n priority: 1\n },\n wallpaper: {\n depends: ['bg'],\n color: (mod, bg) => brightness(-2 * mod, bg).rgb\n },\n fg: {\n depends: [],\n priority: 1\n },\n text: {\n depends: [],\n layer: 'bg',\n opacity: null,\n priority: 1\n },\n underlay: {\n default: '#000000',\n opacity: 'underlay'\n },\n link: {\n depends: ['accent'],\n priority: 1\n },\n accent: {\n depends: ['link'],\n priority: 1\n },\n faint: {\n depends: ['text'],\n opacity: 'faint'\n },\n faintLink: {\n depends: ['link'],\n opacity: 'faint'\n },\n postFaintLink: {\n depends: ['postLink'],\n opacity: 'faint'\n },\n\n cBlue: '#0000ff',\n cRed: '#FF0000',\n cGreen: '#00FF00',\n cOrange: '#E3FF00',\n\n profileBg: {\n depends: ['bg'],\n color: (mod, bg) => ({\n r: Math.floor(bg.r * 0.53),\n g: Math.floor(bg.g * 0.56),\n b: Math.floor(bg.b * 0.59)\n })\n },\n profileTint: {\n depends: ['bg'],\n layer: 'profileTint',\n opacity: 'profileTint'\n },\n\n highlight: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n highlightLightText: {\n depends: ['lightText'],\n layer: 'highlight',\n textColor: true\n },\n highlightPostLink: {\n depends: ['postLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightFaintText: {\n depends: ['faint'],\n layer: 'highlight',\n textColor: true\n },\n highlightFaintLink: {\n depends: ['faintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightText: {\n depends: ['text'],\n layer: 'highlight',\n textColor: true\n },\n highlightLink: {\n depends: ['link'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightIcon: {\n depends: ['highlight', 'highlightText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n popover: {\n depends: ['bg'],\n opacity: 'popover'\n },\n popoverLightText: {\n depends: ['lightText'],\n layer: 'popover',\n textColor: true\n },\n popoverPostLink: {\n depends: ['postLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverFaintText: {\n depends: ['faint'],\n layer: 'popover',\n textColor: true\n },\n popoverFaintLink: {\n depends: ['faintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverText: {\n depends: ['text'],\n layer: 'popover',\n textColor: true\n },\n popoverLink: {\n depends: ['link'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverIcon: {\n depends: ['popover', 'popoverText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedPost: '--highlight',\n selectedPostFaintText: {\n depends: ['highlightFaintText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLightText: {\n depends: ['highlightLightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostPostLink: {\n depends: ['highlightPostLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostText: {\n depends: ['highlightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLink: {\n depends: ['highlightLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostIcon: {\n depends: ['selectedPost', 'selectedPostText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenu: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuLightText: {\n depends: ['highlightLightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintText: {\n depends: ['highlightFaintText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuText: {\n depends: ['highlightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuLink: {\n depends: ['highlightLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuIcon: {\n depends: ['selectedMenu', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenuPopover: {\n depends: ['popover'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuPopoverLightText: {\n depends: ['selectedMenuLightText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintText: {\n depends: ['selectedMenuFaintText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintLink: {\n depends: ['selectedMenuFaintLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverText: {\n depends: ['selectedMenuText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverLink: {\n depends: ['selectedMenuLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverIcon: {\n depends: ['selectedMenuPopover', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n lightText: {\n depends: ['text'],\n layer: 'bg',\n textColor: 'preserve',\n color: (mod, text) => brightness(20 * mod, text).rgb\n },\n\n postLink: {\n depends: ['link'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n postGreentext: {\n depends: ['cGreen'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n postCyantext: {\n depends: ['cBlue'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n border: {\n depends: ['fg'],\n opacity: 'border',\n color: (mod, fg) => brightness(2 * mod, fg).rgb\n },\n\n poll: {\n depends: ['accent', 'bg'],\n copacity: 'poll',\n color: (mod, accent, bg) => alphaBlend(accent, 0.4, bg)\n },\n pollText: {\n depends: ['text'],\n layer: 'poll',\n textColor: true\n },\n\n icon: {\n depends: ['bg', 'text'],\n inheritsOpacity: false,\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n // Foreground\n fgText: {\n depends: ['text'],\n layer: 'fg',\n textColor: true\n },\n fgLink: {\n depends: ['link'],\n layer: 'fg',\n textColor: 'preserve'\n },\n\n // Panel header\n panel: {\n depends: ['fg'],\n opacity: 'panel'\n },\n panelText: {\n depends: ['text'],\n layer: 'panel',\n textColor: true\n },\n panelFaint: {\n depends: ['fgText'],\n layer: 'panel',\n opacity: 'faint',\n textColor: true\n },\n panelLink: {\n depends: ['fgLink'],\n layer: 'panel',\n textColor: 'preserve'\n },\n\n // Top bar\n topBar: '--fg',\n topBarText: {\n depends: ['fgText'],\n layer: 'topBar',\n textColor: true\n },\n topBarLink: {\n depends: ['fgLink'],\n layer: 'topBar',\n textColor: 'preserve'\n },\n\n // Tabs\n tab: {\n depends: ['btn']\n },\n tabText: {\n depends: ['btnText'],\n layer: 'btn',\n textColor: true\n },\n tabActiveText: {\n depends: ['text'],\n layer: 'bg',\n textColor: true\n },\n\n // Buttons\n btn: {\n depends: ['fg'],\n variant: 'btn',\n opacity: 'btn'\n },\n btnText: {\n depends: ['fgText'],\n layer: 'btn',\n textColor: true\n },\n btnPanelText: {\n depends: ['btnText'],\n layer: 'btnPanel',\n variant: 'btn',\n textColor: true\n },\n btnTopBarText: {\n depends: ['btnText'],\n layer: 'btnTopBar',\n variant: 'btn',\n textColor: true\n },\n\n // Buttons: pressed\n btnPressed: {\n depends: ['btn'],\n layer: 'btn'\n },\n btnPressedText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedPanel: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedTopBar: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnPressed',\n textColor: true\n },\n\n // Buttons: toggled\n btnToggled: {\n depends: ['btn'],\n layer: 'btn',\n color: (mod, btn) => brightness(mod * 20, btn).rgb\n },\n btnToggledText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnToggled',\n textColor: true\n },\n\n // Buttons: disabled\n btnDisabled: {\n depends: ['btn', 'bg'],\n color: (mod, btn, bg) => alphaBlend(btn, 0.25, bg)\n },\n btnDisabledText: {\n depends: ['btnText', 'btnDisabled'],\n layer: 'btn',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledPanelText: {\n depends: ['btnPanelText', 'btnDisabled'],\n layer: 'btnPanel',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledTopBarText: {\n depends: ['btnTopBarText', 'btnDisabled'],\n layer: 'btnTopBar',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n\n // Input fields\n input: {\n depends: ['fg'],\n opacity: 'input'\n },\n inputText: {\n depends: ['text'],\n layer: 'input',\n textColor: true\n },\n inputPanelText: {\n depends: ['panelText'],\n layer: 'inputPanel',\n variant: 'input',\n textColor: true\n },\n inputTopbarText: {\n depends: ['topBarText'],\n layer: 'inputTopBar',\n variant: 'input',\n textColor: true\n },\n\n alertError: {\n depends: ['cRed'],\n opacity: 'alert'\n },\n alertErrorText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertError',\n textColor: true\n },\n alertErrorPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertError',\n textColor: true\n },\n\n alertWarning: {\n depends: ['cOrange'],\n opacity: 'alert'\n },\n alertWarningText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertWarning',\n textColor: true\n },\n alertWarningPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertWarning',\n textColor: true\n },\n\n alertSuccess: {\n depends: ['cGreen'],\n opacity: 'alert'\n },\n alertSuccessText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertSuccess',\n textColor: true\n },\n alertSuccessPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertSuccess',\n textColor: true\n },\n\n alertNeutral: {\n depends: ['text'],\n opacity: 'alert'\n },\n alertNeutralText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertNeutral',\n color: (mod, text) => invertLightness(text).rgb,\n textColor: true\n },\n alertNeutralPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertNeutral',\n textColor: true\n },\n\n alertPopupError: {\n depends: ['alertError'],\n opacity: 'alertPopup'\n },\n alertPopupErrorText: {\n depends: ['alertErrorText'],\n layer: 'popover',\n variant: 'alertPopupError',\n textColor: true\n },\n\n alertPopupWarning: {\n depends: ['alertWarning'],\n opacity: 'alertPopup'\n },\n alertPopupWarningText: {\n depends: ['alertWarningText'],\n layer: 'popover',\n variant: 'alertPopupWarning',\n textColor: true\n },\n\n alertPopupSuccess: {\n depends: ['alertSuccess'],\n opacity: 'alertPopup'\n },\n alertPopupSuccessText: {\n depends: ['alertSuccessText'],\n layer: 'popover',\n variant: 'alertPopupSuccess',\n textColor: true\n },\n\n alertPopupNeutral: {\n depends: ['alertNeutral'],\n opacity: 'alertPopup'\n },\n alertPopupNeutralText: {\n depends: ['alertNeutralText'],\n layer: 'popover',\n variant: 'alertPopupNeutral',\n textColor: true\n },\n\n badgeNotification: '--cRed',\n badgeNotificationText: {\n depends: ['text', 'badgeNotification'],\n layer: 'badge',\n variant: 'badgeNotification',\n textColor: 'bw'\n },\n\n badgeNeutral: '--cGreen',\n badgeNeutralText: {\n depends: ['text', 'badgeNeutral'],\n layer: 'badge',\n variant: 'badgeNeutral',\n textColor: 'bw'\n },\n\n chatBg: {\n depends: ['bg']\n },\n\n chatMessageIncomingBg: {\n depends: ['chatBg']\n },\n\n chatMessageIncomingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: true\n },\n\n chatMessageIncomingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: 'preserve'\n },\n\n chatMessageIncomingBorder: {\n depends: ['border'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n },\n\n chatMessageOutgoingBg: {\n depends: ['chatMessageIncomingBg'],\n color: (mod, chatMessage) => brightness(5 * mod, chatMessage).rgb\n },\n\n chatMessageOutgoingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: true\n },\n\n chatMessageOutgoingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: 'preserve'\n },\n\n chatMessageOutgoingBorder: {\n depends: ['chatMessageOutgoingBg'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n }\n}\n","import { convert, brightness, contrastRatio } from 'chromatism'\nimport { alphaBlendLayers, getTextColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { LAYERS, DEFAULT_OPACITY, SLOT_INHERITANCE } from './pleromafe.js'\n\n/*\n * # What's all this?\n * Here be theme engine for pleromafe. All of this supposed to ease look\n * and feel customization, making widget styles and make developer's life\n * easier when it comes to supporting themes. Like many other theme systems\n * it operates on color definitions, or \"slots\" - for example you define\n * \"button\" color slot and then in UI component Button's CSS you refer to\n * it as a CSS3 Variable.\n *\n * Some applications allow you to customize colors for certain things.\n * Some UI toolkits allow you to define colors for each type of widget.\n * Most of them are pretty barebones and have no assistance for common\n * problems and cases, and in general themes themselves are very hard to\n * maintain in all aspects. This theme engine tries to solve all of the\n * common problems with themes.\n *\n * You don't have redefine several similar colors if you just want to\n * change one color - all color slots are derived from other ones, so you\n * can have at least one or two \"basic\" colors defined and have all other\n * components inherit and modify basic ones.\n *\n * You don't have to test contrast ratio for colors or pick text color for\n * each element even if you have light-on-dark elements in dark-on-light\n * theme.\n *\n * You don't have to maintain order of code for inheriting slots from othet\n * slots - dependency graph resolving does it for you.\n */\n\n/* This indicates that this version of code outputs similar theme data and\n * should be incremented if output changes - for instance if getTextColor\n * function changes and older themes no longer render text colors as\n * author intended previously.\n */\nexport const CURRENT_VERSION = 3\n\nexport const getLayersArray = (layer, data = LAYERS) => {\n const array = [layer]\n let parent = data[layer]\n while (parent) {\n array.unshift(parent)\n parent = data[parent]\n }\n return array\n}\n\nexport const getLayers = (layer, variant = layer, opacitySlot, colors, opacity) => {\n return getLayersArray(layer).map((currentLayer) => ([\n currentLayer === layer\n ? colors[variant]\n : colors[currentLayer],\n currentLayer === layer\n ? opacity[opacitySlot] || 1\n : opacity[currentLayer]\n ]))\n}\n\nconst getDependencies = (key, inheritance) => {\n const data = inheritance[key]\n if (typeof data === 'string' && data.startsWith('--')) {\n return [data.substring(2)]\n } else {\n if (data === null) return []\n const { depends, layer, variant } = data\n const layerDeps = layer\n ? getLayersArray(layer).map(currentLayer => {\n return currentLayer === layer\n ? variant || layer\n : currentLayer\n })\n : []\n if (Array.isArray(depends)) {\n return [...depends, ...layerDeps]\n } else {\n return [...layerDeps]\n }\n }\n}\n\n/**\n * Sorts inheritance object topologically - dependant slots come after\n * dependencies\n *\n * @property {Object} inheritance - object defining the nodes\n * @property {Function} getDeps - function that returns dependencies for\n * given value and inheritance object.\n * @returns {String[]} keys of inheritance object, sorted in topological\n * order. Additionally, dependency-less nodes will always be first in line\n */\nexport const topoSort = (\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n // This is an implementation of https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n\n const allKeys = Object.keys(inheritance)\n const whites = new Set(allKeys)\n const grays = new Set()\n const blacks = new Set()\n const unprocessed = [...allKeys]\n const output = []\n\n const step = (node) => {\n if (whites.has(node)) {\n // Make node \"gray\"\n whites.delete(node)\n grays.add(node)\n // Do step for each node connected to it (one way)\n getDeps(node, inheritance).forEach(step)\n // Make node \"black\"\n grays.delete(node)\n blacks.add(node)\n // Put it into the output list\n output.push(node)\n } else if (grays.has(node)) {\n console.debug('Cyclic depenency in topoSort, ignoring')\n output.push(node)\n } else if (blacks.has(node)) {\n // do nothing\n } else {\n throw new Error('Unintended condition in topoSort!')\n }\n }\n while (unprocessed.length > 0) {\n step(unprocessed.pop())\n }\n\n // The index thing is to make sorting stable on browsers\n // where Array.sort() isn't stable\n return output.map((data, index) => ({ data, index })).sort(({ data: a, index: ai }, { data: b, index: bi }) => {\n const depsA = getDeps(a, inheritance).length\n const depsB = getDeps(b, inheritance).length\n\n if (depsA === depsB || (depsB !== 0 && depsA !== 0)) return ai - bi\n if (depsA === 0 && depsB !== 0) return -1\n if (depsB === 0 && depsA !== 0) return 1\n return 0 // failsafe, shouldn't happen?\n }).map(({ data }) => data)\n}\n\nconst expandSlotValue = (value) => {\n if (typeof value === 'object') return value\n return {\n depends: value.startsWith('--') ? [value.substring(2)] : [],\n default: value.startsWith('#') ? value : undefined\n }\n}\n/**\n * retrieves opacity slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * TODO refactor this\n */\nexport const getOpacitySlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (value.opacity === null) return\n if (value.opacity) return value.opacity\n const findInheritedOpacity = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.opacity || dependency === null) {\n return dependency.opacity\n } else if (dependency.depends && visited.includes(depSlot)) {\n return findInheritedOpacity(depSlot, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedOpacity(k)\n }\n}\n\n/**\n * retrieves layer slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * this is basically copypaste of getOpacitySlot except it checks if key is\n * in LAYERS\n * TODO refactor this\n */\nexport const getLayerSlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (LAYERS[k]) return k\n if (value.layer === null) return\n if (value.layer) return value.layer\n const findInheritedLayer = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.layer || dependency === null) {\n return dependency.layer\n } else if (dependency.depends) {\n return findInheritedLayer(dependency, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedLayer(k)\n }\n}\n\n/**\n * topologically sorted SLOT_INHERITANCE\n */\nexport const SLOT_ORDERED = topoSort(\n Object.entries(SLOT_INHERITANCE)\n .sort(([aK, aV], [bK, bV]) => ((aV && aV.priority) || 0) - ((bV && bV.priority) || 0))\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})\n)\n\n/**\n * All opacity slots used in color slots, their default values and affected\n * color slots.\n */\nexport const OPACITIES = Object.entries(SLOT_INHERITANCE).reduce((acc, [k, v]) => {\n const opacity = getOpacitySlot(k, SLOT_INHERITANCE, getDependencies)\n if (opacity) {\n return {\n ...acc,\n [opacity]: {\n defaultValue: DEFAULT_OPACITY[opacity] || 1,\n affectedSlots: [...((acc[opacity] && acc[opacity].affectedSlots) || []), k]\n }\n }\n } else {\n return acc\n }\n}, {})\n\n/**\n * Handle dynamic color\n */\nexport const computeDynamicColor = (sourceColor, getColor, mod) => {\n if (typeof sourceColor !== 'string' || !sourceColor.startsWith('--')) return sourceColor\n let targetColor = null\n // Color references other color\n const [variable, modifier] = sourceColor.split(/,/g).map(str => str.trim())\n const variableSlot = variable.substring(2)\n targetColor = getColor(variableSlot)\n if (modifier) {\n targetColor = brightness(Number.parseFloat(modifier) * mod, targetColor).rgb\n }\n return targetColor\n}\n\n/**\n * THE function you want to use. Takes provided colors and opacities\n * value and uses inheritance data to figure out color needed for the slot.\n */\nexport const getColors = (sourceColors, sourceOpacity) => SLOT_ORDERED.reduce(({ colors, opacity }, key) => {\n const sourceColor = sourceColors[key]\n const value = expandSlotValue(SLOT_INHERITANCE[key])\n const deps = getDependencies(key, SLOT_INHERITANCE)\n const isTextColor = !!value.textColor\n const variant = value.variant || value.layer\n\n let backgroundColor = null\n\n if (isTextColor) {\n backgroundColor = alphaBlendLayers(\n { ...(colors[deps[0]] || convert(sourceColors[key] || '#FF00FF').rgb) },\n getLayers(\n getLayerSlot(key) || 'bg',\n variant || 'bg',\n getOpacitySlot(variant),\n colors,\n opacity\n )\n )\n } else if (variant && variant !== key) {\n backgroundColor = colors[variant] || convert(sourceColors[variant]).rgb\n } else {\n backgroundColor = colors.bg || convert(sourceColors.bg)\n }\n\n const isLightOnDark = relativeLuminance(backgroundColor) < 0.5\n const mod = isLightOnDark ? 1 : -1\n\n let outputColor = null\n if (sourceColor) {\n // Color is defined in source color\n let targetColor = sourceColor\n if (targetColor === 'transparent') {\n // We take only layers below current one\n const layers = getLayers(\n getLayerSlot(key),\n key,\n getOpacitySlot(key) || key,\n colors,\n opacity\n ).slice(0, -1)\n targetColor = {\n ...alphaBlendLayers(\n convert('#FF00FF').rgb,\n layers\n ),\n a: 0\n }\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('--')) {\n targetColor = computeDynamicColor(\n sourceColor,\n variableSlot => colors[variableSlot] || sourceColors[variableSlot],\n mod\n )\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('#')) {\n targetColor = convert(targetColor).rgb\n }\n outputColor = { ...targetColor }\n } else if (value.default) {\n // same as above except in object form\n outputColor = convert(value.default).rgb\n } else {\n // calculate color\n const defaultColorFunc = (mod, dep) => ({ ...dep })\n const colorFunc = value.color || defaultColorFunc\n\n if (value.textColor) {\n if (value.textColor === 'bw') {\n outputColor = contrastRatio(backgroundColor).rgb\n } else {\n let color = { ...colors[deps[0]] }\n if (value.color) {\n color = colorFunc(mod, ...deps.map((dep) => ({ ...colors[dep] })))\n }\n outputColor = getTextColor(\n backgroundColor,\n { ...color },\n value.textColor === 'preserve'\n )\n }\n } else {\n // background color case\n outputColor = colorFunc(\n mod,\n ...deps.map((dep) => ({ ...colors[dep] }))\n )\n }\n }\n if (!outputColor) {\n throw new Error('Couldn\\'t generate color for ' + key)\n }\n\n const opacitySlot = value.opacity || getOpacitySlot(key)\n const ownOpacitySlot = value.opacity\n\n if (ownOpacitySlot === null) {\n outputColor.a = 1\n } else if (sourceColor === 'transparent') {\n outputColor.a = 0\n } else {\n const opacityOverriden = ownOpacitySlot && sourceOpacity[opacitySlot] !== undefined\n\n const dependencySlot = deps[0]\n const dependencyColor = dependencySlot && colors[dependencySlot]\n\n if (!ownOpacitySlot && dependencyColor && !value.textColor && ownOpacitySlot !== null) {\n // Inheriting color from dependency (weird, i know)\n // except if it's a text color or opacity slot is set to 'null'\n outputColor.a = dependencyColor.a\n } else if (!dependencyColor && !opacitySlot) {\n // Remove any alpha channel if no dependency and no opacitySlot found\n delete outputColor.a\n } else {\n // Otherwise try to assign opacity\n if (dependencyColor && dependencyColor.a === 0) {\n // transparent dependency shall make dependents transparent too\n outputColor.a = 0\n } else {\n // Otherwise check if opacity is overriden and use that or default value instead\n outputColor.a = Number(\n opacityOverriden\n ? sourceOpacity[opacitySlot]\n : (OPACITIES[opacitySlot] || {}).defaultValue\n )\n }\n }\n }\n\n if (Number.isNaN(outputColor.a) || outputColor.a === undefined) {\n outputColor.a = 1\n }\n\n if (opacitySlot) {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity: { ...opacity, [opacitySlot]: outputColor.a }\n }\n } else {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity\n }\n }\n}, { colors: {}, opacity: {} })\n","import { hex2rgb } from '../color_convert/color_convert.js'\nconst highlightStyle = (prefs) => {\n if (prefs === undefined) return\n const { color, type } = prefs\n if (typeof color !== 'string') return\n const rgb = hex2rgb(color)\n if (rgb == null) return\n const solidColor = `rgb(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)})`\n const tintColor = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .1)`\n const tintColor2 = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .2)`\n const customProps = {\n '--____highlight-solidColor': solidColor,\n '--____highlight-tintColor': tintColor,\n '--____highlight-tintColor2': tintColor2\n }\n if (type === 'striped') {\n return {\n backgroundImage: [\n 'repeating-linear-gradient(135deg,',\n `${tintColor} ,`,\n `${tintColor} 20px,`,\n `${tintColor2} 20px,`,\n `${tintColor2} 40px`\n ].join(' '),\n backgroundPosition: '0 0',\n ...customProps\n }\n } else if (type === 'solid') {\n return {\n backgroundColor: tintColor2,\n ...customProps\n }\n } else if (type === 'side') {\n return {\n backgroundImage: [\n 'linear-gradient(to right,',\n `${solidColor} ,`,\n `${solidColor} 2px,`,\n 'transparent 6px'\n ].join(' '),\n backgroundPosition: '0 0',\n ...customProps\n }\n }\n}\n\nconst highlightClass = (user) => {\n return 'USER____' + user.screen_name\n .replace(/\\./g, '_')\n .replace(/@/g, '_AT_')\n}\n\nexport {\n highlightClass,\n highlightStyle\n}\n","import { includes } from 'lodash'\n\nconst generateProfileLink = (id, screenName, restrictedNicknames) => {\n const complicated = !screenName || (isExternal(screenName) || includes(restrictedNicknames, screenName))\n return {\n name: (complicated ? 'external-user-profile' : 'user-profile'),\n params: (complicated ? { id } : { name: screenName })\n }\n}\n\nconst isExternal = screenName => screenName && screenName.includes('@')\n\nexport default generateProfileLink\n","<template>\n <button\n v-if=\"usePlaceholder\"\n class=\"Attachment -placeholder button-unstyled\"\n :class=\"classNames\"\n @click=\"openModal\"\n >\n <a\n v-if=\"type !== 'html'\"\n class=\"placeholder\"\n target=\"_blank\"\n :href=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n @click.prevent\n >\n <FAIcon :icon=\"placeholderIconClass\" />\n <b>{{ nsfw ? \"NSFW / \" : \"\" }}</b>{{ edit ? '' : placeholderName }}\n </a>\n <div\n v-if=\"edit || remove\"\n class=\"attachment-buttons\"\n >\n <button\n v-if=\"remove\"\n class=\"button-unstyled attachment-button\"\n @click.prevent=\"onRemove\"\n >\n <FAIcon icon=\"trash-alt\" />\n </button>\n </div>\n <div\n v-if=\"size !== 'hide' && !hideDescription && (edit || localDescription || showDescription)\"\n class=\"description-container\"\n :class=\"{ '-static': !edit }\"\n >\n <input\n v-if=\"edit\"\n v-model=\"localDescription\"\n type=\"text\"\n class=\"description-field\"\n :placeholder=\"$t('post_status.media_description')\"\n @keydown.enter.prevent=\"\"\n >\n <p v-else>\n {{ localDescription }}\n </p>\n </div>\n </button>\n <div\n v-else\n class=\"Attachment\"\n :class=\"classNames\"\n >\n <div\n v-show=\"!isEmpty\"\n class=\"attachment-wrapper\"\n >\n <a\n v-if=\"hidden\"\n class=\"image-container\"\n :href=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n @click.prevent.stop=\"toggleHidden\"\n >\n <img\n :key=\"nsfwImage\"\n class=\"nsfw\"\n :src=\"nsfwImage\"\n >\n <FAIcon\n v-if=\"type === 'video'\"\n class=\"play-icon\"\n icon=\"play-circle\"\n />\n </a>\n <div\n v-if=\"!hidden\"\n class=\"attachment-buttons\"\n >\n <button\n v-if=\"type === 'flash' && flashLoaded\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.attachment_stop_flash')\"\n @click.prevent=\"stopFlash\"\n >\n <FAIcon icon=\"stop\" />\n </button>\n <button\n v-if=\"attachment.description && size !== 'small' && !edit && type !== 'unknown'\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.show_attachment_description')\"\n @click.prevent=\"toggleDescription\"\n >\n <FAIcon icon=\"align-right\" />\n </button>\n <button\n v-if=\"!useModal && type !== 'unknown'\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.show_attachment_in_modal')\"\n @click.prevent=\"openModalForce\"\n >\n <FAIcon icon=\"search-plus\" />\n </button>\n <button\n v-if=\"nsfw && hideNsfwLocal\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.hide_attachment')\"\n @click.prevent=\"toggleHidden\"\n >\n <FAIcon icon=\"times\" />\n </button>\n <button\n v-if=\"shiftUp\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.move_up')\"\n @click.prevent=\"onShiftUp\"\n >\n <FAIcon icon=\"chevron-left\" />\n </button>\n <button\n v-if=\"shiftDn\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.move_down')\"\n @click.prevent=\"onShiftDn\"\n >\n <FAIcon icon=\"chevron-right\" />\n </button>\n <button\n v-if=\"remove\"\n class=\"button-unstyled attachment-button\"\n :title=\"$t('status.remove_attachment')\"\n @click.prevent=\"onRemove\"\n >\n <FAIcon icon=\"trash-alt\" />\n </button>\n </div>\n\n <a\n v-if=\"type === 'image' && (!hidden || preloadImage)\"\n class=\"image-container\"\n :class=\"{'-hidden': hidden && preloadImage }\"\n :href=\"attachment.url\"\n target=\"_blank\"\n @click.stop.prevent=\"openModal\"\n >\n <StillImage\n class=\"image\"\n :referrerpolicy=\"referrerpolicy\"\n :mimetype=\"attachment.mimetype\"\n :src=\"attachment.large_thumb_url || attachment.url\"\n :image-load-handler=\"onImageLoad\"\n :alt=\"attachment.description\"\n />\n </a>\n\n <a\n v-if=\"type === 'unknown' && !hidden\"\n class=\"placeholder-container\"\n :href=\"attachment.url\"\n target=\"_blank\"\n >\n <FAIcon\n :size=\"compact ? '2x' : '5x'\"\n :icon=\"placeholderIconClass\"\n :title=\"localDescription\"\n />\n <p v-if=\"!compact\">\n {{ localDescription }}\n </p>\n </a>\n\n <component\n :is=\"videoTag\"\n v-if=\"type === 'video' && !hidden\"\n class=\"video-container\"\n :class=\"{ 'button-unstyled': 'isModal' }\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <VideoAttachment\n class=\"video\"\n :attachment=\"attachment\"\n :controls=\"!useModal\"\n @play=\"$emit('play')\"\n @pause=\"$emit('pause')\"\n />\n <FAIcon\n v-if=\"useModal\"\n class=\"play-icon\"\n icon=\"play-circle\"\n />\n </component>\n\n <span\n v-if=\"type === 'audio' && !hidden\"\n class=\"audio-container\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <audio\n v-if=\"type === 'audio'\"\n :src=\"attachment.url\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n controls\n @play=\"$emit('play')\"\n @pause=\"$emit('pause')\"\n />\n </span>\n\n <div\n v-if=\"type === 'html' && attachment.oembed\"\n class=\"oembed-container\"\n @click.prevent=\"linkClicked\"\n >\n <div\n v-if=\"attachment.thumb_url\"\n class=\"image\"\n >\n <img :src=\"attachment.thumb_url\">\n </div>\n <div class=\"text\">\n <!-- eslint-disable vue/no-v-html -->\n <h1><a :href=\"attachment.url\">{{ attachment.oembed.title }}</a></h1>\n <div v-html=\"attachment.oembed.oembedHTML\" />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n </div>\n\n <span\n v-if=\"type === 'flash' && !hidden\"\n class=\"flash-container\"\n :href=\"attachment.url\"\n @click.stop.prevent=\"openModal\"\n >\n <Flash\n ref=\"flash\"\n class=\"flash\"\n :src=\"attachment.large_thumb_url || attachment.url\"\n @playerOpened=\"setFlashLoaded(true)\"\n @playerClosed=\"setFlashLoaded(false)\"\n />\n </span>\n </div>\n <div\n v-if=\"size !== 'hide' && !hideDescription && (edit || (localDescription && showDescription))\"\n class=\"description-container\"\n :class=\"{ '-static': !edit }\"\n >\n <input\n v-if=\"edit\"\n v-model=\"localDescription\"\n type=\"text\"\n class=\"description-field\"\n :placeholder=\"$t('post_status.media_description')\"\n @keydown.enter.prevent=\"\"\n >\n <p v-else>\n {{ localDescription }}\n </p>\n </div>\n </div>\n</template>\n\n<script src=\"./attachment.js\"></script>\n\n<style src=\"./attachment.scss\" lang=\"scss\"></style>\n","import StillImage from '../still-image/still-image.vue'\nimport Flash from '../flash/flash.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport nsfwImage from '../../assets/nsfw.png'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faFile,\n faMusic,\n faImage,\n faVideo,\n faPlayCircle,\n faTimes,\n faStop,\n faSearchPlus,\n faTrashAlt,\n faPencilAlt,\n faAlignRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFile,\n faMusic,\n faImage,\n faVideo,\n faPlayCircle,\n faTimes,\n faStop,\n faSearchPlus,\n faTrashAlt,\n faPencilAlt,\n faAlignRight\n)\n\nconst Attachment = {\n props: [\n 'attachment',\n 'compact',\n 'description',\n 'hideDescription',\n 'nsfw',\n 'size',\n 'setMedia',\n 'remove',\n 'shiftUp',\n 'shiftDn',\n 'edit'\n ],\n data () {\n return {\n localDescription: this.description || this.attachment.description,\n nsfwImage: this.$store.state.instance.nsfwCensorImage || nsfwImage,\n hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,\n preloadImage: this.$store.getters.mergedConfig.preloadImage,\n loading: false,\n img: fileTypeService.fileType(this.attachment.mimetype) === 'image' && document.createElement('img'),\n modalOpen: false,\n showHidden: false,\n flashLoaded: false,\n showDescription: false\n }\n },\n components: {\n Flash,\n StillImage,\n VideoAttachment\n },\n computed: {\n classNames () {\n return [\n {\n '-loading': this.loading,\n '-nsfw-placeholder': this.hidden,\n '-editable': this.edit !== undefined,\n '-compact': this.compact\n },\n '-type-' + this.type,\n this.size && '-size-' + this.size,\n `-${this.useContainFit ? 'contain' : 'cover'}-fit`\n ]\n },\n usePlaceholder () {\n return this.size === 'hide'\n },\n useContainFit () {\n return this.$store.getters.mergedConfig.useContainFit\n },\n placeholderName () {\n if (this.attachment.description === '' || !this.attachment.description) {\n return this.type.toUpperCase()\n }\n return this.attachment.description\n },\n placeholderIconClass () {\n if (this.type === 'image') return 'image'\n if (this.type === 'video') return 'video'\n if (this.type === 'audio') return 'music'\n return 'file'\n },\n referrerpolicy () {\n return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'\n },\n type () {\n return fileTypeService.fileType(this.attachment.mimetype)\n },\n hidden () {\n return this.nsfw && this.hideNsfwLocal && !this.showHidden\n },\n isEmpty () {\n return (this.type === 'html' && !this.attachment.oembed)\n },\n useModal () {\n let modalTypes = []\n switch (this.size) {\n case 'hide':\n case 'small':\n modalTypes = ['image', 'video', 'audio', 'flash']\n break\n default:\n modalTypes = this.mergedConfig.playVideosInModal\n ? ['image', 'video', 'flash']\n : ['image']\n break\n }\n return modalTypes.includes(this.type)\n },\n videoTag () {\n return this.useModal ? 'button' : 'span'\n },\n ...mapGetters(['mergedConfig'])\n },\n watch: {\n 'attachment.description' (newVal) {\n this.localDescription = newVal\n },\n localDescription (newVal) {\n this.onEdit(newVal)\n }\n },\n methods: {\n linkClicked ({ target }) {\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n openModal (event) {\n if (this.useModal) {\n this.$emit('setMedia')\n this.$store.dispatch('setCurrentMedia', this.attachment)\n } else if (this.type === 'unknown') {\n window.open(this.attachment.url)\n }\n },\n openModalForce (event) {\n this.$emit('setMedia')\n this.$store.dispatch('setCurrentMedia', this.attachment)\n },\n onEdit (event) {\n this.edit && this.edit(this.attachment, event)\n },\n onRemove () {\n this.remove && this.remove(this.attachment)\n },\n onShiftUp () {\n this.shiftUp && this.shiftUp(this.attachment)\n },\n onShiftDn () {\n this.shiftDn && this.shiftDn(this.attachment)\n },\n stopFlash () {\n this.$refs.flash.closePlayer()\n },\n setFlashLoaded (event) {\n this.flashLoaded = event\n },\n toggleDescription () {\n this.showDescription = !this.showDescription\n },\n toggleHidden (event) {\n if (\n (this.mergedConfig.useOneClickNsfw && !this.showHidden) &&\n (this.type !== 'video' || this.mergedConfig.playVideosInModal)\n ) {\n this.openModal(event)\n return\n }\n if (this.img && !this.preloadImage) {\n if (this.img.onload) {\n this.img.onload()\n } else {\n this.loading = true\n this.img.src = this.attachment.url\n this.img.onload = () => {\n this.loading = false\n this.showHidden = !this.showHidden\n }\n }\n } else {\n this.showHidden = !this.showHidden\n }\n },\n onImageLoad (image) {\n const width = image.naturalWidth\n const height = image.naturalHeight\n this.$emit('naturalSizeLoad', { id: this.attachment.id, width, height })\n }\n }\n}\n\nexport default Attachment\n","import { render } from \"./attachment.vue?vue&type=template&id=581d66b2\"\nimport script from \"./attachment.js?vue&type=script&lang=js\"\nexport * from \"./attachment.js?vue&type=script&lang=js\"\n\nimport \"./attachment.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"avatars\">\n <router-link\n v-for=\"user in slicedUsers\"\n :key=\"user.id\"\n :to=\"userProfileLink(user)\"\n class=\"avatars-item\"\n >\n <UserAvatar\n :user=\"user\"\n class=\"avatar-small\"\n />\n </router-link>\n </div>\n</template>\n\n<script src=\"./avatar_list.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.avatars {\n display: flex;\n margin: 0;\n padding: 0;\n\n // For hiding overflowing elements\n flex-wrap: wrap;\n height: 24px;\n\n .avatars-item {\n margin: 0 0 5px 5px;\n\n &:first-child {\n padding-left: 5px;\n }\n\n .avatar-small {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n height: 24px;\n width: 24px;\n }\n }\n}\n</style>\n","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","import { render } from \"./avatar_list.vue?vue&type=template&id=432beb66\"\nimport script from \"./avatar_list.js?vue&type=script&lang=js\"\nexport * from \"./avatar_list.js?vue&type=script&lang=js\"\n\nimport \"./avatar_list.vue?vue&type=style&index=0&id=432beb66&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"basic-user-card\">\n <router-link\n :to=\"userProfileLink(user)\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"user.id\"\n :overlay-centers=\"true\"\n overlay-centers-selector=\".avatar\"\n >\n <UserAvatar\n class=\"user-avatar avatar\"\n :user=\"user\"\n @click.prevent\n />\n </UserPopover>\n </router-link>\n <div\n class=\"basic-user-card-collapsed-content\"\n >\n <div\n :title=\"user.name\"\n class=\"basic-user-card-user-name\"\n >\n <RichContent\n class=\"basic-user-card-user-name-value\"\n :html=\"user.name\"\n :emoji=\"user.emoji\"\n />\n </div>\n <div>\n <user-link\n class=\"basic-user-card-screen-name\"\n :user=\"user\"\n />\n </div>\n <slot />\n </div>\n </div>\n</template>\n\n<script src=\"./basic_user_card.js\"></script>\n\n<style lang=\"scss\">\n.basic-user-card {\n display: flex;\n flex: 1 0;\n margin: 0;\n padding: 0.6em 1em;\n\n --emoji-size: 14px;\n\n &-collapsed-content {\n margin-left: 0.7em;\n text-align: left;\n flex: 1;\n min-width: 0;\n }\n\n &-user-name {\n img {\n object-fit: contain;\n height: 16px;\n width: 16px;\n vertical-align: middle;\n }\n }\n\n &-user-name-value,\n &-screen-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-expanded-content {\n flex: 1;\n margin-left: 0.7em;\n min-width: 0;\n }\n}\n</style>\n","import UserPopover from '../user_popover/user_popover.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst BasicUserCard = {\n props: [\n 'user'\n ],\n components: {\n UserPopover,\n UserAvatar,\n RichContent,\n UserLink\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 BasicUserCard\n","import { render } from \"./basic_user_card.vue?vue&type=template&id=d8a50982\"\nimport script from \"./basic_user_card.js?vue&type=script&lang=js\"\nexport * from \"./basic_user_card.js?vue&type=script&lang=js\"\n\nimport \"./basic_user_card.vue?vue&type=style&index=0&id=d8a50982&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <label\n class=\"checkbox\"\n :class=\"{ disabled, indeterminate, 'indeterminate-fix': indeterminateTransitionFix }\"\n >\n <input\n type=\"checkbox\"\n class=\"visible-for-screenreader-only\"\n :disabled=\"disabled\"\n :checked=\"modelValue\"\n :indeterminate=\"indeterminate\"\n @change=\"$emit('update:modelValue', $event.target.checked)\"\n >\n <i\n class=\"checkbox-indicator\"\n :aria-hidden=\"true\"\n @transitionend.capture=\"onTransitionEnd\"\n />\n <span\n v-if=\"!!$slots.default\"\n class=\"label\"\n >\n <slot />\n </span>\n </label>\n</template>\n\n<script>\nexport default {\n props: [\n 'modelValue',\n 'indeterminate',\n 'disabled'\n ],\n emits: ['update:modelValue'],\n data: (vm) => ({\n indeterminateTransitionFix: vm.indeterminate\n }),\n watch: {\n indeterminate (e) {\n if (e) {\n this.indeterminateTransitionFix = true\n }\n }\n },\n methods: {\n onTransitionEnd (e) {\n if (!this.indeterminate) {\n this.indeterminateTransitionFix = false\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.checkbox {\n position: relative;\n display: inline-block;\n min-height: 1.2em;\n\n &-indicator {\n position: relative;\n padding-left: 1.2em;\n }\n\n &-indicator::before {\n position: absolute;\n right: 0;\n top: 0;\n display: block;\n content: \"✓\";\n transition: color 200ms;\n width: 1.1em;\n height: 1.1em;\n border-radius: $fallback--checkboxRadius;\n border-radius: var(--checkboxRadius, $fallback--checkboxRadius);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n vertical-align: top;\n text-align: center;\n line-height: 1.1em;\n font-size: 1.1em;\n color: transparent;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n &.disabled {\n .checkbox-indicator::before,\n .label {\n opacity: 0.5;\n }\n\n .label {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n input[type=\"checkbox\"] {\n &:checked + .checkbox-indicator::before {\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n\n &:indeterminate + .checkbox-indicator::before {\n content: \"–\";\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n }\n }\n\n &.indeterminate-fix {\n input[type=\"checkbox\"] + .checkbox-indicator::before {\n content: \"–\";\n }\n }\n\n & > span {\n margin-left: 0.5em;\n }\n}\n</style>\n","import { render } from \"./checkbox.vue?vue&type=template&id=7164e0b5\"\nimport script from \"./checkbox.vue?vue&type=script&lang=js\"\nexport * from \"./checkbox.vue?vue&type=script&lang=js\"\n\nimport \"./checkbox.vue?vue&type=style&index=0&id=7164e0b5&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import DialogModal from '../dialog_modal/dialog_modal.vue'\n\n/**\n * This component emits the following events:\n * cancelled, emitted when the action should not be performed;\n * accepted, emitted when the action should be performed;\n *\n * The caller should close this dialog after receiving any of the two events.\n */\nconst ConfirmModal = {\n components: {\n DialogModal\n },\n props: {\n title: {\n type: String\n },\n cancelText: {\n type: String\n },\n confirmText: {\n type: String\n }\n },\n computed: {\n },\n methods: {\n onCancel () {\n this.$emit('cancelled')\n },\n onAccept () {\n this.$emit('accepted')\n }\n }\n}\n\nexport default ConfirmModal\n","import { render } from \"./confirm_modal.vue?vue&type=template&id=c74bcd96\"\nimport script from \"./confirm_modal.js?vue&type=script&lang=js\"\nexport * from \"./confirm_modal.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <dialog-modal\n v-body-scroll-lock=\"true\"\n class=\"confirm-modal\"\n :on-cancel=\"onCancel\"\n >\n <template #header>\n <span v-text=\"title\" />\n </template>\n\n <slot />\n\n <template #footer>\n <button\n class=\"btn button-default\"\n @click.prevent=\"onAccept\"\n v-text=\"confirmText\"\n />\n\n <button\n class=\"btn button-default\"\n @click.prevent=\"onCancel\"\n v-text=\"cancelText\"\n />\n </template>\n </dialog-modal>\n</template>\n\n<script src=\"./confirm_modal.js\"></script>\n","<template>\n <span\n :class=\"{ 'dark-overlay': darkOverlay }\"\n @click.self.stop=\"onCancel()\"\n >\n <div\n class=\"dialog-modal panel panel-default\"\n @click.stop=\"\"\n >\n <div class=\"panel-heading dialog-modal-heading\">\n <div class=\"title\">\n <slot name=\"header\" />\n </div>\n </div>\n <div class=\"dialog-modal-content\">\n <slot name=\"default\" />\n </div>\n <div class=\"dialog-modal-footer user-interactions panel-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </span>\n</template>\n\n<script src=\"./dialog_modal.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n// TODO: unify with other modals.\n.dark-overlay {\n &::before {\n bottom: 0;\n content: \" \";\n display: block;\n cursor: default;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n background: rgb(27 31 35 / 50%);\n z-index: 2000;\n }\n}\n\n.dialog-modal.panel {\n top: 0;\n left: 50%;\n max-height: 80vh;\n max-width: 90vw;\n margin: 15vh auto;\n position: fixed;\n transform: translateX(-50%);\n z-index: 2001;\n cursor: default;\n display: block;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n\n .dialog-modal-heading {\n .title {\n text-align: center;\n }\n }\n\n .dialog-modal-content {\n margin: 0;\n padding: 1rem;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n white-space: normal;\n }\n\n .dialog-modal-footer {\n margin: 0;\n padding: 0.5em;\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n display: flex;\n justify-content: flex-end;\n\n button {\n width: auto;\n margin-left: 0.5rem;\n }\n }\n}\n\n</style>\n","const DialogModal = {\n props: {\n darkOverlay: {\n default: true,\n type: Boolean\n },\n onCancel: {\n default: () => {},\n type: Function\n }\n }\n}\n\nexport default DialogModal\n","import { render } from \"./dialog_modal.vue?vue&type=template&id=5b856fbc\"\nimport script from \"./dialog_modal.js?vue&type=script&lang=js\"\nexport * from \"./dialog_modal.js?vue&type=script&lang=js\"\n\nimport \"./dialog_modal.vue?vue&type=style&index=0&id=5b856fbc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n ref=\"root\"\n class=\"emoji-input\"\n :class=\"{ 'with-picker': !hideEmojiButton }\"\n >\n <slot\n :id=\"'textbox-' + randomSeed\"\n :aria-owns=\"suggestionListId\"\n aria-autocomplete=\"both\"\n :aria-expanded=\"showSuggestions\"\n :aria-activedescendant=\"(!showSuggestions || highlighted === -1) ? '' : suggestionItemId(highlighted)\"\n />\n <!-- TODO: make the 'x' disappear if at the end maybe? -->\n <div\n ref=\"hiddenOverlay\"\n class=\"hidden-overlay\"\n :style=\"overlayStyle\"\n :aria-hidden=\"true\"\n >\n <span>{{ preText }}</span>\n <span\n ref=\"hiddenOverlayCaret\"\n class=\"caret\"\n >x</span>\n <span>{{ postText }}</span>\n </div>\n <screen-reader-notice\n ref=\"screenReaderNotice\"\n aria-live=\"assertive\"\n />\n <template v-if=\"enableEmojiPicker\">\n <button\n v-if=\"!hideEmojiButton\"\n class=\"button-unstyled emoji-picker-icon\"\n type=\"button\"\n :title=\"$t('emoji.add_emoji')\"\n @click.prevent=\"togglePicker\"\n >\n <FAIcon :icon=\"['far', 'smile-beam']\" />\n </button>\n <EmojiPicker\n v-if=\"enableEmojiPicker\"\n ref=\"picker\"\n :enable-sticker-picker=\"enableStickerPicker\"\n class=\"emoji-picker-panel\"\n @emoji=\"insert\"\n @sticker-uploaded=\"onStickerUploaded\"\n @sticker-upload-failed=\"onStickerUploadFailed\"\n @show=\"onPickerShown\"\n @close=\"onPickerClosed\"\n />\n </template>\n <Popover\n ref=\"suggestorPopover\"\n class=\"autocomplete-panel\"\n placement=\"bottom\"\n :trigger-attrs=\"{ 'aria-hidden': true }\"\n >\n <template #content>\n <div\n :id=\"suggestionListId\"\n ref=\"panel-body\"\n class=\"autocomplete-panel-body\"\n role=\"listbox\"\n >\n <div\n v-for=\"(suggestion, index) in suggestions\"\n :id=\"suggestionItemId(index)\"\n :key=\"index\"\n class=\"autocomplete-item\"\n role=\"option\"\n :class=\"{ highlighted: index === highlighted }\"\n :aria-label=\"autoCompleteItemLabel(suggestion)\"\n :aria-selected=\"index === highlighted\"\n @click.stop.prevent=\"onClick($event, suggestion)\"\n >\n <span class=\"image\">\n <img\n v-if=\"suggestion.img\"\n :src=\"suggestion.img\"\n >\n <span v-else>{{ suggestion.replacement }}</span>\n </span>\n <div class=\"label\">\n <span\n v-if=\"suggestion.user\"\n class=\"displayText\"\n >\n {{ suggestion.displayText }}<UnicodeDomainIndicator\n :user=\"suggestion.user\"\n :at=\"false\"\n />\n </span>\n <span\n v-if=\"!suggestion.user\"\n class=\"displayText\"\n >\n {{ maybeLocalizedEmojiName(suggestion) }}\n </span>\n <span class=\"detailText\">{{ suggestion.detailText }}</span>\n </div>\n </div>\n </div>\n </template>\n </Popover>\n </div>\n</template>\n\n<script src=\"./emoji_input.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.emoji-input {\n display: flex;\n flex-direction: column;\n position: relative;\n\n .emoji-picker-icon {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0.2em 0.25em;\n font-size: 1.3em;\n cursor: pointer;\n line-height: 24px;\n\n &:hover i {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .emoji-picker-panel {\n position: absolute;\n z-index: 20;\n margin-top: 2px;\n\n &.hide {\n display: none;\n }\n }\n\n input,\n textarea {\n flex: 1 0 auto;\n }\n\n &.with-picker input {\n padding-right: 30px;\n }\n\n .hidden-overlay {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: hidden;\n\n /* DEBUG STUFF */\n color: red;\n\n /* set opacity to non-zero to see the overlay */\n\n .caret {\n width: 0;\n margin-right: calc(-1ch - 1px);\n border: 1px solid red;\n }\n }\n}\n\n.autocomplete {\n &-panel {\n position: absolute;\n }\n\n &-item {\n display: flex;\n cursor: pointer;\n padding: 0.2em 0.4em;\n border-bottom: 1px solid rgb(0 0 0 / 40%);\n height: 32px;\n\n .image {\n width: 32px;\n height: 32px;\n line-height: 32px;\n text-align: center;\n font-size: 32px;\n margin-right: 4px;\n\n img {\n width: 32px;\n height: 32px;\n object-fit: contain;\n }\n }\n\n .label {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 0.1em 0 0.2em;\n\n .displayText {\n line-height: 1.5;\n }\n\n .detailText {\n font-size: 9px;\n line-height: 9px;\n }\n }\n\n &.highlighted {\n background-color: $fallback--fg;\n background-color: var(--selectedMenuPopover, $fallback--fg);\n color: var(--selectedMenuPopoverText, $fallback--text);\n\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n}\n</style>\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 const 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","const ScreenReaderNotice = {\n props: {\n ariaLive: {\n type: String,\n defualt: 'assertive'\n }\n },\n data () {\n return {\n currentText: ''\n }\n },\n methods: {\n announce (text) {\n this.currentText = text\n setTimeout(() => { this.currentText = '' }, 1000)\n }\n }\n}\n\nexport default ScreenReaderNotice\n","import { render } from \"./screen_reader_notice.vue?vue&type=template&id=4978e64a\"\nimport script from \"./screen_reader_notice.js?vue&type=script&lang=js\"\nexport * from \"./screen_reader_notice.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"visible-for-screenreader-only\"\n :aria-live=\"ariaLive\"\n >\n {{ currentText }}\n </div>\n</template>\n\n<script src=\"./screen_reader_notice.js\"></script>\n","import Completion from '../../services/completion/completion.js'\nimport genRandomSeed from '../../services/random_seed/random_seed.service.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport Popover from 'src/components/popover/popover.vue'\nimport ScreenReaderNotice from 'src/components/screen_reader_notice/screen_reader_notice.vue'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport { take } from 'lodash'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { ensureFinalFallback } from '../../i18n/languages.js'\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 <input/> and <textarea/> elements\n *\n * Intended usage is:\n * <EmojiInput v-model=\"something\">\n * <input v-model=\"something\"/>\n * </EmojiInput>\n *\n * Works only with <input> and <textarea>. Intended to use with only one nested\n * input. It will find first input or textarea and work with that, multiple\n * nested children not tested. You HAVE TO duplicate v-model for both\n * <emoji-input> and <input>/<textarea> otherwise it will not work.\n *\n * Be prepared for CSS troubles though because it still wraps component in a div\n * while TRYING to make it look like nothing happened, but it could break stuff.\n */\n\nconst EmojiInput = {\n emits: ['update:modelValue', 'shown'],\n props: {\n suggest: {\n /**\n * suggest: function (input: String) => Suggestion[]\n *\n * Function that takes input string which takes string (textAtCaret)\n * and returns an array of Suggestions\n *\n * Suggestion is an object containing following properties:\n * displayText: string. Main display text, what actual suggestion\n * represents (user's screen name/emoji shortcode)\n * replacement: string. Text that should replace the textAtCaret\n * detailText: string, optional. Subtitle text, providing additional info\n * if present (user's nickname)\n * imageUrl: string, optional. Image to display alongside with suggestion,\n * currently if no image is provided, replacement will be used (for\n * unicode emojis)\n *\n * TODO: make it asynchronous when adding proper server-provided user\n * suggestions\n *\n * For commonly used suggestors (emoji, users, both) use suggestor.js\n */\n required: true,\n type: Function\n },\n modelValue: {\n /**\n * Used for v-model\n */\n required: true,\n type: String\n },\n enableEmojiPicker: {\n /**\n * Enables emoji picker support, this implies that custom emoji are supported\n */\n required: false,\n type: Boolean,\n default: false\n },\n hideEmojiButton: {\n /**\n * intended to use with external picker trigger, i.e. you have a button outside\n * input that will open up the picker, see triggerShowPicker()\n */\n required: false,\n type: Boolean,\n default: false\n },\n enableStickerPicker: {\n /**\n * Enables sticker picker support, only makes sense when enableEmojiPicker=true\n */\n required: false,\n type: Boolean,\n default: false\n },\n placement: {\n /**\n * Forces the panel to take a specific position relative to the input element.\n * The 'auto' placement chooses either bottom or top depending on which has the available space (when both have available space, bottom is preferred).\n */\n required: false,\n type: String, // 'auto', 'top', 'bottom'\n default: 'auto'\n },\n newlineOnCtrlEnter: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n randomSeed: genRandomSeed(),\n input: undefined,\n caretEl: undefined,\n highlighted: -1,\n caret: 0,\n focused: false,\n blurTimeout: null,\n temporarilyHideSuggestions: false,\n disableClickOutside: false,\n suggestions: [],\n overlayStyle: {},\n pickerShown: false\n }\n },\n components: {\n Popover,\n EmojiPicker,\n UnicodeDomainIndicator,\n ScreenReaderNotice\n },\n computed: {\n padEmoji () {\n return this.$store.getters.mergedConfig.padEmoji\n },\n defaultCandidateIndex () {\n return this.$store.getters.mergedConfig.autocompleteSelect ? 0 : -1\n },\n preText () {\n return this.modelValue.slice(0, this.caret)\n },\n postText () {\n return this.modelValue.slice(this.caret)\n },\n showSuggestions () {\n return this.focused &&\n this.suggestions &&\n this.suggestions.length > 0 &&\n !this.pickerShown &&\n !this.temporarilyHideSuggestions\n },\n textAtCaret () {\n return this.wordAtCaret?.word\n },\n wordAtCaret () {\n if (this.modelValue && this.caret) {\n const word = Completion.wordAtPosition(this.modelValue, this.caret - 1) || {}\n return word\n }\n },\n languages () {\n return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)\n },\n maybeLocalizedEmojiNamesAndKeywords () {\n return emoji => {\n const names = [emoji.displayText]\n const keywords = []\n\n if (emoji.displayTextI18n) {\n names.push(this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args))\n }\n\n if (emoji.annotations) {\n this.languages.forEach(lang => {\n names.push(emoji.annotations[lang]?.name)\n\n keywords.push(...(emoji.annotations[lang]?.keywords || []))\n })\n }\n\n return {\n names: names.filter(k => k),\n keywords: keywords.filter(k => k)\n }\n }\n },\n maybeLocalizedEmojiName () {\n return emoji => {\n if (!emoji.annotations) {\n return emoji.displayText\n }\n\n if (emoji.displayTextI18n) {\n return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)\n }\n\n for (const lang of this.languages) {\n if (emoji.annotations[lang]?.name) {\n return emoji.annotations[lang].name\n }\n }\n\n return emoji.displayText\n }\n },\n onInputScroll () {\n this.$refs.hiddenOverlay.scrollTo({\n top: this.input.scrollTop,\n left: this.input.scrollLeft\n })\n },\n suggestionListId () {\n return `suggestions-${this.randomSeed}`\n },\n suggestionItemId () {\n return (index) => `suggestion-item-${index}-${this.randomSeed}`\n }\n },\n mounted () {\n const { root, hiddenOverlayCaret, suggestorPopover } = this.$refs\n const input = root.querySelector('.emoji-input > input') || root.querySelector('.emoji-input > textarea')\n if (!input) return\n this.input = input\n this.caretEl = hiddenOverlayCaret\n if (suggestorPopover.setAnchorEl) {\n suggestorPopover.setAnchorEl(this.caretEl) // unit test compat\n this.$refs.picker.setAnchorEl(this.caretEl)\n } else {\n console.warn('setAnchorEl not found, are we in a unit test?')\n }\n const style = getComputedStyle(this.input)\n this.overlayStyle.padding = style.padding\n this.overlayStyle.border = style.border\n this.overlayStyle.margin = style.margin\n this.overlayStyle.lineHeight = style.lineHeight\n this.overlayStyle.fontFamily = style.fontFamily\n this.overlayStyle.fontSize = style.fontSize\n this.overlayStyle.wordWrap = style.wordWrap\n this.overlayStyle.whiteSpace = style.whiteSpace\n this.resize()\n input.addEventListener('blur', this.onBlur)\n input.addEventListener('focus', this.onFocus)\n input.addEventListener('paste', this.onPaste)\n input.addEventListener('keyup', this.onKeyUp)\n input.addEventListener('keydown', this.onKeyDown)\n input.addEventListener('click', this.onClickInput)\n input.addEventListener('transitionend', this.onTransition)\n input.addEventListener('input', this.onInput)\n input.addEventListener('scroll', this.onInputScroll)\n },\n unmounted () {\n const { input } = this\n if (input) {\n input.removeEventListener('blur', this.onBlur)\n input.removeEventListener('focus', this.onFocus)\n input.removeEventListener('paste', this.onPaste)\n input.removeEventListener('keyup', this.onKeyUp)\n input.removeEventListener('keydown', this.onKeyDown)\n input.removeEventListener('click', this.onClickInput)\n input.removeEventListener('transitionend', this.onTransition)\n input.removeEventListener('input', this.onInput)\n input.removeEventListener('scroll', this.onInputScroll)\n }\n },\n watch: {\n showSuggestions: function (newValue, oldValue) {\n this.$emit('shown', newValue)\n if (newValue) {\n this.$refs.suggestorPopover.showPopover()\n } else {\n this.$refs.suggestorPopover.hidePopover()\n }\n },\n textAtCaret: async function (newWord) {\n if (newWord === undefined) return\n const firstchar = newWord.charAt(0)\n if (newWord === firstchar) {\n this.suggestions = []\n return\n }\n const matchedSuggestions = await this.suggest(newWord, this.maybeLocalizedEmojiNamesAndKeywords)\n // Async: cancel if textAtCaret has changed during wait\n if (this.textAtCaret !== newWord || matchedSuggestions.length <= 0) {\n this.suggestions = []\n return\n }\n this.suggestions = take(matchedSuggestions, 5)\n .map(({ imageUrl, ...rest }) => ({\n ...rest,\n img: imageUrl || ''\n }))\n this.highlighted = this.defaultCandidateIndex\n this.$refs.screenReaderNotice.announce(\n this.$tc('tool_tip.autocomplete_available',\n this.suggestions.length,\n { number: this.suggestions.length }))\n }\n },\n methods: {\n triggerShowPicker () {\n this.$nextTick(() => {\n this.$refs.picker.showPicker()\n this.scrollIntoView()\n })\n // This temporarily disables \"click outside\" handler\n // since external trigger also means click originates\n // from outside, thus preventing picker from opening\n this.disableClickOutside = true\n setTimeout(() => {\n this.disableClickOutside = false\n }, 0)\n },\n togglePicker () {\n this.input.focus()\n if (!this.pickerShown) {\n this.scrollIntoView()\n this.$refs.picker.showPicker()\n this.$refs.picker.startEmojiLoad()\n } else {\n this.$refs.picker.hidePicker()\n }\n },\n replace (replacement) {\n const newValue = Completion.replaceWord(this.modelValue, this.wordAtCaret, replacement)\n this.$emit('update:modelValue', newValue)\n this.caret = 0\n },\n insert ({ insertion, keepOpen, surroundingSpace = true }) {\n const before = this.modelValue.substring(0, this.caret) || ''\n const after = this.modelValue.substring(this.caret) || ''\n\n /* Using a bit more smart approach to padding emojis with spaces:\n * - put a space before cursor if there isn't one already, unless we\n * are at the beginning of post or in spam mode\n * - put a space after emoji if there isn't one already unless we are\n * in spam mode\n *\n * The idea is that when you put a cursor somewhere in between sentence\n * inserting just ' :emoji: ' will add more spaces to post which might\n * break the flow/spacing, as well as the case where user ends sentence\n * with a space before adding emoji.\n *\n * Spam mode is intended for creating multi-part emojis and overall spamming\n * them, masto seem to be rendering :emoji::emoji: correctly now so why not\n */\n const isSpaceRegex = /\\s/\n const spaceBefore = (surroundingSpace && !isSpaceRegex.exec(before.slice(-1)) && before.length && this.padEmoji > 0) ? ' ' : ''\n const spaceAfter = (surroundingSpace && !isSpaceRegex.exec(after[0]) && this.padEmoji) ? ' ' : ''\n\n const newValue = [\n before,\n spaceBefore,\n insertion,\n spaceAfter,\n after\n ].join('')\n this.$emit('update:modelValue', newValue)\n const position = this.caret + (insertion + spaceAfter + spaceBefore).length\n if (!keepOpen) {\n this.input.focus()\n }\n\n this.$nextTick(function () {\n // Re-focus inputbox after clicking suggestion\n // Set selection right after the replacement instead of the very end\n this.input.setSelectionRange(position, position)\n this.caret = position\n })\n },\n replaceText (e, suggestion) {\n const len = this.suggestions.length || 0\n if (this.textAtCaret.length === 1) { return }\n if (len > 0 || suggestion) {\n const chosenSuggestion = suggestion || this.suggestions[this.highlighted]\n const replacement = chosenSuggestion.replacement\n const newValue = Completion.replaceWord(this.modelValue, this.wordAtCaret, replacement)\n this.$emit('update:modelValue', newValue)\n this.highlighted = 0\n const position = this.wordAtCaret.start + replacement.length\n\n this.$nextTick(function () {\n // Re-focus inputbox after clicking suggestion\n this.input.focus()\n // Set selection right after the replacement instead of the very end\n this.input.setSelectionRange(position, position)\n this.caret = position\n })\n e.preventDefault()\n }\n },\n cycleBackward (e) {\n const len = this.suggestions.length || 0\n\n this.highlighted -= 1\n if (this.highlighted === -1) {\n this.input.focus()\n } else if (this.highlighted < -1) {\n this.highlighted = len - 1\n }\n if (len > 0) {\n e.preventDefault()\n }\n },\n cycleForward (e) {\n const len = this.suggestions.length || 0\n\n this.highlighted += 1\n if (this.highlighted >= len) {\n this.highlighted = -1\n this.input.focus()\n }\n if (len > 0) {\n e.preventDefault()\n }\n },\n scrollIntoView () {\n const rootRef = this.$refs.picker.$el\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const scrollerRef = this.$el.closest('.sidebar-scroller') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n\n const scrollerBottomBorder = currentScroll + scrollerHeight\n // We check where the bottom border of root element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const rootBottomBorder = rootRef.offsetHeight + findOffset(rootRef, scrollerRef).top\n\n const bottomDelta = Math.max(0, rootBottomBorder - scrollerBottomBorder)\n // could also check top delta but there's no case for it\n const targetScroll = currentScroll + bottomDelta\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n\n this.$nextTick(() => {\n const { offsetHeight } = this.input\n const { picker } = this.$refs\n const pickerBottom = picker.$el.getBoundingClientRect().bottom\n if (pickerBottom > window.innerHeight) {\n picker.$el.style.top = 'auto'\n picker.$el.style.bottom = offsetHeight + 'px'\n }\n })\n },\n onPickerShown () {\n this.pickerShown = true\n },\n onPickerClosed () {\n this.pickerShown = false\n },\n onBlur (e) {\n // Clicking on any suggestion removes focus from autocomplete,\n // preventing click handler ever executing.\n this.blurTimeout = setTimeout(() => {\n this.focused = false\n this.setCaret(e)\n }, 200)\n },\n onClick (e, suggestion) {\n this.replaceText(e, suggestion)\n },\n onFocus (e) {\n if (this.blurTimeout) {\n clearTimeout(this.blurTimeout)\n this.blurTimeout = null\n }\n\n this.focused = true\n this.setCaret(e)\n this.temporarilyHideSuggestions = false\n },\n onKeyUp (e) {\n const { key } = e\n this.setCaret(e)\n\n // Setting hider in keyUp to prevent suggestions from blinking\n // when moving away from suggested spot\n if (key === 'Escape') {\n this.temporarilyHideSuggestions = true\n } else {\n this.temporarilyHideSuggestions = false\n }\n },\n onPaste (e) {\n this.setCaret(e)\n },\n onKeyDown (e) {\n const { ctrlKey, shiftKey, key } = e\n if (this.newlineOnCtrlEnter && ctrlKey && key === 'Enter') {\n this.insert({ insertion: '\\n', surroundingSpace: false })\n // Ensure only one new line is added on macos\n e.stopPropagation()\n e.preventDefault()\n\n // Scroll the input element to the position of the cursor\n this.$nextTick(() => {\n this.input.blur()\n this.input.focus()\n })\n }\n // Disable suggestions hotkeys if suggestions are hidden\n if (!this.temporarilyHideSuggestions) {\n if (key === 'Tab') {\n if (shiftKey) {\n this.cycleBackward(e)\n } else {\n this.cycleForward(e)\n }\n }\n if (key === 'ArrowUp') {\n this.cycleBackward(e)\n } else if (key === 'ArrowDown') {\n this.cycleForward(e)\n }\n if (key === 'Enter') {\n if (!ctrlKey) {\n this.replaceText(e)\n }\n }\n }\n // Probably add optional keyboard controls for emoji picker?\n\n // Escape hides suggestions, if suggestions are hidden it\n // de-focuses the element (i.e. default browser behavior)\n if (key === 'Escape') {\n if (!this.temporarilyHideSuggestions) {\n this.input.focus()\n }\n }\n },\n onInput (e) {\n this.setCaret(e)\n this.$emit('update:modelValue', e.target.value)\n },\n onStickerUploaded (e) {\n this.$emit('sticker-uploaded', e)\n },\n onStickerUploadFailed (e) {\n this.$emit('sticker-upload-Failed', e)\n },\n setCaret ({ target: { selectionStart } }) {\n this.caret = selectionStart\n this.$nextTick(() => {\n this.$refs.suggestorPopover.updateStyles()\n })\n },\n resize () {\n },\n autoCompleteItemLabel (suggestion) {\n if (suggestion.user) {\n return suggestion.displayText + ' ' + suggestion.detailText\n } else {\n return this.maybeLocalizedEmojiName(suggestion)\n }\n }\n }\n}\n\nexport default EmojiInput\n","import { render } from \"./emoji_input.vue?vue&type=template&id=401ef83a\"\nimport script from \"./emoji_input.js?vue&type=script&lang=js\"\nexport * from \"./emoji_input.js?vue&type=script&lang=js\"\n\nimport \"./emoji_input.vue?vue&type=style&index=0&id=401ef83a&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n ref=\"popover\"\n trigger=\"click\"\n popover-class=\"emoji-picker popover-default\"\n :trigger-attrs=\"{ 'aria-hidden': true, tabindex: -1 }\"\n @show=\"onPopoverShown\"\n @close=\"onPopoverClosed\"\n >\n <template #content>\n <div class=\"heading\">\n <!--\n Body scroll lock needs to be on every scrollable element on safari iOS.\n Here we tell it to enable scrolling for this element.\n See https://github.com/willmcpo/body-scroll-lock#vanilla-js\n -->\n <span\n ref=\"header\"\n v-body-scroll-lock=\"isInModal\"\n class=\"emoji-tabs\"\n >\n <span\n v-for=\"group in filteredEmojiGroups\"\n :ref=\"setGroupRef('group-header-' + group.id)\"\n :key=\"group.id\"\n class=\"emoji-tabs-item\"\n :class=\"{\n active: activeGroupView === group.id\n }\"\n :title=\"group.text\"\n role=\"button\"\n @click.prevent=\"highlight(group.id)\"\n >\n <span\n v-if=\"group.image\"\n class=\"emoji-picker-header-image\"\n >\n <still-image\n :alt=\"group.text\"\n :src=\"group.image\"\n />\n </span>\n <FAIcon\n v-else\n :icon=\"group.icon\"\n fixed-width\n />\n </span>\n </span>\n <span\n v-if=\"stickerPickerEnabled\"\n class=\"additional-tabs\"\n >\n <span\n class=\"stickers-tab-icon additional-tabs-item\"\n :class=\"{active: showingStickers}\"\n :title=\"$t('emoji.stickers')\"\n @click.prevent=\"toggleStickers\"\n >\n <FAIcon\n icon=\"sticky-note\"\n fixed-width\n />\n </span>\n </span>\n </div>\n <div\n v-if=\"contentLoaded\"\n class=\"content\"\n >\n <div\n class=\"emoji-content\"\n :class=\"{hidden: showingStickers}\"\n >\n <div class=\"emoji-search\">\n <input\n ref=\"search\"\n v-model=\"keyword\"\n type=\"text\"\n class=\"form-control\"\n :placeholder=\"$t('emoji.search_emoji')\"\n @input=\"$event.target.composing = false\"\n >\n </div>\n <!-- Enables scrolling for this element on safari iOS. See comments for header. -->\n <DynamicScroller\n ref=\"emoji-groups\"\n v-body-scroll-lock=\"isInModal\"\n class=\"emoji-groups\"\n :class=\"groupsScrolledClass\"\n :min-item-size=\"minItemSize\"\n :items=\"emojiItems\"\n :emit-update=\"true\"\n @update=\"onScroll\"\n @visible=\"recalculateItemPerRow\"\n @resize=\"recalculateItemPerRow\"\n >\n <template #default=\"{ item: group, index, active }\">\n <DynamicScrollerItem\n :ref=\"setGroupRef('group-' + group.id)\"\n :item=\"group\"\n :active=\"active\"\n :data-index=\"index\"\n :size-dependencies=\"[group.emojis.length]\"\n >\n <div\n class=\"emoji-group\"\n >\n <h6\n v-if=\"group.isFirstRow\"\n class=\"emoji-group-title\"\n >\n {{ group.text }}\n </h6>\n <span\n v-for=\"emoji in group.emojis\"\n :key=\"group.id + emoji.displayText\"\n :title=\"maybeLocalizedEmojiName(emoji)\"\n class=\"emoji-item\"\n role=\"button\"\n @click.stop.prevent=\"onEmoji(emoji)\"\n >\n <span\n v-if=\"!emoji.imageUrl\"\n class=\"emoji-picker-emoji -unicode\"\n >{{ emoji.replacement }}</span>\n <still-image\n v-else\n class=\"emoji-picker-emoji -custom\"\n loading=\"lazy\"\n :alt=\"maybeLocalizedEmojiName(emoji)\"\n :src=\"emoji.imageUrl\"\n :data-emoji-name=\"group.id + emoji.displayText\"\n />\n </span>\n </div>\n </DynamicScrollerItem>\n </template>\n </DynamicScroller>\n <div class=\"keep-open\">\n <Checkbox v-model=\"keepOpen\">\n {{ $t('emoji.keep_open') }}\n </Checkbox>\n </div>\n </div>\n <div\n v-if=\"showingStickers\"\n class=\"stickers-content\"\n >\n <sticker-picker\n @uploaded=\"onStickerUploaded\"\n @upload-failed=\"onStickerUploadFailed\"\n />\n </div>\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./emoji_picker.js\"></script>\n<style lang=\"scss\" src=\"./emoji_picker.scss\"></style>\n","import { defineAsyncComponent } from 'vue'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Popover from 'src/components/popover/popover.vue'\nimport StillImage from '../still-image/still-image.vue'\nimport { ensureFinalFallback } from '../../i18n/languages.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBoxOpen,\n faStickyNote,\n faSmileBeam,\n faSmile,\n faUser,\n faPaw,\n faIceCream,\n faBus,\n faBasketballBall,\n faLightbulb,\n faCode,\n faFlag\n} from '@fortawesome/free-solid-svg-icons'\nimport { debounce, trim, chunk } from 'lodash'\n\nlibrary.add(\n faBoxOpen,\n faStickyNote,\n faSmileBeam,\n faSmile,\n faUser,\n faPaw,\n faIceCream,\n faBus,\n faBasketballBall,\n faLightbulb,\n faCode,\n faFlag\n)\n\nconst UNICODE_EMOJI_GROUP_ICON = {\n 'smileys-and-emotion': 'smile',\n 'people-and-body': 'user',\n 'animals-and-nature': 'paw',\n 'food-and-drink': 'ice-cream',\n 'travel-and-places': 'bus',\n activities: 'basketball-ball',\n objects: 'lightbulb',\n symbols: 'code',\n flags: 'flag'\n}\n\nconst maybeLocalizedKeywords = (emoji, languages, nameLocalizer) => {\n const res = [emoji.displayText, nameLocalizer(emoji)]\n if (emoji.annotations) {\n languages.forEach(lang => {\n const keywords = emoji.annotations[lang]?.keywords || []\n const name = emoji.annotations[lang]?.name\n res.push(...(keywords.concat([name]).filter(k => k)))\n })\n }\n return res\n}\n\nconst filterByKeyword = (list, keyword = '', languages, nameLocalizer) => {\n if (keyword === '') return list\n\n const keywordLowercase = keyword.toLowerCase()\n const orderedEmojiList = []\n for (const emoji of list) {\n const indices = maybeLocalizedKeywords(emoji, languages, nameLocalizer)\n .map(k => k.toLowerCase().indexOf(keywordLowercase))\n .filter(k => k > -1)\n\n const indexOfKeyword = indices.length ? Math.min(...indices) : -1\n\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 getOffset = (elem) => {\n const style = elem.style.transform\n const res = /translateY\\((\\d+)px\\)/.exec(style)\n if (!res) { return 0 }\n return res[1]\n}\n\nconst toHeaderId = id => {\n return id.replace(/^row-\\d+-/, '')\n}\n\nconst EmojiPicker = {\n props: {\n enableStickerPicker: {\n required: false,\n type: Boolean,\n default: false\n },\n hideCustomEmoji: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n inject: ['popoversZLayer'],\n data () {\n return {\n keyword: '',\n activeGroup: 'custom',\n showingStickers: false,\n groupsScrolledClass: 'scrolled-top',\n keepOpen: false,\n customEmojiTimeout: null,\n // Lazy-load only after the first time `showing` becomes true.\n contentLoaded: false,\n groupRefs: {},\n emojiRefs: {},\n filteredEmojiGroups: [],\n width: 0\n }\n },\n components: {\n StickerPicker: defineAsyncComponent(() => import('../sticker_picker/sticker_picker.vue')),\n Checkbox,\n StillImage,\n Popover\n },\n methods: {\n showPicker () {\n this.$refs.popover.showPopover()\n this.onShowing()\n },\n hidePicker () {\n this.$refs.popover.hidePopover()\n },\n setAnchorEl (el) {\n this.$refs.popover.setAnchorEl(el)\n },\n setGroupRef (name) {\n return el => { this.groupRefs[name] = el }\n },\n onPopoverShown () {\n this.$emit('show')\n },\n onPopoverClosed () {\n this.$emit('close')\n },\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 if (!this.keepOpen) {\n this.$refs.popover.hidePopover()\n }\n this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })\n },\n onScroll (startIndex, endIndex, visibleStartIndex, visibleEndIndex) {\n const target = this.$refs['emoji-groups'].$el\n this.scrolledGroup(target, visibleStartIndex, visibleEndIndex)\n },\n scrolledGroup (target, start, end) {\n const top = target.scrollTop + 5\n this.$nextTick(() => {\n this.emojiItems.slice(start, end + 1).forEach(group => {\n const headerId = toHeaderId(group.id)\n const ref = this.groupRefs['group-' + group.id]\n if (!ref) { return }\n const elem = ref.$el.parentElement\n if (!elem) { return }\n if (elem && getOffset(elem) <= top) {\n this.activeGroup = headerId\n }\n })\n this.scrollHeader()\n })\n },\n scrollHeader () {\n // Scroll the active tab's header into view\n const headerRef = this.groupRefs['group-header-' + this.activeGroup]\n const left = headerRef.offsetLeft\n const right = left + headerRef.offsetWidth\n const headerCont = this.$refs.header\n const currentScroll = headerCont.scrollLeft\n const currentScrollRight = currentScroll + headerCont.clientWidth\n const setScroll = s => { headerCont.scrollLeft = s }\n\n const margin = 7 // .emoji-tabs-item: padding\n if (left - margin < currentScroll) {\n setScroll(left - margin)\n } else if (right + margin > currentScrollRight) {\n setScroll(right + margin - headerCont.clientWidth)\n }\n },\n highlight (groupId) {\n this.setShowStickers(false)\n const indexInList = this.emojiItems.findIndex(k => k.id === groupId)\n this.$refs['emoji-groups'].scrollToItem(indexInList)\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 toggleStickers () {\n this.showingStickers = !this.showingStickers\n },\n setShowStickers (value) {\n this.showingStickers = value\n },\n filterByKeyword (list, keyword) {\n return filterByKeyword(list, keyword, this.languages, this.maybeLocalizedEmojiName)\n },\n onShowing () {\n const oldContentLoaded = this.contentLoaded\n this.recalculateItemPerRow()\n this.$nextTick(() => {\n this.$refs.search.focus()\n })\n this.contentLoaded = true\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n if (!oldContentLoaded) {\n this.$nextTick(() => {\n if (this.defaultGroup) {\n this.highlight(this.defaultGroup)\n }\n })\n }\n },\n getFilteredEmojiGroups () {\n return this.allEmojiGroups\n .map(group => ({\n ...group,\n emojis: this.filterByKeyword(group.emojis, trim(this.keyword))\n }))\n .filter(group => group.emojis.length > 0)\n },\n recalculateItemPerRow () {\n this.$nextTick(() => {\n if (!this.$refs['emoji-groups']) {\n return\n }\n this.width = this.$refs['emoji-groups'].$el.clientWidth\n })\n }\n },\n watch: {\n keyword () {\n this.onScroll()\n this.debouncedHandleKeywordChange()\n },\n allCustomGroups () {\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n }\n },\n computed: {\n minItemSize () {\n return this.emojiHeight\n },\n emojiHeight () {\n return 32 + 4\n },\n emojiWidth () {\n return 32 + 4\n },\n itemPerRow () {\n return this.width ? Math.floor(this.width / this.emojiWidth - 1) : 6\n },\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 allCustomGroups () {\n if (this.hideCustomEmoji) {\n return {}\n }\n const emojis = this.$store.getters.groupedCustomEmojis\n if (emojis.unpacked) {\n emojis.unpacked.text = this.$t('emoji.unpacked')\n }\n return emojis\n },\n defaultGroup () {\n return Object.keys(this.allCustomGroups)[0]\n },\n unicodeEmojiGroups () {\n return this.$store.getters.standardEmojiGroupList.map(group => ({\n id: `standard-${group.id}`,\n text: this.$t(`emoji.unicode_groups.${group.id}`),\n icon: UNICODE_EMOJI_GROUP_ICON[group.id],\n emojis: group.emojis\n }))\n },\n allEmojiGroups () {\n return Object.entries(this.allCustomGroups)\n .map(([_, v]) => v)\n .concat(this.unicodeEmojiGroups)\n },\n stickerPickerEnabled () {\n return (this.$store.state.instance.stickers || []).length !== 0\n },\n debouncedHandleKeywordChange () {\n return debounce(() => {\n this.filteredEmojiGroups = this.getFilteredEmojiGroups()\n }, 500)\n },\n emojiItems () {\n return this.filteredEmojiGroups.map(group =>\n chunk(group.emojis, this.itemPerRow)\n .map((items, index) => ({\n ...group,\n id: index === 0 ? group.id : `row-${index}-${group.id}`,\n emojis: items,\n isFirstRow: index === 0\n })))\n .reduce((a, c) => a.concat(c), [])\n },\n languages () {\n return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)\n },\n maybeLocalizedEmojiName () {\n return emoji => {\n if (!emoji.annotations) {\n return emoji.displayText\n }\n\n if (emoji.displayTextI18n) {\n return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)\n }\n\n for (const lang of this.languages) {\n if (emoji.annotations[lang]?.name) {\n return emoji.annotations[lang].name\n }\n }\n\n return emoji.displayText\n }\n },\n isInModal () {\n return this.popoversZLayer === 'modals'\n }\n }\n}\n\nexport default EmojiPicker\n","import { render } from \"./emoji_picker.vue?vue&type=template&id=81286978\"\nimport script from \"./emoji_picker.js?vue&type=script&lang=js\"\nexport * from \"./emoji_picker.js?vue&type=script&lang=js\"\n\nimport \"./emoji_picker.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","const createRuffleService = () => {\n let ruffleInstance = null\n\n const getRuffle = () => new Promise((resolve, reject) => {\n if (ruffleInstance) {\n resolve(ruffleInstance)\n return\n }\n // Ruffle needs these to be set before it's loaded\n // https://github.com/ruffle-rs/ruffle/issues/3952\n window.RufflePlayer = {}\n window.RufflePlayer.config = {\n polyfills: false,\n publicPath: '/static/ruffle'\n }\n\n // Currently it's seems like a better way of loading ruffle\n // because it needs the wasm publically accessible, but it needs path to it\n // and filename of wasm seems to be pseudo-randomly generated (is it a hash?)\n const script = document.createElement('script')\n // see webpack config, using CopyPlugin to copy it from node_modules\n // provided via ruffle-mirror\n script.src = '/static/ruffle/ruffle.js'\n script.type = 'text/javascript'\n script.onerror = (e) => { reject(e) }\n script.onabort = (e) => { reject(e) }\n script.oncancel = (e) => { reject(e) }\n script.onload = () => {\n ruffleInstance = window.RufflePlayer\n resolve(ruffleInstance)\n }\n document.body.appendChild(script)\n })\n\n return { getRuffle }\n}\n\nconst RuffleService = createRuffleService()\n\nexport default RuffleService\n","<template>\n <div class=\"Flash\">\n <div\n v-if=\"player === true || player === 'hidden'\"\n ref=\"container\"\n class=\"player\"\n :class=\"{ hidden: player === 'hidden' }\"\n />\n <button\n v-if=\"player !== true\"\n class=\"button-unstyled placeholder\"\n @click=\"openPlayer\"\n >\n <span\n v-if=\"player === 'hidden'\"\n class=\"label\"\n >\n {{ $t('general.loading') }}\n </span>\n <span\n v-if=\"player === 'error'\"\n class=\"label\"\n >\n {{ $t('general.flash_fail') }}\n </span>\n <span\n v-else\n class=\"label\"\n >\n <p>\n {{ $t('general.flash_content') }}\n </p>\n <p>\n <FAIcon icon=\"exclamation-triangle\" />\n {{ $t('general.flash_security') }}\n </p>\n </span>\n </button>\n </div>\n</template>\n\n<script src=\"./flash.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Flash {\n display: inline-block;\n width: 100%;\n height: 100%;\n position: relative;\n\n .player {\n height: 100%;\n width: 100%;\n }\n\n .placeholder {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--bg);\n color: var(--link);\n }\n\n .hider {\n top: 0;\n }\n\n .label {\n text-align: center;\n flex: 1 1 0;\n line-height: 1.2;\n white-space: normal;\n word-wrap: normal;\n }\n\n .hidden {\n display: none;\n visibility: \"hidden\";\n }\n}\n</style>\n","import RuffleService from '../../services/ruffle_service/ruffle_service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faStop,\n faExclamationTriangle\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faStop,\n faExclamationTriangle\n)\n\nconst Flash = {\n props: ['src'],\n data () {\n return {\n player: false, // can be true, \"hidden\", false. hidden = element exists\n loaded: false,\n ruffleInstance: null\n }\n },\n methods: {\n openPlayer () {\n if (this.player) return // prevent double-loading, or re-loading on failure\n this.player = 'hidden'\n RuffleService.getRuffle().then((ruffle) => {\n const player = ruffle.newest().createPlayer()\n player.config = {\n letterbox: 'on'\n }\n const container = this.$refs.container\n container.appendChild(player)\n player.style.width = '100%'\n player.style.height = '100%'\n player.load(this.src).then(() => {\n this.player = true\n }).catch((e) => {\n console.error('Error loading ruffle', e)\n this.player = 'error'\n })\n this.ruffleInstance = player\n this.$emit('playerOpened')\n })\n },\n closePlayer () {\n this.ruffleInstance && this.ruffleInstance.remove()\n this.player = false\n this.$emit('playerClosed')\n }\n }\n}\n\nexport default Flash\n","import { render } from \"./flash.vue?vue&type=template&id=651ce37d\"\nimport script from \"./flash.js?vue&type=script&lang=js\"\nexport * from \"./flash.js?vue&type=script&lang=js\"\n\nimport \"./flash.vue?vue&type=style&index=0&id=651ce37d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","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 ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'\nexport default {\n props: ['relationship', 'user', 'labelFollowing', 'buttonClass'],\n components: {\n ConfirmModal\n },\n data () {\n return {\n inProgress: false,\n showingConfirmUnfollow: false\n }\n },\n computed: {\n shouldConfirmUnfollow () {\n return this.$store.getters.mergedConfig.modalOnUnfollow\n },\n isPressed () {\n return this.inProgress || this.relationship.following\n },\n title () {\n if (this.inProgress || this.relationship.following) {\n return this.$t('user_card.follow_unfollow')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_cancel')\n } else {\n return this.$t('user_card.follow')\n }\n },\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else if (this.relationship.following) {\n return this.labelFollowing || this.$t('user_card.following')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_sent')\n } else {\n return this.$t('user_card.follow')\n }\n },\n disabled () {\n return this.inProgress || this.user.deactivated\n }\n },\n methods: {\n showConfirmUnfollow () {\n this.showingConfirmUnfollow = true\n },\n hideConfirmUnfollow () {\n this.showingConfirmUnfollow = false\n },\n onClick () {\n this.relationship.following || this.relationship.requested ? this.unfollow() : this.follow()\n },\n follow () {\n this.inProgress = true\n requestFollow(this.relationship.id, this.$store).then(() => {\n this.inProgress = false\n })\n },\n unfollow () {\n if (this.shouldConfirmUnfollow) {\n this.showConfirmUnfollow()\n } else {\n this.doUnfollow()\n }\n },\n doUnfollow () {\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 this.hideConfirmUnfollow()\n }\n }\n}\n","import { render } from \"./follow_button.vue?vue&type=template&id=6a0717e7\"\nimport script from \"./follow_button.js?vue&type=script&lang=js\"\nexport * from \"./follow_button.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"btn button-default follow-button\"\n :class=\"{ toggled: isPressed }\"\n :disabled=\"disabled\"\n :title=\"title\"\n @click=\"onClick\"\n >\n {{ label }}\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmUnfollow\"\n :title=\"$t('user_card.unfollow_confirm_title')\"\n :confirm-text=\"$t('user_card.unfollow_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.unfollow_confirm_cancel_button')\"\n @accepted=\"doUnfollow\"\n @cancelled=\"hideConfirmUnfollow\"\n >\n <i18n-t\n keypath=\"user_card.unfollow_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </button>\n</template>\n\n<script src=\"./follow_button.js\"></script>\n","<template>\n <div\n ref=\"galleryContainer\"\n class=\"Gallery\"\n :class=\"{ '-long': tooManyAttachments && hidingLong }\"\n >\n <div class=\"gallery-rows\">\n <div\n v-for=\"(row, rowIndex) in rows\"\n :key=\"rowIndex\"\n class=\"gallery-row\"\n :style=\"rowStyle(row)\"\n :class=\"{ '-audio': row.audio, '-minimal': row.minimal, '-grid': grid }\"\n >\n <div\n class=\"gallery-row-inner\"\n :class=\"{ '-grid': grid }\"\n >\n <Attachment\n v-for=\"(attachment, attachmentIndex) in row.items\"\n :key=\"attachment.id\"\n class=\"gallery-item\"\n :compact=\"compact\"\n :nsfw=\"nsfw\"\n :attachment=\"attachment\"\n :size=\"size\"\n :editable=\"editable\"\n :remove=\"removeAttachment\"\n :shift-up=\"!(attachmentIndex === 0 && rowIndex === 0) && shiftUpAttachment\"\n :shift-dn=\"!(attachmentIndex === row.items.length - 1 && rowIndex === rows.length - 1) && shiftDnAttachment\"\n :edit=\"editAttachment\"\n :description=\"descriptions && descriptions[attachment.id]\"\n :hide-description=\"size === 'small' || tooManyAttachments && hidingLong\"\n :style=\"itemStyle(attachment.id, row.items)\"\n @setMedia=\"onMedia\"\n @naturalSizeLoad=\"onNaturalSizeLoad\"\n />\n </div>\n </div>\n </div>\n <div\n v-if=\"tooManyAttachments\"\n class=\"many-attachments\"\n >\n <div class=\"many-attachments-text\">\n {{ $t(\"status.many_attachments\", { number: attachments.length }) }}\n </div>\n <div class=\"many-attachments-buttons\">\n <span\n v-if=\"!hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"toggleHidingLong(true)\"\n >\n {{ $t(\"status.collapse_attachments\") }}\n </button>\n </span>\n <span\n v-if=\"hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"toggleHidingLong(false)\"\n >\n {{ $t(\"status.show_all_attachments\") }}\n </button>\n </span>\n <span\n v-if=\"hidingLong\"\n class=\"many-attachments-button\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"openGallery\"\n >\n {{ $t(\"status.open_gallery\") }}\n </button>\n </span>\n </div>\n </div>\n </div>\n</template>\n\n<script src='./gallery.js'></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Gallery {\n .gallery-rows {\n display: flex;\n flex-direction: column;\n }\n\n .gallery-row {\n position: relative;\n height: 0;\n width: 100%;\n flex-grow: 1;\n\n .gallery-row-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-flow: row wrap;\n align-content: stretch;\n\n .gallery-item {\n margin: 0 0.5em 0 0;\n flex-grow: 1;\n height: 100%;\n box-sizing: border-box;\n // to make failed images a bit more noticeable on chromium\n min-width: 2em;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &.-grid {\n width: 100%;\n height: auto;\n position: relative;\n display: grid;\n grid-gap: 0.5em;\n grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));\n\n .gallery-item {\n margin: 0;\n height: 200px;\n }\n }\n }\n\n &.-grid,\n &.-minimal {\n height: auto;\n\n .gallery-row-inner {\n position: relative;\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.5em;\n }\n }\n\n &.-long {\n .gallery-rows {\n max-height: 25em;\n overflow: hidden;\n mask:\n linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,\n linear-gradient(to top, white, white);\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n }\n }\n\n .many-attachments-text {\n text-align: center;\n line-height: 2;\n }\n\n .many-attachments-buttons {\n display: flex;\n }\n\n .many-attachments-button {\n display: flex;\n flex: 1;\n justify-content: center;\n line-height: 2;\n\n button {\n padding: 0 2em;\n }\n }\n}\n</style>\n","import Attachment from '../attachment/attachment.vue'\nimport { sumBy, set } from 'lodash'\n\nconst Gallery = {\n props: [\n 'attachments',\n 'compact',\n 'limitRows',\n 'descriptions',\n 'limit',\n 'nsfw',\n 'setMedia',\n 'size',\n 'editable',\n 'removeAttachment',\n 'shiftUpAttachment',\n 'shiftDnAttachment',\n 'editAttachment',\n 'grid'\n ],\n data () {\n return {\n sizes: {},\n hidingLong: true\n }\n },\n components: { Attachment },\n computed: {\n rows () {\n if (!this.attachments) {\n return []\n }\n const attachments = this.limit > 0\n ? this.attachments.slice(0, this.limit)\n : this.attachments\n if (this.size === 'hide') {\n return attachments.map(item => ({ minimal: true, items: [item] }))\n }\n const rows = this.grid\n ? [{ grid: true, items: attachments }]\n : attachments.reduce((acc, attachment, i) => {\n if (attachment.mimetype.includes('audio')) {\n return [...acc, { audio: true, items: [attachment] }, { items: [] }]\n }\n if (!(\n attachment.mimetype.includes('image') ||\n attachment.mimetype.includes('video') ||\n attachment.mimetype.includes('flash')\n )) {\n return [...acc, { minimal: true, items: [attachment] }, { items: [] }]\n }\n const maxPerRow = 3\n const attachmentsRemaining = this.attachments.length - i + 1\n const currentRow = acc[acc.length - 1].items\n currentRow.push(attachment)\n if (currentRow.length >= maxPerRow && attachmentsRemaining > maxPerRow) {\n return [...acc, { items: [] }]\n } else {\n return acc\n }\n }, [{ items: [] }]).filter(_ => _.items.length > 0)\n return rows\n },\n attachmentsDimensionalScore () {\n return this.rows.reduce((acc, row) => {\n let size = 0\n if (row.minimal) {\n size += 1 / 8\n } else if (row.audio) {\n size += 1 / 4\n } else {\n size += 1 / (row.items.length + 0.6)\n }\n return acc + size\n }, 0)\n },\n tooManyAttachments () {\n if (this.editable || this.size === 'small') {\n return false\n } else if (this.size === 'hide') {\n return this.attachments.length > 8\n } else {\n return this.attachmentsDimensionalScore > 1\n }\n }\n },\n methods: {\n onNaturalSizeLoad ({ id, width, height }) {\n set(this.sizes, id, { width, height })\n },\n rowStyle (row) {\n if (row.audio) {\n return { 'padding-bottom': '25%' } // fixed reduced height for audio\n } else if (!row.minimal && !row.grid) {\n return { 'padding-bottom': `${(100 / (row.items.length + 0.6))}%` }\n }\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 toggleHidingLong (event) {\n this.hidingLong = event\n },\n openGallery () {\n this.$store.dispatch('setMedia', this.attachments)\n this.$store.dispatch('setCurrentMedia', this.attachments[0])\n },\n onMedia () {\n this.$store.dispatch('setMedia', this.attachments)\n }\n }\n}\n\nexport default Gallery\n","import { render } from \"./gallery.vue?vue&type=template&id=3f62ea7c\"\nimport script from \"./gallery.js?vue&type=script&lang=js\"\nexport * from \"./gallery.js?vue&type=script&lang=js\"\n\nimport \"./gallery.vue?vue&type=style&index=0&id=3f62ea7c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"interface-language-switcher\">\n <label>\n {{ promptText }}\n </label>\n <ul class=\"setting-list\">\n <li\n v-for=\"index of controlledLanguage.keys()\"\n :key=\"index\"\n >\n <label>\n {{ index === 0 ? $t('settings.primary_language') : $tc('settings.fallback_language', index, { index }) }}\n <Select\n class=\"language-select\"\n :model-value=\"controlledLanguage[index]\"\n @update:modelValue=\"val => setLanguageAt(index, val)\"\n >\n <option\n v-for=\"lang in languages\"\n :key=\"lang.code\"\n :value=\"lang.code\"\n >\n {{ lang.name }}\n </option>\n </Select>\n </label>\n <button\n v-if=\"controlledLanguage.length > 1 && index !== 0\"\n class=\"button-default btn\"\n @click=\"() => removeLanguageAt(index)\"\n >\n {{ $t('settings.remove_language') }}\n </button>\n </li>\n <li>\n <button\n class=\"button-default btn\"\n @click=\"addLanguage\"\n >\n {{ $t('settings.add_language') }}\n </button>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\nimport localeService from '../../services/locale/locale.service.js'\nimport Select from '../select/select.vue'\n\nexport default {\n components: {\n // eslint-disable-next-line vue/no-reserved-component-names\n Select\n },\n props: {\n promptText: {\n type: String,\n required: true\n },\n language: {\n type: [Array, String],\n required: true\n },\n setLanguage: {\n type: Function,\n required: true\n }\n },\n computed: {\n languages () {\n return localeService.languages\n },\n\n controlledLanguage: {\n get: function () {\n return Array.isArray(this.language) ? this.language : [this.language]\n },\n set: function (val) {\n this.setLanguage(val)\n }\n }\n },\n\n methods: {\n getLanguageName (code) {\n return localeService.getLanguageName(code)\n },\n addLanguage () {\n this.controlledLanguage = [...this.controlledLanguage, '']\n },\n setLanguageAt (index, val) {\n const lang = [...this.controlledLanguage]\n lang[index] = val\n this.controlledLanguage = lang\n },\n removeLanguageAt (index) {\n const lang = [...this.controlledLanguage]\n lang.splice(index, 1)\n this.controlledLanguage = lang\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.interface-language-switcher {\n .language-select {\n margin-right: 1em;\n }\n}\n</style>\n","import { render } from \"./interface_language_switcher.vue?vue&type=template&id=416a09f6\"\nimport script from \"./interface_language_switcher.vue?vue&type=script&lang=js\"\nexport * from \"./interface_language_switcher.vue?vue&type=script&lang=js\"\n\nimport \"./interface_language_switcher.vue?vue&type=style&index=0&id=416a09f6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <a\n class=\"link-preview-card\"\n :href=\"card.url\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n <div\n v-if=\"useImage && imageLoaded\"\n class=\"card-image\"\n >\n <img :src=\"card.image\">\n </div>\n <div class=\"card-content\">\n <span class=\"card-host faint\">\n <span\n v-if=\"censored\"\n class=\"nsfw-alert alert warning\"\n >{{ $t('status.nsfw') }}</span>\n {{ card.provider_name }}\n </span>\n <h4 class=\"card-title\">{{ card.title }}</h4>\n <p\n v-if=\"useDescription\"\n class=\"card-description\"\n >{{ card.description }}</p>\n </div>\n </a>\n </div>\n</template>\n\n<script src=\"./link-preview.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.link-preview-card {\n display: flex;\n flex-direction: row;\n cursor: pointer;\n overflow: hidden;\n margin-top: 0.5em;\n\n .card-image {\n flex-shrink: 0;\n width: 120px;\n max-width: 25%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n }\n }\n\n .card-content {\n max-height: 100%;\n margin: 0.5em;\n display: flex;\n flex-direction: column;\n }\n\n .card-host {\n font-size: 0.85em;\n }\n\n .card-description {\n margin: 0.5em 0 0;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n line-height: 1.2em;\n // cap description at 3 lines, the 1px is to clean up some stray pixels\n // TODO: fancier fade-out at the bottom to show off that it's too long?\n max-height: calc(1.2em * 3 - 1px);\n }\n\n .nsfw-alert {\n margin: 2em 0;\n }\n\n color: $fallback--text;\n color: var(--text, $fallback--text);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--attachmentRadius;\n border-radius: var(--attachmentRadius, $fallback--attachmentRadius);\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n}\n</style>\n","import { mapGetters } from 'vuex'\n\nconst LinkPreview = {\n name: 'LinkPreview',\n props: [\n 'card',\n 'size',\n 'nsfw'\n ],\n data () {\n return {\n imageLoaded: false\n }\n },\n computed: {\n useImage () {\n // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid\n // as it makes sure to hide the image if somehow NSFW tagged preview can\n // exist.\n return this.card.image && !this.censored && this.size !== 'hide'\n },\n censored () {\n return this.nsfw && this.hideNsfwConfig\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\n },\n hideNsfwConfig () {\n return this.mergedConfig.hideNsfw\n },\n ...mapGetters([\n 'mergedConfig'\n ])\n },\n created () {\n if (this.useImage) {\n const newImg = new Image()\n newImg.onload = () => {\n this.imageLoaded = true\n }\n newImg.src = this.card.image\n }\n }\n}\n\nexport default LinkPreview\n","import { render } from \"./link-preview.vue?vue&type=template&id=5bb8ccfc\"\nimport script from \"./link-preview.js?vue&type=script&lang=js\"\nexport * from \"./link-preview.js?vue&type=script&lang=js\"\n\nimport \"./link-preview.vue?vue&type=style&index=0&id=5bb8ccfc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"list\"\n role=\"list\"\n >\n <div\n v-for=\"item in items\"\n :key=\"getKey(item)\"\n class=\"list-item\"\n role=\"listitem\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div\n v-if=\"items.length === 0 && !!$slots.empty\"\n class=\"list-empty-content faint\"\n >\n <slot name=\"empty\" />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n items: {\n type: Array,\n default: () => []\n },\n getKey: {\n type: Function,\n default: item => item.id\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.list {\n &-item:not(:last-child) {\n border-bottom: 1px solid;\n border-bottom-color: $fallback--border;\n border-bottom-color: var(--border, $fallback--border);\n }\n\n &-empty-content {\n text-align: center;\n padding: 10px;\n }\n}\n</style>\n","import { render } from \"./list.vue?vue&type=template&id=033f777b\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\n\nimport \"./list.vue?vue&type=style&index=0&id=033f777b&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/* eslint-env browser */\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faUpload, faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faUpload,\n faCircleNotch\n)\n\nconst mediaUpload = {\n data () {\n return {\n uploadCount: 0,\n uploadReady: true\n }\n },\n computed: {\n uploading () {\n return this.uploadCount > 0\n }\n },\n methods: {\n onClick () {\n if (this.uploadReady) {\n this.$refs.input.click()\n }\n },\n uploadFile (file) {\n const self = this\n const store = this.$store\n if (file.size > store.state.instance.uploadlimit) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(store.state.instance.uploadlimit)\n self.$emit('upload-failed', 'file_too_big', { filesize: filesize.num, filesizeunit: filesize.unit, allowedsize: allowedsize.num, allowedsizeunit: allowedsize.unit })\n return\n }\n const formData = new FormData()\n formData.append('file', file)\n\n self.$emit('uploading')\n self.uploadCount++\n\n statusPosterService.uploadMedia({ store, formData })\n .then((fileData) => {\n self.$emit('uploaded', fileData)\n self.decreaseUploadCount()\n }, (error) => {\n console.error('Error uploading file', error)\n self.$emit('upload-failed', 'default')\n self.decreaseUploadCount()\n })\n },\n decreaseUploadCount () {\n this.uploadCount--\n if (this.uploadCount === 0) {\n this.$emit('all-uploaded')\n }\n },\n clearFile () {\n this.uploadReady = false\n this.$nextTick(() => {\n this.uploadReady = true\n })\n },\n multiUpload (files) {\n for (const file of files) {\n this.uploadFile(file)\n }\n },\n change ({ target }) {\n this.multiUpload(target.files)\n }\n },\n props: {\n dropFiles: Object,\n disabled: Boolean,\n normalButton: Boolean,\n acceptTypes: {\n type: String,\n default: '*/*'\n }\n },\n watch: {\n dropFiles: function (fileInfos) {\n if (!this.uploading) {\n this.multiUpload(fileInfos)\n }\n }\n }\n}\n\nexport default mediaUpload\n","import { render } from \"./media_upload.vue?vue&type=template&id=f831fc74\"\nimport script from \"./media_upload.js?vue&type=script&lang=js\"\nexport * from \"./media_upload.js?vue&type=script&lang=js\"\n\nimport \"./media_upload.vue?vue&type=style&index=0&id=f831fc74&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n class=\"media-upload\"\n :class=\"[normalButton ? 'button-default btn' : 'button-unstyled', { disabled }]\"\n :title=\"$t('tool_tip.media_upload')\"\n @click=\"onClick\"\n >\n <FAIcon\n v-if=\"uploading\"\n class=\"progress-icon\"\n icon=\"circle-notch\"\n spin\n />\n <FAIcon\n v-if=\"!uploading\"\n class=\"new-icon\"\n icon=\"upload\"\n />\n <template v-if=\"normalButton\">\n {{ ' ' }}\n {{ uploading ? $t('general.loading') : $t('tool_tip.media_upload') }}\n </template>\n <input\n v-if=\"uploadReady\"\n ref=\"input\"\n class=\"hidden-input-file\"\n :disabled=\"disabled\"\n type=\"file\"\n multiple=\"true\"\n :accept=\"acceptTypes\"\n @change=\"change\"\n >\n </button>\n</template>\n\n<script src=\"./media_upload.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.media-upload {\n .hidden-input-file {\n display: none;\n }\n}\n\nlabel.media-upload {\n cursor: pointer; // We use <label> for interactivity... i wonder if it's fine\n}\n</style>\n","<template>\n <span\n class=\"MentionLink\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <a\n v-if=\"!user\"\n :href=\"url\"\n class=\"original\"\n target=\"_blank\"\n v-html=\"content\"\n /><!-- eslint-enable vue/no-v-html -->\n <UserPopover\n v-else\n :user-id=\"user.id\"\n :disabled=\"!shouldShowTooltip\"\n >\n <span\n v-if=\"user\"\n class=\"new\"\n :style=\"style\"\n :class=\"classnames\"\n >\n <a\n class=\"short button-unstyled\"\n :class=\"{ '-with-tooltip': shouldShowTooltip }\"\n :href=\"url\"\n @click.prevent=\"onClick\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <UserAvatar\n v-if=\"shouldShowAvatar\"\n class=\"mention-avatar\"\n :user=\"user\"\n /><span\n class=\"shortName\"\n ><FAIcon\n v-if=\"useAtIcon\"\n size=\"sm\"\n icon=\"at\"\n class=\"at\"\n />{{ !useAtIcon ? '@' : '' }}<span\n class=\"userName\"\n v-html=\"userName\"\n /><span\n v-if=\"shouldShowFullUserName\"\n class=\"serverName\"\n :class=\"{ '-faded': shouldFadeDomain }\"\n v-html=\"'@' + serverName\"\n /><UnicodeDomainIndicator\n v-if=\"shouldShowFullUserName\"\n :user=\"user\"\n />\n </span>\n <span\n v-if=\"isYou && shouldShowYous\"\n :class=\"{ '-you': shouldBoldenYou }\"\n > {{ ' ' + $t('status.you') }}</span>\n <!-- eslint-enable vue/no-v-html -->\n </a><span\n ref=\"full\"\n class=\"full\"\n >\n <!-- eslint-disable vue/no-v-html -->\n @<span v-html=\"userName\" /><span v-html=\"'@' + serverName\" />\n <!-- eslint-enable vue/no-v-html -->\n </span>\n </span>\n </UserPopover>\n </span>\n</template>\n\n<script src=\"./mention_link.js\" />\n\n<style lang=\"scss\" src=\"./mention_link.scss\" />\n","import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters, mapState } from 'vuex'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport { defineAsyncComponent } from 'vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAt\n)\n\nconst MentionLink = {\n name: 'MentionLink',\n components: {\n UserAvatar,\n UnicodeDomainIndicator,\n UserPopover: defineAsyncComponent(() => import('../user_popover/user_popover.vue'))\n },\n props: {\n url: {\n required: true,\n type: String\n },\n content: {\n required: true,\n type: String\n },\n userId: {\n required: false,\n type: String\n },\n userScreenName: {\n required: false,\n type: String\n }\n },\n data () {\n return {\n hasSelection: false\n }\n },\n methods: {\n onClick () {\n if (this.shouldShowTooltip) return\n const link = generateProfileLink(\n this.userId || this.user.id,\n this.userScreenName || this.user.screen_name\n )\n this.$router.push(link)\n },\n handleSelection () {\n this.hasSelection = document.getSelection().containsNode(this.$refs.full, true)\n }\n },\n mounted () {\n document.addEventListener('selectionchange', this.handleSelection)\n },\n unmounted () {\n document.removeEventListener('selectionchange', this.handleSelection)\n },\n computed: {\n user () {\n return this.url && this.$store && this.$store.getters.findUserByUrl(this.url)\n },\n isYou () {\n // FIXME why user !== currentUser???\n return this.user && this.user.id === this.currentUser.id\n },\n userName () {\n return this.user && this.userNameFullUi.split('@')[0]\n },\n serverName () {\n // XXX assumed that domain does not contain @\n return this.user && (this.userNameFullUi.split('@')[1] || this.$store.getters.instanceDomain)\n },\n userNameFull () {\n return this.user && this.user.screen_name\n },\n userNameFullUi () {\n return this.user && this.user.screen_name_ui\n },\n highlight () {\n return this.user && this.mergedConfig.highlight[this.user.screen_name]\n },\n highlightType () {\n return this.highlight && ('-' + this.highlight.type)\n },\n highlightClass () {\n if (this.highlight) return highlightClass(this.user)\n },\n style () {\n if (this.highlight) {\n const {\n backgroundColor,\n backgroundPosition,\n backgroundImage,\n ...rest\n } = highlightStyle(this.highlight)\n return rest\n }\n },\n classnames () {\n return [\n {\n '-you': this.isYou && this.shouldBoldenYou,\n '-highlighted': this.highlight,\n '-has-selection': this.hasSelection\n },\n this.highlightType\n ]\n },\n useAtIcon () {\n return this.mergedConfig.useAtIcon\n },\n isRemote () {\n return this.userName !== this.userNameFull\n },\n shouldShowFullUserName () {\n const conf = this.mergedConfig.mentionLinkDisplay\n if (conf === 'short') {\n return false\n } else if (conf === 'full') {\n return true\n } else { // full_for_remote\n return this.isRemote\n }\n },\n shouldShowTooltip () {\n return this.mergedConfig.mentionLinkShowTooltip\n },\n shouldShowAvatar () {\n return this.mergedConfig.mentionLinkShowAvatar\n },\n shouldShowYous () {\n return this.mergedConfig.mentionLinkShowYous\n },\n shouldBoldenYou () {\n return this.mergedConfig.mentionLinkBoldenYou\n },\n shouldFadeDomain () {\n return this.mergedConfig.mentionLinkFadeDomain\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n }\n}\n\nexport default MentionLink\n","import { render } from \"./mention_link.vue?vue&type=template&id=11ab9a6c\"\nimport script from \"./mention_link.js?vue&type=script&lang=js\"\nexport * from \"./mention_link.js?vue&type=script&lang=js\"\n\nimport \"./mention_link.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span class=\"MentionsLine\">\n <MentionLink\n v-for=\"mention in mentionsComputed\"\n :key=\"mention.index\"\n class=\"mention-link\"\n :content=\"mention.content\"\n :url=\"mention.url\"\n /><span\n v-if=\"manyMentions\"\n class=\"extraMentions\"\n >\n <span\n v-if=\"expanded\"\n class=\"fullExtraMentions\"\n >{{ ' ' }}<MentionLink\n v-for=\"mention in extraMentions\"\n :key=\"mention.index\"\n class=\"mention-link\"\n :content=\"mention.content\"\n :url=\"mention.url\"\n />\n </span><button\n v-if=\"!expanded\"\n class=\"button-unstyled showMoreLess\"\n @click=\"toggleShowMore\"\n >\n {{ $t('status.plus_more', { number: extraMentions.length }) }}\n </button><button\n v-if=\"expanded\"\n class=\"button-unstyled showMoreLess\"\n @click=\"toggleShowMore\"\n >\n {{ $t('general.show_less') }}\n </button>\n </span>\n </span>\n</template>\n<script src=\"./mentions_line.js\"></script>\n<style lang=\"scss\" src=\"./mentions_line.scss\" />\n","import MentionLink from 'src/components/mention_link/mention_link.vue'\nimport { mapGetters } from 'vuex'\n\nexport const MENTIONS_LIMIT = 5\n\nconst MentionsLine = {\n name: 'MentionsLine',\n props: {\n mentions: {\n required: true,\n type: Array\n }\n },\n data: () => ({ expanded: false }),\n components: {\n MentionLink\n },\n computed: {\n mentionsComputed () {\n return this.mentions.slice(0, MENTIONS_LIMIT)\n },\n extraMentions () {\n return this.mentions.slice(MENTIONS_LIMIT)\n },\n manyMentions () {\n return this.extraMentions.length > 0\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n toggleShowMore () {\n this.expanded = !this.expanded\n }\n }\n}\n\nexport default MentionsLine\n","import { render } from \"./mentions_line.vue?vue&type=template&id=0e41a1da\"\nimport script from \"./mentions_line.js?vue&type=script&lang=js\"\nexport * from \"./mentions_line.js?vue&type=script&lang=js\"\n\nimport \"./mentions_line.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-show=\"isOpen\"\n v-body-scroll-lock=\"isOpen && !noBackground\"\n class=\"modal-view\"\n :class=\"classes\"\n @click.self=\"$emit('backdropClicked')\"\n >\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n provide: {\n popoversZLayer: 'modals'\n },\n props: {\n isOpen: {\n type: Boolean,\n default: true\n },\n noBackground: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n classes () {\n return {\n 'modal-background': !this.noBackground,\n open: this.isOpen\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.modal-view {\n z-index: var(--ZI_modals);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n pointer-events: none;\n animation-duration: 0.2s;\n animation-name: modal-background-fadein;\n opacity: 0;\n\n > * {\n pointer-events: initial;\n }\n\n &.modal-background {\n pointer-events: initial;\n background-color: rgb(0 0 0 / 50%);\n }\n\n &.open {\n opacity: 1;\n }\n}\n\n@keyframes modal-background-fadein {\n from {\n background-color: rgb(0 0 0 / 0%);\n }\n\n to {\n background-color: rgb(0 0 0 / 50%);\n }\n}\n</style>\n","import { render } from \"./modal.vue?vue&type=template&id=e92832fc\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\n\nimport \"./modal.vue?vue&type=style&index=0&id=e92832fc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <teleport\n :disabled=\"minimalMode || disableTeleport\"\n :to=\"teleportTarget\"\n >\n <component\n :is=\"noHeading ? 'div' : 'aside'\"\n ref=\"root\"\n :class=\"{ minimal: minimalMode }\"\n class=\"Notifications\"\n >\n <div :class=\"mainClass\">\n <div\n v-if=\"!noHeading\"\n class=\"notifications-heading panel-heading -sticky\"\n >\n <div class=\"title\">\n {{ $t('notifications.notifications') }}\n <span\n v-if=\"unseenCount\"\n class=\"badge badge-notification unseen-count\"\n >{{ unseenCount }}</span>\n </div>\n <div\n v-if=\"showScrollTop\"\n class=\"rightside-button\"\n >\n <button\n class=\"button-unstyled scroll-to-top-button\"\n type=\"button\"\n :title=\"$t('general.scroll_to_top')\"\n @click=\"scrollToTop\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon icon=\"arrow-up\" />\n <FAIcon\n icon=\"minus\"\n transform=\"up-7\"\n />\n </FALayers>\n </button>\n </div>\n <button\n v-if=\"unseenCount\"\n class=\"button-default read-button\"\n type=\"button\"\n @click.prevent=\"markAsSeen\"\n >\n {{ $t('notifications.read') }}\n </button>\n <NotificationFilters class=\"rightside-button\" />\n </div>\n <div\n class=\"panel-body\"\n role=\"feed\"\n >\n <div\n v-for=\"notification in notificationsToDisplay\"\n :key=\"notification.id\"\n role=\"listitem\"\n class=\"notification\"\n :class=\"{unseen: !minimalMode && !notification.seen}\"\n >\n <div class=\"notification-overlay\" />\n <notification :notification=\"notification\" />\n </div>\n </div>\n <div class=\"panel-footer\">\n <div\n v-if=\"bottomedOut\"\n class=\"new-status-notification text-center faint\"\n >\n {{ $t('notifications.no_more_notifications') }}\n </div>\n <button\n v-else-if=\"!loading\"\n class=\"button-unstyled -link -fullwidth\"\n @click.prevent=\"fetchOlderNotifications()\"\n >\n <div class=\"new-status-notification text-center\">\n {{ minimalMode ? $t('interactions.load_older') : $t('notifications.load_older') }}\n </div>\n </button>\n <div\n v-else\n class=\"new-status-notification text-center\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"lg\"\n />\n </div>\n </div>\n </div>\n </component>\n </teleport>\n</template>\n\n<script src=\"./notifications.js\"></script>\n<style lang=\"scss\" src=\"./notifications.scss\"></style>\n","<template>\n <article\n v-if=\"notification.type === 'mention'\"\n >\n <Status\n class=\"Notification\"\n :compact=\"true\"\n :statusoid=\"notification.status\"\n />\n </article>\n <article v-else>\n <div\n v-if=\"needMute && !unmuted\"\n class=\"Notification container -muted\"\n >\n <small>\n <user-link\n :user=\"notification.from_profile\"\n :at=\"false\"\n />\n </small>\n <button\n class=\"button-unstyled unmute\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"eye-slash\"\n />\n </button>\n </div>\n <div\n v-else\n class=\"Notification non-mention\"\n :class=\"[userClass, { highlighted: userStyle }, '-type--' + notification.type]\"\n :style=\"[ userStyle ]\"\n >\n <a\n class=\"avatar-container\"\n :href=\"$router.resolve(userProfileLink).href\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"notification.from_profile.id\"\n :overlay-centers=\"true\"\n >\n <UserAvatar\n class=\"post-avatar\"\n :bot=\"botIndicator\"\n :compact=\"true\"\n :better-shadow=\"betterShadow\"\n :user=\"notification.from_profile\"\n />\n </UserPopover>\n </a>\n <div class=\"notification-right\">\n <span class=\"notification-details\">\n <div class=\"name-and-action\">\n <!-- eslint-disable vue/no-v-html -->\n <bdi v-if=\"!!notification.from_profile.name_html\">\n <RichContent\n class=\"username\"\n :title=\"'@'+notification.from_profile.screen_name_ui\"\n :html=\"notification.from_profile.name_html\"\n :emoji=\"notification.from_profile.emoji\"\n />\n </bdi>\n <!-- eslint-enable vue/no-v-html -->\n <span\n v-else\n class=\"username\"\n :title=\"'@'+notification.from_profile.screen_name_ui\"\n >\n {{ notification.from_profile.name }}\n </span>\n {{ ' ' }}\n <span v-if=\"notification.type === 'like'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"star\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.favorited_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'repeat'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"retweet\"\n :title=\"$t('tool_tip.repeat')\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.repeated_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'follow'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"user-plus\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.followed_you') }}</small>\n </span>\n <span v-if=\"notification.type === 'follow_request'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"user\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.follow_request') }}</small>\n </span>\n <span v-if=\"notification.type === 'move'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"suitcase-rolling\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.migrated_to') }}</small>\n </span>\n <span v-if=\"notification.type === 'pleroma:emoji_reaction'\">\n <small>\n <i18n-t\n scope=\"global\"\n keypath=\"notifications.reacted_with\"\n >\n <img\n v-if=\"notification.emoji_url\"\n class=\"emoji-reaction-emoji emoji-reaction-emoji-image\"\n :src=\"notification.emoji_url\"\n :alt=\"notification.emoji\"\n :title=\"notification.emoji\"\n >\n <span\n v-else\n class=\"emoji-reaction-emoji\"\n >{{ notification.emoji }}</span>\n </i18n-t>\n </small>\n </span>\n <span v-if=\"notification.type === 'pleroma:report'\">\n <small>{{ $t('notifications.submitted_report') }}</small>\n </span>\n <span v-if=\"notification.type === 'poll'\">\n <FAIcon\n class=\"type-icon\"\n icon=\"poll-h\"\n />\n {{ ' ' }}\n <small>{{ $t('notifications.poll_ended') }}</small>\n </span>\n </div>\n <div\n v-if=\"isStatusNotification\"\n class=\"timeago\"\n >\n <router-link\n v-if=\"notification.status\"\n :to=\"{ name: 'conversation', params: { id: notification.status.id } }\"\n class=\"timeago-link faint-link\"\n >\n <Timeago\n :time=\"notification.created_at\"\n :auto-update=\"240\"\n />\n </router-link>\n <button\n class=\"button-unstyled expand-icon\"\n :title=\"$t('tool_tip.toggle_expand')\"\n :aria-expanded=\"statusExpanded\"\n @click.prevent=\"toggleStatusExpanded\"\n >\n <FAIcon\n class=\"fa-scale-110\"\n fixed-width\n :icon=\"statusExpanded ? 'compress-alt' : 'expand-alt'\"\n />\n </button>\n </div>\n <div\n v-else\n class=\"timeago\"\n >\n <span class=\"faint\">\n <Timeago\n :time=\"notification.created_at\"\n :auto-update=\"240\"\n />\n </span>\n </div>\n <button\n v-if=\"needMute\"\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.toggle_mute')\"\n :aria-expanded=\"!unmuted\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"eye-slash\"\n />\n </button>\n </span>\n <div\n v-if=\"notification.type === 'follow' || notification.type === 'follow_request'\"\n class=\"follow-text\"\n >\n <user-link\n class=\"follow-name\"\n :user=\"notification.from_profile\"\n />\n <div\n v-if=\"notification.type === 'follow_request'\"\n style=\"white-space: nowrap;\"\n >\n <button\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.accept_follow_request')\"\n @click=\"approveUser()\"\n >\n <FAIcon\n icon=\"check\"\n class=\"fa-scale-110 fa-old-padding follow-request-accept\"\n />\n </button>\n <button\n class=\"button-unstyled\"\n :title=\"$t('tool_tip.reject_follow_request')\"\n @click=\"denyUser()\"\n >\n <FAIcon\n icon=\"times\"\n class=\"fa-scale-110 fa-old-padding follow-request-reject\"\n />\n </button>\n </div>\n </div>\n <div\n v-else-if=\"notification.type === 'move'\"\n class=\"move-text\"\n >\n <user-link\n :user=\"notification.target\"\n />\n </div>\n <Report\n v-else-if=\"notification.type === 'pleroma:report'\"\n :report-id=\"notification.report.id\"\n />\n <template v-else>\n <StatusContent\n :class=\"{ faint: !statusExpanded }\"\n :compact=\"!statusExpanded\"\n :status=\"notification.action\"\n />\n </template>\n </div>\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingApproveConfirmDialog\"\n :title=\"$t('user_card.approve_confirm_title')\"\n :confirm-text=\"$t('user_card.approve_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.approve_confirm_cancel_button')\"\n @accepted=\"doApprove\"\n @cancelled=\"hideApproveConfirmDialog\"\n >\n {{ $t('user_card.approve_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n <confirm-modal\n v-if=\"showingDenyConfirmDialog\"\n :title=\"$t('user_card.deny_confirm_title')\"\n :confirm-text=\"$t('user_card.deny_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.deny_confirm_cancel_button')\"\n @accepted=\"doDeny\"\n @cancelled=\"hideDenyConfirmDialog\"\n >\n {{ $t('user_card.deny_confirm', { user: user.screen_name_ui }) }}\n </confirm-modal>\n </teleport>\n </article>\n</template>\n\n<script src=\"./notification.js\"></script>\n<style src=\"./notification.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"Report\">\n <div class=\"reported-user\">\n <span>{{ $t('report.reported_user') }}</span>\n <router-link :to=\"generateUserProfileLink(report.acct)\">\n @{{ report.acct.screen_name }}\n </router-link>\n </div>\n <div class=\"reporter\">\n <span>{{ $t('report.reporter') }}</span>\n <router-link :to=\"generateUserProfileLink(report.actor)\">\n @{{ report.actor.screen_name }}\n </router-link>\n </div>\n <div class=\"report-state\">\n <span>{{ $t('report.state') }}</span>\n <Select\n :id=\"report-state\"\n v-model=\"state\"\n class=\"form-control\"\n >\n <option\n v-for=\"state in ['open', 'closed', 'resolved']\"\n :key=\"state\"\n :value=\"state\"\n >\n {{ $t('report.state_' + state) }}\n </option>\n </Select>\n </div>\n <RichContent\n class=\"report-content\"\n :html=\"report.content\"\n :emoji=\"[]\"\n />\n <div v-if=\"report.statuses.length\">\n <small>{{ $t('report.reported_statuses') }}</small>\n <router-link\n v-for=\"status in report.statuses\"\n :key=\"status.id\"\n :to=\"{ name: 'conversation', params: { id: status.id } }\"\n class=\"reported-status\"\n >\n <div class=\"reported-status-heading\">\n <span class=\"reported-status-name\">{{ status.user.name }}</span>\n <Timeago\n :time=\"status.created_at\"\n :auto-update=\"240\"\n class=\"faint\"\n />\n </div>\n <status-content :status=\"status\" />\n </router-link>\n </div>\n <div v-if=\"report.notes.length\">\n <small>{{ $t('report.notes') }}</small>\n <div\n v-for=\"note in report.notes\"\n :key=\"note.id\"\n class=\"note\"\n >\n <span>{{ note.content }}</span>\n <Timeago\n :time=\"note.created_at\"\n :auto-update=\"240\"\n class=\"faint\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./report.js\"></script>\n<style src=\"./report.scss\" lang=\"scss\"></style>\n","import Select from '../select/select.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst Report = {\n props: [\n 'reportId'\n ],\n components: {\n Select,\n StatusContent,\n Timeago,\n RichContent\n },\n computed: {\n report () {\n console.log(this.$store.state.reports.reports[this.reportId] || {})\n return this.$store.state.reports.reports[this.reportId] || {}\n },\n state: {\n get: function () { return this.report.state },\n set: function (val) { this.setReportState(val) }\n }\n },\n methods: {\n generateUserProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n },\n setReportState (state) {\n return this.$store.dispatch('setReportState', { id: this.report.id, state })\n }\n }\n}\n\nexport default Report\n","import { render } from \"./report.vue?vue&type=template&id=86a2fdce\"\nimport script from \"./report.js?vue&type=script&lang=js\"\nexport * from \"./report.js?vue&type=script&lang=js\"\n\nimport \"./report.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import StatusContent from '../status_content/status_content.vue'\nimport { mapState } from 'vuex'\nimport Status from '../status/status.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport Report from '../report/report.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport UserPopover from '../user_popover/user_popover.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { isStatusNotification } from '../../services/notification_utils/notification_utils.js'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCheck,\n faTimes,\n faStar,\n faRetweet,\n faUserPlus,\n faEyeSlash,\n faUser,\n faSuitcaseRolling,\n faExpandAlt,\n faCompressAlt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCheck,\n faTimes,\n faStar,\n faRetweet,\n faUserPlus,\n faUser,\n faEyeSlash,\n faSuitcaseRolling,\n faExpandAlt,\n faCompressAlt\n)\n\nconst Notification = {\n data () {\n return {\n statusExpanded: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter,\n unmuted: false,\n showingApproveConfirmDialog: false,\n showingDenyConfirmDialog: false\n }\n },\n props: ['notification'],\n components: {\n StatusContent,\n UserAvatar,\n UserCard,\n Timeago,\n Status,\n Report,\n RichContent,\n UserPopover,\n UserLink,\n ConfirmModal\n },\n methods: {\n toggleStatusExpanded () {\n this.statusExpanded = !this.statusExpanded\n },\n generateUserProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n },\n getUser (notification) {\n return this.$store.state.users.usersObject[notification.from_profile.id]\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n showApproveConfirmDialog () {\n this.showingApproveConfirmDialog = true\n },\n hideApproveConfirmDialog () {\n this.showingApproveConfirmDialog = false\n },\n showDenyConfirmDialog () {\n this.showingDenyConfirmDialog = true\n },\n hideDenyConfirmDialog () {\n this.showingDenyConfirmDialog = false\n },\n approveUser () {\n if (this.shouldConfirmApprove) {\n this.showApproveConfirmDialog()\n } else {\n this.doApprove()\n }\n },\n doApprove () {\n this.$store.state.api.backendInteractor.approveUser({ id: this.user.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n this.$store.dispatch('markSingleNotificationAsSeen', { id: this.notification.id })\n this.$store.dispatch('updateNotification', {\n id: this.notification.id,\n updater: notification => {\n notification.type = 'follow'\n }\n })\n this.hideApproveConfirmDialog()\n },\n denyUser () {\n if (this.shouldConfirmDeny) {\n this.showDenyConfirmDialog()\n } else {\n this.doDeny()\n }\n },\n doDeny () {\n this.$store.state.api.backendInteractor.denyUser({ id: this.user.id })\n .then(() => {\n this.$store.dispatch('dismissNotificationLocal', { id: this.notification.id })\n this.$store.dispatch('removeFollowRequest', this.user)\n })\n this.hideDenyConfirmDialog()\n }\n },\n computed: {\n userClass () {\n return highlightClass(this.notification.from_profile)\n },\n userStyle () {\n const highlight = this.$store.getters.mergedConfig.highlight\n const user = this.notification.from_profile\n return highlightStyle(highlight[user.screen_name])\n },\n user () {\n return this.$store.getters.findUser(this.notification.from_profile.id)\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.user)\n },\n targetUser () {\n return this.$store.getters.findUser(this.notification.target.id)\n },\n targetUserProfileLink () {\n return this.generateUserProfileLink(this.targetUser)\n },\n needMute () {\n return this.$store.getters.relationship(this.user.id).muting\n },\n isStatusNotification () {\n return isStatusNotification(this.notification.type)\n },\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n shouldConfirmApprove () {\n return this.mergedConfig.modalOnApproveFollow\n },\n shouldConfirmDeny () {\n return this.mergedConfig.modalOnDenyFollow\n },\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n }\n}\n\nexport default Notification\n","import { render } from \"./notification.vue?vue&type=template&id=1ab1e6c0\"\nimport script from \"./notification.js?vue&type=script&lang=js\"\nexport * from \"./notification.js?vue&type=script&lang=js\"\n\nimport \"./notification.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n class=\"NotificationFilters\"\n placement=\"bottom\"\n :bound-to=\"{ x: 'container' }\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('likes')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.likes }\"\n />{{ $t('settings.notification_visibility_likes') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('repeats')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.repeats }\"\n />{{ $t('settings.notification_visibility_repeats') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('follows')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.follows }\"\n />{{ $t('settings.notification_visibility_follows') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('mentions')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.mentions }\"\n />{{ $t('settings.notification_visibility_mentions') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('emojiReactions')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.emojiReactions }\"\n />{{ $t('settings.notification_visibility_emoji_reactions') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('moves')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.moves }\"\n />{{ $t('settings.notification_visibility_moves') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleNotificationFilter('polls')\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': filters.polls }\"\n />{{ $t('settings.notification_visibility_polls') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"filter-trigger-button button-unstyled\">\n <FAIcon icon=\"filter\" />\n </button>\n </template>\n </Popover>\n</template>\n\n<script>\nimport Popover from '../popover/popover.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faFilter } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFilter\n)\n\nexport default {\n components: { Popover },\n computed: {\n filters () {\n return this.$store.getters.mergedConfig.notificationVisibility\n }\n },\n methods: {\n toggleNotificationFilter (type) {\n this.$store.dispatch('setOption', {\n name: 'notificationVisibility',\n value: {\n ...this.filters,\n [type]: !this.filters[type]\n }\n })\n }\n }\n}\n</script>\n","import { render } from \"./notification_filters.vue?vue&type=template&id=0ad39446\"\nimport script from \"./notification_filters.vue?vue&type=script&lang=js\"\nexport * from \"./notification_filters.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { computed } from 'vue'\nimport { mapGetters } from 'vuex'\nimport Notification from '../notification/notification.vue'\nimport NotificationFilters from './notification_filters.vue'\nimport notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js'\nimport {\n notificationsFromStore,\n filteredNotificationsFromStore,\n unseenNotificationsFromStore\n} from '../../services/notification_utils/notification_utils.js'\nimport FaviconService from '../../services/favicon_service/favicon_service.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch, faArrowUp, faMinus } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faArrowUp,\n faMinus\n)\n\nconst DEFAULT_SEEN_TO_DISPLAY_COUNT = 30\n\nconst Notifications = {\n components: {\n Notification,\n NotificationFilters\n },\n props: {\n // Disables panel styles, unread mark, potentially other notification-related actions\n // meant for \"Interactions\" timeline\n minimalMode: Boolean,\n // Custom filter mode, an array of strings, possible values 'mention', 'repeat', 'like', 'follow', used to override global filter for use in \"Interactions\" timeline\n filterMode: Array,\n // Disable teleporting (i.e. for /users/user/notifications)\n disableTeleport: Boolean\n },\n data () {\n return {\n showScrollTop: false,\n bottomedOut: false,\n // How many seen notifications to display in the list. The more there are,\n // the heavier the page becomes. This count is increased when loading\n // older notifications, and cut back to default whenever hitting \"Read!\".\n seenToDisplayCount: DEFAULT_SEEN_TO_DISPLAY_COUNT\n }\n },\n provide () {\n return {\n popoversZLayer: computed(() => this.popoversZLayer)\n }\n },\n computed: {\n mainClass () {\n return this.minimalMode ? '' : 'panel panel-default'\n },\n notifications () {\n return notificationsFromStore(this.$store)\n },\n error () {\n return this.$store.state.statuses.notifications.error\n },\n unseenNotifications () {\n return unseenNotificationsFromStore(this.$store)\n },\n filteredNotifications () {\n return filteredNotificationsFromStore(this.$store, this.filterMode)\n },\n unseenCount () {\n return this.unseenNotifications.length\n },\n unseenCountTitle () {\n return this.unseenCount + (this.unreadChatCount) + this.unreadAnnouncementCount\n },\n loading () {\n return this.$store.state.statuses.notifications.loading\n },\n noHeading () {\n const { layoutType } = this.$store.state.interface\n return this.minimalMode || layoutType === 'mobile'\n },\n teleportTarget () {\n const { layoutType } = this.$store.state.interface\n const map = {\n wide: '#notifs-column',\n mobile: '#mobile-notifications'\n }\n return map[layoutType] || '#notifs-sidebar'\n },\n popoversZLayer () {\n const { layoutType } = this.$store.state.interface\n return layoutType === 'mobile' ? 'navbar' : null\n },\n notificationsToDisplay () {\n return this.filteredNotifications.slice(0, this.unseenCount + this.seenToDisplayCount)\n },\n noSticky () { return this.$store.getters.mergedConfig.disableStickyHeaders },\n ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount'])\n },\n mounted () {\n this.scrollerRef = this.$refs.root.closest('.column.-scrollable')\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.mobile-notifications')\n }\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.column.main')\n }\n this.scrollerRef.addEventListener('scroll', this.updateScrollPosition)\n },\n unmounted () {\n if (!this.scrollerRef) return\n this.scrollerRef.removeEventListener('scroll', this.updateScrollPosition)\n },\n watch: {\n unseenCountTitle (count) {\n if (count > 0) {\n FaviconService.drawFaviconBadge()\n this.$store.dispatch('setPageTitle', `(${count})`)\n } else {\n FaviconService.clearFaviconBadge()\n this.$store.dispatch('setPageTitle', '')\n }\n },\n teleportTarget () {\n // handle scroller change\n this.$nextTick(() => {\n this.scrollerRef.removeEventListener('scroll', this.updateScrollPosition)\n this.scrollerRef = this.$refs.root.closest('.column.-scrollable')\n if (!this.scrollerRef) {\n this.scrollerRef = this.$refs.root.closest('.mobile-notifications')\n }\n this.scrollerRef.addEventListener('scroll', this.updateScrollPosition)\n this.updateScrollPosition()\n })\n }\n },\n methods: {\n scrollToTop () {\n const scrollable = this.scrollerRef\n scrollable.scrollTo({ top: this.$refs.root.offsetTop })\n // this.$refs.root.scrollIntoView({ behavior: 'smooth', block: 'start' })\n },\n updateScrollPosition () {\n this.showScrollTop = this.$refs.root.offsetTop < this.scrollerRef.scrollTop\n },\n markAsSeen () {\n this.$store.dispatch('markNotificationsAsSeen')\n this.seenToDisplayCount = DEFAULT_SEEN_TO_DISPLAY_COUNT\n },\n fetchOlderNotifications () {\n if (this.loading) {\n return\n }\n\n const seenCount = this.filteredNotifications.length - this.unseenCount\n if (this.seenToDisplayCount < seenCount) {\n this.seenToDisplayCount = Math.min(this.seenToDisplayCount + 20, seenCount)\n return\n } else if (this.seenToDisplayCount > seenCount) {\n this.seenToDisplayCount = seenCount\n }\n\n const store = this.$store\n const credentials = store.state.users.currentUser.credentials\n store.commit('setNotificationsLoading', { value: true })\n notificationsFetcher.fetchAndUpdate({\n store,\n credentials,\n older: true\n }).then(notifs => {\n store.commit('setNotificationsLoading', { value: false })\n if (notifs.length === 0) {\n this.bottomedOut = true\n }\n this.seenToDisplayCount += notifs.length\n })\n }\n }\n}\n\nexport default Notifications\n","import { render } from \"./notifications.vue?vue&type=template&id=fdd5b5f4\"\nimport script from \"./notifications.js?vue&type=script&lang=js\"\nexport * from \"./notifications.js?vue&type=script&lang=js\"\n\nimport \"./notifications.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"panel-loading\">\n <span class=\"loading-text\">\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"3x\"\n />\n {{ $t('general.loading') }}\n </span>\n </div>\n</template>\n\n<script>\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nexport default {}\n</script>\n\n<style lang=\"scss\">\n@import \"src/variables\";\n\n.panel-loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n\n .loading-text svg {\n line-height: 0;\n vertical-align: middle;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n}\n</style>\n","import { render } from \"./panel_loading.vue?vue&type=template&id=0255a870\"\nimport script from \"./panel_loading.vue?vue&type=script&lang=js\"\nexport * from \"./panel_loading.vue?vue&type=script&lang=js\"\n\nimport \"./panel_loading.vue?vue&type=style&index=0&id=0255a870&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","const Popover = {\n name: 'Popover',\n props: {\n // Action to trigger popover: either 'hover' or 'click'\n trigger: String,\n\n // 'top', 'bottom', 'left', 'right'\n placement: String,\n\n // Takes object with properties 'x' and 'y', values of these can be\n // 'container' for using offsetParent as boundaries for either axis\n // or 'viewport'\n boundTo: Object,\n\n // Takes a selector to use as a replacement for the parent container\n // for getting boundaries for x an y axis\n boundToSelector: String,\n\n // Takes a top/bottom/left/right object, how much space to leave\n // between boundary and popover element\n margin: Object,\n\n // Takes a x/y object and tells how many pixels to offset from\n // anchor point on either axis\n offset: Object,\n\n // Replaces the classes you may want for the popover container.\n // Use 'popover-default' in addition to get the default popover\n // styles with your custom class.\n popoverClass: String,\n\n // If true, subtract padding when calculating position for the popover,\n // use it when popover offset looks to be different on top vs bottom.\n removePadding: Boolean,\n\n // self-explanatory (i hope)\n disabled: Boolean,\n\n // Instead of putting popover next to anchor, overlay popover's center on top of anchor's center\n overlayCenters: Boolean,\n\n // What selector (witin popover!) to use for determining center of popover\n overlayCentersSelector: String,\n\n // Lets hover popover stay when clicking inside of it\n stayOnClick: Boolean,\n\n // Use styled button (to avoid nested buttons)\n normalButton: Boolean,\n\n triggerAttrs: {\n type: Object,\n default: {}\n }\n },\n inject: ['popoversZLayer'], // override popover z layer\n data () {\n return {\n // lockReEntry is a flag that is set when mouse cursor is leaving the popover's content\n // so that if mouse goes back into popover it won't be re-shown again to prevent annoyance\n // with popovers refusing to be hidden when user wants to interact with something in below popover\n anchorEl: null,\n // There's an issue where having teleport enabled by default causes things just...\n // not render at all, i.e. main post status form and its emoji inputs\n teleport: false,\n lockReEntry: false,\n hidden: true,\n styles: {},\n oldSize: { width: 0, height: 0 },\n scrollable: null,\n // used to avoid blinking if hovered onto popover\n graceTimeout: null,\n parentPopover: null,\n disableClickOutside: false,\n childrenShown: new Set()\n }\n },\n methods: {\n setAnchorEl (el) {\n this.anchorEl = el\n this.updateStyles()\n },\n containerBoundingClientRect () {\n const container = this.boundToSelector ? this.$el.closest(this.boundToSelector) : this.$el.offsetParent\n return container.getBoundingClientRect()\n },\n updateStyles () {\n if (this.hidden) {\n this.styles = {}\n return\n }\n\n // Popover will be anchored around this element, trigger ref is the container, so\n // its children are what are inside the slot. Expect only one v-slot:trigger.\n const anchorEl = this.anchorEl || (this.$refs.trigger && this.$refs.trigger.children[0]) || this.$el\n // SVGs don't have offsetWidth/Height, use fallback\n const anchorHeight = anchorEl.offsetHeight || anchorEl.clientHeight\n const anchorWidth = anchorEl.offsetWidth || anchorEl.clientWidth\n const anchorScreenBox = anchorEl.getBoundingClientRect()\n\n const anchorStyle = getComputedStyle(anchorEl)\n const topPadding = parseFloat(anchorStyle.paddingTop)\n const bottomPadding = parseFloat(anchorStyle.paddingBottom)\n const rightPadding = parseFloat(anchorStyle.paddingRight)\n const leftPadding = parseFloat(anchorStyle.paddingLeft)\n\n // Screen position of the origin point for popover = center of the anchor\n const origin = {\n x: anchorScreenBox.left + anchorWidth * 0.5,\n y: anchorScreenBox.top + anchorHeight * 0.5\n }\n const content = this.$refs.content\n const overlayCenter = this.overlayCenters\n ? this.$refs.content.querySelector(this.overlayCentersSelector)\n : null\n\n // Minor optimization, don't call a slow reflow call if we don't have to\n const parentScreenBox = this.boundTo &&\n (this.boundTo.x === 'container' || this.boundTo.y === 'container') &&\n this.containerBoundingClientRect()\n\n const margin = this.margin || {}\n\n // What are the screen bounds for the popover? Viewport vs container\n // when using viewport, using default margin values to dodge the navbar\n const xBounds = this.boundTo && this.boundTo.x === 'container'\n ? {\n min: parentScreenBox.left + (margin.left || 0),\n max: parentScreenBox.right - (margin.right || 0)\n }\n : {\n min: 0 + (margin.left || 10),\n max: window.innerWidth - (margin.right || 10)\n }\n\n const yBounds = this.boundTo && this.boundTo.y === 'container'\n ? {\n min: parentScreenBox.top + (margin.top || 0),\n max: parentScreenBox.bottom - (margin.bottom || 0)\n }\n : {\n min: 0 + (margin.top || 50),\n max: window.innerHeight - (margin.bottom || 5)\n }\n\n let horizOffset = 0\n let vertOffset = 0\n\n if (overlayCenter) {\n const box = content.getBoundingClientRect()\n const overlayCenterScreenBox = overlayCenter.getBoundingClientRect()\n const leftInnerOffset = overlayCenterScreenBox.left - box.left\n const topInnerOffset = overlayCenterScreenBox.top - box.top\n horizOffset = -leftInnerOffset - overlayCenter.offsetWidth * 0.5\n vertOffset = -topInnerOffset - overlayCenter.offsetHeight * 0.5\n } else {\n horizOffset = content.offsetWidth * -0.5\n vertOffset = content.offsetHeight * -0.5\n }\n\n const leftBorder = origin.x + horizOffset\n const rightBorder = leftBorder + content.offsetWidth\n const topBorder = origin.y + vertOffset\n const bottomBorder = topBorder + content.offsetHeight\n\n // If overflowing from left, move it so that it doesn't\n if (leftBorder < xBounds.min) {\n horizOffset += xBounds.min - leftBorder\n }\n\n // If overflowing from right, move it so that it doesn't\n if (rightBorder > xBounds.max) {\n horizOffset -= rightBorder - xBounds.max\n }\n\n // If overflowing from top, move it so that it doesn't\n if (topBorder < yBounds.min) {\n vertOffset += yBounds.min - topBorder\n }\n\n // If overflowing from bottom, move it so that it doesn't\n if (bottomBorder > yBounds.max) {\n vertOffset -= bottomBorder - yBounds.max\n }\n\n let translateX = 0\n let translateY = 0\n\n if (overlayCenter) {\n translateX = origin.x + horizOffset\n translateY = origin.y + vertOffset\n } else if (this.placement !== 'right' && this.placement !== 'left') {\n // Default to whatever user wished with placement prop\n let usingTop = this.placement !== 'bottom'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n const topBoundary = origin.y - anchorHeight * 0.5 + (this.removePadding ? topPadding : 0)\n const bottomBoundary = origin.y + anchorHeight * 0.5 - (this.removePadding ? bottomPadding : 0)\n if (bottomBoundary + content.offsetHeight > yBounds.max) usingTop = true\n if (topBoundary - content.offsetHeight < yBounds.min) usingTop = false\n\n const yOffset = (this.offset && this.offset.y) || 0\n translateY = usingTop\n ? topBoundary - yOffset - content.offsetHeight\n : bottomBoundary + yOffset\n\n const xOffset = (this.offset && this.offset.x) || 0\n translateX = origin.x + horizOffset + xOffset\n } else {\n // Default to whatever user wished with placement prop\n let usingRight = this.placement !== 'left'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n const rightBoundary = origin.x - anchorWidth * 0.5 + (this.removePadding ? rightPadding : 0)\n const leftBoundary = origin.x + anchorWidth * 0.5 - (this.removePadding ? leftPadding : 0)\n if (leftBoundary + content.offsetWidth > xBounds.max) usingRight = true\n if (rightBoundary - content.offsetWidth < xBounds.min) usingRight = false\n\n const xOffset = (this.offset && this.offset.x) || 0\n translateX = usingRight\n ? rightBoundary - xOffset - content.offsetWidth\n : leftBoundary + xOffset\n\n const yOffset = (this.offset && this.offset.y) || 0\n translateY = origin.y + vertOffset + yOffset\n }\n\n this.styles = {\n left: `${Math.round(translateX)}px`,\n top: `${Math.round(translateY)}px`\n }\n\n if (this.popoversZLayer) {\n this.styles['--ZI_popover_override'] = `var(--ZI_${this.popoversZLayer}_popovers)`\n }\n if (parentScreenBox) {\n this.styles.maxWidth = `${Math.round(parentScreenBox.width)}px`\n }\n },\n showPopover () {\n if (this.disabled) return\n this.disableClickOutside = true\n setTimeout(() => {\n this.disableClickOutside = false\n }, 0)\n const wasHidden = this.hidden\n this.hidden = false\n this.parentPopover && this.parentPopover.onChildPopoverState(this, true)\n if (this.trigger === 'click' || this.stayOnClick) {\n document.addEventListener('click', this.onClickOutside)\n }\n this.scrollable.addEventListener('scroll', this.onScroll)\n this.scrollable.addEventListener('resize', this.onResize)\n this.$nextTick(() => {\n if (wasHidden) this.$emit('show')\n this.updateStyles()\n })\n },\n hidePopover () {\n if (this.disabled) return\n if (!this.hidden) this.$emit('close')\n this.hidden = true\n this.parentPopover && this.parentPopover.onChildPopoverState(this, false)\n if (this.trigger === 'click') {\n document.removeEventListener('click', this.onClickOutside)\n }\n this.scrollable.removeEventListener('scroll', this.onScroll)\n this.scrollable.removeEventListener('resize', this.onResize)\n },\n onMouseenter (e) {\n if (this.trigger === 'hover') {\n this.lockReEntry = false\n clearTimeout(this.graceTimeout)\n this.graceTimeout = null\n this.showPopover()\n }\n },\n onMouseleave (e) {\n if (this.trigger === 'hover' && this.childrenShown.size === 0) {\n this.graceTimeout = setTimeout(() => this.hidePopover(), 1)\n }\n },\n onMouseenterContent (e) {\n if (this.trigger === 'hover' && !this.lockReEntry) {\n this.lockReEntry = true\n clearTimeout(this.graceTimeout)\n this.graceTimeout = null\n this.showPopover()\n }\n },\n onMouseleaveContent (e) {\n if (this.trigger === 'hover' && this.childrenShown.size === 0) {\n this.graceTimeout = setTimeout(() => this.hidePopover(), 1)\n }\n },\n onClick (e) {\n if (this.trigger === 'click') {\n if (this.hidden) {\n this.showPopover()\n } else {\n this.hidePopover()\n }\n }\n },\n onClickOutside (e) {\n if (this.disableClickOutside) return\n if (this.hidden) return\n if (this.$refs.content && this.$refs.content.contains(e.target)) return\n if (this.$el.contains(e.target)) return\n if (this.childrenShown.size > 0) return\n this.hidePopover()\n if (this.parentPopover) this.parentPopover.onClickOutside(e)\n },\n onScroll (e) {\n this.updateStyles()\n },\n onResize (e) {\n this.updateStyles()\n },\n onChildPopoverState (childRef, state) {\n if (state) {\n this.childrenShown.add(childRef)\n } else {\n this.childrenShown.delete(childRef)\n }\n }\n },\n updated () {\n // Monitor changes to content size, update styles only when content sizes have changed,\n // that should be the only time we need to move the popover box if we don't care about scroll\n // or resize\n const content = this.$refs.content\n if (!content) return\n if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {\n this.updateStyles()\n this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }\n }\n },\n mounted () {\n this.teleport = true\n let scrollable = this.$refs.trigger.closest('.column.-scrollable') ||\n this.$refs.trigger.closest('.mobile-notifications')\n if (!scrollable) scrollable = window\n this.scrollable = scrollable\n let parent = this.$parent\n while (parent && parent.$.type.name !== 'Popover') {\n parent = parent.$parent\n }\n this.parentPopover = parent\n },\n beforeUnmount () {\n this.hidePopover()\n }\n}\n\nexport default Popover\n","import { render } from \"./popover.vue?vue&type=template&id=5ac74c76\"\nimport script from \"./popover.js?vue&type=script&lang=js\"\nexport * from \"./popover.js?vue&type=script&lang=js\"\n\nimport \"./popover.vue?vue&type=style&index=0&id=5ac74c76&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n @mouseenter=\"onMouseenter\"\n @mouseleave=\"onMouseleave\"\n >\n <button\n ref=\"trigger\"\n class=\"popover-trigger-button\"\n :class=\"normalButton ? 'button-default btn' : 'button-unstyled'\"\n type=\"button\"\n v-bind=\"triggerAttrs\"\n @click=\"onClick\"\n >\n <slot name=\"trigger\" />\n </button>\n <teleport\n :disabled=\"!teleport\"\n to=\"#popovers\"\n >\n <transition name=\"fade\">\n <div\n v-if=\"!hidden\"\n ref=\"content\"\n :style=\"styles\"\n class=\"popover\"\n :class=\"popoverClass || 'popover-default'\"\n @mouseenter=\"onMouseenterContent\"\n @mouseleave=\"onMouseleaveContent\"\n @click=\"onClickContent\"\n >\n <slot\n name=\"content\"\n class=\"popover-inner\"\n :close=\"hidePopover\"\n />\n </div>\n </transition>\n </teleport>\n </span>\n</template>\n\n<script src=\"./popover.js\" />\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.popover-trigger-button {\n display: inline-block;\n}\n\n.popover {\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n position: fixed;\n min-width: 0;\n max-width: calc(100vw - 20px);\n box-shadow: 2px 2px 3px rgb(0 0 0 / 50%);\n box-shadow: var(--popupShadow);\n}\n\n.popover-default {\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 3;\n box-shadow: 1px 1px 4px rgb(0 0 0 / 60%);\n box-shadow: var(--panelShadow);\n pointer-events: none;\n }\n\n border-radius: $fallback--btnRadius;\n border-radius: var(--btnRadius, $fallback--btnRadius);\n background-color: $fallback--bg;\n background-color: var(--popover, $fallback--bg);\n color: $fallback--text;\n color: var(--popoverText, $fallback--text);\n\n --faint: var(--popoverFaintText, $fallback--faint);\n --faintLink: var(--popoverFaintLink, $fallback--faint);\n --lightText: var(--popoverLightText, $fallback--lightText);\n --postLink: var(--popoverPostLink, $fallback--link);\n --postFaintLink: var(--popoverPostFaintLink, $fallback--link);\n --icon: var(--popoverIcon, $fallback--icon);\n}\n\n.dropdown-menu {\n display: block;\n padding: 0.5rem 0;\n font-size: 1em;\n text-align: left;\n list-style: none;\n max-width: 100vw;\n z-index: var(--ZI_popover_override, var(--ZI_popovers));\n white-space: nowrap;\n\n .dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid $fallback--border;\n border-top: 1px solid var(--border, $fallback--border);\n }\n\n .dropdown-item {\n line-height: 21px;\n overflow: hidden;\n display: block;\n padding: 0.5em 0.75em;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: none;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n\n --btnText: var(--popoverText, $fallback--text);\n\n &-icon {\n svg {\n width: 22px;\n margin-right: 0.75rem;\n color: var(--menuPopoverIcon, $fallback--icon);\n }\n }\n\n &.-has-submenu {\n .chevron-icon {\n margin-right: 0.25rem;\n margin-left: 2rem;\n }\n }\n\n &:active,\n &:hover {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n box-shadow: none;\n\n --btnText: var(--selectedMenuPopoverText, $fallback--link);\n --faint: var(--selectedMenuPopoverFaintText, $fallback--faint);\n --faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);\n --lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n svg {\n color: var(--selectedMenuPopoverIcon, $fallback--icon);\n\n --icon: var(--selectedMenuPopoverIcon, $fallback--icon);\n }\n }\n\n .menu-checkbox {\n display: inline-block;\n vertical-align: middle;\n min-width: 22px;\n max-width: 22px;\n min-height: 22px;\n max-height: 22px;\n line-height: 22px;\n text-align: center;\n border-radius: 0;\n background-color: $fallback--fg;\n background-color: var(--input, $fallback--fg);\n box-shadow: 0 0 2px black inset;\n box-shadow: var(--inputShadow);\n margin-right: 0.75em;\n\n &.menu-checkbox-checked::after {\n font-size: 1.25em;\n content: \"✓\";\n }\n\n &.-radio {\n border-radius: 9999px;\n\n &.menu-checkbox-checked::after {\n font-size: 2em;\n content: \"•\";\n }\n }\n }\n }\n\n .button-default.dropdown-item {\n &,\n i[class*=\"icon-\"] {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &:active {\n background-color: $fallback--lightBg;\n background-color: var(--selectedMenuPopover, $fallback--lightBg);\n color: $fallback--link;\n color: var(--selectedMenuPopoverText, $fallback--link);\n }\n\n &:disabled {\n color: $fallback--text;\n color: var(--btnDisabledText, $fallback--text);\n }\n\n &.toggled {\n color: $fallback--text;\n color: var(--btnToggledText, $fallback--text);\n }\n }\n}\n</style>\n","<template>\n <div\n ref=\"form\"\n class=\"post-status-form\"\n >\n <form\n autocomplete=\"off\"\n @submit.prevent\n @dragover.prevent=\"fileDrag\"\n >\n <div class=\"form-group\">\n <i18n-t\n v-if=\"!$store.state.users.currentUser.locked && newStatus.visibility == 'private' && !disableLockWarning\"\n keypath=\"post_status.account_not_locked_warning\"\n tag=\"p\"\n class=\"visibility-notice\"\n scope=\"global\"\n >\n <button\n class=\"button-unstyled -link\"\n @click=\"openProfileTab\"\n >\n {{ $t('post_status.account_not_locked_warning_link') }}\n </button>\n </i18n-t>\n <p\n v-if=\"!hideScopeNotice && newStatus.visibility === 'public'\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.public') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"!hideScopeNotice && newStatus.visibility === 'unlisted'\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.unlisted') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"!hideScopeNotice && newStatus.visibility === 'private' && $store.state.users.currentUser.locked\"\n class=\"visibility-notice notice-dismissible\"\n >\n <span>{{ $t('post_status.scope_notice.private') }}</span>\n <a\n class=\"fa-scale-110 fa-old-padding dismiss\"\n :title=\"$t('post_status.scope_notice_dismiss')\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent=\"dismissScopeNotice()\"\n >\n <FAIcon icon=\"times\" />\n </a>\n </p>\n <p\n v-else-if=\"newStatus.visibility === 'direct'\"\n class=\"visibility-notice\"\n >\n <span v-if=\"safeDMEnabled\">{{ $t('post_status.direct_warning_to_first_only') }}</span>\n <span v-else>{{ $t('post_status.direct_warning_to_all') }}</span>\n </p>\n <div\n v-if=\"isEdit\"\n class=\"visibility-notice edit-warning\"\n >\n <p>{{ $t('post_status.edit_remote_warning') }}</p>\n <p>{{ $t('post_status.edit_unsupported_warning') }}</p>\n </div>\n <div\n v-if=\"!disablePreview\"\n class=\"preview-heading faint\"\n >\n <a\n class=\"preview-toggle faint\"\n @click.stop.prevent=\"togglePreview\"\n >\n {{ $t('post_status.preview') }}\n <FAIcon :icon=\"showPreview ? 'chevron-left' : 'chevron-right'\" />\n </a>\n <div\n v-show=\"previewLoading\"\n class=\"preview-spinner\"\n >\n <FAIcon\n class=\"fa-old-padding\"\n spin\n icon=\"circle-notch\"\n />\n </div>\n </div>\n <div\n v-if=\"showPreview\"\n class=\"preview-container\"\n >\n <div\n v-if=\"!preview\"\n class=\"preview-status\"\n >\n {{ $t('general.loading') }}\n </div>\n <div\n v-else-if=\"preview.error\"\n class=\"preview-status preview-error\"\n >\n {{ preview.error }}\n </div>\n <StatusContent\n v-else\n :status=\"preview\"\n class=\"preview-status\"\n />\n </div>\n <div\n v-if=\"quotable\"\n role=\"radiogroup\"\n class=\"btn-group reply-or-quote-selector\"\n >\n <button\n :id=\"`reply-or-quote-option-${randomSeed}-reply`\"\n class=\"btn button-default reply-or-quote-option\"\n :class=\"{ toggled: !newStatus.quoting }\"\n tabindex=\"0\"\n role=\"radio\"\n :aria-labelledby=\"`reply-or-quote-option-${randomSeed}-reply`\"\n :aria-checked=\"!newStatus.quoting\"\n @click=\"newStatus.quoting = false\"\n >\n {{ $t('post_status.reply_option') }}\n </button>\n <button\n :id=\"`reply-or-quote-option-${randomSeed}-quote`\"\n class=\"btn button-default reply-or-quote-option\"\n :class=\"{ toggled: newStatus.quoting }\"\n tabindex=\"0\"\n role=\"radio\"\n :aria-labelledby=\"`reply-or-quote-option-${randomSeed}-quote`\"\n :aria-checked=\"newStatus.quoting\"\n @click=\"newStatus.quoting = true\"\n >\n {{ $t('post_status.quote_option') }}\n </button>\n </div>\n <EmojiInput\n v-if=\"!disableSubject && (newStatus.spoilerText || alwaysShowSubject)\"\n v-model=\"newStatus.spoilerText\"\n enable-emoji-picker\n :suggest=\"emojiSuggestor\"\n class=\"form-control\"\n >\n <template #default=\"inputProps\">\n <input\n v-model=\"newStatus.spoilerText\"\n type=\"text\"\n :placeholder=\"$t('post_status.content_warning')\"\n :disabled=\"posting && !optimisticPosting\"\n v-bind=\"propsToNative(inputProps)\"\n size=\"1\"\n class=\"form-post-subject\"\n >\n </template>\n </EmojiInput>\n <EmojiInput\n ref=\"emoji-input\"\n v-model=\"newStatus.status\"\n :suggest=\"emojiUserSuggestor\"\n :placement=\"emojiPickerPlacement\"\n class=\"form-control main-input\"\n enable-emoji-picker\n hide-emoji-button\n :newline-on-ctrl-enter=\"submitOnEnter\"\n enable-sticker-picker\n @input=\"onEmojiInputInput\"\n @sticker-uploaded=\"addMediaFile\"\n @sticker-upload-failed=\"uploadFailed\"\n @shown=\"handleEmojiInputShow\"\n >\n <template #default=\"inputProps\">\n <textarea\n ref=\"textarea\"\n v-model=\"newStatus.status\"\n :placeholder=\"placeholder || $t('post_status.default')\"\n rows=\"1\"\n cols=\"1\"\n :disabled=\"posting && !optimisticPosting\"\n class=\"form-post-body\"\n :class=\"{ 'scrollable-form': !!maxHeight }\"\n v-bind=\"propsToNative(inputProps)\"\n @keydown.exact.enter=\"submitOnEnter && postStatus($event, newStatus)\"\n @keydown.meta.enter=\"postStatus($event, newStatus)\"\n @keydown.ctrl.enter=\"!submitOnEnter && postStatus($event, newStatus)\"\n @input=\"resize\"\n @compositionupdate=\"resize\"\n @paste=\"paste\"\n />\n <p\n v-if=\"hasStatusLengthLimit\"\n class=\"character-counter faint\"\n :class=\"{ error: isOverLengthLimit }\"\n >\n {{ charactersLeft }}\n </p>\n </template>\n </EmojiInput>\n <div\n v-if=\"!disableScopeSelector\"\n class=\"visibility-tray\"\n >\n <scope-selector\n v-if=\"!disableVisibilitySelector\"\n :show-all=\"showAllScopes\"\n :user-default=\"userDefaultScope\"\n :original-scope=\"copyMessageScope\"\n :initial-scope=\"newStatus.visibility\"\n :on-scope-change=\"changeVis\"\n />\n\n <div\n v-if=\"postFormats.length > 1\"\n class=\"text-format\"\n >\n <Select\n id=\"post-content-type\"\n v-model=\"newStatus.contentType\"\n class=\"form-control\"\n :attrs=\"{ 'aria-label': $t('post_status.content_type_selection') }\"\n >\n <option\n v-for=\"postFormat in postFormats\"\n :key=\"postFormat\"\n :value=\"postFormat\"\n >\n {{ $t(`post_status.content_type[\"${postFormat}\"]`) }}\n </option>\n </Select>\n </div>\n <div\n v-if=\"postFormats.length === 1 && postFormats[0] !== 'text/plain'\"\n class=\"text-format\"\n >\n <span class=\"only-format\">\n {{ $t(`post_status.content_type[\"${postFormats[0]}\"]`) }}\n </span>\n </div>\n </div>\n </div>\n <poll-form\n v-if=\"pollsAvailable\"\n ref=\"pollForm\"\n :visible=\"pollFormVisible\"\n @update-poll=\"setPoll\"\n />\n <div\n ref=\"bottom\"\n class=\"form-bottom\"\n >\n <div class=\"form-bottom-left\">\n <media-upload\n ref=\"mediaUpload\"\n class=\"media-upload-icon\"\n :drop-files=\"dropFiles\"\n :disabled=\"uploadFileLimitReached\"\n @uploading=\"startedUploadingFiles\"\n @uploaded=\"addMediaFile\"\n @upload-failed=\"uploadFailed\"\n @all-uploaded=\"finishedUploadingFiles\"\n />\n <button\n class=\"emoji-icon button-unstyled\"\n :title=\"$t('emoji.add_emoji')\"\n @click=\"showEmojiPicker\"\n >\n <FAIcon icon=\"smile-beam\" />\n </button>\n <button\n v-if=\"pollsAvailable\"\n class=\"poll-icon button-unstyled\"\n :class=\"{ selected: pollFormVisible }\"\n :title=\"$t('polls.add_poll')\"\n @click=\"togglePollForm\"\n >\n <FAIcon icon=\"poll-h\" />\n </button>\n </div>\n <button\n v-if=\"posting\"\n disabled\n class=\"btn button-default\"\n >\n {{ $t('post_status.posting') }}\n </button>\n <button\n v-else-if=\"isOverLengthLimit\"\n disabled\n class=\"btn button-default\"\n >\n {{ $t('post_status.post') }}\n </button>\n <button\n v-else\n :disabled=\"uploadingFiles || disableSubmit\"\n class=\"btn button-default\"\n @click.stop.prevent=\"postStatus($event, newStatus)\"\n >\n {{ $t('post_status.post') }}\n </button>\n </div>\n <div\n v-show=\"showDropIcon !== 'hide'\"\n :style=\"{ animation: showDropIcon === 'show' ? 'fade-in 0.25s' : 'fade-out 0.5s' }\"\n class=\"drop-indicator\"\n @dragleave=\"fileDragStop\"\n @drop.stop=\"fileDrop\"\n >\n <FAIcon :icon=\"uploadFileLimitReached ? 'ban' : 'upload'\" />\n </div>\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n Error: {{ error }}\n <button\n class=\"button-unstyled\"\n @click=\"clearError\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"times\"\n />\n </button>\n </div>\n <gallery\n v-if=\"newStatus.files && newStatus.files.length > 0\"\n class=\"attachments\"\n :grid=\"true\"\n :nsfw=\"false\"\n :attachments=\"newStatus.files\"\n :descriptions=\"newStatus.mediaDescriptions\"\n :set-media=\"() => $store.dispatch('setMedia', newStatus.files)\"\n :editable=\"true\"\n :edit-attachment=\"editAttachment\"\n :remove-attachment=\"removeMediaFile\"\n :shift-up-attachment=\"newStatus.files.length > 1 && shiftUpMediaFile\"\n :shift-dn-attachment=\"newStatus.files.length > 1 && shiftDnMediaFile\"\n @play=\"$emit('mediaplay', attachment.id)\"\n @pause=\"$emit('mediapause', attachment.id)\"\n />\n <div\n v-if=\"newStatus.files.length > 0 && !disableSensitivityCheckbox\"\n class=\"upload_settings\"\n >\n <Checkbox v-model=\"newStatus.nsfw\">\n {{ $t('post_status.attachments_sensitive') }}\n </Checkbox>\n </div>\n </form>\n </div>\n</template>\n\n<script src=\"./post_status_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.post-status-form {\n position: relative;\n\n .attachments {\n margin-bottom: 0.5em;\n }\n\n .form-bottom {\n display: flex;\n justify-content: space-between;\n padding: 0.5em;\n height: 2.5em;\n\n button {\n width: 10em;\n }\n\n p {\n margin: 0.35em;\n padding: 0.35em;\n display: flex;\n }\n }\n\n .form-bottom-left {\n display: flex;\n flex: 1;\n padding-right: 7px;\n margin-right: 7px;\n max-width: 10em;\n }\n\n .preview-heading {\n display: flex;\n padding-left: 0.5em;\n }\n\n .preview-toggle {\n flex: 1;\n cursor: pointer;\n user-select: none;\n\n &:hover {\n text-decoration: underline;\n }\n\n svg,\n i {\n margin-left: 0.2em;\n font-size: 0.8em;\n transform: rotate(90deg);\n }\n }\n\n .preview-container {\n margin-bottom: 1em;\n }\n\n .preview-error {\n font-style: italic;\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n\n .preview-status {\n border: 1px solid $fallback--border;\n border: 1px solid var(--border, $fallback--border);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n padding: 0.5em;\n margin: 0;\n }\n\n .reply-or-quote-selector {\n margin-bottom: 0.5em;\n }\n\n .text-format {\n .only-format {\n color: $fallback--faint;\n color: var(--faint, $fallback--faint);\n }\n }\n\n .visibility-tray {\n display: flex;\n justify-content: space-between;\n padding-top: 5px;\n align-items: baseline;\n }\n\n .visibility-notice.edit-warning {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n // Order is not necessary but a good indicator\n .media-upload-icon {\n order: 1;\n justify-content: left;\n }\n\n .emoji-icon {\n order: 2;\n justify-content: center;\n }\n\n .poll-icon {\n order: 3;\n justify-content: right;\n }\n\n .media-upload-icon,\n .poll-icon,\n .emoji-icon {\n font-size: 1.85em;\n line-height: 1.1;\n flex: 1;\n padding: 0 0.1em;\n display: flex;\n align-items: center;\n\n &.selected,\n &:hover {\n // needs to be specific to override icon default color\n svg,\n i,\n label {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n\n &.disabled {\n svg,\n i {\n cursor: not-allowed;\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n\n &:hover {\n color: $fallback--icon;\n color: var(--btnDisabledText, $fallback--icon);\n }\n }\n }\n }\n\n .error {\n text-align: center;\n }\n\n .media-upload-wrapper {\n margin-right: 0.2em;\n margin-bottom: 0.5em;\n width: 18em;\n\n img,\n video {\n object-fit: contain;\n max-height: 10em;\n }\n\n .video {\n max-height: 10em;\n }\n\n input {\n flex: 1;\n width: 100%;\n }\n }\n\n .status-input-wrapper {\n display: flex;\n position: relative;\n width: 100%;\n flex-direction: column;\n }\n\n .btn[disabled] {\n cursor: not-allowed;\n }\n\n form {\n display: flex;\n flex-direction: column;\n margin: 0.6em;\n position: relative;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n padding: 0.25em 0.5em 0.5em;\n line-height: 1.85;\n }\n\n .form-post-body {\n // TODO: make a resizable textarea component?\n box-sizing: content-box; // needed for easier computation of dynamic size\n overflow: hidden;\n transition: min-height 200ms 100ms;\n // stock padding + 1 line of text (for counter)\n padding-bottom: calc(var(--_padding) + var(--post-line-height) * 1em);\n // two lines of text\n height: calc(var(--post-line-height) * 1em);\n min-height: calc(var(--post-line-height) * 1em);\n resize: none;\n\n &.scrollable-form {\n overflow-y: auto;\n }\n }\n\n .main-input {\n position: relative;\n }\n\n .character-counter {\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0 0.5em;\n\n &.error {\n color: $fallback--cRed;\n color: var(--cRed, $fallback--cRed);\n }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 0.6; }\n }\n\n @keyframes fade-out {\n from { opacity: 0.6; }\n to { opacity: 0; }\n }\n\n .drop-indicator {\n position: absolute;\n width: 100%;\n height: 100%;\n font-size: 5em;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n color: $fallback--text;\n color: var(--text, $fallback--text);\n background-color: $fallback--bg;\n background-color: var(--bg, $fallback--bg);\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n border: 2px dashed $fallback--text;\n border: 2px dashed var(--text, $fallback--text);\n }\n}\n</style>\n","<template>\n <div\n v-if=\"visible\"\n class=\"poll-form\"\n >\n <div\n v-for=\"(option, index) in options\"\n :key=\"index\"\n class=\"poll-option\"\n >\n <div class=\"input-container\">\n <input\n :id=\"`poll-${index}`\"\n v-model=\"options[index]\"\n size=\"1\"\n class=\"poll-option-input\"\n type=\"text\"\n :placeholder=\"$t('polls.option')\"\n :maxlength=\"maxLength\"\n @change=\"updatePollToParent\"\n @keydown.enter.stop.prevent=\"nextOption(index)\"\n >\n </div>\n <button\n v-if=\"options.length > 2\"\n class=\"delete-option button-unstyled -hover-highlight\"\n @click=\"deleteOption(index)\"\n >\n <FAIcon icon=\"times\" />\n </button>\n </div>\n <button\n v-if=\"options.length < maxOptions\"\n class=\"add-option faint button-unstyled -hover-highlight\"\n @click=\"addOption\"\n >\n <FAIcon\n icon=\"plus\"\n size=\"sm\"\n />\n\n {{ $t(\"polls.add_option\") }}\n </button>\n <div class=\"poll-type-expiry\">\n <div\n class=\"poll-type\"\n :title=\"$t('polls.type')\"\n >\n <Select\n v-model=\"pollType\"\n class=\"poll-type-select\"\n unstyled=\"true\"\n @change=\"updatePollToParent\"\n >\n <option value=\"single\">\n {{ $t('polls.single_choice') }}\n </option>\n <option value=\"multiple\">\n {{ $t('polls.multiple_choices') }}\n </option>\n </Select>\n </div>\n <div\n class=\"poll-expiry\"\n :title=\"$t('polls.expiry')\"\n >\n <input\n v-model=\"expiryAmount\"\n type=\"number\"\n class=\"expiry-amount hide-number-spinner\"\n :min=\"minExpirationInCurrentUnit\"\n :max=\"maxExpirationInCurrentUnit\"\n @change=\"expiryAmountChange\"\n >\n {{ ' ' }}\n <Select\n v-model=\"expiryUnit\"\n unstyled=\"true\"\n class=\"expiry-unit\"\n @change=\"expiryAmountChange\"\n >\n <option\n v-for=\"unit in expiryUnits\"\n :key=\"unit\"\n :value=\"unit\"\n >\n {{ $tc(`time.unit.${unit}_short`, expiryAmount, ['']) }}\n </option>\n </Select>\n </div>\n </div>\n </div>\n</template>\n\n<script src=\"./poll_form.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.poll-form {\n display: flex;\n flex-direction: column;\n padding: 0 0.5em 0.5em;\n\n .add-option {\n align-self: flex-start;\n padding-top: 0.25em;\n padding-left: 0.1em;\n }\n\n .poll-option {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin-bottom: 0.25em;\n }\n\n .input-container {\n width: 100%;\n\n input {\n // Hack: dodge the floating X icon\n padding-right: 2.5em;\n width: 100%;\n }\n }\n\n .delete-option {\n // Hack: Move the icon over the input box\n width: 1.5em;\n margin-left: -1.5em;\n z-index: 1;\n }\n\n .poll-type-expiry {\n margin-top: 0.5em;\n display: flex;\n width: 100%;\n }\n\n .poll-type {\n margin-right: 0.75em;\n flex: 1 1 60%;\n\n .poll-type-select {\n padding-right: 0.75em;\n }\n }\n\n .poll-expiry {\n display: flex;\n\n .expiry-amount {\n width: 3em;\n text-align: right;\n }\n }\n}\n</style>\n","import * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport { uniq } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport Select from '../select/select.vue'\nimport {\n faTimes,\n faPlus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faPlus\n)\n\nexport default {\n components: {\n Select\n },\n name: 'PollForm',\n props: ['visible'],\n data: () => ({\n pollType: 'single',\n options: ['', ''],\n expiryAmount: 10,\n expiryUnit: 'minutes'\n }),\n computed: {\n pollLimits () {\n return this.$store.state.instance.pollLimits\n },\n maxOptions () {\n return this.pollLimits.max_options\n },\n maxLength () {\n return this.pollLimits.max_option_chars\n },\n expiryUnits () {\n const allUnits = ['minutes', 'hours', 'days']\n const expiry = this.convertExpiryFromUnit\n return allUnits.filter(\n unit => this.pollLimits.max_expiration >= expiry(unit, 1)\n )\n },\n minExpirationInCurrentUnit () {\n return Math.ceil(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.min_expiration\n )\n )\n },\n maxExpirationInCurrentUnit () {\n return Math.floor(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.max_expiration\n )\n )\n }\n },\n methods: {\n clear () {\n this.pollType = 'single'\n this.options = ['', '']\n this.expiryAmount = 10\n this.expiryUnit = 'minutes'\n },\n nextOption (index) {\n const element = this.$el.querySelector(`#poll-${index + 1}`)\n if (element) {\n element.focus()\n } else {\n // Try adding an option and try focusing on it\n const addedOption = this.addOption()\n if (addedOption) {\n this.$nextTick(function () {\n this.nextOption(index)\n })\n }\n }\n },\n addOption () {\n if (this.options.length < this.maxOptions) {\n this.options.push('')\n return true\n }\n return false\n },\n deleteOption (index, event) {\n if (this.options.length > 2) {\n this.options.splice(index, 1)\n this.updatePollToParent()\n }\n },\n convertExpiryToUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n return DateUtils.secondsToUnit(unit, amount)\n },\n convertExpiryFromUnit (unit, amount) {\n return DateUtils.unitToSeconds(unit, amount)\n },\n expiryAmountChange () {\n this.expiryAmount =\n Math.max(this.minExpirationInCurrentUnit, this.expiryAmount)\n this.expiryAmount =\n Math.min(this.maxExpirationInCurrentUnit, this.expiryAmount)\n this.updatePollToParent()\n },\n updatePollToParent () {\n const expiresIn = this.convertExpiryFromUnit(\n this.expiryUnit,\n this.expiryAmount\n )\n\n const options = uniq(this.options.filter(option => option !== ''))\n if (options.length < 2) {\n this.$emit('update-poll', { error: this.$t('polls.not_enough_options') })\n return\n }\n this.$emit('update-poll', {\n options,\n multiple: this.pollType === 'multiple',\n expiresIn\n })\n }\n }\n}\n","import { render } from \"./poll_form.vue?vue&type=template&id=24ea52c8\"\nimport script from \"./poll_form.js?vue&type=script&lang=js\"\nexport * from \"./poll_form.js?vue&type=script&lang=js\"\n\nimport \"./poll_form.vue?vue&type=style&index=0&id=24ea52c8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import statusPoster from '../../services/status_poster/status_poster.service.js'\nimport genRandomSeed from '../../services/random_seed/random_seed.service.js'\nimport MediaUpload from '../media_upload/media_upload.vue'\nimport ScopeSelector from '../scope_selector/scope_selector.vue'\nimport EmojiInput from '../emoji_input/emoji_input.vue'\nimport PollForm from '../poll/poll_form.vue'\nimport Attachment from '../attachment/attachment.vue'\nimport Gallery from 'src/components/gallery/gallery.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { propsToNative } from '../../services/attributes_helper/attributes_helper.service.js'\nimport { reject, map, uniqBy, debounce } from 'lodash'\nimport suggestor from '../emoji_input/suggestor.js'\nimport { mapGetters, mapState } from 'vuex'\nimport Checkbox from '../checkbox/checkbox.vue'\nimport Select from '../select/select.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSmileBeam,\n faPollH,\n faUpload,\n faBan,\n faTimes,\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faSmileBeam,\n faPollH,\n faUpload,\n faBan,\n faTimes,\n faCircleNotch\n)\n\nconst buildMentionsString = ({ user, attentions = [] }, currentUser) => {\n let allAttentions = [...attentions]\n\n allAttentions.unshift(user)\n\n allAttentions = uniqBy(allAttentions, 'id')\n allAttentions = reject(allAttentions, { id: currentUser.id })\n\n const mentions = map(allAttentions, (attention) => {\n return `@${attention.screen_name}`\n })\n\n return mentions.length > 0 ? mentions.join(' ') + ' ' : ''\n}\n\n// Converts a string with px to a number like '2px' -> 2\nconst pxStringToNumber = (str) => {\n return Number(str.substring(0, str.length - 2))\n}\n\nconst PostStatusForm = {\n props: [\n 'statusId',\n 'statusText',\n 'statusIsSensitive',\n 'statusPoll',\n 'statusFiles',\n 'statusMediaDescriptions',\n 'statusScope',\n 'statusContentType',\n 'replyTo',\n 'repliedUser',\n 'attentions',\n 'copyMessageScope',\n 'subject',\n 'disableSubject',\n 'disableScopeSelector',\n 'disableVisibilitySelector',\n 'disableNotice',\n 'disableLockWarning',\n 'disablePolls',\n 'disableSensitivityCheckbox',\n 'disableSubmit',\n 'disablePreview',\n 'placeholder',\n 'maxHeight',\n 'postHandler',\n 'preserveFocus',\n 'autoFocus',\n 'fileLimit',\n 'submitOnEnter',\n 'emojiPickerPlacement',\n 'optimisticPosting'\n ],\n emits: [\n 'posted',\n 'resize',\n 'mediaplay',\n 'mediapause'\n ],\n components: {\n MediaUpload,\n EmojiInput,\n PollForm,\n ScopeSelector,\n Checkbox,\n Select,\n Attachment,\n StatusContent,\n Gallery\n },\n mounted () {\n this.updateIdempotencyKey()\n this.resize(this.$refs.textarea)\n\n if (this.replyTo) {\n const textLength = this.$refs.textarea.value.length\n this.$refs.textarea.setSelectionRange(textLength, textLength)\n }\n\n if (this.replyTo || this.autoFocus) {\n this.$refs.textarea.focus()\n }\n },\n data () {\n const preset = this.$route.query.message\n let statusText = preset || ''\n\n const { scopeCopy } = this.$store.getters.mergedConfig\n\n if (this.replyTo) {\n const currentUser = this.$store.state.users.currentUser\n statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)\n }\n\n const scope = ((this.copyMessageScope && scopeCopy) || this.copyMessageScope === 'direct')\n ? this.copyMessageScope\n : this.$store.state.users.currentUser.default_scope\n\n const { postContentType: contentType, sensitiveByDefault } = this.$store.getters.mergedConfig\n\n let statusParams = {\n spoilerText: this.subject || '',\n status: statusText,\n nsfw: !!sensitiveByDefault,\n files: [],\n poll: {},\n mediaDescriptions: {},\n visibility: scope,\n contentType\n }\n\n if (this.statusId) {\n const statusContentType = this.statusContentType || contentType\n statusParams = {\n spoilerText: this.subject || '',\n status: this.statusText || '',\n nsfw: this.statusIsSensitive || !!sensitiveByDefault,\n files: this.statusFiles || [],\n poll: this.statusPoll || {},\n mediaDescriptions: this.statusMediaDescriptions || {},\n visibility: this.statusScope || scope,\n contentType: statusContentType,\n quoting: false\n }\n }\n\n return {\n randomSeed: genRandomSeed(),\n dropFiles: [],\n uploadingFiles: false,\n error: null,\n posting: false,\n highlighted: 0,\n newStatus: statusParams,\n caret: 0,\n pollFormVisible: false,\n showDropIcon: 'hide',\n dropStopTimeout: null,\n preview: null,\n previewLoading: false,\n emojiInputShown: false,\n idempotencyKey: ''\n }\n },\n computed: {\n users () {\n return this.$store.state.users.users\n },\n userDefaultScope () {\n return this.$store.state.users.currentUser.default_scope\n },\n showAllScopes () {\n return !this.mergedConfig.minimalScopesMode\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.getters.standardEmojiList,\n ...this.$store.state.instance.customEmoji\n ],\n store: this.$store\n })\n },\n emojiSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.getters.standardEmojiList,\n ...this.$store.state.instance.customEmoji\n ]\n })\n },\n emoji () {\n return this.$store.getters.standardEmojiList || []\n },\n customEmoji () {\n return this.$store.state.instance.customEmoji || []\n },\n statusLength () {\n return this.newStatus.status.length\n },\n spoilerTextLength () {\n return this.newStatus.spoilerText.length\n },\n statusLengthLimit () {\n return this.$store.state.instance.textlimit\n },\n hasStatusLengthLimit () {\n return this.statusLengthLimit > 0\n },\n charactersLeft () {\n return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)\n },\n isOverLengthLimit () {\n return this.hasStatusLengthLimit && (this.charactersLeft < 0)\n },\n minimalScopesMode () {\n return this.$store.state.instance.minimalScopesMode\n },\n alwaysShowSubject () {\n return this.mergedConfig.alwaysShowSubjectInput\n },\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n safeDMEnabled () {\n return this.$store.state.instance.safeDM\n },\n pollsAvailable () {\n return this.$store.state.instance.pollsAvailable &&\n this.$store.state.instance.pollLimits.max_options >= 2 &&\n this.disablePolls !== true\n },\n hideScopeNotice () {\n return this.disableNotice || this.$store.getters.mergedConfig.hideScopeNotice\n },\n pollContentError () {\n return this.pollFormVisible &&\n this.newStatus.poll &&\n this.newStatus.poll.error\n },\n showPreview () {\n return !this.disablePreview && (!!this.preview || this.previewLoading)\n },\n emptyStatus () {\n return this.newStatus.status.trim() === '' && this.newStatus.files.length === 0\n },\n uploadFileLimitReached () {\n return this.newStatus.files.length >= this.fileLimit\n },\n isEdit () {\n return typeof this.statusId !== 'undefined' && this.statusId.trim() !== ''\n },\n quotable () {\n if (!this.$store.state.instance.quotingAvailable) {\n return false\n }\n\n if (!this.replyTo) {\n return false\n }\n\n const repliedStatus = this.$store.state.statuses.allStatusesObject[this.replyTo]\n if (!repliedStatus) {\n return false\n }\n\n if (repliedStatus.visibility === 'public' ||\n repliedStatus.visibility === 'unlisted' ||\n repliedStatus.visibility === 'local') {\n return true\n } else if (repliedStatus.visibility === 'private') {\n return repliedStatus.user.id === this.$store.state.users.currentUser.id\n }\n\n return false\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n mobileLayout: state => state.interface.mobileLayout\n })\n },\n watch: {\n newStatus: {\n deep: true,\n handler () {\n this.statusChanged()\n }\n }\n },\n methods: {\n statusChanged () {\n this.autoPreview()\n this.updateIdempotencyKey()\n },\n clearStatus () {\n const newStatus = this.newStatus\n this.newStatus = {\n status: '',\n spoilerText: '',\n files: [],\n visibility: newStatus.visibility,\n contentType: newStatus.contentType,\n poll: {},\n mediaDescriptions: {},\n quoting: false\n }\n this.pollFormVisible = false\n this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()\n this.clearPollForm()\n if (this.preserveFocus) {\n this.$nextTick(() => {\n this.$refs.textarea.focus()\n })\n }\n const el = this.$el.querySelector('textarea')\n el.style.height = 'auto'\n el.style.height = undefined\n this.error = null\n if (this.preview) this.previewStatus()\n },\n async postStatus (event, newStatus, opts = {}) {\n if (this.posting && !this.optimisticPosting) { return }\n if (this.disableSubmit) { return }\n if (this.emojiInputShown) { return }\n if (this.submitOnEnter) {\n event.stopPropagation()\n event.preventDefault()\n }\n\n if (this.optimisticPosting && (this.emptyStatus || this.isOverLengthLimit)) { return }\n\n if (this.emptyStatus) {\n this.error = this.$t('post_status.empty_status_error')\n return\n }\n\n const poll = this.pollFormVisible ? this.newStatus.poll : {}\n if (this.pollContentError) {\n this.error = this.pollContentError\n return\n }\n\n this.posting = true\n\n try {\n await this.setAllMediaDescriptions()\n } catch (e) {\n this.error = this.$t('post_status.media_description_error')\n this.posting = false\n return\n }\n\n const replyOrQuoteAttr = newStatus.quoting ? 'quoteId' : 'inReplyToStatusId'\n\n const postingOptions = {\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: newStatus.files,\n store: this.$store,\n [replyOrQuoteAttr]: this.replyTo,\n contentType: newStatus.contentType,\n poll,\n idempotencyKey: this.idempotencyKey\n }\n\n const postHandler = this.postHandler ? this.postHandler : statusPoster.postStatus\n\n postHandler(postingOptions).then((data) => {\n if (!data.error) {\n this.clearStatus()\n this.$emit('posted', data)\n } else {\n this.error = data.error\n }\n this.posting = false\n })\n },\n previewStatus () {\n if (this.emptyStatus && this.newStatus.spoilerText.trim() === '') {\n this.preview = { error: this.$t('post_status.preview_empty') }\n this.previewLoading = false\n return\n }\n const newStatus = this.newStatus\n this.previewLoading = true\n const replyOrQuoteAttr = newStatus.quoting ? 'quoteId' : 'inReplyToStatusId'\n statusPoster.postStatus({\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: [],\n store: this.$store,\n [replyOrQuoteAttr]: this.replyTo,\n contentType: newStatus.contentType,\n poll: {},\n preview: true\n }).then((data) => {\n // Don't apply preview if not loading, because it means\n // user has closed the preview manually.\n if (!this.previewLoading) return\n if (!data.error) {\n this.preview = data\n } else {\n this.preview = { error: data.error }\n }\n }).catch((error) => {\n this.preview = { error }\n }).finally(() => {\n this.previewLoading = false\n })\n },\n debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),\n autoPreview () {\n if (!this.preview) return\n this.previewLoading = true\n this.debouncePreviewStatus()\n },\n closePreview () {\n this.preview = null\n this.previewLoading = false\n },\n togglePreview () {\n if (this.showPreview) {\n this.closePreview()\n } else {\n this.previewStatus()\n }\n },\n addMediaFile (fileInfo) {\n this.newStatus.files.push(fileInfo)\n this.$emit('resize', { delayed: true })\n },\n removeMediaFile (fileInfo) {\n const index = this.newStatus.files.indexOf(fileInfo)\n this.newStatus.files.splice(index, 1)\n this.$emit('resize')\n },\n editAttachment (fileInfo, newText) {\n this.newStatus.mediaDescriptions[fileInfo.id] = newText\n },\n shiftUpMediaFile (fileInfo) {\n const { files } = this.newStatus\n const index = this.newStatus.files.indexOf(fileInfo)\n files.splice(index, 1)\n files.splice(index - 1, 0, fileInfo)\n },\n shiftDnMediaFile (fileInfo) {\n const { files } = this.newStatus\n const index = this.newStatus.files.indexOf(fileInfo)\n files.splice(index, 1)\n files.splice(index + 1, 0, fileInfo)\n },\n uploadFailed (errString, templateArgs) {\n templateArgs = templateArgs || {}\n this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)\n },\n startedUploadingFiles () {\n this.uploadingFiles = true\n },\n finishedUploadingFiles () {\n this.$emit('resize')\n this.uploadingFiles = false\n },\n type (fileInfo) {\n return fileTypeService.fileType(fileInfo.mimetype)\n },\n paste (e) {\n this.autoPreview()\n this.resize(e)\n if (e.clipboardData.files.length > 0) {\n // prevent pasting of file as text\n e.preventDefault()\n // Strangely, files property gets emptied after event propagation\n // Trying to wrap it in array doesn't work. Plus I doubt it's possible\n // to hold more than one file in clipboard.\n this.dropFiles = [e.clipboardData.files[0]]\n }\n },\n fileDrop (e) {\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n e.preventDefault() // allow dropping text like before\n this.dropFiles = e.dataTransfer.files\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'hide'\n }\n },\n fileDragStop (e) {\n // The false-setting is done with delay because just using leave-events\n // directly caused unwanted flickering, this is not perfect either but\n // much less noticable.\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'fade'\n this.dropStopTimeout = setTimeout(() => (this.showDropIcon = 'hide'), 500)\n },\n fileDrag (e) {\n e.dataTransfer.dropEffect = this.uploadFileLimitReached ? 'none' : 'copy'\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'show'\n }\n },\n onEmojiInputInput (e) {\n this.$nextTick(() => {\n this.resize(this.$refs.textarea)\n })\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n\n // Reset to default height for empty form, nothing else to do here.\n if (target.value === '') {\n target.style.height = null\n this.$emit('resize')\n return\n }\n\n const formRef = this.$refs.form\n const bottomRef = this.$refs.bottom\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const bottomBottomPaddingStr = window.getComputedStyle(bottomRef)['padding-bottom']\n const bottomBottomPadding = pxStringToNumber(bottomBottomPaddingStr)\n\n const scrollerRef = this.$el.closest('.column.-scrollable') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n\n // Getting info about padding we have to account for, removing 'px' part\n const topPaddingStr = window.getComputedStyle(target)['padding-top']\n const bottomPaddingStr = window.getComputedStyle(target)['padding-bottom']\n const topPadding = pxStringToNumber(topPaddingStr)\n const bottomPadding = pxStringToNumber(bottomPaddingStr)\n const vertPadding = topPadding + bottomPadding\n\n const oldHeight = pxStringToNumber(target.style.height)\n\n /* Explanation:\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight\n * scrollHeight returns element's scrollable content height, i.e. visible\n * element + overscrolled parts of it. We use it to determine when text\n * inside the textarea exceeded its height, so we can set height to prevent\n * overscroll, i.e. make textarea grow with the text. HOWEVER, since we\n * explicitly set new height, scrollHeight won't go below that, so we can't\n * SHRINK the textarea when there's extra space. To workaround that we set\n * height to 'auto' which makes textarea tiny again, so that scrollHeight\n * will match text height again. HOWEVER, shrinking textarea can screw with\n * the scroll since there might be not enough padding around form-bottom to even\n * warrant a scroll, so it will jump to 0 and refuse to move anywhere,\n * so we check current scroll position before shrinking and then restore it\n * with needed delta.\n */\n\n // this part has to be BEFORE the content size update\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n const scrollerBottomBorder = currentScroll + scrollerHeight\n\n // BEGIN content size update\n target.style.height = 'auto'\n const heightWithoutPadding = Math.floor(target.scrollHeight - vertPadding)\n let newHeight = this.maxHeight ? Math.min(heightWithoutPadding, this.maxHeight) : heightWithoutPadding\n // This is a bit of a hack to combat target.scrollHeight being different on every other input\n // on some browsers for whatever reason. Don't change the height if difference is 1px or less.\n if (Math.abs(newHeight - oldHeight) <= 1) {\n newHeight = oldHeight\n }\n target.style.height = `${newHeight}px`\n this.$emit('resize', newHeight)\n // END content size update\n\n // We check where the bottom border of form-bottom element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const bottomBottomBorder = bottomRef.offsetHeight + findOffset(bottomRef, scrollerRef).top + bottomBottomPadding\n\n const isBottomObstructed = scrollerBottomBorder < bottomBottomBorder\n const isFormBiggerThanScroller = scrollerHeight < formRef.offsetHeight\n const bottomChangeDelta = bottomBottomBorder - scrollerBottomBorder\n // The intention is basically this;\n // Keep form-bottom always visible so that submit button is in view EXCEPT\n // if form element bigger than scroller and caret isn't at the end, so that\n // if you scroll up and edit middle of text you won't get scrolled back to bottom\n const shouldScrollToBottom = isBottomObstructed &&\n !(isFormBiggerThanScroller &&\n this.$refs.textarea.selectionStart !== this.$refs.textarea.value.length)\n const totalDelta = shouldScrollToBottom ? bottomChangeDelta : 0\n const targetScroll = Math.round(currentScroll + totalDelta)\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n },\n showEmojiPicker () {\n this.$refs.textarea.focus()\n this.$refs['emoji-input'].triggerShowPicker()\n },\n clearError () {\n this.error = null\n },\n changeVis (visibility) {\n this.newStatus.visibility = visibility\n },\n togglePollForm () {\n this.pollFormVisible = !this.pollFormVisible\n },\n setPoll (poll) {\n this.newStatus.poll = poll\n },\n clearPollForm () {\n if (this.$refs.pollForm) {\n this.$refs.pollForm.clear()\n }\n },\n dismissScopeNotice () {\n this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true })\n },\n setMediaDescription (id) {\n const description = this.newStatus.mediaDescriptions[id]\n if (!description || description.trim() === '') return\n return statusPoster.setMediaDescription({ store: this.$store, id, description })\n },\n setAllMediaDescriptions () {\n const ids = this.newStatus.files.map(file => file.id)\n return Promise.all(ids.map(id => this.setMediaDescription(id)))\n },\n handleEmojiInputShow (value) {\n this.emojiInputShown = value\n },\n updateIdempotencyKey () {\n this.idempotencyKey = Date.now().toString()\n },\n openProfileTab () {\n this.$store.dispatch('openSettingsModalTab', 'profile')\n },\n propsToNative (props) {\n return propsToNative(props)\n }\n }\n}\n\nexport default PostStatusForm\n","import { render } from \"./post_status_form.vue?vue&type=template&id=59414186\"\nimport script from \"./post_status_form.js?vue&type=script&lang=js\"\nexport * from \"./post_status_form.js?vue&type=script&lang=js\"\n\nimport \"./post_status_form.vue?vue&type=style&index=0&id=59414186&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <button\n :disabled=\"progress || disabled\"\n @click=\"onClick\"\n >\n <template v-if=\"progress && $slots.progress\">\n <slot name=\"progress\" />\n </template>\n <template v-else>\n <slot />\n </template>\n </button>\n</template>\n\n<script>\nexport default {\n props: {\n disabled: {\n type: Boolean\n },\n click: { // click event handler. Must return a promise\n type: Function,\n default: () => Promise.resolve()\n }\n },\n data () {\n return {\n progress: false\n }\n },\n methods: {\n onClick () {\n this.progress = true\n this.click().then(() => { this.progress = false })\n }\n }\n}\n</script>\n","import { render } from \"./progress_button.vue?vue&type=template&id=9f751ae6\"\nimport script from \"./progress_button.vue?vue&type=script&lang=js\"\nexport * from \"./progress_button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"remote-follow\">\n <form\n method=\"POST\"\n :action=\"subscribeUrl\"\n >\n <input\n type=\"hidden\"\n name=\"nickname\"\n :value=\"user.screen_name\"\n >\n <input\n type=\"hidden\"\n name=\"profile\"\n value=\"\"\n >\n <button\n click=\"submit\"\n class=\"button-default remote-button\"\n >\n {{ $t('user_card.remote_follow') }}\n </button>\n </form>\n </div>\n</template>\n\n<script src=\"./remote_follow.js\"></script>\n\n<style lang=\"scss\">\n.remote-follow {\n max-width: 220px;\n\n .remote-button {\n width: 100%;\n min-height: 2em;\n }\n}\n</style>\n","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","import { render } from \"./remote_follow.vue?vue&type=template&id=2aed8421\"\nimport script from \"./remote_follow.js?vue&type=script&lang=js\"\nexport * from \"./remote_follow.js?vue&type=script&lang=js\"\n\nimport \"./remote_follow.vue?vue&type=style&index=0&id=2aed8421&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!showNothing\"\n class=\"ScopeSelector\"\n >\n <button\n v-if=\"showDirect\"\n class=\"button-unstyled scope\"\n :class=\"css.direct\"\n :title=\"$t('post_status.scope.direct')\"\n type=\"button\"\n @click=\"changeVis('direct')\"\n >\n <FAIcon\n icon=\"envelope\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showPrivate\"\n class=\"button-unstyled scope\"\n :class=\"css.private\"\n :title=\"$t('post_status.scope.private')\"\n type=\"button\"\n @click=\"changeVis('private')\"\n >\n <FAIcon\n icon=\"lock\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showUnlisted\"\n class=\"button-unstyled scope\"\n :class=\"css.unlisted\"\n :title=\"$t('post_status.scope.unlisted')\"\n type=\"button\"\n @click=\"changeVis('unlisted')\"\n >\n <FAIcon\n icon=\"lock-open\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n {{ ' ' }}\n <button\n v-if=\"showPublic\"\n class=\"button-unstyled scope\"\n :class=\"css.public\"\n :title=\"$t('post_status.scope.public')\"\n type=\"button\"\n @click=\"changeVis('public')\"\n >\n <FAIcon\n icon=\"globe\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n </div>\n</template>\n\n<script src=\"./scope_selector.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.ScopeSelector {\n .scope {\n display: inline-block;\n cursor: pointer;\n min-width: 1.3em;\n min-height: 1.3em;\n text-align: center;\n\n &.selected svg {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEnvelope,\n faLock,\n faLockOpen,\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEnvelope,\n faGlobe,\n faLock,\n faLockOpen\n)\n\nconst ScopeSelector = {\n props: [\n 'showAll',\n 'userDefault',\n 'originalScope',\n 'initialScope',\n 'onScopeChange'\n ],\n data () {\n return {\n currentScope: this.initialScope\n }\n },\n computed: {\n showNothing () {\n return !this.showPublic && !this.showUnlisted && !this.showPrivate && !this.showDirect\n },\n showPublic () {\n return this.originalScope !== 'direct' && this.shouldShow('public')\n },\n showUnlisted () {\n return this.originalScope !== 'direct' && this.shouldShow('unlisted')\n },\n showPrivate () {\n return this.originalScope !== 'direct' && this.shouldShow('private')\n },\n showDirect () {\n return this.shouldShow('direct')\n },\n css () {\n return {\n public: { selected: this.currentScope === 'public' },\n unlisted: { selected: this.currentScope === 'unlisted' },\n private: { selected: this.currentScope === 'private' },\n direct: { selected: this.currentScope === 'direct' }\n }\n }\n },\n methods: {\n shouldShow (scope) {\n return this.showAll ||\n this.currentScope === scope ||\n this.originalScope === scope ||\n this.userDefault === scope ||\n scope === 'direct'\n },\n changeVis (scope) {\n this.currentScope = scope\n this.onScopeChange && this.onScopeChange(scope)\n }\n }\n}\n\nexport default ScopeSelector\n","import { render } from \"./scope_selector.vue?vue&type=template&id=3b2dbc9a\"\nimport script from \"./scope_selector.js?vue&type=script&lang=js\"\nexport * from \"./scope_selector.js?vue&type=script&lang=js\"\n\nimport \"./scope_selector.vue?vue&type=style&index=0&id=3b2dbc9a&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown\n)\n\nexport default {\n emits: ['update:modelValue'],\n props: [\n 'modelValue',\n 'disabled',\n 'unstyled',\n 'kind',\n 'attrs'\n ]\n}\n","import { render } from \"./select.vue?vue&type=template&id=1f77c9b6\"\nimport script from \"./select.js?vue&type=script&lang=js\"\nexport * from \"./select.js?vue&type=script&lang=js\"\n\nimport \"./select.vue?vue&type=style&index=0&id=1f77c9b6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <label\n class=\"Select input\"\n :class=\"{ disabled, unstyled }\"\n >\n <select\n :disabled=\"disabled\"\n :value=\"modelValue\"\n v-bind=\"attrs\"\n @change=\"$emit('update:modelValue', $event.target.value)\"\n >\n <slot />\n </select>\n {{ ' ' }}\n <FAIcon\n class=\"select-down-icon\"\n icon=\"chevron-down\"\n />\n </label>\n</template>\n\n<script src=\"./select.js\"> </script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* TODO fix order of styles */\nlabel.Select {\n padding: 0;\n\n select {\n appearance: none;\n background: transparent;\n border: none;\n color: $fallback--text;\n color: var(--inputText, --text, $fallback--text);\n margin: 0;\n padding: 0 2em 0 0.2em;\n font-family: sans-serif;\n font-family: var(--inputFont, sans-serif);\n font-size: 1em;\n width: 100%;\n z-index: 1;\n height: 2em;\n line-height: 16px;\n }\n\n .select-down-icon {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 5px;\n height: 100%;\n width: 0.875em;\n color: $fallback--text;\n color: var(--inputText, $fallback--text);\n line-height: 2;\n z-index: 0;\n pointer-events: none;\n }\n}\n</style>\n","<template>\n <div\n v-if=\"!hideStatus\"\n ref=\"root\"\n class=\"Status\"\n :class=\"[{ '-focused': isFocused }, { '-conversation': inlineExpanded }]\"\n >\n <div\n v-if=\"error\"\n class=\"alert error\"\n >\n {{ error }}\n <span\n class=\"fa-scale-110 fa-old-padding\"\n @click=\"clearError\"\n >\n <FAIcon icon=\"times\" />\n </span>\n </div>\n <template v-if=\"muted && !isPreview\">\n <div class=\"status-container muted\">\n <small class=\"status-username\">\n <FAIcon\n v-if=\"muted && retweet\"\n class=\"fa-scale-110 fa-old-padding repeat-icon\"\n icon=\"retweet\"\n />\n <user-link\n :user=\"status.user\"\n :at=\"false\"\n />\n </small>\n <small\n v-if=\"showReasonMutedThread\"\n class=\"mute-thread\"\n >\n {{ $t('status.thread_muted') }}\n </small>\n <small\n v-if=\"showReasonMutedThread && muteWordHits.length > 0\"\n class=\"mute-thread\"\n >\n {{ $t('status.thread_muted_and_words') }}\n </small>\n <small\n class=\"mute-words\"\n :title=\"muteWordHits.join(', ')\"\n >\n {{ muteWordHits.join(', ') }}\n </small>\n <button\n class=\"unmute button-unstyled\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n icon=\"eye-slash\"\n class=\"fa-scale-110 fa-old-padding\"\n />\n </button>\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"showPinned\"\n class=\"pin\"\n >\n <FAIcon\n icon=\"thumbtack\"\n class=\"faint\"\n />\n <span class=\"faint\">{{ $t('status.pinned') }}</span>\n </div>\n <div\n v-if=\"retweet && !noHeading && !inConversation\"\n :class=\"[repeaterClass, { highlighted: repeaterStyle }]\"\n :style=\"[repeaterStyle]\"\n class=\"status-container repeat-info\"\n >\n <UserAvatar\n v-if=\"retweet\"\n class=\"left-side repeater-avatar\"\n :bot=\"rtBotIndicator\"\n :better-shadow=\"betterShadow\"\n :user=\"statusoid.user\"\n />\n <div class=\"right-side faint\">\n <bdi\n class=\"status-username repeater-name\"\n :title=\"retweeter\"\n >\n <router-link\n v-if=\"retweeterHtml\"\n :to=\"retweeterProfileLink\"\n >\n <RichContent\n :html=\"retweeterHtml\"\n :emoji=\"retweeterUser.emoji\"\n />\n </router-link>\n <router-link\n v-else\n :to=\"retweeterProfileLink\"\n >{{ retweeter }}</router-link>\n </bdi>\n {{ ' ' }}\n <FAIcon\n icon=\"retweet\"\n class=\"repeat-icon\"\n :title=\"$t('tool_tip.repeat')\"\n />\n {{ $t('timeline.repeated') }}\n </div>\n </div>\n\n <div\n v-if=\"!deleted\"\n :class=\"[userClass, { highlighted: userStyle, '-repeat': retweet && !inConversation }]\"\n :style=\"[ userStyle ]\"\n class=\"status-container\"\n :data-tags=\"tags\"\n >\n <div\n v-if=\"!noHeading\"\n class=\"left-side\"\n >\n <a\n :href=\"$router.resolve(userProfileLink).href\"\n @click.prevent\n >\n <UserPopover\n :user-id=\"status.user.id\"\n :overlay-centers=\"true\"\n >\n <UserAvatar\n class=\"post-avatar\"\n :bot=\"botIndicator\"\n :compact=\"compact\"\n :better-shadow=\"betterShadow\"\n :user=\"status.user\"\n />\n </UserPopover>\n </a>\n </div>\n <div class=\"right-side\">\n <div\n v-if=\"!noHeading\"\n class=\"status-heading\"\n >\n <div class=\"heading-name-row\">\n <div class=\"heading-left\">\n <h4\n v-if=\"status.user.name_html\"\n class=\"status-username\"\n :title=\"status.user.name\"\n >\n <RichContent\n :html=\"status.user.name\"\n :emoji=\"status.user.emoji\"\n />\n </h4>\n <h4\n v-else\n class=\"status-username\"\n :title=\"status.user.name\"\n >\n {{ status.user.name }}\n </h4>\n <user-link\n class=\"account-name\"\n :title=\"status.user.screen_name_ui\"\n :user=\"status.user\"\n :at=\"false\"\n />\n <img\n v-if=\"!!(status.user && status.user.favicon)\"\n class=\"status-favicon\"\n :src=\"status.user.favicon\"\n >\n </div>\n\n <span class=\"heading-right\">\n <router-link\n class=\"timeago faint-link\"\n :to=\"{ name: 'conversation', params: { id: status.id } }\"\n >\n <Timeago\n :time=\"status.created_at\"\n :auto-update=\"60\"\n />\n </router-link>\n <span\n v-if=\"status.visibility\"\n class=\"visibility-icon\"\n :title=\"visibilityLocalized\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"visibilityIcon(status.visibility)\"\n />\n </span>\n <button\n v-if=\"expandable && !isPreview\"\n class=\"button-unstyled\"\n :title=\"$t('status.expand')\"\n @click.prevent=\"toggleExpanded\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n icon=\"plus-square\"\n />\n </button>\n <button\n v-if=\"unmuted\"\n class=\"button-unstyled\"\n @click.prevent=\"toggleMute\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n class=\"fa-scale-110\"\n />\n </button>\n <button\n v-if=\"inThreadForest && replies && replies.length && !simpleTree\"\n class=\"button-unstyled\"\n :title=\"threadShowing ? $t('status.thread_hide') : $t('status.thread_show')\"\n :aria-expanded=\"threadShowing ? 'true' : 'false'\"\n @click.prevent=\"toggleThreadDisplay\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"threadShowing ? 'chevron-up' : 'chevron-down'\"\n />\n </button>\n <button\n v-if=\"dive && !simpleTree\"\n class=\"button-unstyled\"\n :title=\"$t('status.show_only_conversation_under_this')\"\n @click.prevent=\"dive\"\n >\n <FAIcon\n fixed-width\n class=\"fa-scale-110\"\n :icon=\"'angle-double-right'\"\n />\n </button>\n </span>\n </div>\n <div\n v-if=\"isReply || hasMentionsLine\"\n class=\"heading-reply-row\"\n >\n <span\n v-if=\"isReply\"\n class=\"glued-label reply-glued-label\"\n >\n <StatusPopover\n v-if=\"!isPreview\"\n :status-id=\"status.parent_visible && status.in_reply_to_status_id\"\n class=\"reply-to-popover\"\n style=\"min-width: 0;\"\n :class=\"{ '-strikethrough': !status.parent_visible }\"\n >\n <button\n class=\"button-unstyled reply-to\"\n :aria-label=\"$t('tool_tip.reply')\"\n @click.prevent=\"gotoOriginal(status.in_reply_to_status_id)\"\n >\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"reply\"\n flip=\"horizontal\"\n />\n {{ ' ' }}\n <span\n class=\"reply-to-text\"\n >\n {{ $t('status.reply_to') }}\n </span>\n </button>\n </StatusPopover>\n\n <span\n v-else\n class=\"reply-to-no-popover\"\n >\n <span class=\"reply-to-text\">{{ $t('status.reply_to') }}</span>\n </span>\n <MentionLink\n :content=\"replyToName\"\n :url=\"replyProfileLink\"\n :user-id=\"status.in_reply_to_user_id\"\n :user-screen-name=\"status.in_reply_to_screen_name\"\n />\n </span>\n\n <!-- This little wrapper is made for sole purpose of \"gluing\" -->\n <!-- \"Mentions\" label to the first mention -->\n <span\n v-if=\"hasMentionsLine\"\n class=\"glued-label\"\n >\n <span\n class=\"mentions\"\n :aria-label=\"$t('tool_tip.mentions')\"\n @click.prevent=\"gotoOriginal(status.in_reply_to_status_id)\"\n >\n <span\n class=\"mentions-text\"\n >\n {{ $t('status.mentions') }}\n </span>\n </span>\n <MentionsLine\n v-if=\"hasMentionsLine\"\n :mentions=\"mentionsLine.slice(0, 1)\"\n class=\"mentions-line-first\"\n />\n </span>\n {{ ' ' }}\n <MentionsLine\n v-if=\"hasMentionsLine\"\n :mentions=\"mentionsLine.slice(1)\"\n class=\"mentions-line\"\n />\n </div>\n <div\n v-if=\"isEdited && editingAvailable && !isPreview\"\n class=\"heading-edited-row\"\n >\n <i18n-t\n keypath=\"status.edited_at\"\n tag=\"span\"\n >\n <template #time>\n <Timeago\n template-key=\"time.in_past\"\n :time=\"status.edited_at\"\n :auto-update=\"60\"\n :long-format=\"true\"\n />\n </template>\n </i18n-t>\n </div>\n </div>\n\n <StatusContent\n ref=\"content\"\n :status=\"status\"\n :no-heading=\"noHeading\"\n :highlight=\"highlight\"\n :focused=\"isFocused\"\n :controlled-showing-tall=\"controlledShowingTall\"\n :controlled-expanding-subject=\"controlledExpandingSubject\"\n :controlled-showing-long-subject=\"controlledShowingLongSubject\"\n :controlled-toggle-showing-tall=\"controlledToggleShowingTall\"\n :controlled-toggle-expanding-subject=\"controlledToggleExpandingSubject\"\n :controlled-toggle-showing-long-subject=\"controlledToggleShowingLongSubject\"\n @mediaplay=\"addMediaPlaying($event)\"\n @mediapause=\"removeMediaPlaying($event)\"\n @parseReady=\"setHeadTailLinks\"\n />\n\n <article\n v-if=\"hasVisibleQuote\"\n class=\"quoted-status\"\n >\n <button\n class=\"button-unstyled -link display-quoted-status-button\"\n :aria-expanded=\"shouldDisplayQuote\"\n @click=\"toggleDisplayQuote\"\n >\n {{ shouldDisplayQuote ? $t('status.hide_quote') : $t('status.display_quote') }}\n <FAIcon\n class=\"display-quoted-status-button-icon\"\n :icon=\"shouldDisplayQuote ? 'chevron-up' : 'chevron-down'\"\n />\n </button>\n <Status\n v-if=\"shouldDisplayQuote\"\n :statusoid=\"quotedStatus\"\n :in-quote=\"true\"\n />\n </article>\n <p\n v-else-if=\"hasInvisibleQuote\"\n class=\"quoted-status -unavailable-prompt\"\n >\n <i18n-t keypath=\"status.invisible_quote\">\n <template #link>\n <bdi>\n <a\n :href=\"status.quote_url\"\n target=\"_blank\"\n >\n {{ status.quote_url }}\n </a>\n </bdi>\n </template>\n </i18n-t>\n </p>\n\n <div\n v-if=\"inConversation && !isPreview && replies && replies.length\"\n class=\"replies\"\n >\n <button\n v-if=\"showOtherRepliesAsButton && replies.length > 1\"\n class=\"button-unstyled -link faint\"\n :title=\"$tc('status.ancestor_follow', replies.length - 1, { numReplies: replies.length - 1 })\"\n @click.prevent=\"dive\"\n >\n {{ $tc('status.replies_list_with_others', replies.length - 1, { numReplies: replies.length - 1 }) }}\n </button>\n <span\n v-else\n class=\"faint\"\n >\n {{ $t('status.replies_list') }}\n </span>\n <StatusPopover\n v-for=\"reply in replies\"\n :key=\"reply.id\"\n :status-id=\"reply.id\"\n >\n <button\n class=\"button-unstyled -link reply-link\"\n @click.prevent=\"gotoOriginal(reply.id)\"\n >\n {{ reply.name }}\n </button>\n </StatusPopover>\n </div>\n\n <transition name=\"fade\">\n <div\n v-if=\"!hidePostStats && isFocused && combinedFavsAndRepeatsUsers.length > 0\"\n class=\"favs-repeated-users\"\n >\n <div class=\"stats\">\n <UserListPopover\n v-if=\"statusFromGlobalRepository.rebloggedBy && statusFromGlobalRepository.rebloggedBy.length > 0\"\n :users=\"statusFromGlobalRepository.rebloggedBy\"\n >\n <div class=\"stat-count\">\n <a class=\"stat-title\">{{ $t('status.repeats') }}</a>\n <div class=\"stat-number\">\n {{ statusFromGlobalRepository.rebloggedBy.length }}\n </div>\n </div>\n </UserListPopover>\n <UserListPopover\n v-if=\"statusFromGlobalRepository.favoritedBy && statusFromGlobalRepository.favoritedBy.length > 0\"\n :users=\"statusFromGlobalRepository.favoritedBy\"\n >\n <div\n class=\"stat-count\"\n >\n <a class=\"stat-title\">{{ $t('status.favorites') }}</a>\n <div class=\"stat-number\">\n {{ statusFromGlobalRepository.favoritedBy.length }}\n </div>\n </div>\n </UserListPopover>\n <div class=\"avatar-row\">\n <AvatarList :users=\"combinedFavsAndRepeatsUsers\" />\n </div>\n </div>\n </div>\n </transition>\n\n <EmojiReactions\n v-if=\"(mergedConfig.emojiReactionsOnTimeline || isFocused) && (!noHeading && !isPreview)\"\n :status=\"status\"\n />\n\n <div\n v-if=\"!noHeading && !isPreview\"\n class=\"status-actions\"\n >\n <reply-button\n :replying=\"replying\"\n :status=\"status\"\n @toggle=\"toggleReplying\"\n />\n <retweet-button\n :visibility=\"status.visibility\"\n :logged-in=\"loggedIn\"\n :status=\"status\"\n />\n <favorite-button\n :logged-in=\"loggedIn\"\n :status=\"status\"\n />\n <ReactButton\n v-if=\"loggedIn\"\n :status=\"status\"\n />\n <extra-buttons\n :status=\"status\"\n @onError=\"showError\"\n @onSuccess=\"clearError\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n class=\"gravestone\"\n >\n <div class=\"left-side\">\n <UserAvatar\n class=\"post-avatar\"\n :compact=\"compact\"\n :bot=\"botIndicator\"\n />\n </div>\n <div class=\"right-side\">\n <div class=\"deleted-text\">\n {{ $t('status.status_deleted') }}\n </div>\n <reply-button\n v-if=\"replying\"\n :replying=\"replying\"\n :status=\"status\"\n @toggle=\"toggleReplying\"\n />\n </div>\n </div>\n <div\n v-if=\"replying\"\n class=\"status-container reply-form\"\n >\n <PostStatusForm\n class=\"reply-body\"\n :reply-to=\"status.id\"\n :attentions=\"status.attentions\"\n :replied-user=\"status.user\"\n :copy-message-scope=\"status.visibility\"\n :subject=\"replySubject\"\n @posted=\"toggleReplying\"\n />\n </div>\n </template>\n </div>\n</template>\n\n<script src=\"./status.js\"></script>\n\n<style src=\"./status.scss\" lang=\"scss\"></style>\n","<template>\n <div class=\"ReplyButton\">\n <button\n v-if=\"loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"{'-active': replying}\"\n :title=\"$t('tool_tip.reply')\"\n @click.prevent=\"$emit('toggle')\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"reply\"\n />\n <FAIcon\n v-if=\"!replying\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-11\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-11\"\n icon=\"times\"\n />\n </FALayers>\n </button>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :href=\"remoteInteractionLink\"\n :title=\"$t('tool_tip.reply')\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"reply\"\n />\n <FAIcon\n v-if=\"!replying\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"status.replies_count > 0\"\n class=\"action-counter\"\n >\n {{ status.replies_count }}\n </span>\n </div>\n</template>\n\n<script src=\"./reply_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReplyButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n &:hover .svg-inline--fa,\n &.-active .svg-inline--fa {\n color: $fallback--cBlue;\n color: var(--cBlue, $fallback--cBlue);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faReply,\n faPlus,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faReply,\n faPlus,\n faTimes\n)\n\nconst ReplyButton = {\n name: 'ReplyButton',\n props: ['status', 'replying'],\n computed: {\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n }\n}\n\nexport default ReplyButton\n","import { render } from \"./reply_button.vue?vue&type=template&id=a7dc5ddc\"\nimport script from \"./reply_button.js?vue&type=script&lang=js\"\nexport * from \"./reply_button.js?vue&type=script&lang=js\"\n\nimport \"./reply_button.vue?vue&type=style&index=0&id=a7dc5ddc&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"FavoriteButton\">\n <button\n v-if=\"loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"status.favorited && '-favorited'\"\n :title=\"$t('tool_tip.favorite')\"\n @click.prevent=\"favorite()\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n :icon=\"[status.favorited ? 'fas' : 'far', 'star']\"\n :spin=\"animated\"\n />\n <FAIcon\n v-if=\"status.favorited\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!status.favorited\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"minus\"\n />\n </FALayers>\n </button>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :title=\"$t('tool_tip.favorite')\"\n :href=\"remoteInteractionLink\"\n >\n <FALayers class=\"fa-scale-110 fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n :icon=\"['far', 'star']\"\n />\n <FAIcon\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"!mergedConfig.hidePostStats && status.fave_num > 0\"\n class=\"action-counter\"\n >\n {{ status.fave_num }}\n </span>\n </div>\n</template>\n\n<script src=\"./favorite_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.FavoriteButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-favorited .svg-inline--fa {\n color: $fallback--cOrange;\n color: var(--cOrange, $fallback--cOrange);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n</style>\n","import { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faStar,\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faStar as faStarRegular\n} from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faStar,\n faStarRegular,\n faPlus,\n faMinus,\n faCheck\n)\n\nconst FavoriteButton = {\n props: ['status', 'loggedIn'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n favorite () {\n if (!this.status.favorited) {\n this.$store.dispatch('favorite', { id: this.status.id })\n } else {\n this.$store.dispatch('unfavorite', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n ...mapGetters(['mergedConfig']),\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n }\n}\n\nexport default FavoriteButton\n","import { render } from \"./favorite_button.vue?vue&type=template&id=195db34e\"\nimport script from \"./favorite_button.js?vue&type=script&lang=js\"\nexport * from \"./favorite_button.js?vue&type=script&lang=js\"\n\nimport \"./favorite_button.vue?vue&type=style&index=0&id=195db34e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span class=\"ReactButton\">\n <EmojiPicker\n ref=\"picker\"\n :enable-sticker-picker=\"enableStickerPicker\"\n :hide-custom-emoji=\"hideCustomEmoji\"\n class=\"emoji-picker-panel\"\n @emoji=\"addReaction\"\n @show=\"onShow\"\n @close=\"onClose\"\n />\n <span\n class=\"button-unstyled popover-trigger\"\n role=\"button\"\n :tabindex=\"0\"\n :title=\"$t('tool_tip.add_reaction')\"\n @click.stop.prevent=\"show\"\n >\n <FALayers>\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n :icon=\"['far', 'smile-beam']\"\n />\n <FAIcon\n v-show=\"!expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-17\"\n icon=\"plus\"\n />\n <FAIcon\n v-show=\"expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-17\"\n icon=\"times\"\n />\n </FALayers>\n </span>\n </span>\n</template>\n\n<script src=\"./react_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ReactButton {\n .reaction-picker-filter {\n padding: 0.5em;\n display: flex;\n\n input {\n flex: 1;\n }\n }\n\n .reaction-picker-divider {\n height: 1px;\n width: 100%;\n margin: 0.5em;\n background-color: var(--border, $fallback--border);\n }\n\n .reaction-picker {\n width: 10em;\n height: 9em;\n font-size: 1.5em;\n overflow-y: scroll;\n display: flex;\n flex-wrap: wrap;\n padding: 0.5em;\n text-align: center;\n align-content: flex-start;\n user-select: none;\n mask:\n linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,\n linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,\n linear-gradient(to top, white, white);\n transition: mask-size 150ms;\n mask-size: 100% 20px, 100% 20px, auto;\n\n /* Autoprefixed seem to ignore this one, and also syntax is different */\n mask-composite: xor;\n mask-composite: exclude;\n\n .emoji-button {\n cursor: pointer;\n flex-basis: 20%;\n line-height: 1.5;\n align-content: center;\n\n &:hover {\n transform: scale(1.25);\n }\n }\n }\n\n .popover-trigger {\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n\n</style>\n","import Popover from '../popover/popover.vue'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faPlus, faTimes } from '@fortawesome/free-solid-svg-icons'\nimport { faSmileBeam } from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faPlus,\n faTimes,\n faSmileBeam\n)\n\nconst ReactButton = {\n props: ['status'],\n data () {\n return {\n filterWord: '',\n expanded: false\n }\n },\n components: {\n Popover,\n EmojiPicker\n },\n methods: {\n addReaction (event) {\n const emoji = event.insertion\n const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)\n if (existingReaction && existingReaction.me) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n } else {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n }\n },\n show () {\n if (!this.expanded) {\n this.$refs.picker.showPicker()\n }\n },\n onShow () {\n this.expanded = true\n },\n onClose () {\n this.expanded = false\n }\n },\n computed: {\n hideCustomEmoji () {\n return !this.$store.state.instance.pleromaCustomEmojiReactionsAvailable\n }\n }\n}\n\nexport default ReactButton\n","import { render } from \"./react_button.vue?vue&type=template&id=54e78625\"\nimport script from \"./react_button.js?vue&type=script&lang=js\"\nexport * from \"./react_button.js?vue&type=script&lang=js\"\n\nimport \"./react_button.vue?vue&type=style&index=0&id=54e78625&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"RetweetButton\">\n <button\n v-if=\"visibility !== 'private' && visibility !== 'direct' && loggedIn\"\n class=\"button-unstyled interactive\"\n :class=\"status.repeated && '-repeated'\"\n :title=\"$t('tool_tip.repeat')\"\n @click.prevent=\"retweet()\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"retweet\"\n :spin=\"animated\"\n />\n <FAIcon\n v-if=\"status.repeated\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!status.repeated\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"minus\"\n />\n </FALayers>\n </button>\n <span v-else-if=\"loggedIn\">\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"lock\"\n :title=\"$t('timeline.no_retweet_hint')\"\n />\n </span>\n <a\n v-else\n class=\"button-unstyled interactive\"\n target=\"_blank\"\n role=\"button\"\n :title=\"$t('tool_tip.repeat')\"\n :href=\"remoteInteractionLink\"\n >\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110\"\n icon=\"retweet\"\n />\n <FAIcon\n class=\"focus-marker\"\n transform=\"shrink-6 up-9 right-12\"\n icon=\"plus\"\n />\n </FALayers>\n </a>\n <span\n v-if=\"!mergedConfig.hidePostStats && status.repeat_num > 0\"\n class=\"no-event\"\n >\n {{ status.repeat_num }}\n </span>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmDialog\"\n :title=\"$t('status.repeat_confirm_title')\"\n :confirm-text=\"$t('status.repeat_confirm_accept_button')\"\n :cancel-text=\"$t('status.repeat_confirm_cancel_button')\"\n @accepted=\"doRetweet\"\n @cancelled=\"hideConfirmDialog\"\n >\n {{ $t('status.repeat_confirm') }}\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./retweet_button.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.RetweetButton {\n display: flex;\n\n > :first-child {\n padding: 10px;\n margin: -10px -8px -10px -10px;\n }\n\n .action-counter {\n pointer-events: none;\n user-select: none;\n }\n\n .interactive {\n .svg-inline--fa {\n animation-duration: 0.6s;\n }\n\n &:hover .svg-inline--fa,\n &.-repeated .svg-inline--fa {\n color: $fallback--cGreen;\n color: var(--cGreen, $fallback--cGreen);\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n}\n</style>\n","import ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faRetweet,\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRetweet,\n faPlus,\n faMinus,\n faCheck\n)\n\nconst RetweetButton = {\n props: ['status', 'loggedIn', 'visibility'],\n components: {\n ConfirmModal\n },\n data () {\n return {\n animated: false,\n showingConfirmDialog: false\n }\n },\n methods: {\n retweet () {\n if (!this.status.repeated && this.shouldConfirmRepeat) {\n this.showConfirmDialog()\n } else {\n this.doRetweet()\n }\n },\n doRetweet () {\n if (!this.status.repeated) {\n this.$store.dispatch('retweet', { id: this.status.id })\n } else {\n this.$store.dispatch('unretweet', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n this.hideConfirmDialog()\n },\n showConfirmDialog () {\n this.showingConfirmDialog = true\n },\n hideConfirmDialog () {\n this.showingConfirmDialog = false\n }\n },\n computed: {\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n },\n shouldConfirmRepeat () {\n return this.mergedConfig.modalOnRepeat\n }\n }\n}\n\nexport default RetweetButton\n","import { render } from \"./retweet_button.vue?vue&type=template&id=3a6122b4\"\nimport script from \"./retweet_button.js?vue&type=script&lang=js\"\nexport * from \"./retweet_button.js?vue&type=script&lang=js\"\n\nimport \"./retweet_button.vue?vue&type=style&index=0&id=3a6122b4&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n class=\"ExtraButtons\"\n trigger=\"click\"\n :trigger-attrs=\"triggerAttrs\"\n placement=\"top\"\n :offset=\"{ y: 5 }\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n @show=\"onShow\"\n @close=\"onClose\"\n >\n <template #content=\"{close}\">\n <div\n class=\"dropdown-menu\"\n role=\"menu\"\n :id=\"`popup-menu-${randomSeed}`\"\n >\n <button\n v-if=\"canMute && !status.thread_muted\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"muteConversation\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n /><span>{{ $t(\"status.mute_conversation\") }}</span>\n </button>\n <button\n v-if=\"canMute && status.thread_muted\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"unmuteConversation\"\n >\n <FAIcon\n fixed-width\n icon=\"eye-slash\"\n /><span>{{ $t(\"status.unmute_conversation\") }}</span>\n </button>\n <button\n v-if=\"!status.pinned && canPin\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"pinStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"thumbtack\"\n /><span>{{ $t(\"status.pin\") }}</span>\n </button>\n <button\n v-if=\"status.pinned && canPin\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"unpinStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"thumbtack\"\n /><span>{{ $t(\"status.unpin\") }}</span>\n </button>\n <template v-if=\"canBookmark\">\n <button\n v-if=\"!status.bookmarked\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"bookmarkStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n :icon=\"['far', 'bookmark']\"\n /><span>{{ $t(\"status.bookmark\") }}</span>\n </button>\n <button\n v-if=\"status.bookmarked\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"unbookmarkStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"bookmark\"\n /><span>{{ $t(\"status.unbookmark\") }}</span>\n </button>\n </template>\n <button\n v-if=\"ownStatus && editingAvailable\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"editStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"pen\"\n /><span>{{ $t(\"status.edit\") }}</span>\n </button>\n <button\n v-if=\"isEdited && editingAvailable\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"showStatusHistory\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"history\"\n /><span>{{ $t(\"status.status_history\") }}</span>\n </button>\n <button\n v-if=\"canDelete\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"deleteStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"times\"\n /><span>{{ $t(\"status.delete\") }}</span>\n </button>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"copyLink\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n icon=\"share-alt\"\n /><span>{{ $t(\"status.copy_link\") }}</span>\n </button>\n <a\n v-if=\"!status.is_local\"\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n title=\"Source\"\n :href=\"status.external_url\"\n target=\"_blank\"\n >\n <FAIcon\n fixed-width\n icon=\"external-link-alt\"\n /><span>{{ $t(\"status.external_source\") }}</span>\n </a>\n <button\n class=\"button-default dropdown-item dropdown-item-icon\"\n role=\"menuitem\"\n @click.prevent=\"reportStatus\"\n @click=\"close\"\n >\n <FAIcon\n fixed-width\n :icon=\"['far', 'flag']\"\n /><span>{{ $t(\"user_card.report\") }}</span>\n </button>\n </div>\n </template>\n <template #trigger>\n <span class=\"button-unstyled popover-trigger\">\n <FALayers class=\"fa-old-padding-layer\">\n <FAIcon\n class=\"fa-scale-110 \"\n icon=\"ellipsis-h\"\n />\n <FAIcon\n v-show=\"!expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"plus\"\n />\n <FAIcon\n v-show=\"expanded\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-8 right-16\"\n icon=\"times\"\n />\n </FALayers>\n </span>\n <teleport to=\"#modal\">\n <ConfirmModal\n v-if=\"showingDeleteDialog\"\n :title=\"$t('status.delete_confirm_title')\"\n :cancel-text=\"$t('status.delete_confirm_cancel_button')\"\n :confirm-text=\"$t('status.delete_confirm_accept_button')\"\n @cancelled=\"hideDeleteStatusConfirmDialog\"\n @accepted=\"doDeleteStatus\"\n >\n {{ $t('status.delete_confirm') }}\n </ConfirmModal>\n </teleport>\n </template>\n </Popover>\n</template>\n\n<script src=\"./extra_buttons.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.ExtraButtons {\n .popover-trigger {\n position: static;\n padding: 10px;\n margin: -10px;\n\n &:hover .svg-inline--fa {\n color: $fallback--text;\n color: var(--text, $fallback--text);\n }\n }\n\n .popover-trigger-button {\n /* override of popover internal stuff */\n width: auto;\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n }\n\n @include focused-style {\n .focus-marker {\n visibility: visible;\n }\n }\n }\n}\n</style>\n","import Popover from '../popover/popover.vue'\nimport genRandomSeed from '../../services/random_seed/random_seed.service.js'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisH,\n faBookmark,\n faEyeSlash,\n faThumbtack,\n faShareAlt,\n faExternalLinkAlt,\n faHistory,\n faPlus,\n faTimes\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faBookmark as faBookmarkReg,\n faFlag\n} from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faEllipsisH,\n faBookmark,\n faBookmarkReg,\n faEyeSlash,\n faThumbtack,\n faShareAlt,\n faExternalLinkAlt,\n faFlag,\n faHistory,\n faPlus,\n faTimes\n)\n\nconst ExtraButtons = {\n props: ['status'],\n components: {\n Popover,\n ConfirmModal\n },\n data () {\n return {\n expanded: false,\n showingDeleteDialog: false,\n randomSeed: genRandomSeed()\n }\n },\n methods: {\n onShow () {\n this.expanded = true\n },\n onClose () {\n this.expanded = false\n },\n deleteStatus () {\n if (this.shouldConfirmDelete) {\n this.showDeleteStatusConfirmDialog()\n } else {\n this.doDeleteStatus()\n }\n },\n doDeleteStatus () {\n this.$store.dispatch('deleteStatus', { id: this.status.id })\n this.hideDeleteStatusConfirmDialog()\n },\n showDeleteStatusConfirmDialog () {\n this.showingDeleteDialog = true\n },\n hideDeleteStatusConfirmDialog () {\n this.showingDeleteDialog = false\n },\n pinStatus () {\n this.$store.dispatch('pinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unpinStatus () {\n this.$store.dispatch('unpinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n muteConversation () {\n this.$store.dispatch('muteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unmuteConversation () {\n this.$store.dispatch('unmuteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n copyLink () {\n navigator.clipboard.writeText(this.statusLink)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n bookmarkStatus () {\n this.$store.dispatch('bookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unbookmarkStatus () {\n this.$store.dispatch('unbookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n reportStatus () {\n this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] })\n },\n editStatus () {\n this.$store.dispatch('fetchStatusSource', { id: this.status.id })\n .then(data => this.$store.dispatch('openEditStatusModal', {\n statusId: this.status.id,\n subject: data.spoiler_text,\n statusText: data.text,\n statusIsSensitive: this.status.nsfw,\n statusPoll: this.status.poll,\n statusFiles: [...this.status.attachments],\n visibility: this.status.visibility,\n statusContentType: data.content_type\n }))\n },\n showStatusHistory () {\n const originalStatus = { ...this.status }\n const stripFieldsList = ['attachments', 'created_at', 'emojis', 'text', 'raw_html', 'nsfw', 'poll', 'summary', 'summary_raw_html']\n stripFieldsList.forEach(p => delete originalStatus[p])\n this.$store.dispatch('openStatusHistoryModal', originalStatus)\n }\n },\n computed: {\n currentUser () { return this.$store.state.users.currentUser },\n canDelete () {\n if (!this.currentUser) { return }\n return this.currentUser.privileges.includes('messages_delete') || this.status.user.id === this.currentUser.id\n },\n ownStatus () {\n return this.status.user.id === this.currentUser.id\n },\n canPin () {\n return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted')\n },\n canMute () {\n return !!this.currentUser\n },\n canBookmark () {\n return !!this.currentUser\n },\n statusLink () {\n return `${this.$store.state.instance.server}${this.$router.resolve({ name: 'conversation', params: { id: this.status.id } }).href}`\n },\n isEdited () {\n return this.status.edited_at !== null\n },\n editingAvailable () { return this.$store.state.instance.editingAvailable },\n shouldConfirmDelete () {\n return this.$store.getters.mergedConfig.modalOnDelete\n },\n triggerAttrs () {\n return {\n title: this.$t('status.more_actions'),\n id: `popup-trigger-${this.randomSeed}`,\n 'aria-controls': `popup-menu-${this.randomSeed}`,\n 'aria-expanded': this.expanded,\n 'aria-haspopup': 'menu'\n }\n }\n }\n}\n\nexport default ExtraButtons\n","import { render } from \"./extra_buttons.vue?vue&type=template&id=36a61b40\"\nimport script from \"./extra_buttons.js?vue&type=script&lang=js\"\nexport * from \"./extra_buttons.js?vue&type=script&lang=js\"\n\nimport \"./extra_buttons.vue?vue&type=style&index=0&id=36a61b40&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n ref=\"popover\"\n trigger=\"hover\"\n :stay-on-click=\"true\"\n popover-class=\"popover-default status-popover\"\n :bound-to=\"{ x: 'container' }\"\n @show=\"enter\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content>\n <Status\n v-if=\"status\"\n :is-preview=\"true\"\n :statusoid=\"status\"\n :compact=\"true\"\n />\n <div\n v-else-if=\"error\"\n class=\"status-preview-no-content faint\"\n >\n {{ $t('status.status_unavailable') }}\n </div>\n <div\n v-else\n class=\"status-preview-no-content\"\n >\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"2x\"\n />\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./status_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n.status-popover.popover {\n font-size: 1rem;\n min-width: 15em;\n max-width: 95%;\n border-color: $fallback--border;\n border-color: var(--border, $fallback--border);\n border-style: solid;\n border-width: 1px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n\n /* TODO cleanup this */\n .Status.Status {\n border: none;\n }\n\n .status-preview-no-content {\n padding: 1em;\n text-align: center;\n\n i {\n font-size: 2em;\n }\n }\n}\n\n</style>\n","import { find } from 'lodash'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\nimport { defineAsyncComponent } from 'vue'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst StatusPopover = {\n name: 'StatusPopover',\n props: [\n 'statusId'\n ],\n data () {\n return {\n error: false\n }\n },\n computed: {\n status () {\n return find(this.$store.state.statuses.allStatuses, { id: this.statusId })\n }\n },\n components: {\n Status: defineAsyncComponent(() => import('../status/status.vue')),\n Popover: defineAsyncComponent(() => import('../popover/popover.vue'))\n },\n methods: {\n enter () {\n if (!this.status) {\n if (!this.statusId) {\n this.error = true\n return\n }\n this.$store.dispatch('fetchStatus', this.statusId)\n .then(data => (this.error = false))\n .catch(e => (this.error = true))\n }\n }\n },\n watch: {\n status (newStatus, oldStatus) {\n if (newStatus !== oldStatus) {\n this.$nextTick(() => this.$refs.popover.updateStyles())\n }\n }\n }\n}\n\nexport default StatusPopover\n","import { render } from \"./status_popover.vue?vue&type=template&id=0c237860\"\nimport script from \"./status_popover.js?vue&type=script&lang=js\"\nexport * from \"./status_popover.js?vue&type=script&lang=js\"\n\nimport \"./status_popover.vue?vue&type=style&index=0&id=0c237860&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"hover\"\n placement=\"top\"\n :offset=\"{ y: 5 }\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content>\n <div class=\"user-list-popover\">\n <template v-if=\"users.length\">\n <div\n v-for=\"(user) in usersCapped\"\n :key=\"user.id\"\n class=\"user-list-row\"\n >\n <UserAvatar\n :user=\"user\"\n class=\"avatar-small\"\n :compact=\"true\"\n />\n <div class=\"user-list-names\">\n <!-- eslint-disable vue/no-v-html -->\n <RichContent\n class=\"username\"\n :title=\"'@'+user.screen_name_ui\"\n :html=\"user.name_html\"\n :emoji=\"user.emoji\"\n />\n <!-- eslint-enable vue/no-v-html -->\n <span class=\"user-list-screen-name\">{{ user.screen_name_ui }}</span><UnicodeDomainIndicator :user=\"user\" />\n </div>\n </div>\n </template>\n <template v-else>\n <FAIcon\n icon=\"circle-notch\"\n spin\n size=\"3x\"\n />\n </template>\n </div>\n </template>\n </Popover>\n</template>\n\n<script src=\"./user_list_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-list-popover {\n padding: 0.5em;\n\n --emoji-size: 16px;\n\n .user-list-row {\n padding: 0.25em;\n display: flex;\n flex-direction: row;\n\n .user-list-names {\n display: flex;\n flex-direction: column;\n margin-left: 0.5em;\n min-width: 5em;\n\n img {\n width: 1em;\n height: 1em;\n }\n }\n\n .user-list-screen-name {\n font-size: 0.65em;\n }\n }\n}\n\n</style>\n","import { defineAsyncComponent } from 'vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faCircleNotch } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst UserListPopover = {\n name: 'UserListPopover',\n props: [\n 'users'\n ],\n components: {\n RichContent,\n UnicodeDomainIndicator,\n Popover: defineAsyncComponent(() => import('../popover/popover.vue')),\n UserAvatar: defineAsyncComponent(() => import('../user_avatar/user_avatar.vue'))\n },\n computed: {\n usersCapped () {\n return this.users.slice(0, 16)\n }\n }\n}\n\nexport default UserListPopover\n","import { render } from \"./user_list_popover.vue?vue&type=template&id=6fc1c392\"\nimport script from \"./user_list_popover.js?vue&type=script&lang=js\"\nexport * from \"./user_list_popover.js?vue&type=script&lang=js\"\n\nimport \"./user_list_popover.vue?vue&type=style&index=0&id=6fc1c392&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"EmojiReactions\">\n <span\n v-for=\"(reaction) in emojiReactions\"\n :key=\"reaction.url || reaction.name\"\n class=\"emoji-reaction-container btn-group\"\n >\n <component\n :is=\"loggedIn ? 'button' : 'a'\"\n v-bind=\"!loggedIn ? { href: remoteInteractionLink } : {}\"\n role=\"button\"\n class=\"emoji-reaction btn button-default\"\n :class=\"{ '-picked-reaction': reactedWith(reaction.name) }\"\n :title=\"reaction.url ? reaction.name : undefined\"\n :aria-pressed=\"reactedWith(reaction.name)\"\n @click=\"emojiOnClick(reaction.name, $event)\"\n >\n <span\n class=\"reaction-emoji\"\n >\n <img\n v-if=\"reaction.url\"\n :src=\"reaction.url\"\n class=\"reaction-emoji-content\"\n width=\"1em\"\n >\n <span\n v-else\n class=\"reaction-emoji reaction-emoji-content\"\n >{{ reaction.name }}</span>\n </span>\n <FALayers>\n <FAIcon\n v-if=\"reactedWith(reaction.name)\"\n class=\"active-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"check\"\n />\n <FAIcon\n v-if=\"!reactedWith(reaction.name)\"\n class=\"focus-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"plus\"\n />\n <FAIcon\n v-else\n class=\"focus-marker\"\n transform=\"shrink-6 up-9\"\n icon=\"minus\"\n />\n </FALayers>\n </component>\n <UserListPopover\n :users=\"accountsForEmoji[reaction.name]\"\n class=\"emoji-reaction-popover\"\n :trigger-attrs=\"counterTriggerAttrs(reaction)\"\n @show=\"fetchEmojiReactionsByIfMissing()\"\n >\n <span class=\"emoji-reaction-counts\">{{ reaction.count }}</span>\n </UserListPopover>\n </span>\n <a\n v-if=\"tooManyReactions\"\n class=\"emoji-reaction-expand faint\"\n href=\"javascript:void(0)\"\n @click=\"toggleShowAll\"\n >\n {{ showAll ? $t('general.show_less') : showMoreString }}\n </a>\n </div>\n</template>\n\n<script src=\"./emoji_reactions.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n@import \"../../mixins\";\n\n.EmojiReactions {\n display: flex;\n margin-top: 0.25em;\n flex-wrap: wrap;\n\n --emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));\n\n .emoji-reaction-container {\n display: flex;\n align-items: stretch;\n margin-top: 0.5em;\n margin-right: 0.5em;\n\n .emoji-reaction-popover {\n padding: 0;\n\n .emoji-reaction-count-button {\n background-color: var(--btn);\n margin: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-sizing: border-box;\n min-width: 2em;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-right: -1px;\n }\n }\n }\n }\n\n .emoji-reaction {\n padding-left: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n\n .reaction-emoji {\n width: var(--emoji-size);\n height: var(--emoji-size);\n margin-right: 0.25em;\n line-height: var(--emoji-size);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .reaction-emoji-content {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n line-height: inherit;\n overflow: hidden;\n font-size: calc(var(--emoji-size) * 0.8);\n margin: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n .svg-inline--fa {\n color: $fallback--text;\n color: var(--btnText, $fallback--text);\n }\n\n &.-picked-reaction {\n border: 1px solid var(--accent, $fallback--link);\n margin-left: -1px; // offset the border, can't use inset shadows either\n margin-right: -1px;\n\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n }\n\n @include unfocused-style {\n .focus-marker {\n visibility: hidden;\n }\n\n .active-marker {\n visibility: visible;\n }\n }\n\n @include focused-style {\n .svg-inline--fa {\n color: $fallback--link;\n color: var(--accent, $fallback--link);\n }\n\n .focus-marker {\n visibility: visible;\n }\n\n .active-marker {\n visibility: hidden;\n }\n }\n }\n\n .emoji-reaction-expand {\n padding: 0 0.5em;\n margin-right: 0.5em;\n margin-top: 0.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n</style>\n","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faPlus,\n faMinus,\n faCheck\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faPlus,\n faMinus,\n faCheck\n)\n\nconst EMOJI_REACTION_COUNT_CUTOFF = 12\n\nconst EmojiReactions = {\n name: 'EmojiReactions',\n components: {\n UserAvatar,\n UserListPopover\n },\n props: ['status'],\n data: () => ({\n showAll: false\n }),\n computed: {\n tooManyReactions () {\n return this.status.emoji_reactions.length > EMOJI_REACTION_COUNT_CUTOFF\n },\n emojiReactions () {\n return this.showAll\n ? this.status.emoji_reactions\n : this.status.emoji_reactions.slice(0, EMOJI_REACTION_COUNT_CUTOFF)\n },\n showMoreString () {\n return `+${this.status.emoji_reactions.length - EMOJI_REACTION_COUNT_CUTOFF}`\n },\n accountsForEmoji () {\n return this.status.emoji_reactions.reduce((acc, reaction) => {\n acc[reaction.name] = reaction.accounts || []\n return acc\n }, {})\n },\n loggedIn () {\n return !!this.$store.state.users.currentUser\n },\n remoteInteractionLink () {\n return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })\n }\n },\n methods: {\n toggleShowAll () {\n this.showAll = !this.showAll\n },\n reactedWith (emoji) {\n return this.status.emoji_reactions.find(r => r.name === emoji).me\n },\n async fetchEmojiReactionsByIfMissing () {\n const hasNoAccounts = this.status.emoji_reactions.find(r => !r.accounts)\n if (hasNoAccounts) {\n return await this.$store.dispatch('fetchEmojiReactionsBy', this.status.id)\n }\n },\n reactWith (emoji) {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n },\n unreact (emoji) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n },\n async emojiOnClick (emoji, event) {\n if (!this.loggedIn) return\n\n await this.fetchEmojiReactionsByIfMissing()\n if (this.reactedWith(emoji)) {\n this.unreact(emoji)\n } else {\n this.reactWith(emoji)\n }\n },\n counterTriggerAttrs (reaction) {\n return {\n class: [\n 'btn',\n 'button-default',\n 'emoji-reaction-count-button',\n { '-picked-reaction': this.reactedWith(reaction.name) }\n ],\n 'aria-label': this.$tc('status.reaction_count_label', reaction.count, { num: reaction.count })\n }\n }\n }\n}\n\nexport default EmojiReactions\n","import { render } from \"./emoji_reactions.vue?vue&type=template&id=4be841f8\"\nimport script from \"./emoji_reactions.js?vue&type=script&lang=js\"\nexport * from \"./emoji_reactions.js?vue&type=script&lang=js\"\n\nimport \"./emoji_reactions.vue?vue&type=style&index=0&id=4be841f8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import ReplyButton from '../reply_button/reply_button.vue'\nimport FavoriteButton from '../favorite_button/favorite_button.vue'\nimport ReactButton from '../react_button/react_button.vue'\nimport RetweetButton from '../retweet_button/retweet_button.vue'\nimport ExtraButtons from '../extra_buttons/extra_buttons.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport StatusPopover from '../status_popover/status_popover.vue'\nimport UserPopover from '../user_popover/user_popover.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\nimport EmojiReactions from '../emoji_reactions/emoji_reactions.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport MentionsLine from 'src/components/mentions_line/mentions_line.vue'\nimport MentionLink from 'src/components/mention_link/mention_link.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport { muteWordHits } from '../../services/status_parser/status_parser.js'\nimport { unescape, uniqBy } from 'lodash'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEnvelope,\n faLock,\n faLockOpen,\n faGlobe,\n faTimes,\n faRetweet,\n faReply,\n faPlusSquare,\n faSmileBeam,\n faEllipsisH,\n faStar,\n faEyeSlash,\n faEye,\n faThumbtack,\n faChevronUp,\n faChevronDown,\n faAngleDoubleRight\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEnvelope,\n faGlobe,\n faLock,\n faLockOpen,\n faTimes,\n faRetweet,\n faReply,\n faPlusSquare,\n faStar,\n faSmileBeam,\n faEllipsisH,\n faEyeSlash,\n faEye,\n faThumbtack,\n faChevronUp,\n faChevronDown,\n faAngleDoubleRight\n)\n\nconst camelCase = name => name.charAt(0).toUpperCase() + name.slice(1)\n\nconst controlledOrUncontrolledGetters = list => list.reduce((res, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const controlledName = `controlled${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n res[name] = function () {\n return ((this.$data[toggle] !== undefined || this.$props[toggle] !== undefined) && this[toggle]) ? this[controlledName] : this[uncontrolledName]\n }\n return res\n}, {})\n\nconst controlledOrUncontrolledToggle = (obj, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[toggle]) {\n obj[toggle]()\n } else {\n obj[uncontrolledName] = !obj[uncontrolledName]\n }\n}\n\nconst controlledOrUncontrolledSet = (obj, name, val) => {\n const camelized = camelCase(name)\n const set = `controlledSet${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[set]) {\n obj[set](val)\n } else {\n obj[uncontrolledName] = val\n }\n}\n\nconst Status = {\n name: 'Status',\n components: {\n ReplyButton,\n FavoriteButton,\n ReactButton,\n RetweetButton,\n ExtraButtons,\n PostStatusForm,\n UserAvatar,\n AvatarList,\n Timeago,\n StatusPopover,\n UserListPopover,\n EmojiReactions,\n StatusContent,\n RichContent,\n MentionLink,\n MentionsLine,\n UserPopover,\n UserLink\n },\n props: [\n 'statusoid',\n 'expandable',\n 'inConversation',\n 'focused',\n 'highlight',\n 'compact',\n 'replies',\n 'isPreview',\n 'noHeading',\n 'inlineExpanded',\n 'showPinned',\n 'inProfile',\n 'profileUserId',\n 'inQuote',\n\n 'simpleTree',\n 'controlledThreadDisplayStatus',\n 'controlledToggleThreadDisplay',\n 'showOtherRepliesAsButton',\n\n 'controlledShowingTall',\n 'controlledToggleShowingTall',\n 'controlledExpandingSubject',\n 'controlledToggleExpandingSubject',\n 'controlledShowingLongSubject',\n 'controlledToggleShowingLongSubject',\n 'controlledReplying',\n 'controlledToggleReplying',\n 'controlledMediaPlaying',\n 'controlledSetMediaPlaying',\n 'dive'\n ],\n data () {\n return {\n uncontrolledReplying: false,\n unmuted: false,\n userExpanded: false,\n uncontrolledMediaPlaying: [],\n suspendable: true,\n error: null,\n headTailLinks: null,\n displayQuote: !this.inQuote\n }\n },\n computed: {\n ...controlledOrUncontrolledGetters(['replying', 'mediaPlaying']),\n muteWords () {\n return this.mergedConfig.muteWords\n },\n showReasonMutedThread () {\n return (\n this.status.thread_muted ||\n (this.status.reblog && this.status.reblog.thread_muted)\n ) && !this.inConversation\n },\n repeaterClass () {\n const user = this.statusoid.user\n return highlightClass(user)\n },\n userClass () {\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n return highlightClass(user)\n },\n deleted () {\n return this.statusoid.deleted\n },\n repeaterStyle () {\n const user = this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userStyle () {\n if (this.noHeading) return\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.status.user.id, this.status.user.screen_name)\n },\n replyProfileLink () {\n if (this.isReply) {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n // FIXME Why user not found sometimes???\n return user ? user.statusnet_profile_url : 'NOT_FOUND'\n }\n },\n retweet () { return !!this.statusoid.retweeted_status },\n retweeterUser () { return this.statusoid.user },\n retweeter () { return this.statusoid.user.name || this.statusoid.user.screen_name_ui },\n retweeterHtml () { return this.statusoid.user.name },\n retweeterProfileLink () { return this.generateUserProfileLink(this.statusoid.user.id, this.statusoid.user.screen_name) },\n status () {\n if (this.retweet) {\n return this.statusoid.retweeted_status\n } else {\n return this.statusoid\n }\n },\n statusFromGlobalRepository () {\n // NOTE: Consider to replace status with statusFromGlobalRepository\n return this.$store.state.statuses.allStatusesObject[this.status.id]\n },\n loggedIn () {\n return !!this.currentUser\n },\n muteWordHits () {\n return muteWordHits(this.status, this.muteWords)\n },\n rtBotStatus () {\n return this.statusoid.user.bot\n },\n botStatus () {\n return this.status.user.bot\n },\n botIndicator () {\n return this.botStatus && !this.hideBotIndication\n },\n rtBotIndicator () {\n return this.rtBotStatus && !this.hideBotIndication\n },\n mentionsLine () {\n if (!this.headTailLinks) return []\n const writtenSet = new Set(this.headTailLinks.writtenMentions.map(_ => _.url))\n return this.status.attentions.filter(attn => {\n // no reply user\n return attn.id !== this.status.in_reply_to_user_id &&\n // no self-replies\n attn.statusnet_profile_url !== this.status.user.statusnet_profile_url &&\n // don't include if mentions is written\n !writtenSet.has(attn.statusnet_profile_url)\n }).map(attn => ({\n url: attn.statusnet_profile_url,\n content: attn.screen_name,\n userId: attn.id\n }))\n },\n hasMentionsLine () {\n return this.mentionsLine.length > 0\n },\n muted () {\n if (this.statusoid.user.id === this.currentUser.id) return false\n const reasonsToMute = this.userIsMuted ||\n // Thread is muted\n status.thread_muted ||\n // Wordfiltered\n this.muteWordHits.length > 0 ||\n // bot status\n (this.muteBotStatuses && this.botStatus && !this.compact)\n return !this.unmuted && !this.shouldNotMute && reasonsToMute\n },\n userIsMuted () {\n if (this.statusoid.user.id === this.currentUser.id) return false\n const { status } = this\n const { reblog } = status\n const relationship = this.$store.getters.relationship(status.user.id)\n const relationshipReblog = reblog && this.$store.getters.relationship(reblog.user.id)\n return status.muted ||\n // Reprööt of a muted post according to BE\n (reblog && reblog.muted) ||\n // Muted user\n relationship.muting ||\n // Muted user of a reprööt\n (relationshipReblog && relationshipReblog.muting)\n },\n shouldNotMute () {\n const { status } = this\n const { reblog } = status\n return (\n (\n this.inProfile && (\n // Don't mute user's posts on user timeline (except reblogs)\n (!reblog && status.user.id === this.profileUserId) ||\n // Same as above but also allow self-reblogs\n (reblog && reblog.user.id === this.profileUserId)\n )\n ) ||\n // Don't mute statuses in muted conversation when said conversation is opened\n (this.inConversation && status.thread_muted)\n // No excuses if post has muted words\n ) && !this.muteWordHits.length > 0\n },\n hideMutedUsers () {\n return this.mergedConfig.hideMutedPosts\n },\n hideMutedThreads () {\n return this.mergedConfig.hideMutedThreads\n },\n hideFilteredStatuses () {\n return this.mergedConfig.hideFilteredStatuses\n },\n hideWordFilteredPosts () {\n return this.mergedConfig.hideWordFilteredPosts\n },\n hideStatus () {\n return (!this.shouldNotMute) && (\n (this.muted && this.hideFilteredStatuses) ||\n (this.userIsMuted && this.hideMutedUsers) ||\n (this.status.thread_muted && this.hideMutedThreads) ||\n (this.muteWordHits.length > 0 && this.hideWordFilteredPosts)\n )\n },\n isFocused () {\n // retweet or root of an expanded conversation\n if (this.focused) {\n return true\n } else if (!this.inConversation) {\n return false\n }\n // use conversation highlight only when in conversation\n return this.status.id === this.highlight\n },\n isReply () {\n return !!(this.status.in_reply_to_status_id && this.status.in_reply_to_user_id)\n },\n replyToName () {\n if (this.status.in_reply_to_screen_name) {\n return this.status.in_reply_to_screen_name\n } else {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n return user && user.screen_name_ui\n }\n },\n replySubject () {\n if (!this.status.summary) return ''\n const decodedSummary = unescape(this.status.summary)\n const behavior = this.mergedConfig.subjectLineBehavior\n const startsWithRe = decodedSummary.match(/^re[: ]/i)\n if ((behavior !== 'noop' && startsWithRe) || behavior === 'masto') {\n return decodedSummary\n } else if (behavior === 'email') {\n return 're: '.concat(decodedSummary)\n } else if (behavior === 'noop') {\n return ''\n }\n },\n combinedFavsAndRepeatsUsers () {\n // Use the status from the global status repository since favs and repeats are saved in it\n const combinedUsers = [].concat(\n this.statusFromGlobalRepository.favoritedBy,\n this.statusFromGlobalRepository.rebloggedBy\n )\n return uniqBy(combinedUsers, 'id')\n },\n tags () {\n // eslint-disable-next-line no-prototype-builtins\n return this.status.tags.filter(tagObj => tagObj.hasOwnProperty('name')).map(tagObj => tagObj.name).join(' ')\n },\n hidePostStats () {\n return this.mergedConfig.hidePostStats\n },\n muteBotStatuses () {\n return this.mergedConfig.muteBotStatuses\n },\n hideBotIndication () {\n return this.mergedConfig.hideBotIndication\n },\n currentUser () {\n return this.$store.state.users.currentUser\n },\n betterShadow () {\n return this.$store.state.interface.browserSupport.cssFilter\n },\n mergedConfig () {\n return this.$store.getters.mergedConfig\n },\n isSuspendable () {\n return !this.replying && this.mediaPlaying.length === 0\n },\n inThreadForest () {\n return !!this.controlledThreadDisplayStatus\n },\n threadShowing () {\n return this.controlledThreadDisplayStatus === 'showing'\n },\n visibilityLocalized () {\n return this.$i18n.t('general.scope_in_timeline.' + this.status.visibility)\n },\n isEdited () {\n return this.status.edited_at !== null\n },\n editingAvailable () {\n return this.$store.state.instance.editingAvailable\n },\n hasVisibleQuote () {\n return this.status.quote_url && this.status.quote_visible\n },\n hasInvisibleQuote () {\n return this.status.quote_url && !this.status.quote_visible\n },\n quotedStatus () {\n return this.status.quote_id ? this.$store.state.statuses.allStatusesObject[this.status.quote_id] : undefined\n },\n shouldDisplayQuote () {\n return this.quotedStatus && this.displayQuote\n }\n },\n methods: {\n visibilityIcon (visibility) {\n switch (visibility) {\n case 'private':\n return 'lock'\n case 'unlisted':\n return 'lock-open'\n case 'direct':\n return 'envelope'\n default:\n return 'globe'\n }\n },\n showError (error) {\n this.error = error\n },\n clearError () {\n this.error = undefined\n },\n toggleReplying () {\n controlledOrUncontrolledToggle(this, 'replying')\n },\n gotoOriginal (id) {\n if (this.inConversation) {\n this.$emit('goto', id)\n }\n },\n toggleExpanded () {\n this.$emit('toggleExpanded')\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n toggleUserExpanded () {\n this.userExpanded = !this.userExpanded\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n },\n addMediaPlaying (id) {\n controlledOrUncontrolledSet(this, 'mediaPlaying', this.mediaPlaying.concat(id))\n },\n removeMediaPlaying (id) {\n controlledOrUncontrolledSet(this, 'mediaPlaying', this.mediaPlaying.filter(mediaId => mediaId !== id))\n },\n setHeadTailLinks (headTailLinks) {\n this.headTailLinks = headTailLinks\n },\n toggleThreadDisplay () {\n this.controlledToggleThreadDisplay()\n },\n scrollIfHighlighted (highlightId) {\n const id = highlightId\n if (this.status.id === id) {\n const rect = this.$el.getBoundingClientRect()\n if (rect.top < 100) {\n // Post is above screen, match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.height >= (window.innerHeight - 50)) {\n // Post we want to see is taller than screen so match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.bottom > window.innerHeight - 50) {\n // Post is below screen, match its bottom to screen bottom\n window.scrollBy(0, rect.bottom - window.innerHeight + 50)\n }\n }\n },\n toggleDisplayQuote () {\n if (this.shouldDisplayQuote) {\n this.displayQuote = false\n } else if (!this.quotedStatus) {\n this.$store.dispatch('fetchStatus', this.status.quote_id)\n .then(() => {\n this.displayQuote = true\n })\n } else {\n this.displayQuote = true\n }\n }\n },\n watch: {\n highlight: function (id) {\n this.scrollIfHighlighted(id)\n },\n 'status.repeat_num': function (num) {\n // refetch repeats when repeat_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.rebloggedBy && this.statusFromGlobalRepository.rebloggedBy.length !== num) {\n this.$store.dispatch('fetchRepeats', this.status.id)\n }\n },\n 'status.fave_num': function (num) {\n // refetch favs when fave_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.favoritedBy && this.statusFromGlobalRepository.favoritedBy.length !== num) {\n this.$store.dispatch('fetchFavs', this.status.id)\n }\n },\n isSuspendable: function (val) {\n this.suspendable = val\n }\n }\n}\n\nexport default Status\n","import { render } from \"./status.vue?vue&type=template&id=0f15101e\"\nimport script from \"./status.js?vue&type=script&lang=js\"\nexport * from \"./status.js?vue&type=script&lang=js\"\n\nimport \"./status.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"StatusContent\"\n :class=\"{ '-compact': compact }\"\n >\n <slot name=\"header\" />\n <StatusBody\n :status=\"status\"\n :compact=\"compact\"\n :single-line=\"singleLine\"\n :showing-tall=\"showingTall\"\n :expanding-subject=\"expandingSubject\"\n :showing-long-subject=\"showingLongSubject\"\n :toggle-showing-tall=\"toggleShowingTall\"\n :toggle-expanding-subject=\"toggleExpandingSubject\"\n :toggle-showing-long-subject=\"toggleShowingLongSubject\"\n @parseReady=\"$emit('parseReady', $event)\"\n >\n <div v-if=\"status.poll && status.poll.options && !compact\">\n <Poll\n :base-poll=\"status.poll\"\n :emoji=\"status.emojis\"\n />\n </div>\n\n <div v-else-if=\"status.poll && status.poll.options && compact\">\n <FAIcon\n icon=\"poll-h\"\n size=\"2x\"\n />\n </div>\n\n <gallery\n v-if=\"status.attachments.length !== 0\"\n class=\"attachments media-body\"\n :compact=\"compact\"\n :nsfw=\"nsfwClickthrough\"\n :attachments=\"status.attachments\"\n :limit=\"compact ? 1 : 0\"\n :size=\"attachmentSize\"\n @play=\"$emit('mediaplay', attachment.id)\"\n @pause=\"$emit('mediapause', attachment.id)\"\n />\n\n <div\n v-if=\"statusCard && !noHeading && !compact\"\n class=\"link-preview media-body\"\n >\n <link-preview\n :card=\"status.card\"\n :size=\"attachmentSize\"\n :nsfw=\"nsfwClickthrough\"\n />\n </div>\n </StatusBody>\n <slot name=\"footer\" />\n </div>\n</template>\n\n<script src=\"./status_content.js\"></script>\n<style lang=\"scss\">\n.StatusContent {\n flex: 1;\n min-width: 0;\n}\n</style>\n","<template>\n <div\n class=\"poll\"\n :class=\"containerClass\"\n >\n <div\n :role=\"showResults ? 'section' : (poll.multiple ? 'group' : 'radiogroup')\"\n >\n <div\n v-for=\"(option, index) in options\"\n :key=\"index\"\n class=\"poll-option\"\n >\n <div\n v-if=\"showResults\"\n :title=\"resultTitle(option)\"\n class=\"option-result\"\n >\n <div class=\"option-result-label\">\n <span class=\"result-percentage\">\n {{ percentageForOption(option.votes_count) }}%\n </span>\n <RichContent\n :html=\"option.title_html\"\n :handle-links=\"false\"\n :emoji=\"emoji\"\n />\n </div>\n <div\n class=\"result-fill\"\n :style=\"{ 'width': `${percentageForOption(option.votes_count)}%` }\"\n />\n </div>\n <div\n v-else\n tabindex=\"0\"\n :role=\"poll.multiple ? 'checkbox' : 'radio'\"\n :aria-labelledby=\"`option-vote-${randomSeed}-${index}`\"\n :aria-checked=\"choices[index]\"\n @click=\"activateOption(index)\"\n >\n <input\n v-if=\"poll.multiple\"\n type=\"checkbox\"\n class=\"poll-checkbox\"\n :disabled=\"loading\"\n :value=\"index\"\n >\n <input\n v-else\n type=\"radio\"\n :disabled=\"loading\"\n :value=\"index\"\n >\n <label class=\"option-vote\">\n <RichContent\n :id=\"`option-vote-${randomSeed}-${index}`\"\n :html=\"option.title_html\"\n :handle-links=\"false\"\n :emoji=\"emoji\"\n />\n </label>\n </div>\n </div>\n </div>\n <div class=\"footer faint\">\n <button\n v-if=\"!showResults\"\n class=\"btn button-default poll-vote-button\"\n type=\"button\"\n :disabled=\"isDisabled\"\n @click=\"vote\"\n >\n {{ $t('polls.vote') }}\n </button>\n <div class=\"total\">\n <template v-if=\"typeof poll.voters_count === 'number'\">\n {{ $tc(\"polls.people_voted_count\", poll.voters_count, { count: poll.voters_count }) }}&nbsp;·&nbsp;\n </template>\n <template v-else>\n {{ $tc(\"polls.votes_count\", poll.votes_count, { count: poll.votes_count }) }}&nbsp;·&nbsp;\n </template>\n </div>\n <span>\n <i18n-t\n scope=\"global\"\n :keypath=\"expired ? 'polls.expired' : 'polls.expires_in'\"\n >\n <Timeago\n :time=\"expiresAt\"\n :auto-update=\"60\"\n :now-threshold=\"0\"\n />\n </i18n-t>\n </span>\n </div>\n </div>\n</template>\n\n<script src=\"./poll.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.poll {\n .votes {\n display: flex;\n flex-direction: column;\n margin: 0 0 0.5em;\n }\n\n .poll-option {\n margin: 0.75em 0.5em;\n }\n\n .option-result {\n height: 100%;\n display: flex;\n flex-direction: row;\n position: relative;\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n\n .option-result-label {\n display: flex;\n align-items: center;\n padding: 0.1em 0.25em;\n z-index: 1;\n word-break: break-word;\n }\n\n .result-percentage {\n width: 3.5em;\n flex-shrink: 0;\n }\n\n .result-fill {\n height: 100%;\n position: absolute;\n color: $fallback--text;\n color: var(--pollText, $fallback--text);\n background-color: $fallback--lightBg;\n background-color: var(--poll, $fallback--lightBg);\n border-radius: $fallback--panelRadius;\n border-radius: var(--panelRadius, $fallback--panelRadius);\n top: 0;\n left: 0;\n transition: width 0.5s;\n }\n\n .option-vote {\n display: flex;\n align-items: center;\n }\n\n input {\n width: 3.5em;\n }\n\n .footer {\n display: flex;\n align-items: center;\n }\n\n &.loading * {\n cursor: progress;\n }\n\n .poll-vote-button {\n padding: 0 0.5em;\n margin-right: 0.5em;\n }\n\n .poll-checkbox {\n display: none;\n }\n}\n</style>\n","import Timeago from 'components/timeago/timeago.vue'\nimport genRandomSeed from '../../services/random_seed/random_seed.service.js'\nimport RichContent from 'components/rich_content/rich_content.jsx'\nimport { forEach, map } from 'lodash'\n\nexport default {\n name: 'Poll',\n props: ['basePoll', 'emoji'],\n components: {\n Timeago,\n RichContent\n },\n data () {\n return {\n loading: false,\n choices: [],\n randomSeed: genRandomSeed()\n }\n },\n created () {\n if (!this.$store.state.polls.pollsObject[this.pollId]) {\n this.$store.dispatch('mergeOrAddPoll', this.basePoll)\n }\n this.$store.dispatch('trackPoll', this.pollId)\n },\n unmounted () {\n this.$store.dispatch('untrackPoll', this.pollId)\n },\n computed: {\n pollId () {\n return this.basePoll.id\n },\n poll () {\n const storePoll = this.$store.state.polls.pollsObject[this.pollId]\n return storePoll || {}\n },\n options () {\n return (this.poll && this.poll.options) || []\n },\n expiresAt () {\n return (this.poll && this.poll.expires_at) || 0\n },\n expired () {\n return (this.poll && this.poll.expired) || false\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n showResults () {\n return this.poll.voted || this.expired || !this.loggedIn\n },\n totalVotesCount () {\n return this.poll.votes_count\n },\n containerClass () {\n return {\n loading: this.loading\n }\n },\n choiceIndices () {\n // Convert array of booleans into an array of indices of the\n // items that were 'true', so [true, false, false, true] becomes\n // [0, 3].\n return this.choices\n .map((entry, index) => entry && index)\n .filter(value => typeof value === 'number')\n },\n isDisabled () {\n const noChoice = this.choiceIndices.length === 0\n return this.loading || noChoice\n }\n },\n methods: {\n percentageForOption (count) {\n return this.totalVotesCount === 0 ? 0 : Math.round(count / this.totalVotesCount * 100)\n },\n resultTitle (option) {\n return `${option.votes_count}/${this.totalVotesCount} ${this.$t('polls.votes')}`\n },\n fetchPoll () {\n this.$store.dispatch('refreshPoll', { id: this.statusId, pollId: this.poll.id })\n },\n activateOption (index) {\n // forgive me father: doing checking the radio/checkboxes\n // in code because of customized input elements need either\n // a) an extra element for the actual graphic, or b) use a\n // pseudo element for the label. We use b) which mandates\n // using \"for\" and \"id\" matching which isn't nice when the\n // same poll appears multiple times on the site (notifs and\n // timeline for example). With code we can make sure it just\n // works without altering the pseudo element implementation.\n const allElements = this.$el.querySelectorAll('input')\n const clickedElement = this.$el.querySelector(`input[value=\"${index}\"]`)\n if (this.poll.multiple) {\n // Checkboxes, toggle only the clicked one\n clickedElement.checked = !clickedElement.checked\n } else {\n // Radio button, uncheck everything and check the clicked one\n forEach(allElements, element => { element.checked = false })\n clickedElement.checked = true\n }\n this.choices = map(allElements, e => e.checked)\n },\n optionId (index) {\n return `poll${this.poll.id}-${index}`\n },\n vote () {\n if (this.choiceIndices.length === 0) return\n this.loading = true\n this.$store.dispatch(\n 'votePoll',\n { id: this.statusId, pollId: this.poll.id, choices: this.choiceIndices }\n ).then(poll => {\n this.loading = false\n })\n }\n }\n}\n","import { render } from \"./poll.vue?vue&type=template&id=02c7de4c\"\nimport script from \"./poll.js?vue&type=script&lang=js\"\nexport * from \"./poll.js?vue&type=script&lang=js\"\n\nimport \"./poll.vue?vue&type=style&index=0&id=02c7de4c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"StatusBody\"\n :class=\"{ '-compact': compact }\"\n >\n <div class=\"body\">\n <div\n v-if=\"status.summary_raw_html\"\n class=\"summary-wrapper\"\n :class=\"{ '-tall': (longSubject && !showingLongSubject) }\"\n >\n <RichContent\n class=\"media-body summary\"\n :html=\"status.summary_raw_html\"\n :emoji=\"status.emojis\"\n />\n <button\n v-show=\"longSubject && showingLongSubject\"\n class=\"button-unstyled -link tall-subject-hider\"\n @click.prevent=\"toggleShowingLongSubject\"\n >\n {{ $t(\"status.hide_full_subject\") }}\n </button>\n <button\n v-show=\"longSubject && !showingLongSubject\"\n class=\"button-unstyled -link tall-subject-hider\"\n @click.prevent=\"toggleShowingLongSubject\"\n >\n {{ $t(\"status.show_full_subject\") }}\n </button>\n </div>\n <div\n :class=\"{'-tall-status': hideTallStatus}\"\n class=\"text-wrapper\"\n >\n <button\n v-show=\"hideTallStatus\"\n class=\"button-unstyled -link tall-status-hider\"\n :class=\"{ '-focused': focused }\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ $t(\"general.show_more\") }}\n </button>\n <RichContent\n v-if=\"!hideSubjectStatus && !(singleLine && status.summary_raw_html)\"\n :class=\"{ '-single-line': singleLine }\"\n class=\"text media-body\"\n :html=\"status.raw_html\"\n :emoji=\"status.emojis\"\n :handle-links=\"true\"\n :greentext=\"mergedConfig.greentext\"\n :attentions=\"status.attentions\"\n @parseReady=\"onParseReady\"\n />\n\n <button\n v-show=\"hideSubjectStatus\"\n class=\"button-unstyled -link cw-status-hider\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ $t(\"status.show_content\") }}\n <FAIcon\n v-if=\"attachmentTypes.includes('image')\"\n icon=\"image\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('video')\"\n icon=\"video\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('audio')\"\n icon=\"music\"\n />\n <FAIcon\n v-if=\"attachmentTypes.includes('unknown')\"\n icon=\"file\"\n />\n <FAIcon\n v-if=\"status.poll && status.poll.options\"\n icon=\"poll-h\"\n />\n <FAIcon\n v-if=\"status.card\"\n icon=\"link\"\n />\n </button>\n <button\n v-show=\"showingMore && !fullContent\"\n class=\"button-unstyled -link status-unhider\"\n @click.prevent=\"toggleShowMore\"\n >\n {{ tallStatus ? $t(\"general.show_less\") : $t(\"status.hide_content\") }}\n </button>\n </div>\n </div>\n <slot v-if=\"!hideSubjectStatus\" />\n </div>\n</template>\n<script src=\"./status_body.js\"></script>\n<style lang=\"scss\" src=\"./status_body.scss\" />\n","import fileType from 'src/services/file_type/file_type.service'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n)\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'compact',\n 'status',\n 'focused',\n 'noHeading',\n 'fullContent',\n 'singleLine',\n 'showingTall',\n 'expandingSubject',\n 'showingLongSubject',\n 'toggleShowingTall',\n 'toggleExpandingSubject',\n 'toggleShowingLongSubject'\n ],\n data () {\n return {\n postLength: this.status.text.length,\n parseReadyDone: false\n }\n },\n computed: {\n localCollapseSubjectDefault () {\n return this.mergedConfig.collapseMessageWithSubject\n },\n // This is a bit hacky, but we want to approximate post height before rendering\n // so we count newlines (masto uses <p> for paragraphs, GS uses <br> between them)\n // as well as approximate line count by counting characters and approximating ~80\n // per line.\n //\n // Using max-height + overflow: auto for status components resulted in false positives\n // very often with japanese characters, and it was very annoying.\n tallStatus () {\n if (this.singleLine || this.compact) return false\n const lengthScore = this.status.raw_html.split(/<p|<br/).length + this.postLength / 80\n return lengthScore > 20\n },\n longSubject () {\n return this.status.summary.length > 240\n },\n // When a status has a subject and is also tall, we should only have one show more/less button. If the default is to collapse statuses with subjects, we just treat it like a status with a subject; otherwise, we just treat it like a tall status.\n mightHideBecauseSubject () {\n return !!this.status.summary && this.localCollapseSubjectDefault\n },\n mightHideBecauseTall () {\n return this.tallStatus && !(this.status.summary && this.localCollapseSubjectDefault)\n },\n hideSubjectStatus () {\n return this.mightHideBecauseSubject && !this.expandingSubject\n },\n hideTallStatus () {\n return this.mightHideBecauseTall && !this.showingTall\n },\n showingMore () {\n return (this.mightHideBecauseTall && this.showingTall) || (this.mightHideBecauseSubject && this.expandingSubject)\n },\n attachmentTypes () {\n return this.status.attachments.map(file => fileType.fileType(file.mimetype))\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n RichContent\n },\n mounted () {\n this.status.attentions && this.status.attentions.forEach(attn => {\n const { id } = attn\n this.$store.dispatch('fetchUserIfMissing', id)\n })\n },\n methods: {\n onParseReady (event) {\n if (this.parseReadyDone) return\n this.parseReadyDone = true\n this.$emit('parseReady', event)\n const { writtenMentions, invisibleMentions } = event\n writtenMentions\n .filter(mention => !mention.notifying)\n .forEach(mention => {\n const { content, url } = mention\n const cleanedString = content.replace(/<[^>]+?>/gi, '') // remove all tags\n if (!cleanedString.startsWith('@')) return\n const handle = cleanedString.slice(1)\n const host = url.replace(/^https?:\\/\\//, '').replace(/\\/.+?$/, '')\n this.$store.dispatch('fetchUserIfMissing', `${handle}@${host}`)\n })\n /* This is a bit of a hack to make current tall status detector work\n * with rich mentions. Invisible mentions are detected at RichContent level\n * and also we generate plaintext version of mentions by stripping tags\n * so here we subtract from post length by each mention that became invisible\n * via MentionsLine\n */\n this.postLength = invisibleMentions.reduce((acc, mention) => {\n return acc - mention.textContent.length - 1\n }, this.postLength)\n },\n toggleShowMore () {\n if (this.mightHideBecauseTall) {\n this.toggleShowingTall()\n } else if (this.mightHideBecauseSubject) {\n this.toggleExpandingSubject()\n }\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n }\n }\n}\n\nexport default StatusContent\n","import { render } from \"./status_body.vue?vue&type=template&id=7a590a2c\"\nimport script from \"./status_body.js?vue&type=script&lang=js\"\nexport * from \"./status_body.js?vue&type=script&lang=js\"\n\nimport \"./status_body.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Attachment from '../attachment/attachment.vue'\nimport Poll from '../poll/poll.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport StatusBody from 'src/components/status_body/status_body.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport { mapGetters, mapState } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch,\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch,\n faFile,\n faMusic,\n faImage,\n faLink,\n faPollH\n)\n\nconst camelCase = name => name.charAt(0).toUpperCase() + name.slice(1)\n\nconst controlledOrUncontrolledGetters = list => list.reduce((res, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const controlledName = `controlled${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n res[name] = function () {\n return ((this.$data[toggle] !== undefined || this.$props[toggle] !== undefined) && this[toggle]) ? this[controlledName] : this[uncontrolledName]\n }\n return res\n}, {})\n\nconst controlledOrUncontrolledToggle = (obj, name) => {\n const camelized = camelCase(name)\n const toggle = `controlledToggle${camelized}`\n const uncontrolledName = `uncontrolled${camelized}`\n if (obj[toggle]) {\n obj[toggle]()\n } else {\n obj[uncontrolledName] = !obj[uncontrolledName]\n }\n}\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'status',\n 'compact',\n 'focused',\n 'noHeading',\n 'fullContent',\n 'singleLine',\n 'controlledShowingTall',\n 'controlledExpandingSubject',\n 'controlledToggleShowingTall',\n 'controlledToggleExpandingSubject',\n 'controlledShowingLongSubject',\n 'controlledToggleShowingLongSubject'\n ],\n data () {\n return {\n uncontrolledShowingTall: this.fullContent || (this.inConversation && this.focused),\n uncontrolledShowingLongSubject: false,\n // not as computed because it sets the initial state which will be changed later\n uncontrolledExpandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject\n }\n },\n computed: {\n ...controlledOrUncontrolledGetters(['showingTall', 'expandingSubject', 'showingLongSubject']),\n statusCard () {\n if (!this.status.card) return null\n return this.status.card.url === this.status.quote_url ? null : this.status.card\n },\n hideAttachments () {\n return (this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation)\n },\n nsfwClickthrough () {\n if (!this.status.nsfw) {\n return false\n }\n if (this.status.summary && this.localCollapseSubjectDefault) {\n return false\n }\n return true\n },\n attachmentSize () {\n if (this.compact) {\n return 'small'\n } else if ((this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation) ||\n (this.status.attachments.length > this.maxThumbnails)) {\n return 'hide'\n }\n return 'normal'\n },\n maxThumbnails () {\n return this.mergedConfig.maxThumbnails\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n },\n components: {\n Attachment,\n Poll,\n Gallery,\n LinkPreview,\n StatusBody\n },\n methods: {\n toggleShowingTall () {\n controlledOrUncontrolledToggle(this, 'showingTall')\n },\n toggleExpandingSubject () {\n controlledOrUncontrolledToggle(this, 'expandingSubject')\n },\n toggleShowingLongSubject () {\n controlledOrUncontrolledToggle(this, 'showingLongSubject')\n },\n setMedia () {\n const attachments = this.attachmentSize === 'hide' ? this.status.attachments : this.galleryAttachments\n return () => this.$store.dispatch('setMedia', attachments)\n }\n }\n}\n\nexport default StatusContent\n","import { render } from \"./status_content.vue?vue&type=template&id=79c8e5d6\"\nimport script from \"./status_content.js?vue&type=script&lang=js\"\nexport * from \"./status_content.js?vue&type=script&lang=js\"\n\nimport \"./status_content.vue?vue&type=style&index=0&id=79c8e5d6&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"still-image\"\n :class=\"{ animated: animated }\"\n :style=\"style\"\n >\n <canvas\n v-if=\"animated\"\n ref=\"canvas\"\n />\n <!-- NOTE: key is required to force to re-render img tag when src is changed -->\n <img\n ref=\"src\"\n :key=\"realSrc\"\n :alt=\"alt\"\n :title=\"alt\"\n :data-src=\"dataSrc\"\n :src=\"realSrc\"\n :referrerpolicy=\"referrerpolicy\"\n :loading=\"loading\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <slot />\n </div>\n</template>\n\n<script src=\"./still-image.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.still-image {\n position: relative;\n line-height: 0;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n\n canvas {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n visibility: var(--_still-image-canvas-visibility, visible);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n &.animated {\n &::before {\n zoom: var(--_still_image-label-scale, 1);\n content: \"gif\";\n position: absolute;\n line-height: 1;\n font-size: 0.7em;\n top: 0.5em;\n left: 0.5em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n display: block;\n padding: 2px 4px;\n border-radius: $fallback--tooltipRadius;\n border-radius: var(--tooltipRadius, $fallback--tooltipRadius);\n z-index: 2;\n visibility: var(--_still-image-label-visibility, visible);\n }\n\n &:hover canvas {\n display: none;\n }\n\n &:hover::before {\n visibility: var(--_still-image-label-visibility, hidden);\n }\n\n img {\n visibility: var(--_still-image-img-visibility, hidden);\n }\n\n &:hover img {\n visibility: visible;\n }\n }\n}\n</style>\n","const StillImage = {\n props: [\n 'src',\n 'referrerpolicy',\n 'mimetype',\n 'imageLoadError',\n 'imageLoadHandler',\n 'alt',\n 'height',\n 'width',\n 'dataSrc',\n 'loading'\n ],\n data () {\n return {\n // for lazy loading, see loadLazy()\n realSrc: this.src,\n stopGifs: this.$store.getters.mergedConfig.stopGifs\n }\n },\n computed: {\n animated () {\n if (!this.realSrc) {\n return false\n }\n\n return this.stopGifs && (this.mimetype === 'image/gif' || this.realSrc.endsWith('.gif'))\n },\n style () {\n const appendPx = (str) => /\\d$/.test(str) ? str + 'px' : str\n return {\n height: this.height ? appendPx(this.height) : null,\n width: this.width ? appendPx(this.width) : null\n }\n }\n },\n methods: {\n loadLazy () {\n if (this.dataSrc) {\n this.realSrc = this.dataSrc\n }\n },\n onLoad () {\n if (!this.realSrc) {\n return\n }\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 watch: {\n src () {\n this.realSrc = this.src\n },\n dataSrc () {\n this.$el.removeAttribute('data-loaded')\n }\n }\n}\n\nexport default StillImage\n","import { render } from \"./still-image.vue?vue&type=template&id=75385b10\"\nimport script from \"./still-image.js?vue&type=script&lang=js\"\nexport * from \"./still-image.js?vue&type=script&lang=js\"\n\nimport \"./still-image.vue?vue&type=style&index=0&id=75385b10&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <time\n :datetime=\"time\"\n :title=\"localeDateString\"\n >\n {{ relativeTimeString }}\n </time>\n</template>\n\n<script>\nimport * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport localeService from 'src/services/locale/locale.service.js'\n\nexport default {\n name: 'Timeago',\n props: ['time', 'autoUpdate', 'longFormat', 'nowThreshold', 'templateKey'],\n data () {\n return {\n relativeTime: { key: 'time.now', num: 0 },\n interval: null\n }\n },\n computed: {\n localeDateString () {\n const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)\n return typeof this.time === 'string'\n ? new Date(Date.parse(this.time)).toLocaleString(browserLocale)\n : this.time.toLocaleString(browserLocale)\n },\n relativeTimeString () {\n const timeString = this.$i18n.tc(this.relativeTime.key, this.relativeTime.num, [this.relativeTime.num])\n\n if (typeof this.templateKey === 'string' && this.relativeTime.key !== 'time.now') {\n return this.$i18n.t(this.templateKey, [timeString])\n }\n\n return timeString\n }\n },\n watch: {\n time (newVal, oldVal) {\n if (oldVal !== newVal) {\n clearTimeout(this.interval)\n this.refreshRelativeTimeObject()\n }\n }\n },\n created () {\n this.refreshRelativeTimeObject()\n },\n unmounted () {\n clearTimeout(this.interval)\n },\n methods: {\n refreshRelativeTimeObject () {\n const nowThreshold = typeof this.nowThreshold === 'number' ? this.nowThreshold : 1\n this.relativeTime = this.longFormat\n ? DateUtils.relativeTime(this.time, nowThreshold)\n : DateUtils.relativeTimeShort(this.time, nowThreshold)\n\n if (this.autoUpdate) {\n this.interval = setTimeout(\n this.refreshRelativeTimeObject,\n 1000 * this.autoUpdate\n )\n }\n }\n }\n}\n</script>\n","import { render } from \"./timeago.vue?vue&type=template&id=3269671b\"\nimport script from \"./timeago.vue?vue&type=script&lang=js\"\nexport * from \"./timeago.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <FAIcon\n v-if=\"user && user.screen_name_ui_contains_non_ascii\"\n icon=\"code\"\n :title=\"$t('unicode_domain_indicator.tooltip')\"\n />\n</template>\n\n<script>\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCode\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCode\n)\n\nconst UnicodeDomainIndicator = {\n props: {\n user: Object\n }\n}\n\nexport default UnicodeDomainIndicator\n</script>\n","import { render } from \"./unicode_domain_indicator.vue?vue&type=template&id=3e044e46\"\nimport script from \"./unicode_domain_indicator.vue?vue&type=script&lang=js\"\nexport * from \"./unicode_domain_indicator.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import StillImage from '../still-image/still-image.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\n\nimport {\n faRobot\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRobot\n)\n\nconst UserAvatar = {\n props: [\n 'user',\n 'betterShadow',\n 'compact',\n 'bot'\n ],\n data () {\n return {\n showPlaceholder: false,\n defaultAvatar: `${this.$store.state.instance.server + this.$store.state.instance.defaultAvatar}`\n }\n },\n components: {\n StillImage\n },\n methods: {\n imgSrc (src) {\n return (!src || this.showPlaceholder) ? this.defaultAvatar : src\n },\n imageLoadError () {\n this.showPlaceholder = true\n }\n }\n}\n\nexport default UserAvatar\n","import { render } from \"./user_avatar.vue?vue&type=template&id=9c4bf79e\"\nimport script from \"./user_avatar.js?vue&type=script&lang=js\"\nexport * from \"./user_avatar.js?vue&type=script&lang=js\"\n\nimport \"./user_avatar.vue?vue&type=style&index=0&id=9c4bf79e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <span\n class=\"Avatar\"\n :class=\"{ '-compact': compact }\"\n >\n <StillImage\n v-if=\"user\"\n class=\"avatar\"\n :alt=\"user.screen_name_ui\"\n :title=\"user.screen_name_ui\"\n :src=\"imgSrc(user.profile_image_url_original)\"\n :image-load-error=\"imageLoadError\"\n :class=\"{ '-compact': compact, '-better-shadow': betterShadow }\"\n />\n <div\n v-else\n class=\"avatar -placeholder\"\n :class=\"{ '-compact': compact }\"\n />\n <FAIcon\n v-if=\"bot\"\n icon=\"robot\"\n class=\"bot-indicator\"\n />\n </span>\n</template>\n\n<script src=\"./user_avatar.js\"></script>\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.Avatar {\n --_avatarShadowBox: var(--avatarStatusShadow);\n --_avatarShadowFilter: var(--avatarStatusShadowFilter);\n --_avatarShadowInset: var(--avatarStatusShadowInset);\n --_still-image-label-visibility: hidden;\n\n display: inline-block;\n position: relative;\n width: 48px;\n height: 48px;\n\n &.-compact {\n width: 32px;\n height: 32px;\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n .avatar {\n width: 100%;\n height: 100%;\n box-shadow: var(--_avatarShadowBox);\n border-radius: $fallback--avatarRadius;\n border-radius: var(--avatarRadius, $fallback--avatarRadius);\n\n &.-better-shadow {\n box-shadow: var(--_avatarShadowInset);\n filter: var(--_avatarShadowFilter);\n }\n\n &.-animated::before {\n display: none;\n }\n\n &.-compact {\n border-radius: $fallback--avatarAltRadius;\n border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);\n }\n\n &.-placeholder {\n background-color: $fallback--fg;\n background-color: var(--fg, $fallback--fg);\n }\n }\n\n img {\n width: 100%;\n height: 100%;\n }\n\n .bot-indicator {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: -0.2em;\n padding: 0.2em;\n background: rgb(127 127 127 / 50%);\n color: #fff;\n border-radius: var(--tooltipRadius);\n }\n}\n</style>\n","<template>\n <div\n class=\"user-card\"\n :class=\"classes\"\n >\n <div\n :class=\"{ 'hide-bio': hideBio }\"\n :style=\"style\"\n class=\"background-image\"\n />\n <div :class=\"onClose ? '' : panel-heading -flexible-height\">\n <div class=\"user-info\">\n <div class=\"container\">\n <a\n v-if=\"avatarAction === 'zoom'\"\n class=\"user-info-avatar -link\"\n @click=\"zoomAvatar\"\n >\n <UserAvatar\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n />\n <div class=\"user-info-avatar -link -overlay\">\n <FAIcon\n class=\"fa-scale-110 fa-old-padding\"\n icon=\"search-plus\"\n />\n </div>\n </a>\n <UserAvatar\n v-else-if=\"typeof avatarAction === 'function'\"\n class=\"user-info-avatar\"\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n @click=\"avatarAction\"\n />\n <router-link\n v-else\n :to=\"userProfileLink(user)\"\n >\n <UserAvatar\n :better-shadow=\"betterShadow\"\n :user=\"user\"\n />\n </router-link>\n <div class=\"user-summary\">\n <div class=\"top-line\">\n <router-link\n :to=\"userProfileLink(user)\"\n class=\"user-name\"\n >\n <RichContent\n :title=\"user.name\"\n :html=\"user.name\"\n :emoji=\"user.emoji\"\n />\n </router-link>\n <button\n v-if=\"!isOtherUser && user.is_local\"\n class=\"button-unstyled edit-profile-button\"\n @click.stop=\"openProfileTab\"\n >\n <FAIcon\n fixed-width\n class=\"icon\"\n icon=\"edit\"\n :title=\"$t('user_card.edit_profile')\"\n />\n </button>\n <a\n v-if=\"isOtherUser && !user.is_local\"\n :href=\"user.statusnet_profile_url\"\n target=\"_blank\"\n class=\"button-unstyled external-link-button\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"external-link-alt\"\n />\n </a>\n <AccountActions\n v-if=\"isOtherUser && loggedIn\"\n :user=\"user\"\n :relationship=\"relationship\"\n />\n <router-link\n v-if=\"onClose\"\n :to=\"userProfileLink(user)\"\n class=\"button-unstyled external-link-button\"\n @click=\"onClose\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"expand-alt\"\n />\n </router-link>\n <button\n v-if=\"onClose\"\n class=\"button-unstyled external-link-button\"\n @click=\"onClose\"\n >\n <FAIcon\n class=\"icon\"\n icon=\"times\"\n />\n </button>\n </div>\n <div class=\"bottom-line\">\n <user-link\n class=\"user-screen-name\"\n :user=\"user\"\n />\n <template v-if=\"!hideBio\">\n <span\n v-if=\"user.deactivated\"\n class=\"alert user-role\"\n >\n {{ $t('user_card.deactivated') }}\n </span>\n <span\n v-if=\"!!visibleRole\"\n class=\"alert user-role\"\n >\n {{ $t(`general.role.${visibleRole}`) }}\n </span>\n <span\n v-if=\"user.bot\"\n class=\"alert user-role\"\n >\n {{ $t('user_card.bot') }}\n </span>\n </template>\n <span v-if=\"user.locked\">\n <FAIcon\n class=\"lock-icon\"\n icon=\"lock\"\n size=\"sm\"\n />\n </span>\n <span\n v-if=\"!mergedConfig.hideUserStats && !hideBio\"\n class=\"dailyAvg\"\n >{{ dailyAvg }} {{ $t('user_card.per_day') }}</span>\n </div>\n </div>\n </div>\n <div class=\"user-meta\">\n <div\n v-if=\"relationship.followed_by && loggedIn && isOtherUser\"\n class=\"following\"\n >\n {{ $t('user_card.follows_you') }}\n </div>\n <div\n v-if=\"isOtherUser && (loggedIn || !switcher)\"\n class=\"highlighter\"\n >\n <!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to -->\n <input\n v-if=\"userHighlightType !== 'disabled'\"\n :id=\"'userHighlightColorTx'+user.id\"\n v-model=\"userHighlightColor\"\n class=\"userHighlightText\"\n type=\"text\"\n >\n <input\n v-if=\"userHighlightType !== 'disabled'\"\n :id=\"'userHighlightColor'+user.id\"\n v-model=\"userHighlightColor\"\n class=\"userHighlightCl\"\n type=\"color\"\n >\n {{ ' ' }}\n <Select\n :id=\"'userHighlightSel'+user.id\"\n v-model=\"userHighlightType\"\n class=\"userHighlightSel\"\n >\n <option value=\"disabled\">\n {{ $t('user_card.highlight.disabled') }}\n </option>\n <option value=\"solid\">\n {{ $t('user_card.highlight.solid') }}\n </option>\n <option value=\"striped\">\n {{ $t('user_card.highlight.striped') }}\n </option>\n <option value=\"side\">\n {{ $t('user_card.highlight.side') }}\n </option>\n </Select>\n </div>\n </div>\n <div\n v-if=\"loggedIn && isOtherUser\"\n class=\"user-interactions\"\n >\n <div class=\"btn-group\">\n <FollowButton\n :relationship=\"relationship\"\n :user=\"user\"\n />\n <template v-if=\"relationship.following\">\n <ProgressButton\n v-if=\"!relationship.subscribing\"\n class=\"btn button-default\"\n :click=\"subscribeUser\"\n :title=\"$t('user_card.subscribe')\"\n >\n <FAIcon icon=\"bell\" />\n </ProgressButton>\n <ProgressButton\n v-else\n class=\"btn button-default toggled\"\n :click=\"unsubscribeUser\"\n :title=\"$t('user_card.unsubscribe')\"\n >\n <FALayers>\n <FAIcon\n icon=\"rss\"\n transform=\"left-5 shrink-6 up-3 rotate-20\"\n flip=\"horizontal\"\n />\n <FAIcon\n icon=\"rss\"\n transform=\"right-5 shrink-6 up-3 rotate-20\"\n />\n <FAIcon icon=\"bell\" />\n </FALayers>\n </ProgressButton>\n </template>\n </div>\n <div>\n <button\n v-if=\"relationship.muting\"\n class=\"btn button-default btn-block toggled\"\n :disabled=\"user.deactivated\"\n @click=\"unmuteUser\"\n >\n {{ $t('user_card.muted') }}\n </button>\n <button\n v-else\n class=\"btn button-default btn-block\"\n :disabled=\"user.deactivated\"\n @click=\"muteUser\"\n >\n {{ $t('user_card.mute') }}\n </button>\n </div>\n <div>\n <button\n class=\"btn button-default btn-block\"\n :disabled=\"user.deactivated\"\n @click=\"mentionUser\"\n >\n {{ $t('user_card.mention') }}\n </button>\n </div>\n <ModerationTools\n v-if=\"showModerationMenu\"\n :user=\"user\"\n />\n </div>\n <div\n v-if=\"!loggedIn && user.is_local\"\n class=\"user-interactions\"\n >\n <RemoteFollow :user=\"user\" />\n </div>\n <UserNote\n v-if=\"loggedIn && isOtherUser && (hasNote || (hasNoteEditor && supportsNote))\"\n :user=\"user\"\n :relationship=\"relationship\"\n :editable=\"hasNoteEditor\"\n />\n </div>\n </div>\n <div\n v-if=\"!hideBio\"\n class=\"panel-body\"\n >\n <div\n v-if=\"!mergedConfig.hideUserStats && switcher\"\n class=\"user-counts\"\n >\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('statuses')\"\n >\n <h5>{{ $t('user_card.statuses') }}</h5>\n <span>{{ user.statuses_count }} <br></span>\n </div>\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('friends')\"\n >\n <h5>{{ $t('user_card.followees') }}</h5>\n <span>{{ hideFollowsCount ? $t('user_card.hidden') : user.friends_count }}</span>\n </div>\n <div\n class=\"user-count\"\n @click.prevent=\"setProfileView('followers')\"\n >\n <h5>{{ $t('user_card.followers') }}</h5>\n <span>{{ hideFollowersCount ? $t('user_card.hidden') : user.followers_count }}</span>\n </div>\n </div>\n <RichContent\n v-if=\"!hideBio\"\n class=\"user-card-bio\"\n :html=\"user.description_html\"\n :emoji=\"user.emoji\"\n :handle-links=\"true\"\n />\n </div>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmMute\"\n :title=\"$t('user_card.mute_confirm_title')\"\n :confirm-text=\"$t('user_card.mute_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.mute_confirm_cancel_button')\"\n @accepted=\"doMuteUser\"\n @cancelled=\"hideConfirmMute\"\n >\n <i18n-t\n keypath=\"user_card.mute_confirm\"\n tag=\"div\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n <div\n class=\"mute-expiry\"\n >\n <label>\n {{ $t('user_card.mute_duration_prompt') }}\n </label>\n <input\n v-model=\"muteExpiryAmount\"\n type=\"number\"\n class=\"expiry-amount hide-number-spinner\"\n :min=\"0\"\n >\n <Select\n v-model=\"muteExpiryUnit\"\n unstyled=\"true\"\n class=\"expiry-unit\"\n >\n <option\n v-for=\"unit in muteExpiryUnits\"\n :key=\"unit\"\n :value=\"unit\"\n >\n {{ $t(`time.${unit}_short`, ['']) }}\n </option>\n </Select>\n </div>\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./user_card.js\"></script>\n\n<style lang=\"scss\" src=\"./user_card.scss\" />\n","<template>\n <div>\n <Popover\n trigger=\"click\"\n class=\"moderation-tools-popover\"\n placement=\"bottom\"\n :offset=\"{ y: 5 }\"\n @show=\"setToggled(true)\"\n @close=\"setToggled(false)\"\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <span v-if=\"canGrantRole\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleRight(&quot;admin&quot;)\"\n >\n {{ $t(!!user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleRight(&quot;moderator&quot;)\"\n >\n {{ $t(!!user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator') }}\n </button>\n <div\n v-if=\"canChangeActivationState || canDeleteAccount\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </span>\n <button\n v-if=\"canChangeActivationState\"\n class=\"button-default dropdown-item\"\n @click=\"toggleActivationStatus()\"\n >\n {{ $t(!!user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account') }}\n </button>\n <button\n v-if=\"canDeleteAccount\"\n class=\"button-default dropdown-item\"\n @click=\"deleteUserDialog(true)\"\n >\n {{ $t('user_card.admin_menu.delete_account') }}\n </button>\n <div\n v-if=\"canUseTagPolicy\"\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n <span v-if=\"canUseTagPolicy\">\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.FORCE_NSFW)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }\"\n />\n {{ $t('user_card.admin_menu.force_nsfw') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.STRIP_MEDIA)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.STRIP_MEDIA) }\"\n />\n {{ $t('user_card.admin_menu.strip_media') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.FORCE_UNLISTED)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.FORCE_UNLISTED) }\"\n />\n {{ $t('user_card.admin_menu.force_unlisted') }}\n </button>\n <button\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.SANDBOX)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.SANDBOX) }\"\n />\n {{ $t('user_card.admin_menu.sandbox') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.DISABLE_REMOTE_SUBSCRIPTION)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.DISABLE_REMOTE_SUBSCRIPTION) }\"\n />\n {{ $t('user_card.admin_menu.disable_remote_subscription') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.DISABLE_ANY_SUBSCRIPTION)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.DISABLE_ANY_SUBSCRIPTION) }\"\n />\n {{ $t('user_card.admin_menu.disable_any_subscription') }}\n </button>\n <button\n v-if=\"user.is_local\"\n class=\"button-default dropdown-item\"\n @click=\"toggleTag(tags.QUARANTINE)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': hasTag(tags.QUARANTINE) }\"\n />\n {{ $t('user_card.admin_menu.quarantine') }}\n </button>\n </span>\n </div>\n </template>\n <template #trigger>\n <button\n class=\"btn button-default btn-block moderation-tools-button\"\n :class=\"{ toggled }\"\n >\n {{ $t('user_card.admin_menu.moderation') }}\n <FAIcon icon=\"chevron-down\" />\n </button>\n </template>\n </Popover>\n <teleport to=\"#modal\">\n <DialogModal\n v-if=\"showDeleteUserDialog\"\n :on-cancel=\"deleteUserDialog.bind(this, false)\"\n >\n <template #header>\n {{ $t('user_card.admin_menu.delete_user') }}\n </template>\n <p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>\n <template #footer>\n <button\n class=\"btn button-default\"\n @click=\"deleteUserDialog(false)\"\n >\n {{ $t('general.cancel') }}\n </button>\n <button\n class=\"btn button-default danger\"\n @click=\"deleteUser()\"\n >\n {{ $t('user_card.admin_menu.delete_user') }}\n </button>\n </template>\n </DialogModal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./moderation_tools.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.moderation-tools-popover {\n height: 100%;\n\n .trigger {\n /* stylelint-disable-next-line declaration-no-important */\n display: flex !important;\n height: 100%;\n }\n}\n\n.moderation-tools-button {\n svg,\n i {\n font-size: 0.8em;\n }\n}\n</style>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons'\n\nimport DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nlibrary.add(faChevronDown)\n\nconst FORCE_NSFW = 'mrf_tag:media-force-nsfw'\nconst STRIP_MEDIA = 'mrf_tag:media-strip'\nconst FORCE_UNLISTED = 'mrf_tag:force-unlisted'\nconst DISABLE_REMOTE_SUBSCRIPTION = 'mrf_tag:disable-remote-subscription'\nconst DISABLE_ANY_SUBSCRIPTION = 'mrf_tag:disable-any-subscription'\nconst SANDBOX = 'mrf_tag:sandbox'\nconst QUARANTINE = 'mrf_tag:quarantine'\n\nconst ModerationTools = {\n props: [\n 'user'\n ],\n data () {\n return {\n tags: {\n FORCE_NSFW,\n STRIP_MEDIA,\n FORCE_UNLISTED,\n DISABLE_REMOTE_SUBSCRIPTION,\n DISABLE_ANY_SUBSCRIPTION,\n SANDBOX,\n QUARANTINE\n },\n showDeleteUserDialog: false,\n toggled: false\n }\n },\n components: {\n DialogModal,\n Popover\n },\n computed: {\n tagsSet () {\n return new Set(this.user.tags)\n },\n canGrantRole () {\n return this.user.is_local && !this.user.deactivated && this.$store.state.users.currentUser.role === 'admin'\n },\n canChangeActivationState () {\n return this.privileged('users_manage_activation_state')\n },\n canDeleteAccount () {\n return this.privileged('users_delete')\n },\n canUseTagPolicy () {\n return this.$store.state.instance.tagPolicyAvailable && this.privileged('users_manage_tags')\n }\n },\n methods: {\n hasTag (tagName) {\n return this.tagsSet.has(tagName)\n },\n privileged (privilege) {\n return this.$store.state.users.currentUser.privileges.includes(privilege)\n },\n toggleTag (tag) {\n const store = this.$store\n if (this.tagsSet.has(tag)) {\n store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('untagUser', { user: this.user, tag })\n })\n } else {\n store.state.api.backendInteractor.tagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('tagUser', { user: this.user, tag })\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default ModerationTools\n","import { render } from \"./moderation_tools.vue?vue&type=template&id=352f537c\"\nimport script from \"./moderation_tools.js?vue&type=script&lang=js\"\nexport * from \"./moderation_tools.js?vue&type=script&lang=js\"\n\nimport \"./moderation_tools.vue?vue&type=style&index=0&id=352f537c&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"AccountActions\">\n <Popover\n trigger=\"click\"\n placement=\"bottom\"\n :bound-to=\"{ x: 'container' }\"\n remove-padding\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <template v-if=\"relationship.following\">\n <button\n v-if=\"relationship.showing_reblogs\"\n class=\"btn button-default dropdown-item\"\n @click=\"hideRepeats\"\n >\n {{ $t('user_card.hide_repeats') }}\n </button>\n <button\n v-if=\"!relationship.showing_reblogs\"\n class=\"btn button-default dropdown-item\"\n @click=\"showRepeats\"\n >\n {{ $t('user_card.show_repeats') }}\n </button>\n <div\n role=\"separator\"\n class=\"dropdown-divider\"\n />\n </template>\n <UserListMenu :user=\"user\" />\n <button\n v-if=\"relationship.followed_by\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"removeUserFromFollowers\"\n >\n {{ $t('user_card.remove_follower') }}\n </button>\n <button\n v-if=\"relationship.blocking\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"unblockUser\"\n >\n {{ $t('user_card.unblock') }}\n </button>\n <button\n v-else\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"blockUser\"\n >\n {{ $t('user_card.block') }}\n </button>\n <button\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"reportUser\"\n >\n {{ $t('user_card.report') }}\n </button>\n <button\n v-if=\"pleromaChatMessagesAvailable\"\n class=\"btn button-default btn-block dropdown-item\"\n @click=\"openChat\"\n >\n {{ $t('user_card.message') }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"button-unstyled ellipsis-button\">\n <FAIcon\n class=\"icon\"\n icon=\"ellipsis-v\"\n />\n </button>\n </template>\n </Popover>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmBlock\"\n :title=\"$t('user_card.block_confirm_title')\"\n :confirm-text=\"$t('user_card.block_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.block_confirm_cancel_button')\"\n @accepted=\"doBlockUser\"\n @cancelled=\"hideConfirmBlock\"\n >\n <i18n-t\n keypath=\"user_card.block_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n <teleport to=\"#modal\">\n <confirm-modal\n v-if=\"showingConfirmRemoveFollower\"\n :title=\"$t('user_card.remove_follower_confirm_title')\"\n :confirm-text=\"$t('user_card.remove_follower_confirm_accept_button')\"\n :cancel-text=\"$t('user_card.remove_follower_confirm_cancel_button')\"\n @accepted=\"doRemoveUserFromFollowers\"\n @cancelled=\"hideConfirmRemoveUserFromFollowers\"\n >\n <i18n-t\n keypath=\"user_card.remove_follower_confirm\"\n tag=\"span\"\n >\n <template #user>\n <span\n v-text=\"user.screen_name_ui\"\n />\n </template>\n </i18n-t>\n </confirm-modal>\n </teleport>\n </div>\n</template>\n\n<script src=\"./account_actions.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.AccountActions {\n .ellipsis-button {\n width: 2.5em;\n margin: -0.5em 0;\n padding: 0.5em 0;\n text-align: center;\n\n &:not(:hover) .icon {\n color: $fallback--lightText;\n color: var(--lightText, $fallback--lightText);\n }\n }\n}\n</style>\n","<template>\n <div class=\"UserListMenu\">\n <Popover\n trigger=\"hover\"\n placement=\"left\"\n remove-padding\n >\n <template #content>\n <div class=\"dropdown-menu\">\n <button\n v-for=\"list in lists\"\n :key=\"list.id\"\n class=\"button-default dropdown-item\"\n @click=\"toggleList(list.id)\"\n >\n <span\n class=\"menu-checkbox\"\n :class=\"{ 'menu-checkbox-checked': list.inList }\"\n />\n {{ list.title }}\n </button>\n </div>\n </template>\n <template #trigger>\n <button class=\"btn button-default dropdown-item -has-submenu\">\n {{ $t('lists.manage_lists') }}\n <FAIcon\n class=\"chevron-icon\"\n size=\"lg\"\n icon=\"chevron-right\"\n />\n </button>\n </template>\n </Popover>\n </div>\n</template>\n\n<script src=\"./user_list_menu.js\"></script>\n","import { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport { mapState } from 'vuex'\n\nimport DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nlibrary.add(faChevronRight)\n\nconst UserListMenu = {\n props: [\n 'user'\n ],\n data () {\n return {}\n },\n components: {\n DialogModal,\n Popover\n },\n created () {\n this.$store.dispatch('fetchUserInLists', this.user.id)\n },\n computed: {\n ...mapState({\n allLists: state => state.lists.allLists\n }),\n inListsSet () {\n return new Set(this.user.inLists.map(x => x.id))\n },\n lists () {\n if (!this.user.inLists) return []\n return this.allLists.map(list => ({\n ...list,\n inList: this.inListsSet.has(list.id)\n }))\n }\n },\n methods: {\n toggleList (listId) {\n if (this.inListsSet.has(listId)) {\n this.$store.dispatch('removeListAccount', { accountId: this.user.id, listId }).then((response) => {\n if (!response.ok) { return }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n } else {\n this.$store.dispatch('addListAccount', { accountId: this.user.id, listId }).then((response) => {\n if (!response.ok) { return }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default UserListMenu\n","import { render } from \"./user_list_menu.vue?vue&type=template&id=aeea2640\"\nimport script from \"./user_list_menu.js?vue&type=script&lang=js\"\nexport * from \"./user_list_menu.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mapState } from 'vuex'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport Popover from '../popover/popover.vue'\nimport UserListMenu from 'src/components/user_list_menu/user_list_menu.vue'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faEllipsisV\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faEllipsisV\n)\n\nconst AccountActions = {\n props: [\n 'user', 'relationship'\n ],\n data () {\n return {\n showingConfirmBlock: false,\n showingConfirmRemoveFollower: false\n }\n },\n components: {\n ProgressButton,\n Popover,\n UserListMenu,\n ConfirmModal\n },\n methods: {\n showConfirmBlock () {\n this.showingConfirmBlock = true\n },\n hideConfirmBlock () {\n this.showingConfirmBlock = false\n },\n showConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = true\n },\n hideConfirmRemoveUserFromFollowers () {\n this.showingConfirmRemoveFollower = false\n },\n showRepeats () {\n this.$store.dispatch('showReblogs', this.user.id)\n },\n hideRepeats () {\n this.$store.dispatch('hideReblogs', this.user.id)\n },\n blockUser () {\n if (!this.shouldConfirmBlock) {\n this.doBlockUser()\n } else {\n this.showConfirmBlock()\n }\n },\n doBlockUser () {\n this.$store.dispatch('blockUser', this.user.id)\n this.hideConfirmBlock()\n },\n unblockUser () {\n this.$store.dispatch('unblockUser', this.user.id)\n },\n removeUserFromFollowers () {\n if (!this.shouldConfirmRemoveUserFromFollowers) {\n this.doRemoveUserFromFollowers()\n } else {\n this.showConfirmRemoveUserFromFollowers()\n }\n },\n doRemoveUserFromFollowers () {\n this.$store.dispatch('removeUserFromFollowers', this.user.id)\n this.hideConfirmRemoveUserFromFollowers()\n },\n reportUser () {\n this.$store.dispatch('openUserReportingModal', { userId: this.user.id })\n },\n openChat () {\n this.$router.push({\n name: 'chat',\n params: { username: this.$store.state.users.currentUser.screen_name, recipient_id: this.user.id }\n })\n }\n },\n computed: {\n shouldConfirmBlock () {\n return this.$store.getters.mergedConfig.modalOnBlock\n },\n shouldConfirmRemoveUserFromFollowers () {\n return this.$store.getters.mergedConfig.modalOnRemoveUserFromFollowers\n },\n ...mapState({\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable\n })\n }\n}\n\nexport default AccountActions\n","import { render } from \"./account_actions.vue?vue&type=template&id=2d1f537d\"\nimport script from \"./account_actions.js?vue&type=script&lang=js\"\nexport * from \"./account_actions.js?vue&type=script&lang=js\"\n\nimport \"./account_actions.vue?vue&type=style&index=0&id=2d1f537d&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"user-note\"\n >\n <div class=\"heading\">\n <span>{{ $t('user_card.note') }}</span>\n <div class=\"buttons\">\n <button\n v-show=\"!editing && editable\"\n class=\"button-default btn\"\n @click=\"startEditing\"\n >\n {{ $t('user_card.edit_note') }}\n </button>\n <button\n v-show=\"editing\"\n class=\"button-default btn\"\n :disabled=\"frozen\"\n @click=\"finalizeEditing\"\n >\n {{ $t('user_card.edit_note_apply') }}\n </button>\n <button\n v-show=\"editing\"\n class=\"button-default btn\"\n :disabled=\"frozen\"\n @click=\"cancelEditing\"\n >\n {{ $t('user_card.edit_note_cancel') }}\n </button>\n </div>\n </div>\n <textarea\n v-show=\"editing\"\n v-model=\"localNote\"\n class=\"note-text\"\n />\n <span\n v-show=\"!editing\"\n class=\"note-text\"\n :class=\"{ '-blank': !relationship.note }\"\n >\n {{ relationship.note || $t('user_card.note_blank') }}\n </span>\n </div>\n</template>\n\n<script src=\"./user_note.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n.user-note {\n display: flex;\n flex-direction: column;\n\n .heading {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75em;\n\n .btn {\n min-width: 95px;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n\n .btn {\n margin-left: 0.5em;\n }\n }\n }\n\n .note-text {\n align-self: stretch;\n }\n\n .note-text.-blank {\n font-style: italic;\n color: var(--faint, $fallback--faint);\n }\n}\n</style>\n","const UserNote = {\n props: {\n user: Object,\n relationship: Object,\n editable: Boolean\n },\n data () {\n return {\n localNote: '',\n editing: false,\n frozen: false\n }\n },\n computed: {\n shouldShow () {\n return this.relationship.note || this.editing\n }\n },\n methods: {\n startEditing () {\n this.localNote = this.relationship.note\n this.editing = true\n },\n cancelEditing () {\n this.editing = false\n },\n finalizeEditing () {\n this.frozen = true\n\n this.$store.dispatch('editUserNote', {\n id: this.user.id,\n comment: this.localNote\n })\n .then(() => {\n this.frozen = false\n this.editing = false\n })\n .catch(() => {\n this.frozen = false\n })\n }\n }\n}\n\nexport default UserNote\n","import { render } from \"./user_note.vue?vue&type=template&id=3c543a1e\"\nimport script from \"./user_note.js?vue&type=script&lang=js\"\nexport * from \"./user_note.js?vue&type=script&lang=js\"\n\nimport \"./user_note.vue?vue&type=style&index=0&id=3c543a1e&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { unitToSeconds } from 'src/services/date_utils/date_utils.js'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport ModerationTools from '../moderation_tools/moderation_tools.vue'\nimport AccountActions from '../account_actions/account_actions.vue'\nimport UserNote from '../user_note/user_note.vue'\nimport Select from '../select/select.vue'\nimport UserLink from '../user_link/user_link.vue'\nimport RichContent from 'src/components/rich_content/rich_content.jsx'\nimport ConfirmModal from '../confirm_modal/confirm_modal.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters } from 'vuex'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBell,\n faRss,\n faSearchPlus,\n faExternalLinkAlt,\n faEdit,\n faTimes,\n faExpandAlt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faRss,\n faBell,\n faSearchPlus,\n faExternalLinkAlt,\n faEdit,\n faTimes,\n faExpandAlt\n)\n\nexport default {\n props: [\n 'userId',\n 'switcher',\n 'selected',\n 'hideBio',\n 'rounded',\n 'bordered',\n 'avatarAction', // default - open profile, 'zoom' - zoom, function - call function\n 'onClose',\n 'hasNoteEditor'\n ],\n data () {\n return {\n followRequestInProgress: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter,\n showingConfirmMute: false,\n muteExpiryAmount: 0,\n muteExpiryUnit: 'minutes'\n }\n },\n created () {\n this.$store.dispatch('fetchUserRelationship', this.user.id)\n },\n computed: {\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n relationship () {\n return this.$store.getters.relationship(this.userId)\n },\n classes () {\n return [{\n '-rounded-t': this.rounded === 'top', // set border-top-left-radius and border-top-right-radius\n '-rounded': this.rounded === true, // set border-radius for all sides\n '-bordered': this.bordered === true, // set border for all sides\n '-popover': !!this.onClose // set popover rounding\n }]\n },\n style () {\n return {\n backgroundImage: [\n 'linear-gradient(to bottom, var(--profileTint), var(--profileTint))',\n `url(${this.user.cover_photo})`\n ].join(', ')\n }\n },\n isOtherUser () {\n return this.user.id !== this.$store.state.users.currentUser.id\n },\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 loggedIn () {\n return this.$store.state.users.currentUser\n },\n dailyAvg () {\n const days = Math.ceil((new Date() - new Date(this.user.created_at)) / (60 * 60 * 24 * 1000))\n return Math.round(this.user.statuses_count / days)\n },\n userHighlightType: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return (data && data.type) || 'disabled'\n },\n set (type) {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n if (type !== 'disabled') {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: (data && data.color) || '#FFFFFF', type })\n } else {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: undefined })\n }\n },\n ...mapGetters(['mergedConfig'])\n },\n userHighlightColor: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return data && data.color\n },\n set (color) {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color })\n }\n },\n visibleRole () {\n const rights = this.user.rights\n if (!rights) { return }\n const validRole = rights.admin || rights.moderator\n const roleTitle = rights.admin ? 'admin' : 'moderator'\n return validRole && roleTitle\n },\n hideFollowsCount () {\n return this.isOtherUser && this.user.hide_follows_count\n },\n hideFollowersCount () {\n return this.isOtherUser && this.user.hide_followers_count\n },\n showModerationMenu () {\n const privileges = this.loggedIn.privileges\n return this.loggedIn.role === 'admin' || privileges.includes('users_manage_activation_state') || privileges.includes('users_delete') || privileges.includes('users_manage_tags')\n },\n hasNote () {\n return this.relationship.note\n },\n supportsNote () {\n return 'note' in this.relationship\n },\n shouldConfirmMute () {\n return this.mergedConfig.modalOnMute\n },\n muteExpiryUnits () {\n return ['minutes', 'hours', 'days']\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n UserAvatar,\n RemoteFollow,\n ModerationTools,\n AccountActions,\n ProgressButton,\n FollowButton,\n Select,\n RichContent,\n UserLink,\n UserNote,\n ConfirmModal\n },\n methods: {\n showConfirmMute () {\n this.showingConfirmMute = true\n },\n hideConfirmMute () {\n this.showingConfirmMute = false\n },\n muteUser () {\n if (!this.shouldConfirmMute) {\n this.doMuteUser()\n } else {\n this.showConfirmMute()\n }\n },\n doMuteUser () {\n this.$store.dispatch('muteUser', {\n id: this.user.id,\n expiresIn: this.shouldConfirmMute ? unitToSeconds(this.muteExpiryUnit, this.muteExpiryAmount) : 0\n })\n this.hideConfirmMute()\n },\n unmuteUser () {\n this.$store.dispatch('unmuteUser', this.user.id)\n },\n subscribeUser () {\n return this.$store.dispatch('subscribeUser', this.user.id)\n },\n unsubscribeUser () {\n return this.$store.dispatch('unsubscribeUser', this.user.id)\n },\n setProfileView (v) {\n if (this.switcher) {\n const store = this.$store\n store.commit('setProfileView', { v })\n }\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n },\n openProfileTab () {\n this.$store.dispatch('openSettingsModalTab', 'profile')\n },\n zoomAvatar () {\n const attachment = {\n url: this.user.profile_image_url_original,\n mimetype: 'image'\n }\n this.$store.dispatch('setMedia', [attachment])\n this.$store.dispatch('setCurrentMedia', attachment)\n },\n mentionUser () {\n this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user })\n },\n onAvatarClickHandler (e) {\n if (this.onAvatarClick) {\n e.preventDefault()\n this.onAvatarClick()\n }\n }\n }\n}\n","import { render } from \"./user_card.vue?vue&type=template&id=bc098958\"\nimport script from \"./user_card.js?vue&type=script&lang=js\"\nexport * from \"./user_card.js?vue&type=script&lang=js\"\n\nimport \"./user_card.scss?vue&type=style&index=0&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <router-link\n :title=\"user.screen_name_ui\"\n :to=\"userProfileLink(user)\"\n >\n {{ at ? '@' : '' }}{{ user.screen_name_ui }}<UnicodeDomainIndicator\n :user=\"user\"\n />\n </router-link>\n</template>\n\n<script>\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst UserLink = {\n props: {\n user: Object,\n at: {\n type: Boolean,\n default: true\n }\n },\n components: {\n UnicodeDomainIndicator\n },\n methods: {\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n }\n }\n}\n\nexport default UserLink\n</script>\n","import { render } from \"./user_link.vue?vue&type=template&id=2cae9070\"\nimport script from \"./user_link.vue?vue&type=script&lang=js\"\nexport * from \"./user_link.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import UserCard from '../user_card/user_card.vue'\nimport { defineAsyncComponent } from 'vue'\n\nconst UserPopover = {\n name: 'UserPopover',\n props: [\n 'userId', 'overlayCenters', 'disabled', 'overlayCentersSelector'\n ],\n components: {\n UserCard,\n Popover: defineAsyncComponent(() => import('../popover/popover.vue'))\n },\n computed: {\n userPopoverAvatarAction () {\n return this.$store.getters.mergedConfig.userPopoverAvatarAction\n },\n userPopoverOverlay () {\n return this.$store.getters.mergedConfig.userPopoverOverlay\n }\n }\n}\n\nexport default UserPopover\n","import { render } from \"./user_popover.vue?vue&type=template&id=6d5beeb8\"\nimport script from \"./user_popover.js?vue&type=script&lang=js\"\nexport * from \"./user_popover.js?vue&type=script&lang=js\"\n\nimport \"./user_popover.vue?vue&type=style&index=0&id=6d5beeb8&lang=scss\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Popover\n trigger=\"click\"\n popover-class=\"popover-default user-popover\"\n :overlay-centers-selector=\"overlayCentersSelector || '.user-info .Avatar'\"\n :overlay-centers=\"overlayCenters && userPopoverOverlay\"\n :disabled=\"disabled\"\n >\n <template #trigger>\n <slot />\n </template>\n <template #content=\"{close}\">\n <UserCard\n class=\"user-popover\"\n :user-id=\"userId\"\n :hide-bio=\"true\"\n :avatar-action=\"userPopoverAvatarAction == 'close' ? close : userPopoverAvatarAction\"\n :on-close=\"close\"\n />\n </template>\n </Popover>\n</template>\n\n<script src=\"./user_popover.js\"></script>\n\n<style lang=\"scss\">\n@import \"../../variables\";\n\n/* popover styles load on-demand, so we need to override */\n/* stylelint-disable block-no-empty */\n.user-popover.popover {\n}\n/* stylelint-enable block-no-empty */\n\n</style>\n","\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","import { render } from \"./video_attachment.vue?vue&type=template&id=dda2841a\"\nimport script from \"./video_attachment.js?vue&type=script&lang=js\"\nexport * from \"./video_attachment.js?vue&type=script&lang=js\"\n\nimport exportComponent from \"/builds/pleroma/pleroma-fe/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <video\n class=\"video\"\n preload=\"metadata\"\n :src=\"attachment.url\"\n :loop=\"loopVideo\"\n :controls=\"controls\"\n :alt=\"attachment.description\"\n :title=\"attachment.description\"\n playsinline\n @playing=\"onPlaying\"\n @pause=\"onPaused\"\n />\n</template>\n\n<script src=\"./video_attachment.js\"></script>\n","var map = {\n\t\"./ar.json\": [\n\t\t36224,\n\t\t7808\n\t],\n\t\"./ca.json\": [\n\t\t49394,\n\t\t6234\n\t],\n\t\"./cs.json\": [\n\t\t87436,\n\t\t7433\n\t],\n\t\"./de.json\": [\n\t\t25195,\n\t\t9459\n\t],\n\t\"./en.json\": [\n\t\t88797\n\t],\n\t\"./eo.json\": [\n\t\t97898,\n\t\t4646\n\t],\n\t\"./es.json\": [\n\t\t98559,\n\t\t3968\n\t],\n\t\"./et.json\": [\n\t\t13230,\n\t\t4451\n\t],\n\t\"./eu.json\": [\n\t\t84826,\n\t\t4542\n\t],\n\t\"./fa.json\": [\n\t\t52006,\n\t\t2953\n\t],\n\t\"./fi.json\": [\n\t\t70823,\n\t\t9738\n\t],\n\t\"./fr.json\": [\n\t\t61341,\n\t\t3746\n\t],\n\t\"./ga.json\": [\n\t\t41647,\n\t\t830\n\t],\n\t\"./he.json\": [\n\t\t92215,\n\t\t379\n\t],\n\t\"./hu.json\": [\n\t\t95028,\n\t\t5494\n\t],\n\t\"./id.json\": [\n\t\t62263,\n\t\t2513\n\t],\n\t\"./it.json\": [\n\t\t2533,\n\t\t1159\n\t],\n\t\"./ja_easy.json\": [\n\t\t8439,\n\t\t8714\n\t],\n\t\"./ja_pedantic.json\": [\n\t\t22838,\n\t\t325\n\t],\n\t\"./ko.json\": [\n\t\t10707,\n\t\t9670\n\t],\n\t\"./nan-TW.json\": [\n\t\t42101,\n\t\t9862\n\t],\n\t\"./nb.json\": [\n\t\t72358,\n\t\t7845\n\t],\n\t\"./nl.json\": [\n\t\t49922,\n\t\t6256\n\t],\n\t\"./oc.json\": [\n\t\t47297,\n\t\t617\n\t],\n\t\"./pl.json\": [\n\t\t82098,\n\t\t5571\n\t],\n\t\"./pt.json\": [\n\t\t94465,\n\t\t4047\n\t],\n\t\"./ro.json\": [\n\t\t64367,\n\t\t6342\n\t],\n\t\"./ru.json\": [\n\t\t73289,\n\t\t5964\n\t],\n\t\"./sk.json\": [\n\t\t31478,\n\t\t1547\n\t],\n\t\"./te.json\": [\n\t\t32781,\n\t\t2044\n\t],\n\t\"./uk.json\": [\n\t\t8411,\n\t\t5253\n\t],\n\t\"./vi.json\": [\n\t\t6294,\n\t\t4975\n\t],\n\t\"./zh.json\": [\n\t\t4425,\n\t\t5929\n\t],\n\t\"./zh_Hant.json\": [\n\t\t37644,\n\t\t6544\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 27650;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"50\":\"emoji-annotations/en_GB-json\",\"227\":\"emoji-annotations/ha-json\",\"278\":\"emoji-annotations/kn-json\",\"313\":\"emoji-annotations/tg-json\",\"325\":\"i18n/ja_pedantic-json\",\"346\":\"emoji-annotations/rw-json\",\"379\":\"i18n/he-json\",\"420\":\"emoji-annotations/fi-json\",\"457\":\"emoji-annotations/zh-json\",\"577\":\"emoji-annotations/en_001-json\",\"617\":\"i18n/oc-json\",\"625\":\"emoji-annotations/so-json\",\"678\":\"emoji-annotations/ps-json\",\"786\":\"emoji-annotations/xh-json\",\"830\":\"i18n/ga-json\",\"1012\":\"emoji-annotations/or-json\",\"1044\":\"emoji-annotations/zh_Hant_HK-json\",\"1056\":\"emoji-annotations/uz-json\",\"1095\":\"emoji-annotations/pl-json\",\"1159\":\"i18n/it-json\",\"1162\":\"emoji-annotations/ccp-json\",\"1236\":\"emoji-annotations/fil-json\",\"1290\":\"emoji-annotations/ja-json\",\"1404\":\"emoji-annotations/km-json\",\"1452\":\"emoji-annotations/yue-json\",\"1546\":\"emoji-annotations/pt_PT-json\",\"1547\":\"i18n/sk-json\",\"1553\":\"emoji-annotations/sl-json\",\"1584\":\"emoji-annotations/to-json\",\"1596\":\"emoji-annotations/da-json\",\"1613\":\"emoji-annotations/mai-json\",\"1780\":\"emoji-annotations/tk-json\",\"1790\":\"emoji-annotations/dsb-json\",\"1821\":\"emoji-annotations/fr_CA-json\",\"1911\":\"emoji-annotations/mr-json\",\"1959\":\"emoji-annotations/su-json\",\"2044\":\"i18n/te-json\",\"2223\":\"emoji-annotations/fr-json\",\"2243\":\"emoji-annotations/sa-json\",\"2342\":\"emoji-annotations/az-json\",\"2350\":\"emoji-annotations/sk-json\",\"2397\":\"emoji-annotations/kl-json\",\"2479\":\"emoji-annotations/jv-json\",\"2513\":\"i18n/id-json\",\"2569\":\"emoji-annotations/tt-json\",\"2599\":\"emoji-annotations/kok-json\",\"2656\":\"emoji-annotations/ckb-json\",\"2685\":\"emoji-annotations/ml-json\",\"2699\":\"emoji-annotations/es_MX-json\",\"2767\":\"emoji-annotations/zh_Hant-json\",\"2861\":\"emoji-annotations/hr-json\",\"2873\":\"emoji-annotations/kk-json\",\"2874\":\"emoji-annotations/sc-json\",\"2883\":\"emoji-annotations/ku-json\",\"2953\":\"i18n/fa-json\",\"2966\":\"emoji-annotations/ko-json\",\"2992\":\"emoji-annotations/eu-json\",\"3056\":\"emoji-annotations/hi_Latn-json\",\"3241\":\"emoji-annotations/sv-json\",\"3276\":\"emoji-annotations/et-json\",\"3313\":\"emoji-annotations/es_US-json\",\"3377\":\"emoji-annotations/as-json\",\"3568\":\"emoji-annotations/ti-json\",\"3687\":\"emoji\",\"3746\":\"i18n/fr-json\",\"3887\":\"emoji-annotations/sr-json\",\"3951\":\"emoji-annotations/th-json\",\"3968\":\"i18n/es-json\",\"3974\":\"emoji-annotations/bg-json\",\"3994\":\"emoji-annotations/sw_KE-json\",\"4047\":\"i18n/pt-json\",\"4209\":\"emoji-annotations/doi-json\",\"4354\":\"emoji-annotations/si-json\",\"4368\":\"emoji-annotations/sq-json\",\"4424\":\"emoji-annotations/yue_Hans-json\",\"4451\":\"i18n/et-json\",\"4542\":\"i18n/eu-json\",\"4571\":\"emoji-annotations/ga-json\",\"4646\":\"i18n/eo-json\",\"4691\":\"emoji-annotations/ca-json\",\"4710\":\"emoji-annotations/cs-json\",\"4718\":\"emoji-annotations/mn-json\",\"4770\":\"emoji-annotations/lb-json\",\"4785\":\"emoji-annotations/ky-json\",\"4786\":\"emoji-annotations/te-json\",\"4879\":\"emoji-annotations/en_CA-json\",\"4902\":\"emoji-annotations/hu-json\",\"4975\":\"i18n/vi-json\",\"5041\":\"emoji-annotations/pt-json\",\"5104\":\"emoji-annotations/pcm-json\",\"5115\":\"emoji-annotations/sr_Latn_BA-json\",\"5119\":\"emoji-annotations/am-json\",\"5224\":\"emoji-annotations/vi-json\",\"5253\":\"i18n/uk-json\",\"5304\":\"emoji-annotations/ha_NE-json\",\"5401\":\"emoji-annotations/mni-json\",\"5494\":\"i18n/hu-json\",\"5521\":\"emoji-annotations/fa-json\",\"5548\":\"emoji-annotations/he-json\",\"5571\":\"i18n/pl-json\",\"5728\":\"emoji-annotations/en-json\",\"5887\":\"emoji-annotations/rm-json\",\"5929\":\"i18n/zh-json\",\"5964\":\"i18n/ru-json\",\"5968\":\"emoji-annotations/hi-json\",\"6060\":\"emoji-annotations/sr_Cyrl_BA-json\",\"6068\":\"emoji-annotations/ka-json\",\"6116\":\"emoji-annotations/gd-json\",\"6126\":\"emoji-annotations/gl-json\",\"6148\":\"emoji-annotations/br-json\",\"6226\":\"emoji-annotations/de-json\",\"6234\":\"i18n/ca-json\",\"6256\":\"i18n/nl-json\",\"6272\":\"emoji-annotations/cy-json\",\"6342\":\"i18n/ro-json\",\"6344\":\"emoji-annotations/hy-json\",\"6355\":\"emoji-annotations/af-json\",\"6544\":\"i18n/zh_Hant-json\",\"6701\":\"emoji-annotations/mi-json\",\"6773\":\"emoji-annotations/nl-json\",\"6790\":\"emoji-annotations/my-json\",\"6797\":\"emoji-annotations/ur-json\",\"6826\":\"emoji-annotations/sd-json\",\"6831\":\"emoji-annotations/es-json\",\"6869\":\"emoji-annotations/chr-json\",\"6936\":\"emoji-annotations/ia-json\",\"6946\":\"emoji-annotations/pa-json\",\"7164\":\"emoji-annotations/de_CH-json\",\"7169\":\"emoji-annotations/lt-json\",\"7261\":\"emoji-annotations/gu-json\",\"7300\":\"emoji-annotations/is-json\",\"7303\":\"emoji-annotations/wo-json\",\"7304\":\"emoji-annotations/be-json\",\"7360\":\"emoji-annotations/ar_SA-json\",\"7433\":\"i18n/cs-json\",\"7464\":\"emoji-annotations/lo-json\",\"7569\":\"emoji-annotations/ast-json\",\"7585\":\"emoji-annotations/sw-json\",\"7808\":\"i18n/ar-json\",\"7845\":\"i18n/nb-json\",\"7855\":\"emoji-annotations/sat-json\",\"7879\":\"emoji-annotations/el-json\",\"7897\":\"emoji-annotations/ta-json\",\"8015\":\"emoji-annotations/hsb-json\",\"8031\":\"emoji-annotations/qu-json\",\"8134\":\"emoji-annotations/bs-json\",\"8395\":\"emoji-annotations/ru-json\",\"8681\":\"emoji-annotations/sr_Latn-json\",\"8714\":\"i18n/ja_easy-json\",\"8732\":\"emoji-annotations/yo-json\",\"8873\":\"emoji-annotations/es_419-json\",\"8898\":\"emoji-annotations/lv-json\",\"8970\":\"emoji-annotations/it-json\",\"8988\":\"emoji-annotations/en_IN-json\",\"8995\":\"emoji-annotations/fo-json\",\"9064\":\"emoji-annotations/bn-json\",\"9319\":\"emoji-annotations/zu-json\",\"9360\":\"emoji-annotations/en_AU-json\",\"9377\":\"emoji-annotations/ne-json\",\"9399\":\"emoji-annotations/mt-json\",\"9414\":\"emoji-annotations/nn-json\",\"9459\":\"i18n/de-json\",\"9465\":\"emoji-annotations/id-json\",\"9670\":\"i18n/ko-json\",\"9738\":\"i18n/fi-json\",\"9757\":\"emoji-annotations/ug-json\",\"9780\":\"emoji-annotations/kab-json\",\"9790\":\"emoji-annotations/ceb-json\",\"9862\":\"i18n/nan-TW-json\",\"9864\":\"emoji-annotations/ro-json\",\"9871\":\"emoji-annotations/uk-json\",\"9873\":\"emoji-annotations/ar-json\",\"9895\":\"emoji-annotations/ig-json\",\"9921\":\"emoji-annotations/mk-json\",\"9924\":\"emoji-annotations/ms-json\",\"9926\":\"emoji-annotations/yo_BJ-json\",\"9978\":\"emoji-annotations/tr-json\",\"9979\":\"emoji-annotations/no-json\",\"9994\":\"emoji-annotations/pa_Arab-json\"}[chunkId] || chunkId) + \".\" + {\"48\":\"b5ecdbc517423af07ca4\",\"50\":\"bd687f904492facc81d1\",\"159\":\"903e90c9de8ef6c67077\",\"227\":\"2a08912b38925c10f970\",\"278\":\"efdac8ac0cb00991ba1e\",\"313\":\"9647f559a4477d7d8e96\",\"325\":\"b52fa70f0bf89ae01cfb\",\"346\":\"031838c5374676191131\",\"379\":\"03c5d271a4034de06e6f\",\"420\":\"0f254bb4b0faaba4abcc\",\"457\":\"e42a28127d5c1aff6c85\",\"577\":\"72d8c47269350f59aa9f\",\"617\":\"4f52bf1b6e3213acc33c\",\"625\":\"f75abd16637c8924c075\",\"678\":\"a0d9eea5b81bcad11e64\",\"786\":\"21e88c05ad3113dfc7f2\",\"830\":\"3f1981817977a16f1d7e\",\"1012\":\"b007c2f6f92dcc95efac\",\"1044\":\"7eee03c705347a21c612\",\"1056\":\"ac43f4c54d4587324a20\",\"1095\":\"e9e8f1ed84dc6c169516\",\"1159\":\"99a21d5c98376af17141\",\"1162\":\"02836537ffe2b02291cb\",\"1236\":\"4fca833f178d1b889b69\",\"1290\":\"0bd51f8c40c106355b0e\",\"1404\":\"9bc922b2e0faa64b4c53\",\"1452\":\"15102c0ddfdf19bdfb4c\",\"1546\":\"c381b13e323f91b0e6b3\",\"1547\":\"d8d0eba80f94e6f55145\",\"1553\":\"a40c5548da34fce6f1d0\",\"1584\":\"50ac37d101caaf592c94\",\"1596\":\"8d074e27df71edafc543\",\"1613\":\"302386b3358f4d34f9c8\",\"1780\":\"23a9a6229829921704ad\",\"1790\":\"7635686ffd8d62264466\",\"1821\":\"59ed6b59e2ca68707292\",\"1911\":\"cb0a87d9aabf8a52161d\",\"1959\":\"daff15251020cbecea7d\",\"2044\":\"ce6db28261b2f824064f\",\"2223\":\"da49ed0d1a6622fe1c67\",\"2243\":\"21b06234a08c7469ccb4\",\"2342\":\"9a32f2941d9c4d1f834c\",\"2350\":\"5d96bdb4da82655d0314\",\"2397\":\"87ab8661b4bdecd09faf\",\"2479\":\"1c8d5ffcff22b46b6214\",\"2513\":\"e5c9ee768155f88128b9\",\"2569\":\"4c089389ba9983ec8ef7\",\"2599\":\"116e4f72db3bfb846233\",\"2656\":\"13dc83db1e15aa76051a\",\"2685\":\"3f2902a84240faff1b48\",\"2699\":\"ee359d4b611fdb1aeb33\",\"2767\":\"9cbb765c181d443828a9\",\"2861\":\"fe847ade1f18a60e513c\",\"2873\":\"a20b59d47bdfe99786ad\",\"2874\":\"c84c9c47d2e104c43e4c\",\"2883\":\"2173ed87f8d7372ee209\",\"2953\":\"a19100f6a5a9431e2adb\",\"2966\":\"d175900fe48f48ce87c8\",\"2992\":\"931b429f5fcc141549a5\",\"3056\":\"3cb73c456f31261f1908\",\"3241\":\"8b0374cbca3a77519876\",\"3276\":\"c42e3f186a55ecb061cd\",\"3313\":\"280bdb036dfd651d079a\",\"3377\":\"34cf67edc1cecd195738\",\"3568\":\"5b173bd33bb960be805b\",\"3687\":\"33eab91b64f59431137d\",\"3746\":\"36ef21ccb1203d3e65ae\",\"3887\":\"e29a20e59a708df0c6a8\",\"3951\":\"34709bae223bb9d2587c\",\"3968\":\"4a302899a65e1f67d8a2\",\"3974\":\"7c69c52572a7bf87e1db\",\"3994\":\"f3563cbeac1c158563d5\",\"4047\":\"3fc5593e030268bcd291\",\"4209\":\"7841c3f3ceb4e3da0bd1\",\"4354\":\"841b356da03623c10dbf\",\"4368\":\"bcf154ed8a6138aa089c\",\"4424\":\"cc60bb10d32fab3d8207\",\"4451\":\"580b101d6bb83a8aee75\",\"4542\":\"d2eab39b0427995fc314\",\"4571\":\"cb3f9e613a8c445aea23\",\"4646\":\"6c62eef99e850912498b\",\"4691\":\"ce029e860b10b242c6a5\",\"4710\":\"48d8bba230dc9fe6b3dc\",\"4718\":\"764169f1168d0432640f\",\"4770\":\"499c526f3a653618ea9b\",\"4785\":\"310bda579c819eda9472\",\"4786\":\"8a69a10f62cdf626244e\",\"4879\":\"5de965778a6b8a5a4bb4\",\"4902\":\"1faf52040deda872b416\",\"4975\":\"703c1e731be6e857bbf3\",\"5041\":\"2b2512ee44291bdb2ae7\",\"5104\":\"eac3a5ad0b4b5b33289d\",\"5115\":\"72933405032b81344754\",\"5119\":\"94388548f7c18233fec3\",\"5224\":\"f6a364b2add7f8c8bc67\",\"5253\":\"003908af9b15becdd382\",\"5304\":\"e4855d92aaccfdd6ba57\",\"5401\":\"7db7f76ab1ce34e3683d\",\"5494\":\"0487899ca7a7a8505ed8\",\"5521\":\"819c7f263c8594ccf4fa\",\"5548\":\"a3d7631f32182b0955a2\",\"5571\":\"c963247822381b05579b\",\"5728\":\"6c3947f7c49c3952084d\",\"5887\":\"985d4934f386fd05a75c\",\"5929\":\"a0a26f6d62ddbe0b49cc\",\"5964\":\"b913eb7f7e9f0c642438\",\"5968\":\"04bc5f73dc2169def97e\",\"6060\":\"83c7c64b9696ae2339f2\",\"6068\":\"567e7b051d90a37003f3\",\"6116\":\"e3d0aea3725be774ad81\",\"6126\":\"ce89036f0ae72224c994\",\"6148\":\"c7175423d8965ed10bae\",\"6226\":\"e1443c01a191af1665e1\",\"6234\":\"1eb24bc001efa3c0627f\",\"6256\":\"3fb9758b10c29434b613\",\"6272\":\"e09dd13da5ad56530ead\",\"6342\":\"3fd9977ed1c1413059ae\",\"6344\":\"2d819f7faabfeba8457f\",\"6355\":\"96c988285a6a2cce6246\",\"6464\":\"eb9c90a1c948cde554e9\",\"6544\":\"f7e1d0f4b873c60d6396\",\"6701\":\"9efe6f146ecd8987f80a\",\"6773\":\"52f4b93b8fa5e22cb585\",\"6790\":\"8e7dd1485813d15bba7e\",\"6797\":\"983c02109444c883a18f\",\"6826\":\"8f2a6a06dc3cf185f79d\",\"6831\":\"f593b0dc2367a9d7fb30\",\"6869\":\"e7e542ab5a74167dec10\",\"6936\":\"8e8365e2bf41779e2beb\",\"6946\":\"7d60d69762a108270669\",\"7164\":\"b4a5891ea2f38d616ec0\",\"7169\":\"ced4d5e70edc60127df6\",\"7261\":\"8a899f364cf260376905\",\"7300\":\"62e220c65215b034533d\",\"7303\":\"e0d689e22cda0dd77e9a\",\"7304\":\"f92f80669873a4100c69\",\"7360\":\"4a6f4402931a867070f0\",\"7433\":\"5eedbe9f7084c349fbe8\",\"7464\":\"ecb06d61465a355b8157\",\"7569\":\"7e4da8cb7e539c19a9b9\",\"7585\":\"d5f350641b9cbcc0e126\",\"7586\":\"628f729b9c8b2e6f4e1f\",\"7808\":\"4916f840147303aa65fe\",\"7845\":\"a54af3b1f47d576ad4aa\",\"7855\":\"71e92700b2aaca8e021c\",\"7879\":\"b36610f2ea16d56c2314\",\"7897\":\"675cc6c7607449d4a91b\",\"7962\":\"e25d40b042f8ee7389c3\",\"8015\":\"438721731b4171bc6fc3\",\"8031\":\"55f4df57e71076dbad9f\",\"8134\":\"48ef42da1c7976cf083c\",\"8395\":\"a81d0df34460837ccacc\",\"8681\":\"ff27d1f455bf2afb8d70\",\"8714\":\"1d5ea7e755b066ac2cdd\",\"8732\":\"ea1150d6bc360dd86f2e\",\"8859\":\"c76b0a0c3a4b5acbef11\",\"8873\":\"d81991295392b6ed83bb\",\"8898\":\"5600c2eb6d59fa0aa2e2\",\"8970\":\"9c1758f4fd3391f7f61a\",\"8988\":\"002faa48c09121928fca\",\"8995\":\"9b060e8009b3a8be4597\",\"9060\":\"24271e167e0471a1a732\",\"9064\":\"657aac057f36ad06c58d\",\"9319\":\"e0cb7cd3890583fd0f6d\",\"9360\":\"33aac9bbd887273a34b1\",\"9377\":\"a0118dca2096a101b8e8\",\"9399\":\"3ddf7dbc114adf90c500\",\"9414\":\"7293cd5d7205681cf48c\",\"9459\":\"bfa48615ac92f87ff37a\",\"9465\":\"55f83c46d753b0b69330\",\"9670\":\"9029d09084bb22d8b705\",\"9738\":\"d1934c18f12d80493ab1\",\"9757\":\"bf768bd32e9ff02b0a8a\",\"9780\":\"1a2de4774f4ddc2b51dd\",\"9790\":\"9db0336f168aa77ee395\",\"9862\":\"7f2789d8a461e86d1734\",\"9864\":\"cb62f86ce78c94d1e813\",\"9871\":\"af110c8eef232638fc4d\",\"9873\":\"5527466d349f2954d49b\",\"9895\":\"f19fa5fe3582463ba73c\",\"9921\":\"a254cabb8570419cc426\",\"9924\":\"272ee4735aabc37015dd\",\"9926\":\"650318c25fe4da92bad8\",\"9978\":\"6462e8cfd5006cf5b6cf\",\"9979\":\"22bdbbc77cc3c14ada58\",\"9994\":\"5ae021308b1c5f6dd8a7\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"159\":\"1d523a00378ebd68c5b3\",\"6464\":\"169260b661120cc50815\",\"7586\":\"0d43f70bc6240422f179\",\"7962\":\"76663e78ad5ea0bb0b90\",\"8859\":\"d26a3b0841a7beb8fd4a\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"159\":1,\"6464\":1,\"7586\":1,\"7962\":1,\"8859\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpleroma_fe\"] = self[\"webpackChunkpleroma_fe\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [3733], () => (__webpack_require__(35930)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","ctx","normalize","_normalize","interpolate","_interpolate","named","_named","list","_list","plural","_plural","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","t","keys","Object","module","exports","data","emojiCurry","suggestEmoji","emoji","usersCurry","store","suggestUsers","input","nameKeywordLocalizer","firstChar","emojis","noPrefix","toLowerCase","substr","_objectSpread","filter","names","concat","keywords","kw","match","length","k","score","Math","max","apply","_toConsumableArray","name","imageUrl","startsWith","displayText","sort","a","b","alphabetically","_ref","dispatch","state","suggestions","previousQuery","timeout","cancelUserSearch","debounceUserSearch","query","reject","setTimeout","userSearch","clearTimeout","_ref2","_asyncToGenerator","_regeneratorRuntime","_callee","newSuggestions","_context","prev","next","abrupt","includes","users","user","screen_name","slice","aScore","bScore","screen_name_ui","detailText","profile_image_url_original","replacement","stop","_x","arguments","getTagName","tag","result","exec","getAttrs","innertag","substring","replace","RegExp","trim","attrs","Array","from","matchAll","_slicedToArray","_ref3","_ref4","v","fromEntries","_ref5","_ref6","attrKey","processTextForEmoji","text","processor","buffer","textBuffer","i","char","_step","found","_iterator","_createForOfIteratorHelper","s","n","done","value","shortcode","err","f","push","class","props","url","required","type","String","content","default","methods","onClick","decoded","this","decodeURI","link","generateTagLink","$router","window","open","_createElementBlock","_hoisted_1","_createElementVNode","href","_ctx","target","_cache","_withModifiers","innerHTML","MAYBE_LINE_BREAKING_ELEMENTS","components","MentionsLine","HashtagLink","html","attentions","handleLinks","Boolean","greentext","render","_this","preProcessPerLine","newHtml","currentMentions","lastSpacing","lastTags","writtenMentions","invisibleMentions","writtenTags","mentionIndex","tagsIndex","encounteredTextReverse","pass1","undefined","emptyElements","Set","levels","tagBuffer","getCurrentBuffer","flushText","handleSelfClosing","handleOpen","curBuf","newLevel","_unescape","handleClose","currentTag","pop","tagFull","tagName","has","convertHtmlToTree","processItem","item","index","array","what","emptyText","_createVNode","StillImage","isArray","_item","_item2","opener","children","closer","Tag","fullAttrs","mentionsLinePadding","_mergeProps","linkData","getLinkData","notifying","some","statusnet_profile_url","MENTIONS_LIMIT","renderMention","pass2","reverse","processItemReverse","_item3","rel","_getLinkData","_objectWithoutProperties","_excluded","renderHashtag","newChildren","prototype","toString","call","_isVNode","event","$emit","textContent","stripTags","join","_flattenDeep","greentextHandle","lines","blockElements","linebreakElements","visualLineElements","values","nonEmptyElements","elem","allElements","level","flush","handleBr","unshift","shift","convertHtmlToLines","string","every","l","cleanedString","findFirstUsable","slots","findIndex","_","renderOnlyFocused","onSwitch","Function","activeTab","scrollableTabs","sideTabBar","bodyScrollLock","active","computed","activeIndex","slot","key","isActive","_this2","tabName","$slots","beforeUpdate","clickTab","_this3","preventDefault","setTab","Fragment","$refs","contents","scrollTop","_this4","tabs","classesTab","classesWrapper","image","disabled","label","icon","FAIcon","classes","fullHeight","renderSlot","_withDirectives","_resolveDirective","library","faCircleNotch","fetch","select","unmounted","_ref$childPropName","childPropName","_ref$additionalPropNa","additionalPropNames","WrappedComponent","getComponentProps","loading","bottomedOut","error","entries","created","addEventListener","scrollLoad","fetchEntries","removeEventListener","$props","$store","updateEntries","newEntries","isEmpty","bodyBRect","document","body","getBoundingClientRect","height","y","$el","offsetHeight","innerHeight","pageYOffset","_defineProperty","$t","specialJsonName","ja","languages","langCodeToJsonName","langCodeToCldrName","ensureFinalFallback","codes","codeList","allowArrayLike","it","Symbol","iterator","minLen","_arrayLikeToArray","constructor","test","_unsupportedIterableToArray","F","_e","TypeError","normalCompletion","didErr","step","_e2","arr","len","arr2","_setLanguage","loadLanguageFile","en","require","setLanguage","i18n","language","_languages","first","rest","lang","_messages","_toArray","locale","_isEqual","fallbackLocale","messages","sent","setLocaleMessage","t0","finish","_x2","EventTarget","EventTargetPolyfill","settingsModalState","settingsModalLoadedUser","settingsModalLoadedAdmin","settingsModalTargetTab","settingsModalMode","settings","currentSaveStateNotice","noticeClearTimeout","notificationPermission","browserSupport","cssFilter","CSS","supports","layoutType","globalNotices","layoutHeight","lastTimeline","mutations","settingsSaved","success","errorData","setNotificationPermission","permission","setLayoutType","closeSettingsModal","togglePeekSettingsModal","openSettingsModal","setSettingsModalTargetTab","pushGlobalNotice","notice","removeGlobalNotice","setLayoutHeight","setLayoutWidth","layoutWidth","setLastTimeline","actions","setPageTitle","rootState","option","title","instance","commit","_ref7","_ref8","clearSettingsModalTargetTab","_ref9","openSettingsModalTab","_ref10","_ref11","_ref12","messageKey","_ref12$messageArgs","messageArgs","_ref12$level","_ref12$timeout","newNotice","_ref13","_ref14","_ref15","rootGetters","width","normalOrMobile","mergedConfig","thirdColumnMode","currentUser","_ref16","SORTED_EMOJI_GROUP_IDS","REGIONAL_INDICATORS","start","A","codePointAt","res","end","letter","fromCodePoint","displayTextI18n","args","loadAnnotations","injectAnnotations","annotations","availableLangs","reduce","acc","cur","registrationOpen","server","textlimit","themeData","vapidPublicKey","alwaysShowSubjectInput","defaultAvatar","defaultBanner","background","collapseMessageWithSubject","useAtIcon","mentionLinkDisplay","mentionLinkShowTooltip","mentionLinkShowAvatar","mentionLinkFadeDomain","mentionLinkShowYous","mentionLinkBoldenYou","hideFilteredStatuses","hideMutedPosts","hideMutedThreads","hideWordFilteredPosts","hidePostStats","hideBotIndication","hideSitename","hideUserStats","muteBotStatuses","modalOnRepeat","modalOnUnfollow","modalOnBlock","modalOnMute","modalOnDelete","modalOnLogout","modalOnApproveFollow","modalOnDenyFollow","modalOnRemoveUserFromFollowers","loginMethod","logo","logoMargin","logoMask","logoLeft","disableUpdateNotification","minimalScopesMode","nsfwCensorImage","postContentType","redirectRootLogin","redirectRootNoLogin","scopeCopy","showFeaturesPanel","showInstanceSpecificPanel","sidebarRight","subjectLineBehavior","theme","virtualScrolling","sensitiveByDefault","conversationDisplay","conversationTreeAdvanced","conversationOtherRepliesButton","conversationTreeFadeAncestors","maxDepthInThread","autocompleteSelect","customEmoji","customEmojiFetched","emojiFetched","unicodeEmojiAnnotations","pleromaBackend","postFormats","restrictedNicknames","safeDM","knownDomains","birthdayRequired","birthdayMinAge","shoutAvailable","pleromaChatMessagesAvailable","pleromaCustomEmojiReactionsAvailable","gopherAvailable","mediaProxyAvailable","suggestionsEnabled","suggestionsWeb","quotingAvailable","instanceSpecificPanelContent","tos","backendVersion","frontendVersion","pollsAvailable","pollLimits","max_options","max_option_chars","min_expiration","max_expiration","setInstanceOption","setKnownDomains","domains","setUnicodeEmojiAnnotations","getters","instanceDefaultConfig","instanceDefaultProperties","groupedCustomEmojis","packs","tags","packName","packsOf","forEach","packId","standardEmojiList","groupId","standardEmojiGroupList","instanceDomain","URL","hostname","remoteInteractionLink","endsWith","statusId","nickname","getStaticEmoji","slug","groups","_groups$symbols","symbols","console","warn","loadUnicodeEmojiData","langList","all","_callee2","_context2","getCustomEmoji","_callee3","caseInsensitiveStrCmp","noPackLast","byPackThenByName","_context3","ok","json","assign","la","lb","aNull","bNull","packOf","packOfA","packOfB","image_url","setTheme","themeName","getPreset","config","customTheme","themeSource","source","themeEngineVersion","CURRENT_VERSION","applyTheme","fetchEmoji","getKnownDomains","_ref17","_callee4","_context4","apiService","credentials","emptyTl","userId","statuses","statusesObject","faves","visibleStatuses","visibleStatusesObject","newStatusCount","maxId","minId","minVisibleId","followers","friends","flushMarker","emptyNotifications","desktopNotificationSilence","Number","POSITIVE_INFINITY","idStore","defaultState","allStatuses","allStatusesObject","conversationsObject","notifications","favorites","timelines","mentions","public","media","publicAndExternal","dms","bookmarks","mergeOrAdd","obj","oldItem","_merge","_omitBy","attachments","splice","new","status","deleted","prepareStatus","sortById","seqA","seqB","isSeqA","isNaN","isSeqB","sortTimeline","timeline","_last","addStatusToGlobalStorage","conversationId","statusnet_conversation_id","updateNotificationsMinMaxId","notification","addNewStatuses","_ref2$showImmediately","showImmediately","_ref2$user","_ref2$noIdUpdate","noIdUpdate","_ref2$pagination","pagination","_isArray","timelineObject","minNew","_minBy","maxNew","_maxBy","newer","older","addStatus","resultForCurrentTimeline","addToTimeline","_find","visibility","quote","processors","edit","retweet","retweetedStatus","retweeted_status","favorite","add","counter","in_reply_to_status_id","favorited","fave_num","favoriteStatus","deletion","uri","_remove","action","removeStatusFromGlobalStorage","follow","unknown","log","_each","addNewNotifications","newNotificationSideEffects","visibleNotificationTypes","isValidNotification","isStatusNotification","report","hasOwnProperty","seen","removeStatus","_first","showNewStatuses","oldTimeline","_slice","resetStatuses","emptyState","clearTimeline","_ref8$excludeUserId","excludeUserId","clearNotifications","setFavorited","newStatus","setFavoritedConfirm","_findIndex","favoritedBy","setMutedStatus","thread_muted","setRetweeted","repeated","repeat_num","setRetweetedConfirm","rebloggedBy","setBookmarked","bookmarked","setBookmarkedConfirm","setDeleted","setManyDeleted","condition","setLoading","setNsfw","nsfw","setNotificationsLoading","_ref18","setNotificationsSilence","_ref19","markNotificationsAsSeen","markSingleNotificationAsSeen","_ref20","dismissNotification","_ref21","dismissNotifications","_ref22","finder","updateNotification","_ref23","updater","queueFlush","_ref24","queueFlushAll","addRepeats","_ref25","rebloggedByUsers","find","_ref26","addFavs","_ref27","favoritedByUsers","_ref28","addEmojiReactionsBy","_ref29","emojiReactions","emoji_reactions","addOwnReaction","_ref30","reactionIndex","reaction","count","accounts","newReaction","me","removeOwnReaction","_ref31","r","updateStatusWithPoll","_ref32","poll","setVirtualHeight","_ref33","virtualHeight","_ref34","_ref35","_ref35$showImmediatel","_ref35$timeline","_ref35$noIdUpdate","_ref36","maybeShowNotification","_ref37","_ref38","_ref39","_ref40","fetchStatus","_ref41","api","backendInteractor","fetchStatusSource","_ref42","fetchStatusHistory","_ref43","deleteStatus","_ref44","message","deleteStatusById","_ref45","markStatusesAsDeleted","_ref46","_ref47","unfavorite","_ref48","fetchPinnedStatuses","_ref49","pinStatus","_ref50","pinOwnStatus","unpinStatus","_ref51","unpinOwnStatus","muteConversation","_ref52","unmuteConversation","_ref53","_ref54","unretweet","_ref55","bookmark","_ref56","bookmarkStatus","unbookmark","_ref57","unbookmarkStatus","_ref58","_ref59","_ref60","_ref61","_ref62","_ref63","single","dismissNotificationLocal","_ref64","_ref65","_ref66","_ref67","_ref68","_ref69","fetchFavsAndRepeats","_ref70","fetchFavoritedByUsers","fetchRebloggedByUsers","_ref71","_ref72","reactWithEmoji","_ref73","_ref74","unreactWithEmoji","_ref75","_ref76","fetchEmojiReactionsBy","_ref77","fetchEmojiReactions","fetchFavs","_ref78","fetchRepeats","_ref79","search","_ref80","q","limit","offset","following","search2","u","_ref81","_ref82","setLists","allLists","setList","listId","allListsObject","accountIds","entry","setListAccounts","addListAccount","accountId","removeListAccount","set","deleteList","lists","createList","fetchList","getList","fetchListAccounts","getListAccounts","updateList","saved","added","removed","addAccountsToList","removeAccountsFromList","findListTitle","findListAccounts","fetchAndUpdate","_ref2$timeline","_ref2$older","_ref2$userId","_ref2$listId","_ref2$tag","until","since","timelineData","_camelCase","_getters$mergedConfig","replyVisibility","loggedIn","withMuted","numStatusesBeforeFetch","response","errors","statusText","ccTimeline","update","timelineFetcher","startFetching","_ref3$timeline","_ref3$userId","_ref3$listId","_ref3$tag","promiseInterval","boundFetchAndUpdate","requests","listsFetcher","startFetchingTimeline","_ref$userId","_ref$listId","fetchTimeline","startFetchingNotifications","notificationsFetcher","fetchNotifications","startFetchingFollowRequests","followRequestFetcher","startFetchingLists","startUserSocket","getMastodonSocketURI","stream","ProcessedWS","func","verifyCredentials","windowWidth","innerWidth","documentElement","clientWidth","windowHeight","clientHeight","REDIRECT_URI","location","origin","getOrCreateApp","clientId","clientSecret","form","FormData","append","___pleromafe_commit_hash","Date","toISOString","method","app","client_id","client_secret","getClientToken","oauth","login","response_type","redirect_uri","scope","dataString","_reduce","encoded","encodeURIComponent","getToken","getTokenWithCredentials","username","password","verifyOTPCode","mfaToken","verifyRecoveryCode","revokeToken","token","isPushSupported","navigator","getOrCreateServiceWorker","runtime","deleteSubscriptionFromBackEnd","headers","Authorization","mergeArrayLength","oldValue","newValue","_mergeWith","blockUser","relationship","unblockUser","muteUser","_typeof","expiresIn","predictedRelationship","relationships","muting","unmuteUser","muteDomain","domain","unmuteDomain","tagUser","usersObject","newTags","untagUser","updateRight","right","newRights","rights","updateActivationStatus","deactivated","setCurrentUser","lastLoginName","clearCurrentUser","beginLogin","loggingIn","endLogin","saveFriendIds","friendIds","_uniq","_concat","saveFollowerIds","followerIds","clearFriends","clearFollowers","addNewUsers","usersByNameObject","updateUserRelationship","updateUserInLists","inLists","saveBlockIds","blockIds","addBlockId","blockId","indexOf","setBlockIdsMaxId","blockIdsMaxId","saveMuteIds","muteIds","setMuteIdsMaxId","muteIdsMaxId","addMuteId","muteId","saveDomainMutes","domainMutes","addDomainMute","removeDomainMute","setPinnedToUser","pinnedStatusIds","pinned","setUserForStatus","setUserForNotification","from_profile","setColor","highlighted","highlight","signUpPending","signUpErrors","signUpSuccess","signUpFailure","findUser","findUserByName","findUserByUrl","fetchUserIfMissing","fetchUser","fetchUserByName","fetchUserRelationship","fetchUserInLists","fetchBlocks","reset","blocks","_map","removeUserFromFollowers","blockUsers","unblockUsers","editUserNote","comment","fetchMutes","mutes","hideReblogs","followUser","reblogs","showReblogs","muteUsers","unmuteUsers","fetchDomainMutes","muteDomains","unmuteDomains","fetchFriends","fetchFollowers","subscribeUser","unsubscribeUser","toggleActivationStatus","activateUser","deactivateUser","is_active","registerPushNotifications","isEnabled","notificationVisibility","registration","base64String","base64","rawData","subscribeOptions","userVisibleOnly","applicationServerKey","repeat","atob","Uint8Array","charCodeAt","pushManager","subscribe","subscribePush","subscription","JSON","stringify","alerts","follows","favourite","likes","mention","reblog","repeats","move","moves","responseData","sendSubscriptionToBackEnd","webPushNotifications","unregisterPushNotifications","getSubscription","subscribtion","unsubscribe","unsubscribePush","unregister","retweetedUsers","_compact","targetUsers","notificationIds","notificationsObject","relevantNotifications","searchUsers","signUp","userInfo","register","params","access_token","getCaptcha","logout","_store$rootState","oauthApi","userToken","backendInteractorService","loginUser","accessToken","Notification","requestPermission","locked","useStreamingApi","latest","maybeShowChatNotification","chat","lastMessage","chats","currentChatId","hidden","account_id","opts","account","profile_image_url","attachment","preview_url","showDesktopNotification","retryMultiplier","fetchers","socket","mastoUserSocket","mastoUserSocketStatus","followRequests","followRequestCount","setBackendInteractor","addFetcher","fetcherName","fetcher","removeFetcher","setWsToken","wsToken","setSocket","setFollowRequests","setMastoUserSocketStatus","incrementRetryMultiplier","resetRetryMultiplier","enableMastoSockets","initial","WebSocket","CLOSED","CLOSING","getState","WSConnectionStatus","disableMastoSockets","startMastoUserSocket","detail","chatId","chatUpdate","closeEvent","ignoreCodes","debug","stopMastoUserSocket","close","_ref7$timeline","_ref7$tag","_ref7$userId","_ref7$listId","stopFetchingTimeline","stopFetchingNotifications","_extends","_objectDestructuringEmpty","stopFetchingFollowRequests","removeFollowRequest","request","stopFetchingLists","initializeSocket","Socket","connect","disconnectFromSocket","disconnect","defaultApi","path","_set","updateProfile","notificationsApi","updateNotificationSettings","settingsMap","defaultScope","defaultNSFW","stripRichContent","get","acceptChatMessages","allowFollowingMove","discoverable","hideFavorites","hideFollowers","hideFollows","hideFollowersCount","hideFollowsCount","webPushHideContents","blockNotificationsFromStrangers","profileConfig","confirmProfileOption","wipeProfileOption","wipeAllProfileOptions","_value$get","_get","_original","setProfileOption","_map$set","_map$api","faTimes","Modal","NEW_USER_DATE","COMMAND_TRIM_FLAGS_AND_RESET","dirty","flagStorage","updateCounter","prefsStorage","_journal","simple","dontShowUpdateNotifs","collapseNav","collections","pinnedNavItems","raw","cache","newUserFlags","_moveItemInArray","movement","oldIndex","newIndex","newArray","_clamp","_wrapData","userName","_user","_timestamp","now","_version","_checkValidity","_verifyPrefs","_mergeJournal","_len","journals","_key","allJournals","_flatten","j","grouped","_groupBy","trimmedGrouped","journal","timestamp","remainder","lastRemoveIndex","_findLastIndex","operation","_uniqWith","_takeRight","clearServerSideStorage","userData","_cloneDeep","setServerSideStorage","live","storage","fqn","_getRecentData2","recent","stale","needUpload","cacheValid","liveValid","_getRecentData","_PLEROMA_HOTPATCH","reverseMigrations","to","_doMigrations","needsUpload","userNew","created_at","flagsTemplate","_recent","recentData","_excluded2","staleData","_excluded3","totalFlags","totalPrefs","allFlagKeys","toRaw","_getAllFlags","flag","recentFlag","staleFlag","_mergeFlags","recentJournal","staleJournal","resultOutput","totalJournal","command","newSet","_args","_mergePrefs","knownKeys","knownKeysSet","_resetFlags","min","setFlag","setPreference","addCollectionPreference","collection","removeCollectionPreference","reorderCollectionPreference","newCollection","updateCache","pushServerSideStorage","_ref16$force","force","needPush","pleroma_settings_store","frontends","loaded","needsReboot","modifiedPaths","descriptions","draft","dbConfigEnabled","adminSettingsStorage","setInstanceAdminNoDbConfig","setAvailableFrontends","installedRefs","installed_refs","refs","ref","updateAdminSettings","updateAdminDescriptions","updateAdminDraft","_path","parent","resetAdminDraft","loadFrontendsStuff","fetchAvailableFrontends","loadAdminStuff","fetchInstanceDBConfig","backendDbConfig","errorJson","fetchInstanceConfigDescriptions","backendDescriptions","setInstanceAdminSettings","configs","c","group","db","x","convert","tuple","setInstanceAdminDescriptions","description","_ref11$key","newPath","d","pushAdminDraft","changed","lv1data","eConfig","eDraft","_differenceWith","pushInstanceDBConfig","payload","pushAdminSetting","split","clone","resetAdminSetting","_path$split","_path$split2","subkey","delete","subkeys","channel","joined","setChannel","addMessage","setMessages","setJoined","initializeShout","joinPush","receive","onClose","onError","on","msg","appToken","setClientData","setAppToken","setToken","clearToken","getUserToken","PASSWORD_STRATEGY","TOKEN_STRATEGY","TOTP_STRATEGY","RECOVERY_STRATEGY","resetState","strategy","initStrategy","namespaced","requiredPassword","requiredToken","requiredTOTP","requiredRecovery","setInitialStrategy","requirePassword","requireToken","requireMFA","requireRecovery","requireTOTP","abortMFA","root","supportedTypes","mediaViewer","currentIndex","activated","setMedia","setCurrentMedia","fileTypeService","mimetype","current","closeMediaViewer","tokens","fetchTokens","fetchOAuthTokens","revokeOAuthToken","swapTokens","reports","reportModal","preTickedIds","openUserReportingModal","closeUserReportingModal","setReportState","reportsState","addReport","_ref4$statusIds","statusIds","preTickedStatuses","oldState","trackedPolls","pollsObject","mergeOrAddPoll","existingPoll","expired","parse","expires_at","trackPoll","pollId","currentValue","untrackPoll","updateTrackedPoll","fetchPoll","polls","votePoll","choices","vote","modalActivated","openPostStatusModal","closePostStatusModal","resetPostStatusModal","openEditStatusModal","closeEditStatusModal","openStatusHistoryModal","closeStatusHistoryModal","ChatService","newMessages","_ref$updateMaxId","updateMaxId","_loop","chat_id","fakeId","fakeMessage","idIndex","pending","idempotency_key","idempotencyKeyIndex","isConfirmation","lastSeenMessageId","newMessageCount","_ret","empty","getView","currentMessageChainId","_orderBy","firstMessage","previousMessage","date","setHours","getTime","afterDate","nextMessage","isTail","object","messageChainId","_uniqueId","isHead","deleteMessage","messageId","m","cullOlderMessages","maxIndex","minIndex","_sortBy","_step2","_iterator2","resetNewMessageCount","clear","failedMessageIds","handleMessageError","isRetry","lastPersistedMessage","oldId","chatList","chatListFetcher","openedChats","reactive","openedChatMessageServices","lastReadMessageId","getChatById","currentChat","currentChatMessageService","findOpenedChatByRecipientId","recipientId","sortedChatList","unreadChatCount","_sumBy","startFetchingChats","stopFetchingChats","fetchChats","addNewChats","newChatMessageSideEffects","updateChat","startFetchingCurrentChat","setCurrentChatFetcher","addOpenedChat","parseChat","addChatMessages","resetChatNewMessageCount","clearCurrentChat","readChat","lastReadId","isNewMessage","deleteChatMessage","resetChats","clearOpenedChats","setChatListFetcher","prevFetcher","_dispatch","chatService","setCurrentChatId","updatedChat","unread","updated_at","_rootGetters","deleteChat","conversation","last_status","setChatsLoading","chatMessageService","parseChatMessage","_value","announcements","supportsAnnouncements","fetchAnnouncementsTimer","setAnnouncements","setAnnouncementRead","read","setFetchAnnouncementsTimer","timer","setSupportsAnnouncements","unreadAnnouncementCount","_getters","announcement","inactive","fetchAnnouncements","isAdmin","privileges","getAnnouncements","visible","visibleObject","getWithinVisible","adminFetchAnnouncements","visibleAnnouncement","statusCode","markAnnouncementAsRead","dismissAnnouncement","startFetchingAnnouncements","interval","setInterval","stopFetchingAnnouncements","clearInterval","postAnnouncement","startsAt","endsAt","allDay","editAnnouncement","deleteAnnouncement","defaultReducer","paths","substate","saveImmedeatelyActions","defaultStorage","localforage","createPersistedState","_ref$key","_ref$paths","_ref$getState","getItem","_ref$setState","setState","setItem","_ref$reducer","reducer","_ref$storage","_ref$subscriber","subscriber","handler","savedState","usersState","replaceState","merge","mutation","webPushNotification","isUserMutation","isVapidMutation","isPermMutation","isUserConfigMutation","isVisibilityMutation","for","isPasswordAuth","isTokenAuth","mapState","mapGetters","mapMutations","mapActions","submit","submitToken","submitPassword","_this$oauth","identifier","passwordResetRequested","focusOnPasswordInput","clearError","passwordInput","focus","setSelectionRange","_hoisted_2","_toDisplayString","_hoisted_3","onSubmit","_Fragment","_hoisted_4","_hoisted_5","$event","placeholder","_hoisted_7","_hoisted_8","_hoisted_10","_component_router_link","_hoisted_11","_hoisted_12","_hoisted_13","_createBlock","_hoisted_14","_hoisted_15","_hoisted_16","_component_FAIcon","mfa","authSettings","mfa_token","mfaApi","_hoisted_6","_hoisted_9","size","h","resolveComponent","authForm","MFARecoveryForm","MFATOTPForm","LoginForm","signedIn","AuthForm","PostStatusForm","UserCard","_component_UserCard","rounded","_component_PostStatusForm","_component_auth_form","USERNAME_ROUTES","TIMELINES","home","route","criteria","anon","twkn","routeObject","tab","ROOT_ITEMS","interactions","badgeGetter","friendRequests","about","routeTo","anonRoute","custom","_renderSlot","_normalizeProps","_guardReactiveProps","faThumbtack","OptionalRouterLink","isPinned","pinnedItems","togglePin","serverSideStorage","_component_OptionalRouterLink","ass","navigate","$attrs","_resolveDynamicComponent","iconLetter","labelRaw","showPin","_normalizeClass","transform","filterNavigation","hasChats","hasAnnouncements","isFederating","isPrivate","getListEntries","ListsMenuContent","NavigationEntry","privateMode","federating","_renderList","_component_NavigationEntry","faUsers","faGlobe","faBookmark","faEnvelope","faComments","faBell","faInfoCircle","faStream","faList","getRouteTo","pinnedList","faChevronDown","faChevronUp","faBullhorn","NavigationPins","Checkbox","editMode","showTimelines","showLists","timelinesList","rootList","toggleTimelines","toggleLists","toggleEditMode","toggleCollapse","collapsed","timelinesItems","rootItems","forceExpand","_component_NavigationPins","forceEditMode","_component_ListsMenuContent","shout","pleromaChatMessages","gopher","whoToFollow","mediaProxy","uploadlimit","fileSizeFormatService","num","unit","getWhoToFollow","panel","usersToFollow","toFollow","reply","shuffled","_shuffle","img","avatar","acct","externalUser","showWhoToFollow","userProfileLink","generateProfileLink","watch","oldUser","mounted","fill","src","currentMessage","togglePanel","newVal","scrollEl","querySelector","scrollHeight","$nextTick","floating","author","rows","onKeyup","_withKeys","setTransform","scale","PinchZoom","_toHandlers","$listeners","deltaCoord","oldCoord","newCoord","touchEventCoord","touch","touches","screenX","screenY","pointerEventCoord","clientX","clientY","vectorLength","sqrt","perpendicular","dotProduct","v1","v2","project","scalar","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","swipeGesture","direction","onSwipe","threshold","perpendicularTolerance","_startPos","_swiping","beginSwipe","gesture","updateSwipe","delta","towardsDir","perpendicularDir","towardsPerpendicular","SwipeAndClickGesture","swipePreviewCallback","swipeEndCallback","swipeCancelCallback","swipelessClickCallback","_ref$threshold","_ref$perpendicularTol","_ref$disableClickThre","disableClickThreshold","_classCallCheck","nop","_reset","_createClass","_pointerId","_swiped","_preventNextClick","button","pointerId","coord","sign","isPositive","pointerType","handlePointerDown","$gesture","handlePointerMove","handlePointerUp","handlePointerCancel","cancel","handleNativeClick","click","preview","offsets","GestureService","onPointerdown","onPointermove","onPointerup","onPointercancel","faChevronLeft","faChevronRight","VideoAttachment","SwipeClick","Flash","swipeDirection","swipeThreshold","pinchZoomMinScale","pinchZoomScaleResetLimit","showing","currentMedia","canNavigate","getType","swipeDisableClickThreshold","hide","hideIfNotSwiped","comp","swipeClick","goPrev","prevIndex","newMedia","goNext","nextIndex","onImageLoaded","handleSwipePreview","pinchZoom","handleSwipeEnd","handleKeyupEvent","keyCode","handleKeydownEvent","_component_Modal","onBackdropClicked","_component_SwipeClick","onPreviewRequested","onSwipeFinished","onSwipelessClicked","_component_PinchZoom","selector","alt","onLoad","_component_VideoAttachment","controls","_component_Flash","$tc","total","spin","faSignInAlt","faSignOutAlt","faHome","faUserPlus","faSearch","faTachometerAlt","faCog","faCompass","closed","closeGesture","toggleDrawer","unseenNotifications","unseenNotificationsFromStore","unseenNotificationsCount","sitename","timelinesRoute","doLogout","touchStart","touchMove","openAdminModal","onTouchstart","onTouchmove","style","role","faPen","HIDDEN_FOR_PAGES","scrollingDown","inputActive","oldScrollPos","amountScrolled","autohideFloatingPostButton","activateFloatingPostButtonAutohide","handleOSK","deactivateFloatingPostButtonAutohide","isLoggedIn","isHidden","$route","isPersistent","alwaysShowNewPostButton","handleScrollStart","handleScrollEnd","openPostForm","smallPhone","smallPhoneKbOpen","biggerPhoneKbOpen","_debounce","scrollY","leading","trailing","faBars","faArrowUp","faMinus","SideDrawer","Notifications","ConfirmModal","notificationsCloseGesture","notificationsOpen","notificationsAtTop","showingConfirmLogout","closeMobileNotifications","isChat","chatsPinned","shouldConfirmLogout","toggleMobileSidebar","sideDrawer","openMobileNotifications","markRead","notificationsTouchStart","notificationsTouchMove","scrollToTop","scrollTo","scrollMobileNotificationsToTop","mobileNotifications","showConfirmLogout","hideConfirmLogout","onScroll","_ref$target","fetchOlderNotifications","_component_FALayers","_component_SideDrawer","_Teleport","_component_confirm_modal","onAccepted","onCancelled","searchTerm","searchInput","toggleHidden","SearchBar","searchBarHidden","supportsMask","enableMask","logoStyle","logoMaskStyle","logoBgStyle","margin","opacity","onSearchBarToggled","_normalizeStyle","_component_search_bar","onToggled","Status","List","UserLink","forward","statusIdsToReport","processing","isOpen","remoteInstance","is_local","closeModal","reportUser","isChecked","toggleStatus","checked","resize","Element","_component_i18n_t","keypath","_component_UserLink","onInput","_component_Checkbox","_component_List","items","_withCtx","_component_Status","focused","statusoid","resettingForm","editStatus","isFormVisible","oldVal","val","doEditStatus","spoilerText","sensitive","contentType","statusPosterService","onPosted","postStatus","resetAndClose","statusHistory","historyCount","history","newStatusId","resetHistory","_component_status","notices","closeNotice","UserPanel","NavPanel","defineAsyncComponent","InstanceSpecificPanel","FeaturesPanel","WhoToFollowPanel","ShoutPanel","MediaModal","MobilePostStatusButton","MobileNav","DesktopNav","SettingsModal","UpdateNotification","UserReportingModal","PostStatusModal","EditStatusModal","StatusHistoryModal","GlobalNoticeList","mobileActivePanel","interfaceLanguage","updateMobileState","reverseLayout","noSticky","newPostButtonShown","navClasses","navbarColumnStretch","userBackground","background_image","instanceBackground","hideInstanceWallpaper","bgStyle","hideISP","isChats","isListEdit","editingAvailable","shoutboxPosition","hideShoutbox","_this$$store$getters$","reverseSetting","disableStickyHeaders","showScrollbars","_component_MobileNav","_component_DesktopNav","_component_Notifications","_component_user_panel","_component_nav_panel","_component_instance_specific_panel","_component_features_panel","_component_who_to_follow_panel","_component_router_view","_component_MediaModal","_component_shout_panel","_component_MobilePostStatusButton","_component_UserReportingModal","_component_PostStatusModal","_component_EditStatusModal","_component_StatusHistoryModal","_component_SettingsModal","_component_UpdateNotification","_component_GlobalNoticeList","faAngleDoubleDown","faAngleDoubleRight","depth","inProfile","collapsable","isExpanded","pinnedStatusIdsObject","profileUserId","getReplies","setHighlight","toggleExpanded","toggleThreadDisplay","threadDisplayStatus","showThreadRecursively","totalReplyCount","totalReplyDepth","statusContentProperties","setStatusContentProperty","toggleStatusContentProperty","dive","suspendable","selfSuspendable","statusComponent","childComponent","reverseLookupTable","table","currentReplies","statusById","threadShowing","currentProp","collapseThread","showThread","showAllSubthreads","toggleCurrentProp","setCurrentProp","expandable","replies","showingTall","expandingSubject","showingLongSubject","replying","mediaPlaying","onGoto","onToggleExpanded","replyStatus","_component_thread_tree","numStatus","faFilter","faFont","faWrench","Popover","setReplyVisibility","openTab","replyVisibilitySelf","replyVisibilityFollowing","replyVisibilityAll","hideMedia","hideAttachments","hideAttachmentsInConv","_component_Popover","trigger","faFolderTree","setConversationDisplay","autoUpdate","streaming","collapseWithSubjects","showUserAvatars","faAngleDoubleLeft","idA","idB","expanded","threadDisplayStatusObject","statusContentPropertiesObject","inlineDivePosition","isPage","fetchConversation","maxDepthToShowByDefault","maxDepth","streamingEnabled","displayStyle","isTreeView","isLinearView","treeViewIsSimple","shouldFadeAncestors","otherRepliesButtonPosition","showOtherRepliesButtonBelowStatus","showOtherRepliesButtonInsideStatus","prop","hideStatus","virtualHidden","originalStatusId","getConversationId","_clone","statusIndex","_filter","sortAndFilterConversation","statusMap","threadTree","linearized","walk","forest","topLevel","processed","replyIds","sizes","subTreeSizeFor","cid","depths","subTreeDepthFor","_this5","tl","otherTopLevelCount","showingTopLevel","canDive","diveRoot","parentOf","diveDepth","diveMode","shouldShowAllConversationButton","shouldShowAncestors","ancestorsOf","irid","hiddenStyle","_this6","_this7","def","isReplying","_this8","maybeHighlight","ThreadTree","QuickFilterSettings","QuickViewSettings","newConversationId","oldConversationId","resetDisplayState","_this9","ancestors","descendants","getHighlight","setThreadDisplay","nextStatus","setThreadDisplayRecursively","_this10","leastVisibleAncestor","diveIntoStatus","preventScroll","tryScrollTo","diveToTopLevel","topLevelAncestorOrSelfId","undive","_this11","goToCurrent","parentId","parentOrSelf","_component_QuickFilterSettings","_component_QuickViewSettings","numReplies","useListsMenu","openMenu","blockOpen","stopPropagation","timelineName","i18nkey","onShow","faCirclePlus","faCheck","Timeline","showScrollTop","paused","unfocused","virtualScrollIndex","blockingClicks","Conversation","TimelineMenu","filteredVisibleStatuses","filteredPinnedStatusIds","showLoadButton","loadButtonString","mobileLoadButtonString","rootClasses","embedded","header","footer","_keyBy","statusesToDisplay","amount","statusesPerSide","ceil","nonPinnedIndex","virtualScrollingEnabled","mobileLayout","handleScroll","handleVisibilityChange","handleShortKey","determineVisibleStatuses","top","offsetTop","stopBlockingClicks","blockClicksTemporarily","fetchOlderStatuses","_throttle","cappedScrollIndex","centerOfScreen","approxIndex","floor","virtualScrollIndexY","abs","doc","clientTop","pauseOnUnfocused","_component_TimelineMenu","_component_conversation","footerSlipgate","_component_Timeline","tabModeDict","reactions","allow_following_move","filterMode","canSeeReports","onModeSwitch","TabSwitcher","_component_tab_switcher","UserAvatar","RichContent","UserPopover","htmlTitle","name_html","withAvatar","_component_UserPopover","_component_UserAvatar","_component_RichContent","AvatarList","Timeago","ChatTitle","StatusBody","attachmentInfo","types","file","fileType","messageForStatusContent","messageEmojis","isYou","messagePreview","summary","raw_html","openChat","recipient_id","_component_ChatTitle","_component_Timeago","time","_component_StatusBody","chatNew","BasicUserCard","userIds","availableUsers","goBack","goToChat","addUser","selectedUserIds","removeUser","_component_BasicUserCard","ChatListItem","ChatNew","isNew","cancelNewChat","newChat","_component_ChatNew","onCancel","_component_ChatListItem","compact","displayDate","today","toLocaleDateString","localeService","$i18n","day","month","$options","faEllipsisH","emits","Attachment","StatusContent","Gallery","LinkPreview","ChatMessageDate","createdAt","chatViewItem","toLocaleTimeString","hour","minute","hour12","isCurrentUser","isMessage","hasAttachment","betterShadow","popoverMarginStyle","left","hovered","menuOpened","onHover","bool","isHovered","confirm","hoveredMessageChain","onMouseover","onMouseleave","onMouseenter","placement","_component_StatusContent","_component_ChatMessageDate","getScrollPosition","Chat","ChatMessage","jumpToBottomButtonVisible","hoveredMessageChainId","lastScrollPosition","scrollableContainerHeight","errorLoadingChat","messageRetriers","handleResize","recipient","formPlaceholder","chatViewItems","bottomedOutBeforeUpdate","scrollDown","fetchChat","isFirstFetch","onMessageHover","onFilesDropped","forceRead","_opts$delayed","delayed","_getScrollPosition$of","diff","scrollBy","trunc","options","_options$behavior","behavior","_options$forceRead","isBottomedOut","reachedTop","cullOlderCheck","handleScrollUp","positionBeforeLoading","previousPosition","newPosition","positionAfterLoading","_ref2$isFirstFetch","_ref2$fetchLatest","fetchLatest","fetchOlderMessages","sinceId","chatMessages","positionBeforeUpdate","getOrCreateChat","doStartFetching","handleAttachmentPosting","sendMessage","_this12","idempotencyKey","mediaId","isNormalized","buildFakeMessage","doSendMessage","retriesLeft","_this13","_ref4$retriesLeft","sendChatMessage","pow","_component_ChatMessage","onResize","showingConfirmRemoveFollower","shouldConfirmRemoveUserFromFollowers","showConfirmRemoveUserFromFollowers","hideConfirmRemoveUserFromFollowers","doRemoveUserFromFollowers","toggled","RemoteFollow","FollowButton","RemoveFollowerButton","isMe","_component_basic_user_card","noFollowsYou","followed_by","_component_FollowButton","_component_RemoveFollowerButton","_component_RemoteFollow","faBirthdayCake","FollowerList","withLoadMore","destroy","FriendList","defaultTabKey","footerRef","routeParams","load","stopFetching","isUs","isExternal","followsTabVisible","hide_follows","followersTabVisible","hide_followers","formattedBirthday","browserLocale","birthday","timeZone","year","setFooterRef","el","userNameOrId","loadById","maybeId","maybeName","reason","errorMessage","switchUser","onTabSwitch","linkClicked","parentNode","FollowCard","switcher","selected","viewing","fields_html","field","fields_text","statuses_count","friends_count","_component_FriendList","_component_FollowCard","followers_count","_component_FollowerList","hashtags","currenResultTab","statusesOffset","lastStatusFetchCount","lastQuery","newQuery","searchType","blur","oldLength","_uniqBy","getActiveTab","resultCount","onResultTabSwitch","lastHistoryRecord","hashtag","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","uses","_hoisted_26","setup","v$","useVuelidate","email","fullname","captcha","InterfaceLanguageSwitcher","validations","requiredIf","accountActivationRequired","sameAs","maxValue","birthdayMin","accountApprovalRequired","setCaptcha","bioPlaceholder","replaceNewlines","reasonPlaceholder","minAge","setUTCMilliseconds","setUTCSeconds","setUTCMinutes","setUTCHours","minDate","setTime","DAY","birthdayMinAttr","toJSON","birthdayMinFormatted","isPending","serverValidationErrors","termsOfService","captcha_solution","solution","captcha_token","captcha_answer_data","answer_data","$touch","$invalid","cpt","str","$error","$model","$dirty","bio","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_32","_hoisted_33","_hoisted_34","_component_interface_language_switcher","_hoisted_35","_hoisted_36","_hoisted_38","_hoisted_39","autocomplete","autocorrect","autocapitalize","spellcheck","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_47","_hoisted_48","passwordReset","throttled","mailerEnabled","dismissError","passwordResetApi","showingApproveConfirmDialog","showingDenyConfirmDialog","findFollowRequestNotificationId","notif","notificationsFromStore","showApproveConfirmDialog","hideApproveConfirmDialog","showDenyConfirmDialog","hideDenyConfirmDialog","approveUser","shouldConfirmApprove","doApprove","notifId","denyUser","shouldConfirmDeny","doDeny","FollowRequestCard","_component_FollowRequestCard","_this$$store$state$oa","staffAccounts","groupedStaffAccounts","groupBy","admin","moderator","toInstanceReasonObject","instances","info","federationPolicy","mrfPolicies","quarantineInstances","acceptInstances","rejectInstances","ftlRemovalInstances","mediaNsfwInstances","mediaRemovalInstances","keywordsFtlRemoval","keywordsReject","keywordsReplace","hasInstanceSpecificPolicies","hasKeywordPolicies","TermsOfServicePanel","StaffPanel","MRFTransparencyPanel","policy","keyword","pattern","_component_staff_panel","_component_terms_of_service_panel","_component_MRFTransparencyPanel","redirect","ListsCard","cancelNewList","newList","_component_ListsCard","followingOnly","onChange","ListsNew","ListsUserSearch","PanelLoading","titleDraft","membersUserIds","removedUserIds","searchUserIds","addedUserIds","searchLoading","reallyDelete","membersUsers","toggleRemoveMember","toggleAddFromSearch","isRemoved","isAdded","onSearchLoading","results","onSearchLoadingDone","onSearchResults","updateListTitle","_ctx$$router","back","listTitle","_component_ListsUserSearch","onResults","onLoading","onLoadingDone","_component_PanelLoading","cols","AnnouncementEditor","editing","editedAnnouncement","editError","canEditAnnouncement","isRead","publishedAt","published_at","formatTimeOrDate","starts_at","ends_at","markAsRead","all_day","toLocaleString","enterEditMode","pleroma","raw_content","submitEdit","cancelEdit","Announcement","_component_announcement_editor","_component_rich_content","newAnnouncement","posting","canPostAnnouncement","_component_announcement","validateAuthenticatedRoute","routes","_to","component","PublicAndExternalTimeline","PublicTimeline","FriendsTimeline","beforeEnter","TagTimeline","BookmarkTimeline","ConversationPage","meta","dontScroll","RemoteUserResolver","UserProfile","Interactions","DMs","Registration","PasswordReset","FollowRequests","disableTeleport","OAuthCallback","Search","WhoToFollow","About","AnnouncementsPage","Lists","ListsTimeline","ListsEdit","ChatList","previousNavPaddingRight","previousAppBgWrapperRight","lockerEls","disableBodyScroll","scrollBarGap","reserveScrollBarGap","navEl","getElementById","getComputedStyle","getPropertyValue","paddingRight","appBgWrapperEl","classList","enableBodyScroll","remove","directive","binding","updated","Vue","staticInitialResults","decodeUTF8Base64","TextDecoder","decode","preloadFetch","requestData","getInstanceConfig","max_toot_chars","vapid_public_key","approval_required","metadata","birthday_required","birthday_min_age","getBackendProvidedConfig","pleroma_fe","_x3","getStaticConfig","setSettings","_callee5","apiConfig","staticConfig","overrides","env","copyInstanceOption","_context5","___pleromafe_dev_overrides","___pleromafe_mode","NODE_ENV","staticConfigPreference","_x4","getTOS","_callee6","_context6","_x5","getInstancePanel","_callee7","_context7","_x6","getStickers","_callee9","stickers","_context9","_callee8","resPack","_context8","pack","_x8","localeCompare","_x7","getAppSecret","_callee10","_context10","_x9","resolveStaffAccounts","nicknames","getNodeInfo","_callee11","features","uploadLimits","software","priv","federation","_context11","nodeName","openRegistrations","parseInt","general","banner","fieldsLimits","enabled","web","version","mrf_policies","_x10","setConfig","_callee12","configInfos","_context12","_x11","checkOAuthToken","_callee14","_context14","_callee13","_context13","_x13","_x14","_x12","_callee15","_store$state$config","customThemeSource","router","_context15","FaviconService","applyConfig","createRouter","createWebHistory","scrollBehavior","_from","savedPosition","matched","createApp","App","use","vClickOutside","VBodyScrollLock","VueVirtualScroller","FontAwesomeIcon","FontAwesomeLayers","unwrapInjectedRef","mount","_x15","currentLocale","createI18n","global","persistedStateOptions","storageError","plugins","persistedState","pushNotifications","createStore","modules","interface","interfaceModule","instanceModule","usersModule","statusesModule","listsModule","apiModule","configModule","profileConfigModule","serverSideStorageModule","adminSettings","adminSettingsModule","shoutModule","oauthModule","authFlow","authFlowModule","mediaViewerModule","oauthTokens","oauthTokensModule","reportsModule","pollsModule","postStatusModule","editStatusModule","statusHistoryModule","chatsModule","announcementsModule","strict","afterStoreSetup","process","COMMIT_HASH","DEV_OVERRIDES","expertLevel","colors","padEmoji","maxThumbnails","hideNsfw","preloadImage","loopVideo","loopVideoSilentOnly","emojiReactionsOnTimeline","stopGifs","followRequest","chatMention","muteWords","hideScopeNotice","playVideosInModal","useOneClickNsfw","useContainFit","userPopoverAvatarAction","userPopoverOverlay","sidebarColumnWidth","contentColumnWidth","notifsColumnWidth","emojiReactionsScale","defaultConfig","setOption","color","loadSettings","presentKeys","intersection","setPreset","Cookies","StatusCodeError","captureStackTrace","create","RegistrationError","_Error","_inherits","_super","_assertThisInitialized","errorContents","ap_id","errs","_capitalize","_wrapNativeSuper","ALIASES_URL","TAG_USER_URL","PERMISSION_GROUP_URL","screenName","MASTODON_DISMISS_NOTIFICATION_URL","MASTODON_FAVORITE_URL","MASTODON_UNFAVORITE_URL","MASTODON_RETWEET_URL","MASTODON_UNRETWEET_URL","MASTODON_DELETE_URL","MASTODON_PUBLIC_TIMELINE","MASTODON_STATUS_URL","MASTODON_USER_TIMELINE_URL","MASTODON_LIST_URL","MASTODON_LIST_TIMELINE_URL","MASTODON_LIST_ACCOUNTS_URL","MASTODON_TAG_TIMELINE_URL","MASTODON_MUTE_USER_URL","MASTODON_UNMUTE_USER_URL","MASTODON_SUBSCRIBE_USER","MASTODON_UNSUBSCRIBE_USER","MASTODON_USER_NOTE_URL","MASTODON_BOOKMARK_STATUS_URL","MASTODON_UNBOOKMARK_STATUS_URL","MASTODON_MEDIA_UPLOAD_URL","MASTODON_STATUS_FAVORITEDBY_URL","MASTODON_STATUS_REBLOGGEDBY_URL","MASTODON_PROFILE_UPDATE_URL","MASTODON_PIN_OWN_STATUS","MASTODON_UNPIN_OWN_STATUS","MASTODON_MUTE_CONVERSATION","MASTODON_UNMUTE_CONVERSATION","MASTODON_DOMAIN_BLOCKS_URL","MASTODON_ANNOUNCEMENTS_DISMISS_URL","PLEROMA_EMOJI_REACTIONS_URL","PLEROMA_EMOJI_REACT_URL","PLEROMA_EMOJI_UNREACT_URL","PLEROMA_CHAT_MESSAGES_URL","PLEROMA_CHAT_READ_URL","PLEROMA_DELETE_CHAT_MESSAGE_URL","PLEROMA_BACKUP_URL","PLEROMA_EDIT_ANNOUNCEMENT_URL","PLEROMA_DELETE_ANNOUNCEMENT_URL","PLEROMA_ADMIN_CONFIG_URL","oldfetch","fullUrl","promisedRequest","_ref$headers","Accept","authHeaders","parseUser","_ref24$limit","MASTODON_FOLLOWING_URL","announcementToPayload","_ref109","_ref113","_ref113$args","_ref114","_ref115","MASTODON_STREAMING","MASTODON_STREAMING_EVENTS","PLEROMA_STREAMING_EVENTS","_ref116","_ref116$preprocessor","preprocessor","handleMastoWS","_ref116$id","eventTarget","proxy","original","eventName","eventData","dispatchEvent","CustomEvent","wsEvent","readyState","parsedEvent","parseStatus","parseNotification","freeze","JOINED","ERROR","DISABLED","STARTING","STARTING_INITIAL","_ref50$since","_ref50$until","_ref50$userId","_ref50$listId","_ref50$tag","_ref50$withMuted","_ref50$replyVisibilit","_ref50$includeTypes","includeTypes","isNotifications","queryString","param","parseLinkHeaderPagination","flakeId","urlContext","MASTODON_STATUS_CONTEXT_URL","MASTODON_STATUS_SOURCE_URL","parseSource","originalStatus","exportFriends","more","_ref27$limit","MASTODON_FOLLOWERS_URL","MASTODON_FOLLOW_URL","unfollowUser","MASTODON_UNFOLLOW_URL","MASTODON_BLOCK_USER_URL","MASTODON_UNBLOCK_USER_URL","MASTODON_REMOVE_USER_FROM_FOLLOWERS","_ref59$mediaIds","mediaIds","inReplyToStatusId","quoteId","pollOptions","normalizedPoll","expires_in","multiple","postHeaders","_ref60$mediaIds","putHeaders","uploadMedia","formData","parseAttachment","setMediaDescription","URLSearchParams","with_relationships","_ref83","_ref84","_ref87","_ref88","deleteUser","addRight","deleteRight","agreement","resp","updateProfileImages","_ref5$avatar","_ref5$avatarName","avatarName","_ref5$banner","_ref5$background","importMutes","importBlocks","importFollows","deleteAccount","changeEmail","moveAccount","targetAccount","addAlias","alias","deleteAlias","listAliases","_cacheBooster","changePassword","newPassword","newPasswordConfirmation","settingsMFA","mfaDisableOTP","generateMfaBackupCodes","mfaSetupOTP","mfaConfirmOTP","addBackup","_ref85","listBackups","_ref86","fetchFollowRequests","fetchLists","MASTODON_LISTS_URL","account_ids","MASTODON_APPROVE_USER_URL","MASTODON_DENY_USER_URL","_ref89","_ref90","_ref90$single","_ref105","_ref91","_ref92","_ref93","_ref94","_ref95","_ref96","_ref97","_ref98","status_ids","_ref100","_ref99","fetchKnownDomains","_ref101","_ref102","_ref103","_ref104","_ref117","_ref118","_ref119","_ref119$limit","_ref120","_ref120$mediaId","media_id","_ref121","last_read_id","_ref122","_ref123","MASTODON_USER_IN_LISTS","_ref107","_ref108","_ref110","_ref111","_ref112","_ref106","_ref124","_ref125","_ref126","_ref127","installFrontend","_ref128","propsToNative","_kebabCase","rgb2hex","g","_r","_map2","relativeLuminance","srgb","_srgbToLinear","bit","c2linear","srgbToLinear","getContrastRatio","getContrastRatioLayers","layers","bedrock","alphaBlendLayers","alphaBlend","fg","fga","bg","hex2rgb","hex","mixrgb","rgba2css","rgba","getTextColor","preserve","base","invertLightness","rgb","contrastRatio","getCssColor","Component","isFunction","getComponentOptions","SECOND","MINUTE","HOUR","WEEK","MONTH","YEAR","relativeTime","nowThreshold","round","relativeTimeShort","unitToSeconds","secondsToUnit","desktopNotificationOpts","desktopNotification","bind","output","masto","mastoShort","escape","display_name","name_unescaped","note","description_html","fields","unescape","cover_photo","following_count","bot","settings_store","favicon","chat_token","hide_follows_count","hide_followers_count","is_moderator","is_admin","default_scope","privacy","no_rich_text","show_role","show_birthday","delete_others_notice","muted","blocking","statusnet_blocking","follows_you","follow_request_count","notification_settings","unread_chat_count","parts","unicodeDomain","punycode","screen_name_ui_contains_non_ascii","mime_type","large_thumb_url","spoiler_text","content_type","favourited","favourites_count","reblogged","reblogs_count","edited_at","conversation_id","local","in_reply_to_screen_name","in_reply_to_account_acct","parent_visible","quote_id","quote_url","quote_visible","in_reply_to_id","in_reply_to_user_id","in_reply_to_account_id","replies_count","summary_raw_html","external_url","title_html","is_post_verb","qvitter_delete_notice","activity_type","qvitterStatusType","isNsfw","statusnet_html","summary_html","card","media_attachments","parsedNotice","ntype","is_seen","favorited_status","emoji_url","actor","linkHeader","parsedLinkHeader","parseLinkHeader","max_id","min_id","last_message","favicons","faviconWidth","faviconHeight","isImageLoaded","clearFaviconBadge","complete","naturalHeight","initFaviconService","querySelectorAll","favcanvas","createElement","favimg","Image","crossOrigin","favcontext","getContext","clearRect","drawImage","toDataURL","drawFaviconBadge","badgeColor","fillStyle","beginPath","arc","PI","fileSizeFormat","numArg","units","exponent","toFixed","fileTypeExt","fileMatchesSomeType","specialLanguageCodes","ja_easy","zh_Hant","zh","internalToBrowserLocale","internalToBackendLocale","getLanguageName","languageName","ISO6391","charAt","toLocaleUpperCase","languagesObject","internalToBackendLocaleMulti","visibleTypes","statusNotifications","_includes","muteWordHits","isMutedNotification","notificationObject","prepareNotificationObject","filteredNotificationsFromStore","sortedNotifications","i18nString","notifObj","mastoApiNotificationTypes","readNotifsIds","findOffset","child","_ref$top","_ref$left","ignorePadding","offsetLeft","_findPadding","findPadding","topPadding","leftPadding","offsetParent","position","contains","_findPadding2","topPaddingStr","leftPaddingStr","promiseCall","stopped","promise","random","statusSummary","muteWord","_ref$media","_ref$inReplyToStatusI","_ref$quoteId","_ref$contentType","_ref$preview","_ref$idempotencyKey","_ref2$media","_ref2$contentType","rules","generatePreset","head","styleEl","appendChild","styleSheet","sheet","insertRule","radii","shadows","fonts","configColumns","defaultConfigColumns","columns","getCssShadow","usesDropShadow","inset","shad","spread","alpha","getCssShadowFilter","generateColors","sourceColors","colors2to3","_getColors","getColors","htmlColors","solid","generateRadii","inputRadii","btnRadius","btn","checkbox","avatarAlt","tooltip","chatMessage","generateFonts","family","post","postCode","border","shadow","buttonInsetFakeBorders","inputInsetFakeBorders","hoverGlow","DEFAULT_SHADOWS","topBar","popup","avatarStatus","panelHeader","buttonHover","buttonPressed","generateShadows","hackContextDict","cleanInputShadows","shadowDef","inputShadows","shadows2to3","shadowsAcc","slotName","shadowDefs","slotFirstWord","colorSlotName","mod","newShadow","shadowAcc","computeDynamicColor","variableSlot","composePreset","getThemes","themes","promises","statePositionAcc","_ref48$color","getOpacitySlot","isV1","cRed","cGreen","cBlue","cOrange","LAYERS","undelay","badge","profileTint","popover","selectedMenu","btnPanel","btnTopBar","inputPanel","inputTopBar","alert","alertPanel","chatBg","DEFAULT_OPACITY","faint","underlay","alertPopup","SLOT_INHERITANCE","depends","priority","wallpaper","brightness","layer","accent","faintLink","postFaintLink","profileBg","highlightLightText","textColor","highlightPostLink","highlightFaintText","highlightFaintLink","highlightPostFaintLink","highlightText","highlightLink","highlightIcon","popoverLightText","popoverPostLink","popoverFaintText","popoverFaintLink","popoverPostFaintLink","popoverText","popoverLink","popoverIcon","selectedPost","selectedPostFaintText","variant","selectedPostLightText","selectedPostPostLink","selectedPostFaintLink","selectedPostText","selectedPostLink","selectedPostIcon","selectedMenuLightText","selectedMenuFaintText","selectedMenuFaintLink","selectedMenuText","selectedMenuLink","selectedMenuIcon","selectedMenuPopover","selectedMenuPopoverLightText","selectedMenuPopoverFaintText","selectedMenuPopoverFaintLink","selectedMenuPopoverText","selectedMenuPopoverLink","selectedMenuPopoverIcon","lightText","postLink","postGreentext","postCyantext","copacity","pollText","inheritsOpacity","fgText","fgLink","panelText","panelFaint","panelLink","topBarText","topBarLink","tabText","tabActiveText","btnText","btnPanelText","btnTopBarText","btnPressed","btnPressedText","btnPressedPanel","btnPressedPanelText","btnPressedTopBar","btnPressedTopBarText","btnToggled","btnToggledText","btnToggledPanelText","btnToggledTopBarText","btnDisabled","btnDisabledText","btnDisabledPanelText","btnDisabledTopBarText","inputText","inputPanelText","inputTopbarText","alertError","alertErrorText","alertErrorPanelText","alertWarning","alertWarningText","alertWarningPanelText","alertSuccess","alertSuccessText","alertSuccessPanelText","alertNeutral","alertNeutralText","alertNeutralPanelText","alertPopupError","alertPopupErrorText","alertPopupWarning","alertPopupWarningText","alertPopupSuccess","alertPopupSuccessText","alertPopupNeutral","alertPopupNeutralText","badgeNotification","badgeNotificationText","badgeNeutral","badgeNeutralText","chatMessageIncomingBg","chatMessageIncomingText","chatMessageIncomingLink","chatMessageIncomingBorder","chatMessageOutgoingBg","chatMessageOutgoingText","chatMessageOutgoingLink","chatMessageOutgoingBorder","getLayersArray","getLayers","opacitySlot","currentLayer","getDependencies","inheritance","layerDeps","expandSlotValue","getDeps","findInheritedOpacity","visited","depSlot","dependency","getLayerSlot","findInheritedLayer","SLOT_ORDERED","allKeys","whites","grays","blacks","unprocessed","node","ai","bi","depsA","depsB","topoSort","aV","bV","OPACITIES","defaultValue","affectedSlots","sourceColor","getColor","targetColor","_sourceColor$split$ma","_sourceColor$split$ma2","variable","modifier","parseFloat","sourceOpacity","backgroundColor","deps","isTextColor","outputColor","colorFunc","dep","ownOpacitySlot","opacityOverriden","dependencySlot","dependencyColor","highlightStyle","prefs","solidColor","tintColor","tintColor2","customProps","backgroundImage","backgroundPosition","highlightClass","complicated","faFile","faMusic","faImage","faVideo","faPlayCircle","faStop","faSearchPlus","faTrashAlt","faPencilAlt","faAlignRight","localDescription","nsfwImage","hideNsfwLocal","modalOpen","showHidden","flashLoaded","showDescription","classNames","usePlaceholder","placeholderName","toUpperCase","placeholderIconClass","referrerpolicy","oembed","useModal","modalTypes","videoTag","onEdit","openModal","openModalForce","onRemove","onShiftUp","shiftUp","onShiftDn","shiftDn","stopFlash","flash","closePlayer","setFlashLoaded","toggleDescription","onload","onImageLoad","naturalWidth","hideDescription","onKeydown","_component_StillImage","onPlay","onPause","thumb_url","oembedHTML","onPlayerOpened","onPlayerClosed","slicedUsers","_component_user_link","vm","indeterminateTransitionFix","indeterminate","onTransitionEnd","modelValue","DialogModal","cancelText","confirmText","onAccept","_component_dialog_modal","darkOverlay","addPositionToWords","words","word","previous","splitByWhitespaceBoundary","currentWord","currentChar","pos","wordsWithPosition","toReplace","ariaLive","defualt","currentText","announce","_textAtCaret","faSmileBeam","suggest","enableEmojiPicker","hideEmojiButton","enableStickerPicker","newlineOnCtrlEnter","randomSeed","genRandomSeed","caretEl","caret","blurTimeout","temporarilyHideSuggestions","disableClickOutside","overlayStyle","pickerShown","EmojiPicker","UnicodeDomainIndicator","ScreenReaderNotice","defaultCandidateIndex","preText","postText","showSuggestions","textAtCaret","_this$wordAtCaret","wordAtCaret","Completion","maybeLocalizedEmojiNamesAndKeywords","_emoji$annotations$la","_emoji$annotations$la2","maybeLocalizedEmojiName","_emoji$annotations$la3","onInputScroll","hiddenOverlay","scrollLeft","suggestionListId","suggestionItemId","_this$$refs","hiddenOverlayCaret","suggestorPopover","setAnchorEl","picker","padding","lineHeight","fontFamily","fontSize","wordWrap","whiteSpace","onBlur","onFocus","onPaste","onKeyUp","onKeyDown","onClickInput","onTransition","showPopover","hidePopover","newWord","firstchar","matchedSuggestions","_take","screenReaderNotice","number","triggerShowPicker","showPicker","scrollIntoView","togglePicker","hidePicker","startEmojiLoad","insert","insertion","keepOpen","_ref2$surroundingSpac","surroundingSpace","before","after","isSpaceRegex","spaceBefore","spaceAfter","replaceText","suggestion","cycleBackward","cycleForward","rootRef","scrollerRef","closest","currentScroll","scrollerBottomBorder","rootBottomBorder","targetScroll","scroll","bottom","onPickerShown","onPickerClosed","setCaret","ctrlKey","shiftKey","onStickerUploaded","onStickerUploadFailed","selectionStart","updateStyles","autoCompleteItemLabel","ariaOwns","ariaAutocomplete","ariaExpanded","ariaActivedescendant","_component_screen_reader_notice","_component_EmojiPicker","onEmoji","_component_UnicodeDomainIndicator","at","faBoxOpen","faStickyNote","faSmile","faUser","faPaw","faIceCream","faBus","faBasketballBall","faLightbulb","faCode","faFlag","UNICODE_EMOJI_GROUP_ICON","activities","objects","flags","maybeLocalizedKeywords","nameLocalizer","hideCustomEmoji","inject","activeGroup","showingStickers","groupsScrolledClass","customEmojiTimeout","contentLoaded","groupRefs","emojiRefs","filteredEmojiGroups","StickerPicker","onShowing","setGroupRef","onPopoverShown","onPopoverClosed","startIndex","endIndex","visibleStartIndex","visibleEndIndex","scrolledGroup","emojiItems","headerId","parentElement","getOffset","scrollHeader","headerRef","offsetWidth","headerCont","currentScrollRight","setScroll","setShowStickers","indexInList","scrollToItem","updateScrolledClass","scrollTopMax","toggleStickers","filterByKeyword","keywordLowercase","orderedEmojiList","indices","indexOfKeyword","flat","oldContentLoaded","recalculateItemPerRow","getFilteredEmojiGroups","defaultGroup","allEmojiGroups","_trim","debouncedHandleKeywordChange","allCustomGroups","minItemSize","emojiHeight","emojiWidth","itemPerRow","activeGroupView","stickersAvailable","unpacked","unicodeEmojiGroups","stickerPickerEnabled","_chunk","isFirstRow","isInModal","popoversZLayer","tabindex","_component_still_image","composing","_component_DynamicScroller","onUpdate","onVisible","_component_DynamicScrollerItem","_component_sticker_picker","onUploaded","onUploadFailed","ruffleInstance","getRuffle","RufflePlayer","polyfills","publicPath","script","onerror","onabort","oncancel","faExclamationTriangle","player","openPlayer","RuffleService","ruffle","newest","createPlayer","letterbox","container","fetchRelationship","attempt","requested","requestFollow","showingConfirmUnfollow","shouldConfirmUnfollow","isPressed","labelFollowing","showConfirmUnfollow","hideConfirmUnfollow","unfollow","doUnfollow","requestUnfollow","hidingLong","minimal","grid","audio","attachmentsRemaining","currentRow","attachmentsDimensionalScore","row","tooManyAttachments","editable","onNaturalSizeLoad","rowStyle","itemStyle","getAspectRatio","flex","toggleHidingLong","openGallery","onMedia","rowIndex","attachmentIndex","_component_Attachment","removeAttachment","shiftUpAttachment","shiftDnAttachment","editAttachment","onSetMedia","Select","promptText","controlledLanguage","addLanguage","setLanguageAt","removeLanguageAt","_component_Select","imageLoaded","useImage","censored","hideNsfwConfig","useDescription","newImg","provider_name","getKey","faUpload","uploadCount","uploadReady","uploading","uploadFile","self","filesize","allowedsize","filesizeunit","allowedsizeunit","fileData","decreaseUploadCount","clearFile","multiUpload","files","change","dropFiles","normalButton","acceptTypes","fileInfos","accept","faAt","userScreenName","hasSelection","shouldShowTooltip","handleSelection","getSelection","containsNode","full","userNameFullUi","serverName","userNameFull","highlightType","_highlightStyle","classnames","shouldBoldenYou","isRemote","shouldShowFullUserName","conf","shouldShowAvatar","shouldShowYous","shouldFadeDomain","MentionLink","mentionsComputed","extraMentions","manyMentions","toggleShowMore","_component_MentionLink","provide","noBackground","reportId","generateUserProfileLink","_component_status_content","notes","faStar","faRetweet","faEyeSlash","faSuitcaseRolling","faExpandAlt","faCompressAlt","statusExpanded","unmuted","Report","toggleStatusExpanded","getUser","toggleMute","userClass","userStyle","targetUser","targetUserProfileLink","needMute","botIndicator","_component_Report","filters","toggleNotificationFilter","NotificationFilters","minimalMode","seenToDisplayCount","mainClass","filteredNotifications","unseenCount","unseenCountTitle","noHeading","teleportTarget","wide","mobile","notificationsToDisplay","updateScrollPosition","markAsSeen","seenCount","notifs","_component_NotificationFilters","unseen","_component_notification","boundTo","boundToSelector","popoverClass","removePadding","overlayCenters","overlayCentersSelector","stayOnClick","triggerAttrs","anchorEl","teleport","lockReEntry","styles","oldSize","scrollable","graceTimeout","parentPopover","childrenShown","containerBoundingClientRect","anchorHeight","anchorWidth","anchorScreenBox","anchorStyle","paddingTop","bottomPadding","paddingBottom","rightPadding","paddingLeft","overlayCenter","parentScreenBox","xBounds","yBounds","horizOffset","vertOffset","box","overlayCenterScreenBox","leftInnerOffset","topInnerOffset","leftBorder","rightBorder","topBorder","bottomBorder","translateX","translateY","usingTop","topBoundary","bottomBoundary","yOffset","usingRight","rightBoundary","leftBoundary","xOffset","maxWidth","wasHidden","onChildPopoverState","onClickOutside","onMouseenterContent","onMouseleaveContent","childRef","$parent","$","beforeUnmount","_Transition","onClickContent","faPlus","pollType","expiryAmount","expiryUnit","maxOptions","maxLength","expiryUnits","expiry","convertExpiryFromUnit","minExpirationInCurrentUnit","convertExpiryToUnit","maxExpirationInCurrentUnit","nextOption","element","addOption","deleteOption","updatePollToParent","DateUtils","expiryAmountChange","maxlength","unstyled","faPollH","faBan","pxStringToNumber","MediaUpload","EmojiInput","PollForm","ScopeSelector","updateIdempotencyKey","textarea","replyTo","textLength","autoFocus","_ref$attentions","allAttentions","_reject","attention","buildMentionsString","repliedUser","copyMessageScope","statusParams","subject","mediaDescriptions","statusContentType","statusIsSensitive","statusFiles","statusPoll","statusMediaDescriptions","statusScope","quoting","uploadingFiles","pollFormVisible","showDropIcon","dropStopTimeout","previewLoading","emojiInputShown","userDefaultScope","showAllScopes","emojiUserSuggestor","suggestor","emojiSuggestor","statusLength","spoilerTextLength","statusLengthLimit","hasStatusLengthLimit","charactersLeft","isOverLengthLimit","alwaysShowSubject","safeDMEnabled","disablePolls","disableNotice","pollContentError","showPreview","disablePreview","emptyStatus","uploadFileLimitReached","fileLimit","isEdit","quotable","repliedStatus","deep","statusChanged","autoPreview","clearStatus","mediaUpload","clearPollForm","preserveFocus","previewStatus","_arguments","_postingOptions","replyOrQuoteAttr","postingOptions","optimisticPosting","disableSubmit","submitOnEnter","setAllMediaDescriptions","postHandler","statusPoster","_statusPoster$postSta","debouncePreviewStatus","closePreview","togglePreview","addMediaFile","fileInfo","removeMediaFile","newText","shiftUpMediaFile","shiftDnMediaFile","uploadFailed","errString","templateArgs","startedUploadingFiles","finishedUploadingFiles","paste","clipboardData","fileDrop","dataTransfer","fileDragStop","fileDrag","dropEffect","onEmojiInputInput","formRef","bottomRef","bottomBottomPaddingStr","bottomBottomPadding","bottomPaddingStr","vertPadding","oldHeight","scrollerHeight","heightWithoutPadding","newHeight","maxHeight","bottomBottomBorder","isBottomObstructed","isFormBiggerThanScroller","bottomChangeDelta","totalDelta","showEmojiPicker","changeVis","togglePollForm","setPoll","pollForm","dismissScopeNotice","handleEmojiInputShow","openProfileTab","onDragover","disableLockWarning","disableSubject","_component_EmojiInput","inputProps","emojiPickerPlacement","onShown","onCompositionupdate","disableScopeSelector","disableVisibilitySelector","_component_scope_selector","postFormat","_component_poll_form","onUpdatePoll","_component_media_upload","onUploading","onAllUploaded","animation","onDragleave","onDrop","_component_gallery","disableSensitivityCheckbox","progress","$data","subscribeUrl","serverUrl","protocol","host","faLock","faLockOpen","currentScope","initialScope","showNothing","showPublic","showUnlisted","showPrivate","showDirect","originalScope","shouldShow","css","unlisted","private","direct","showAll","userDefault","onScopeChange","faReply","faStarRegular","animated","filterWord","addReaction","existingReaction","show","showingConfirmDialog","shouldConfirmRepeat","showConfirmDialog","doRetweet","hideConfirmDialog","faBookmarkReg","faShareAlt","faExternalLinkAlt","faHistory","showingDeleteDialog","shouldConfirmDelete","showDeleteStatusConfirmDialog","doDeleteStatus","hideDeleteStatusConfirmDialog","copyLink","clipboard","writeText","statusLink","reportStatus","showStatusHistory","p","canDelete","ownStatus","canPin","canMute","canBookmark","isEdited","_component_ConfirmModal","enter","oldStatus","usersCapped","UserListPopover","tooManyReactions","showMoreString","accountsForEmoji","toggleShowAll","reactedWith","fetchEmojiReactionsByIfMissing","reactWith","unreact","emojiOnClick","counterTriggerAttrs","_component_UserListPopover","faPlusSquare","faEye","camelCase","controlledOrUncontrolledSet","camelized","uncontrolledName","ReplyButton","FavoriteButton","ReactButton","RetweetButton","ExtraButtons","StatusPopover","EmojiReactions","uncontrolledReplying","userExpanded","uncontrolledMediaPlaying","headTailLinks","displayQuote","inQuote","toggle","controlledName","showReasonMutedThread","inConversation","repeaterClass","repeaterStyle","replyProfileLink","isReply","retweeterUser","retweeter","retweeterHtml","retweeterProfileLink","statusFromGlobalRepository","rtBotStatus","botStatus","rtBotIndicator","mentionsLine","writtenSet","attn","hasMentionsLine","reasonsToMute","userIsMuted","shouldNotMute","relationshipReblog","hideMutedUsers","isFocused","replyToName","replySubject","decodedSummary","startsWithRe","combinedFavsAndRepeatsUsers","combinedUsers","tagObj","isSuspendable","inThreadForest","controlledThreadDisplayStatus","visibilityLocalized","hasVisibleQuote","hasInvisibleQuote","quotedStatus","shouldDisplayQuote","visibilityIcon","showError","toggleReplying","gotoOriginal","toggleUserExpanded","addMediaPlaying","removeMediaPlaying","setHeadTailLinks","controlledToggleThreadDisplay","scrollIfHighlighted","highlightId","rect","toggleDisplayQuote","inlineExpanded","isPreview","showPinned","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_component_reply_button","onToggle","simpleTree","_hoisted_31","_component_StatusPopover","flip","_component_MentionsLine","controlledShowingTall","controlledExpandingSubject","controlledShowingLongSubject","controlledToggleShowingTall","controlledToggleExpandingSubject","controlledToggleShowingLongSubject","onMediaplay","onMediapause","onParseReady","_hoisted_40","showOtherRepliesAsButton","_hoisted_41","_hoisted_46","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_component_AvatarList","_component_EmojiReactions","_hoisted_53","_component_retweet_button","_component_favorite_button","_component_ReactButton","_component_extra_buttons","onOnError","onOnSuccess","_hoisted_58","basePoll","expiresAt","showResults","voted","totalVotesCount","votes_count","containerClass","choiceIndices","isDisabled","noChoice","percentageForOption","resultTitle","activateOption","clickedElement","_forEach","optionId","voters_count","faLink","postLength","parseReadyDone","localCollapseSubjectDefault","tallStatus","singleLine","longSubject","mightHideBecauseSubject","mightHideBecauseTall","hideSubjectStatus","hideTallStatus","showingMore","attachmentTypes","handle","toggleShowingTall","toggleExpandingSubject","toggleShowingLongSubject","fullContent","controlledOrUncontrolledToggle","uncontrolledShowingTall","uncontrolledShowingLongSubject","uncontrolledExpandingSubject","statusCard","nsfwClickthrough","attachmentSize","Poll","galleryAttachments","_component_Poll","_component_link_preview","realSrc","appendPx","loadLazy","dataSrc","imageLoadHandler","canvas","imageLoadError","removeAttribute","localeDateString","relativeTimeString","timeString","tc","templateKey","refreshRelativeTimeObject","longFormat","datetime","faRobot","showPlaceholder","imgSrc","FORCE_NSFW","STRIP_MEDIA","FORCE_UNLISTED","DISABLE_REMOTE_SUBSCRIPTION","DISABLE_ANY_SUBSCRIPTION","SANDBOX","QUARANTINE","showDeleteUserDialog","tagsSet","canGrantRole","canChangeActivationState","privileged","canDeleteAccount","canUseTagPolicy","tagPolicyAvailable","hasTag","privilege","toggleTag","toggleRight","deleteUserDialog","isProfile","isTargetUser","setToggled","_component_DialogModal","inListsSet","inList","toggleList","faEllipsisV","showingConfirmBlock","ProgressButton","UserListMenu","showConfirmBlock","hideConfirmBlock","showRepeats","hideRepeats","shouldConfirmBlock","doBlockUser","showing_reblogs","_component_UserListMenu","localNote","frozen","startEditing","cancelEditing","finalizeEditing","faRss","faEdit","followRequestInProgress","showingConfirmMute","muteExpiryAmount","muteExpiryUnit","bordered","isOtherUser","dailyAvg","days","userHighlightType","userHighlightColor","visibleRole","validRole","roleTitle","showModerationMenu","hasNote","supportsNote","shouldConfirmMute","muteExpiryUnits","ModerationTools","AccountActions","UserNote","showConfirmMute","hideConfirmMute","doMuteUser","setProfileView","zoomAvatar","mentionUser","onAvatarClickHandler","onAvatarClick","hideBio","heading","flexible","avatarAction","_component_AccountActions","subscribing","_component_ProgressButton","_component_ModerationTools","hasNoteEditor","_component_UserNote","blocksSuspend","hasAudio","onPlaying","setHasAudio","looping","onPaused","srcElement","webkitAudioDecodedByteCount","mozHasAudio","audioTracks","preload","loop","playsinline","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","O","chunkIds","fn","notFulfilled","Infinity","fulfilled","getter","__esModule","getPrototypeOf","mode","ns","getOwnPropertyNames","definition","defineProperty","enumerable","chunkId","miniCssF","globalThis","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","onScriptComplete","doneFns","removeChild","toStringTag","nmd","installedCssChunks","miniCss","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","createStylesheet","loadStylesheet","installedChunks","installedChunkData","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js b/priv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[5929],{4425:(r,n,e)=>{e.r(n),e.d(n,{default:()=>t});const t={chat:{title:r=>{const{normalize:n}=r;return n(["聊天"])}},exporter:{export:r=>{const{normalize:n}=r;return n(["导出"])},processing:r=>{const{normalize:n}=r;return n(["正在处理,稍后会提示您下载文件"])}},features_panel:{chat:r=>{const{normalize:n}=r;return n(["聊天"])},gopher:r=>{const{normalize:n}=r;return n(["Gopher"])},media_proxy:r=>{const{normalize:n}=r;return n(["媒体代理"])},scope_options:r=>{const{normalize:n}=r;return n(["可见范围设置"])},text_limit:r=>{const{normalize:n}=r;return n(["文字数量限制"])},title:r=>{const{normalize:n}=r;return n(["功能"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])},pleroma_chat_messages:r=>{const{normalize:n}=r;return n(["Pleroma 聊天"])},upload_limit:r=>{const{normalize:n}=r;return n(["上传限制"])},shout:r=>{const{normalize:n}=r;return n(["留言板"])}},finder:{error_fetching_user:r=>{const{normalize:n}=r;return n(["获取用户时发生错误"])},find_user:r=>{const{normalize:n}=r;return n(["寻找用户"])}},general:{apply:r=>{const{normalize:n}=r;return n(["应用"])},submit:r=>{const{normalize:n}=r;return n(["提交"])},more:r=>{const{normalize:n}=r;return n(["更多"])},generic_error:r=>{const{normalize:n}=r;return n(["发生了一个错误"])},optional:r=>{const{normalize:n}=r;return n(["可选"])},show_more:r=>{const{normalize:n}=r;return n(["展开"])},show_less:r=>{const{normalize:n}=r;return n(["收起"])},cancel:r=>{const{normalize:n}=r;return n(["取消"])},disable:r=>{const{normalize:n}=r;return n(["禁用"])},enable:r=>{const{normalize:n}=r;return n(["启用"])},confirm:r=>{const{normalize:n}=r;return n(["确认"])},verify:r=>{const{normalize:n}=r;return n(["验证"])},dismiss:r=>{const{normalize:n}=r;return n(["忽略"])},peek:r=>{const{normalize:n}=r;return n(["预览"])},close:r=>{const{normalize:n}=r;return n(["关闭"])},retry:r=>{const{normalize:n}=r;return n(["重试"])},error_retry:r=>{const{normalize:n}=r;return n(["请重试"])},loading:r=>{const{normalize:n}=r;return n(["载入中…"])},role:{moderator:r=>{const{normalize:n}=r;return n(["监察员"])},admin:r=>{const{normalize:n}=r;return n(["管理员"])}},flash_content:r=>{const{normalize:n}=r;return n(["点击以使用 Ruffle 显示 Flash 内容(实验性,可能无效)。"])},flash_security:r=>{const{normalize:n}=r;return n(["注意这可能有潜在的危险,因为 Flash 内容仍然是任意的代码。"])},flash_fail:r=>{const{normalize:n}=r;return n(["Flash 内容加载失败,请在控制台查看详情。"])},scope_in_timeline:{public:r=>{const{normalize:n}=r;return n(["公开"])},direct:r=>{const{normalize:n}=r;return n(["私讯"])},private:r=>{const{normalize:n}=r;return n(["仅关注者"])},unlisted:r=>{const{normalize:n}=r;return n(["列外"])}},scroll_to_top:r=>{const{normalize:n}=r;return n(["滚动至顶"])},generic_error_message:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["发生一个错误:",e(t(0))])},never_show_again:r=>{const{normalize:n}=r;return n(["不再显示"])},undo:r=>{const{normalize:n}=r;return n(["撤销"])},yes:r=>{const{normalize:n}=r;return n(["是"])},no:r=>{const{normalize:n}=r;return n(["否"])},unpin:r=>{const{normalize:n}=r;return n(["取消固定该项"])},pin:r=>{const{normalize:n}=r;return n(["固定该项"])}},image_cropper:{crop_picture:r=>{const{normalize:n}=r;return n(["裁剪图片"])},save:r=>{const{normalize:n}=r;return n(["保存"])},save_without_cropping:r=>{const{normalize:n}=r;return n(["保存未经裁剪的图片"])},cancel:r=>{const{normalize:n}=r;return n(["取消"])}},importer:{submit:r=>{const{normalize:n}=r;return n(["提交"])},success:r=>{const{normalize:n}=r;return n(["导入成功。"])},error:r=>{const{normalize:n}=r;return n(["导入此文件时出现一个错误。"])}},login:{login:r=>{const{normalize:n}=r;return n(["登录"])},description:r=>{const{normalize:n}=r;return n(["用 OAuth 登录"])},logout:r=>{const{normalize:n}=r;return n(["登出"])},password:r=>{const{normalize:n}=r;return n(["密码"])},placeholder:r=>{const{normalize:n}=r;return n(["例如:lain"])},register:r=>{const{normalize:n}=r;return n(["注册"])},username:r=>{const{normalize:n}=r;return n(["用户名"])},hint:r=>{const{normalize:n}=r;return n(["登录后加入讨论"])},authentication_code:r=>{const{normalize:n}=r;return n(["验证码"])},enter_recovery_code:r=>{const{normalize:n}=r;return n(["输入一个恢复码"])},enter_two_factor_code:r=>{const{normalize:n}=r;return n(["输入一个双重因素验证码"])},recovery_code:r=>{const{normalize:n}=r;return n(["恢复码"])},heading:{totp:r=>{const{normalize:n}=r;return n(["双重因素验证"])},recovery:r=>{const{normalize:n}=r;return n(["双重因素恢复"])}},logout_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要登出"])},logout_confirm_title:r=>{const{normalize:n}=r;return n(["确认登出"])},logout_confirm_accept_button:r=>{const{normalize:n}=r;return n(["登出"])},logout_confirm:r=>{const{normalize:n}=r;return n(["您确定要登出吗?"])}},media_modal:{previous:r=>{const{normalize:n}=r;return n(["往前"])},next:r=>{const{normalize:n}=r;return n(["往后"])},hide:r=>{const{normalize:n}=r;return n(["关闭媒体查看器"])},counter:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("current"))," / ",e(t("total"))])}},nav:{about:r=>{const{normalize:n}=r;return n(["关于"])},back:r=>{const{normalize:n}=r;return n(["后退"])},chat:r=>{const{normalize:n}=r;return n(["本站聊天"])},friend_requests:r=>{const{normalize:n}=r;return n(["关注请求"])},mentions:r=>{const{normalize:n}=r;return n(["提及"])},interactions:r=>{const{normalize:n}=r;return n(["互动"])},dms:r=>{const{normalize:n}=r;return n(["私信"])},public_tl:r=>{const{normalize:n}=r;return n(["公共时间线"])},timeline:r=>{const{normalize:n}=r;return n(["时间线"])},twkn:r=>{const{normalize:n}=r;return n(["已知网络"])},user_search:r=>{const{normalize:n}=r;return n(["用户搜索"])},search:r=>{const{normalize:n}=r;return n(["搜索"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])},preferences:r=>{const{normalize:n}=r;return n(["偏好设置"])},administration:r=>{const{normalize:n}=r;return n(["管理员"])},chats:r=>{const{normalize:n}=r;return n(["聊天"])},timelines:r=>{const{normalize:n}=r;return n(["时间线"])},bookmarks:r=>{const{normalize:n}=r;return n(["书签"])},home_timeline:r=>{const{normalize:n}=r;return n(["主页时间线"])},lists:r=>{const{normalize:n}=r;return n(["列表"])},edit_finish:r=>{const{normalize:n}=r;return n(["完成编辑"])},mobile_notifications:r=>{const{normalize:n}=r;return n(["打开通知(有未读的)"])},mobile_notifications_close:r=>{const{normalize:n}=r;return n(["关闭通知"])},announcements:r=>{const{normalize:n}=r;return n(["公告"])},edit_nav_mobile:r=>{const{normalize:n}=r;return n(["自定义导航栏"])},edit_pinned:r=>{const{normalize:n}=r;return n(["编辑固定的项目"])},mobile_sidebar:r=>{const{normalize:n}=r;return n(["切换移动设备侧栏"])},search_close:r=>{const{normalize:n}=r;return n(["关闭搜索栏"])}},notifications:{broken_favorite:r=>{const{normalize:n}=r;return n(["未知的状态,正在搜索中…"])},favorited_you:r=>{const{normalize:n}=r;return n(["喜欢了你的状态"])},followed_you:r=>{const{normalize:n}=r;return n(["关注了你"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的通知"])},notifications:r=>{const{normalize:n}=r;return n(["通知"])},read:r=>{const{normalize:n}=r;return n(["已阅!"])},repeated_you:r=>{const{normalize:n}=r;return n(["转发了你的状态"])},no_more_notifications:r=>{const{normalize:n}=r;return n(["没有更多的通知"])},reacted_with:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["作出了 ",e(t(0))," 的反应"])},migrated_to:r=>{const{normalize:n}=r;return n(["迁移到了"])},follow_request:r=>{const{normalize:n}=r;return n(["想要关注你"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["取得通知时发生错误:",e(t(0))])},poll_ended:r=>{const{normalize:n}=r;return n(["投票结束了"])},submitted_report:r=>{const{normalize:n}=r;return n(["提交举报"])}},polls:{add_poll:r=>{const{normalize:n}=r;return n(["增加投票"])},add_option:r=>{const{normalize:n}=r;return n(["增加选项"])},option:r=>{const{normalize:n}=r;return n(["选项"])},votes:r=>{const{normalize:n}=r;return n(["投票"])},vote:r=>{const{normalize:n}=r;return n(["投票"])},type:r=>{const{normalize:n}=r;return n(["投票类型"])},single_choice:r=>{const{normalize:n}=r;return n(["单选"])},multiple_choices:r=>{const{normalize:n}=r;return n(["多选"])},expiry:r=>{const{normalize:n}=r;return n(["投票期限"])},expires_in:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["投票于 ",e(t(0))," 后结束"])},expired:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["投票 ",e(t(0))," 前已结束"])},not_enough_options:r=>{const{normalize:n}=r;return n(["投票的选项太少"])},votes_count:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n([e(t("count"))," 票"]),n([e(t("count"))," 票"])])},people_voted_count:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n([e(t("count"))," 人已投票"]),n([e(t("count"))," 人已投票"])])}},stickers:{add_sticker:r=>{const{normalize:n}=r;return n(["添加贴纸"])}},interactions:{favs_repeats:r=>{const{normalize:n}=r;return n(["转发和喜欢"])},follows:r=>{const{normalize:n}=r;return n(["新的关注者"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的互动"])},moves:r=>{const{normalize:n}=r;return n(["用户迁移"])},reports:r=>{const{normalize:n}=r;return n(["举报"])},emoji_reactions:r=>{const{normalize:n}=r;return n(["表情回应"])}},post_status:{new_status:r=>{const{normalize:n}=r;return n(["发布新状态"])},account_not_locked_warning:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["你的帐号没有 ",e(t(0)),"。任何人都可以关注你并浏览你的上锁内容。"])},account_not_locked_warning_link:r=>{const{normalize:n}=r;return n(["上锁"])},attachments_sensitive:r=>{const{normalize:n}=r;return n(["标记附件为敏感内容"])},content_type:{"text/plain":r=>{const{normalize:n}=r;return n(["纯文本"])},"text/html":r=>{const{normalize:n}=r;return n(["HTML"])},"text/markdown":r=>{const{normalize:n}=r;return n(["Markdown"])},"text/bbcode":r=>{const{normalize:n}=r;return n(["BBCode"])}},content_warning:r=>{const{normalize:n}=r;return n(["主题(可选)"])},default:r=>{const{normalize:n}=r;return n(["刚刚抵达上海。"])},direct_warning_to_all:r=>{const{normalize:n}=r;return n(["本条内容只有被提及的用户能够看到。"])},direct_warning_to_first_only:r=>{const{normalize:n}=r;return n(["本条内容只有被在消息开始处提及的用户能够看到。"])},posting:r=>{const{normalize:n}=r;return n(["发送中"])},scope_notice:{public:r=>{const{normalize:n}=r;return n(["本条内容可以被所有人看到"])},private:r=>{const{normalize:n}=r;return n(["关注你的人才能看到本条内容"])},unlisted:r=>{const{normalize:n}=r;return n(["本条内容既不在公共时间线,也不会在所有已知网络上可见"])}},scope:{direct:r=>{const{normalize:n}=r;return n(["私信 - 只发送给被提及的用户"])},private:r=>{const{normalize:n}=r;return n(["仅关注者 - 只有关注了你的人能看到"])},public:r=>{const{normalize:n}=r;return n(["公共 - 发送到公共时间轴"])},unlisted:r=>{const{normalize:n}=r;return n(["不公开 - 不会发送到公共时间轴"])}},preview_empty:r=>{const{normalize:n}=r;return n(["空的"])},preview:r=>{const{normalize:n}=r;return n(["预览"])},media_description:r=>{const{normalize:n}=r;return n(["媒体描述"])},media_description_error:r=>{const{normalize:n}=r;return n(["更新媒体失败,请重试"])},empty_status_error:r=>{const{normalize:n}=r;return n(["不能发布没有内容、没有附件的发文"])},post:r=>{const{normalize:n}=r;return n(["发送"])},edit_remote_warning:r=>{const{normalize:n}=r;return n(["其它远程实例可能不支持编辑并且无法接收您的帖子的最新版本。"])},edit_unsupported_warning:r=>{const{normalize:n}=r;return n(["Pleroma 不支持对提及或投票进行编辑。"])},edit_status:r=>{const{normalize:n}=r;return n(["编辑状态"])},content_type_selection:r=>{const{normalize:n}=r;return n(["发帖格式"])},scope_notice_dismiss:r=>{const{normalize:n}=r;return n(["关闭此提示"])}},registration:{bio:r=>{const{normalize:n}=r;return n(["简介"])},email:r=>{const{normalize:n}=r;return n(["电子邮箱"])},fullname:r=>{const{normalize:n}=r;return n(["显示名称"])},password_confirm:r=>{const{normalize:n}=r;return n(["确认密码"])},registration:r=>{const{normalize:n}=r;return n(["注册"])},token:r=>{const{normalize:n}=r;return n(["邀请码"])},captcha:r=>{const{normalize:n}=r;return n(["CAPTCHA"])},new_captcha:r=>{const{normalize:n}=r;return n(["点击图片获取新的验证码"])},username_placeholder:r=>{const{normalize:n}=r;return n(["例如:lain"])},fullname_placeholder:r=>{const{normalize:n}=r;return n(["例如:岩仓玲音"])},bio_placeholder:r=>{const{normalize:n}=r;return n(["例如:\n你好,我是玲音。\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。"])},validations:{username_required:r=>{const{normalize:n}=r;return n(["不能留空"])},fullname_required:r=>{const{normalize:n}=r;return n(["不能留空"])},email_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_confirmation_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_confirmation_match:r=>{const{normalize:n}=r;return n(["密码不一致"])},birthday_required:r=>{const{normalize:n}=r;return n(["不能为空"])},birthday_min_age:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["必须在 ",e(t("date"))," 或之前"])}},reason_placeholder:r=>{const{normalize:n}=r;return n(["此实例的注册需要手动批准。\n请让管理员知道您为什么想要注册。"])},reason:r=>{const{normalize:n}=r;return n(["注册理由"])},register:r=>{const{normalize:n}=r;return n(["注册"])},email_language:r=>{const{normalize:n}=r;return n(["你想从服务器收到什么语言的邮件?"])},bio_optional:r=>{const{normalize:n}=r;return n(["介绍(可选)"])},email_optional:r=>{const{normalize:n}=r;return n(["电子邮件(可选)"])},birthday:r=>{const{normalize:n}=r;return n(["生日:"])},birthday_optional:r=>{const{normalize:n}=r;return n(["生日(可选):"])}},selectable_list:{select_all:r=>{const{normalize:n}=r;return n(["选择全部"])}},settings:{app_name:r=>{const{normalize:n}=r;return n(["App 名称"])},security:r=>{const{normalize:n}=r;return n(["安全"])},enter_current_password_to_confirm:r=>{const{normalize:n}=r;return n(["输入您当前的密码来确认您的身份"])},mfa:{otp:r=>{const{normalize:n}=r;return n(["OTP"])},setup_otp:r=>{const{normalize:n}=r;return n(["设置 OTP"])},wait_pre_setup_otp:r=>{const{normalize:n}=r;return n(["预设 OTP"])},confirm_and_enable:r=>{const{normalize:n}=r;return n(["确认并启用 OTP"])},title:r=>{const{normalize:n}=r;return n(["双因素验证"])},generate_new_recovery_codes:r=>{const{normalize:n}=r;return n(["生成新的恢复码"])},warning_of_generate_new_codes:r=>{const{normalize:n}=r;return n(["当您生成新的恢复码时,您旧的恢复码将会失效。"])},recovery_codes:r=>{const{normalize:n}=r;return n(["恢复码。"])},waiting_a_recovery_codes:r=>{const{normalize:n}=r;return n(["正在接收备份码…"])},recovery_codes_warning:r=>{const{normalize:n}=r;return n(["抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。"])},authentication_methods:r=>{const{normalize:n}=r;return n(["身份验证方法"])},scan:{title:r=>{const{normalize:n}=r;return n(["扫一下"])},desc:r=>{const{normalize:n}=r;return n(["使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:"])},secret_code:r=>{const{normalize:n}=r;return n(["密钥"])}},verify:{desc:r=>{const{normalize:n}=r;return n(["要启用双因素验证,请输入您的双因素验证 app 里的数字:"])}}},attachmentRadius:r=>{const{normalize:n}=r;return n(["附件"])},attachments:r=>{const{normalize:n}=r;return n(["附件"])},avatar:r=>{const{normalize:n}=r;return n(["头像"])},avatarAltRadius:r=>{const{normalize:n}=r;return n(["头像(通知)"])},avatarRadius:r=>{const{normalize:n}=r;return n(["头像"])},background:r=>{const{normalize:n}=r;return n(["背景"])},bio:r=>{const{normalize:n}=r;return n(["简介"])},block_export:r=>{const{normalize:n}=r;return n(["屏蔽名单导出"])},block_export_button:r=>{const{normalize:n}=r;return n(["导出你的屏蔽名单到一个 csv 文件"])},block_import:r=>{const{normalize:n}=r;return n(["屏蔽名单导入"])},block_import_error:r=>{const{normalize:n}=r;return n(["导入屏蔽名单出错"])},blocks_imported:r=>{const{normalize:n}=r;return n(["屏蔽名单导入成功!需要一点时间来处理。"])},blocks_tab:r=>{const{normalize:n}=r;return n(["屏蔽"])},btnRadius:r=>{const{normalize:n}=r;return n(["按钮"])},cBlue:r=>{const{normalize:n}=r;return n(["蓝色(回复,关注)"])},cGreen:r=>{const{normalize:n}=r;return n(["绿色(转发)"])},cOrange:r=>{const{normalize:n}=r;return n(["橙色(喜欢)"])},cRed:r=>{const{normalize:n}=r;return n(["红色(取消)"])},change_password:r=>{const{normalize:n}=r;return n(["修改密码"])},change_password_error:r=>{const{normalize:n}=r;return n(["修改密码的时候出了点问题。"])},changed_password:r=>{const{normalize:n}=r;return n(["成功修改了密码!"])},collapse_subject:r=>{const{normalize:n}=r;return n(["折叠带主题的内容"])},composing:r=>{const{normalize:n}=r;return n(["撰写"])},confirm_new_password:r=>{const{normalize:n}=r;return n(["确认新密码"])},current_avatar:r=>{const{normalize:n}=r;return n(["当前头像"])},current_password:r=>{const{normalize:n}=r;return n(["当前密码"])},current_profile_banner:r=>{const{normalize:n}=r;return n(["您当前的横幅图片"])},data_import_export_tab:r=>{const{normalize:n}=r;return n(["数据导入/导出"])},default_vis:r=>{const{normalize:n}=r;return n(["默认可见范围"])},delete_account:r=>{const{normalize:n}=r;return n(["删除账户"])},delete_account_description:r=>{const{normalize:n}=r;return n(["永久删除你的帐号和所有数据。"])},delete_account_error:r=>{const{normalize:n}=r;return n(["删除账户时发生错误,如果一直删除不了,请联系实例管理员。"])},delete_account_instructions:r=>{const{normalize:n}=r;return n(["在下面输入您的密码来确认删除账户。"])},avatar_size_instruction:r=>{const{normalize:n}=r;return n(["推荐的头像图片最小尺寸为 150x150 像素。"])},export_theme:r=>{const{normalize:n}=r;return n(["导出预置主题"])},filtering:r=>{const{normalize:n}=r;return n(["过滤器"])},filtering_explanation:r=>{const{normalize:n}=r;return n(["所有包含以下词汇的内容都会被隐藏,一行一个"])},follow_export:r=>{const{normalize:n}=r;return n(["导出关注"])},follow_export_button:r=>{const{normalize:n}=r;return n(["将关注导出成 csv 文件"])},follow_import:r=>{const{normalize:n}=r;return n(["导入关注"])},follow_import_error:r=>{const{normalize:n}=r;return n(["导入关注时错误"])},follows_imported:r=>{const{normalize:n}=r;return n(["关注已导入!尚需要一些时间来处理。"])},foreground:r=>{const{normalize:n}=r;return n(["前景"])},general:r=>{const{normalize:n}=r;return n(["通用"])},hide_attachments_in_convo:r=>{const{normalize:n}=r;return n(["在对话中隐藏附件"])},hide_attachments_in_tl:r=>{const{normalize:n}=r;return n(["在时间线上隐藏附件"])},hide_muted_posts:r=>{const{normalize:n}=r;return n(["不显示被隐藏的用户的帖子"])},max_thumbnails:r=>{const{normalize:n}=r;return n(["每个帖子最多能显示的缩略图数量"])},hide_isp:r=>{const{normalize:n}=r;return n(["隐藏实例独有的面板"])},preload_images:r=>{const{normalize:n}=r;return n(["预载图片"])},use_one_click_nsfw:r=>{const{normalize:n}=r;return n(["点击一次以打开工作场所不适宜(NSFW)的附件"])},hide_post_stats:r=>{const{normalize:n}=r;return n(["隐藏帖子的统计数据(例如:喜欢的次数)"])},hide_user_stats:r=>{const{normalize:n}=r;return n(["隐藏用户的统计数据(例如:关注者的数量)"])},hide_filtered_statuses:r=>{const{normalize:n}=r;return n(["隐藏过滤的状态"])},import_blocks_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件中导入拉黑名单"])},import_followers_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件中导入关注"])},import_theme:r=>{const{normalize:n}=r;return n(["导入预置主题"])},inputRadius:r=>{const{normalize:n}=r;return n(["输入框"])},checkboxRadius:r=>{const{normalize:n}=r;return n(["复选框"])},instance_default:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(默认:",e(t("value")),")"])},instance_default_simple:r=>{const{normalize:n}=r;return n(["(默认)"])},interface:r=>{const{normalize:n}=r;return n(["界面"])},interfaceLanguage:r=>{const{normalize:n}=r;return n(["界面语言"])},invalid_theme_imported:r=>{const{normalize:n}=r;return n(["您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。"])},limited_availability:r=>{const{normalize:n}=r;return n(["在您的浏览器中无法使用"])},links:r=>{const{normalize:n}=r;return n(["链接"])},lock_account_description:r=>{const{normalize:n}=r;return n(["您需要手动审核关注请求"])},loop_video:r=>{const{normalize:n}=r;return n(["循环视频"])},loop_video_silent_only:r=>{const{normalize:n}=r;return n(["只循环没有声音的视频(例如:Mastodon 里的“GIF”)"])},mutes_tab:r=>{const{normalize:n}=r;return n(["隐藏"])},play_videos_in_modal:r=>{const{normalize:n}=r;return n(["在弹出框内播放视频"])},use_contain_fit:r=>{const{normalize:n}=r;return n(["生成缩略图时不要裁剪附件"])},name:r=>{const{normalize:n}=r;return n(["名字"])},name_bio:r=>{const{normalize:n}=r;return n(["名字及简介"])},new_password:r=>{const{normalize:n}=r;return n(["新密码"])},notification_visibility:r=>{const{normalize:n}=r;return n(["要显示的通知类型"])},notification_visibility_follows:r=>{const{normalize:n}=r;return n(["关注"])},notification_visibility_likes:r=>{const{normalize:n}=r;return n(["喜欢"])},notification_visibility_mentions:r=>{const{normalize:n}=r;return n(["提及"])},notification_visibility_repeats:r=>{const{normalize:n}=r;return n(["转发"])},no_rich_text_description:r=>{const{normalize:n}=r;return n(["不显示富文本格式"])},no_blocks:r=>{const{normalize:n}=r;return n(["没有屏蔽"])},no_mutes:r=>{const{normalize:n}=r;return n(["没有隐藏"])},hide_follows_description:r=>{const{normalize:n}=r;return n(["不要显示我所关注的人"])},hide_followers_description:r=>{const{normalize:n}=r;return n(["不要显示关注我的人"])},show_admin_badge:r=>{const{normalize:n}=r;return n(["在我的个人资料中显示“管理员”徽章"])},show_moderator_badge:r=>{const{normalize:n}=r;return n(["在我的个人资料中显示“监察员”徽章"])},nsfw_clickthrough:r=>{const{normalize:n}=r;return n(["将不和谐附件和链接预览隐藏,点击才会显示"])},oauth_tokens:r=>{const{normalize:n}=r;return n(["OAuth令牌"])},token:r=>{const{normalize:n}=r;return n(["令牌"])},refresh_token:r=>{const{normalize:n}=r;return n(["刷新令牌"])},valid_until:r=>{const{normalize:n}=r;return n(["有效期至"])},revoke_token:r=>{const{normalize:n}=r;return n(["撤消"])},panelRadius:r=>{const{normalize:n}=r;return n(["面板"])},pause_on_unfocused:r=>{const{normalize:n}=r;return n(["在离开页面时暂停时间线推送"])},presets:r=>{const{normalize:n}=r;return n(["预置"])},profile_background:r=>{const{normalize:n}=r;return n(["个人背景图"])},profile_banner:r=>{const{normalize:n}=r;return n(["横幅图片"])},profile_tab:r=>{const{normalize:n}=r;return n(["个人资料"])},radii_help:r=>{const{normalize:n}=r;return n(["设置界面边缘的圆角 (单位:像素)"])},replies_in_timeline:r=>{const{normalize:n}=r;return n(["时间线中的回复"])},reply_visibility_all:r=>{const{normalize:n}=r;return n(["显示所有回复"])},reply_visibility_following:r=>{const{normalize:n}=r;return n(["只显示发送给我的回复/发送给我关注的用户的回复"])},reply_visibility_self:r=>{const{normalize:n}=r;return n(["只显示发送给我的回复"])},autohide_floating_post_button:r=>{const{normalize:n}=r;return n(["自动隐藏新帖子的按钮(移动设备)"])},saving_err:r=>{const{normalize:n}=r;return n(["保存设置时发生错误"])},saving_ok:r=>{const{normalize:n}=r;return n(["设置已保存"])},search_user_to_block:r=>{const{normalize:n}=r;return n(["搜索你想屏蔽的用户"])},search_user_to_mute:r=>{const{normalize:n}=r;return n(["搜索你想要隐藏的用户"])},security_tab:r=>{const{normalize:n}=r;return n(["安全"])},scope_copy:r=>{const{normalize:n}=r;return n(["回复时复制可见范围(私信中永远会复制)"])},minimal_scopes_mode:r=>{const{normalize:n}=r;return n(["使发文可见范围的选项最少化"])},set_new_avatar:r=>{const{normalize:n}=r;return n(["设置新头像"])},set_new_profile_background:r=>{const{normalize:n}=r;return n(["设置新的个人资料背景"])},set_new_profile_banner:r=>{const{normalize:n}=r;return n(["设置新的横幅图片"])},settings:r=>{const{normalize:n}=r;return n(["设置"])},subject_input_always_show:r=>{const{normalize:n}=r;return n(["总是显示主题框"])},subject_line_behavior:r=>{const{normalize:n}=r;return n(["回复时复制主题"])},subject_line_email:r=>{const{normalize:n}=r;return n(['类似电子邮件: "re: 主题"'])},subject_line_mastodon:r=>{const{normalize:n}=r;return n(["类似 mastodon: 与原主题相同"])},subject_line_noop:r=>{const{normalize:n}=r;return n(["不要复制"])},post_status_content_type:r=>{const{normalize:n}=r;return n(["发文状态内容类型"])},stop_gifs:r=>{const{normalize:n}=r;return n(["鼠标悬停时播放GIF"])},streaming:r=>{const{normalize:n}=r;return n(["滚动到顶部时自动推送新内容"])},text:r=>{const{normalize:n}=r;return n(["文本"])},theme:r=>{const{normalize:n}=r;return n(["主题"])},theme_help:r=>{const{normalize:n}=r;return n(["使用十六进制代码(#rrggbb)来设置主题颜色。"])},theme_help_v2_1:r=>{const{normalize:n}=r;return n(["您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。"])},theme_help_v2_2:r=>{const{normalize:n}=r;return n(["某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。"])},tooltipRadius:r=>{const{normalize:n}=r;return n(["提醒"])},upload_a_photo:r=>{const{normalize:n}=r;return n(["上传照片"])},user_settings:r=>{const{normalize:n}=r;return n(["用户设置"])},values:{false:r=>{const{normalize:n}=r;return n(["否"])},true:r=>{const{normalize:n}=r;return n(["是"])}},notifications:r=>{const{normalize:n}=r;return n(["通知"])},notification_mutes:r=>{const{normalize:n}=r;return n(["要停止收到某个指定的用户的通知,请使用隐藏功能。"])},notification_blocks:r=>{const{normalize:n}=r;return n(["屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。"])},enable_web_push_notifications:r=>{const{normalize:n}=r;return n(["启用 web 推送通知"])},style:{switcher:{keep_color:r=>{const{normalize:n}=r;return n(["保留颜色"])},keep_shadows:r=>{const{normalize:n}=r;return n(["保留阴影"])},keep_opacity:r=>{const{normalize:n}=r;return n(["保留透明度"])},keep_roundness:r=>{const{normalize:n}=r;return n(["保留圆角"])},keep_fonts:r=>{const{normalize:n}=r;return n(["保留字体"])},save_load_hint:r=>{const{normalize:n}=r;return n(['"保留" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。'])},reset:r=>{const{normalize:n}=r;return n(["重置"])},clear_all:r=>{const{normalize:n}=r;return n(["清除全部"])},clear_opacity:r=>{const{normalize:n}=r;return n(["清除透明度"])},load_theme:r=>{const{normalize:n}=r;return n(["加载主题"])},help:{upgraded_from_v2:r=>{const{normalize:n}=r;return n(["PleromaFE 已升级,主题会与您记忆中的不太一样。"])},older_version_imported:r=>{const{normalize:n}=r;return n(["您导入的文件来自旧版本的 FE。"])},future_version_imported:r=>{const{normalize:n}=r;return n(["您导入的文件来自更高版本的 FE。"])},v2_imported:r=>{const{normalize:n}=r;return n(["您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。"])},snapshot_source_mismatch:r=>{const{normalize:n}=r;return n(["版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。"])},migration_napshot_gone:r=>{const{normalize:n}=r;return n(["不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。"])},migration_snapshot_ok:r=>{const{normalize:n}=r;return n(["为保万无一失,加载了主题快照。您可以试着加载主题数据。"])},fe_downgraded:r=>{const{normalize:n}=r;return n(["PleromaFE 的版本回滚了。"])},fe_upgraded:r=>{const{normalize:n}=r;return n(["PleromaFE 的主题引擎随着版本更新升级了。"])},snapshot_missing:r=>{const{normalize:n}=r;return n(["在文件中没有主题快照,所以网站外观可能会与原来预想的不同。"])},snapshot_present:r=>{const{normalize:n}=r;return n(["主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。"])}},use_source:r=>{const{normalize:n}=r;return n(["新版本"])},use_snapshot:r=>{const{normalize:n}=r;return n(["老版本"])},keep_as_is:r=>{const{normalize:n}=r;return n(["保持原状"])}},common:{color:r=>{const{normalize:n}=r;return n(["颜色"])},opacity:r=>{const{normalize:n}=r;return n(["透明度"])},contrast:{hint:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["对比度是 ",e(t("ratio")),", 它 ",e(t("level"))," ",e(t("context"))])},level:{aa:r=>{const{normalize:n}=r;return n(["符合 AA 等级准则(最低)"])},aaa:r=>{const{normalize:n}=r;return n(["符合 AAA 等级准则(推荐)"])},bad:r=>{const{normalize:n}=r;return n(["不符合任何辅助功能指南"])}},context:{"18pt":r=>{const{normalize:n}=r;return n(["大字文本 (18pt+)"])},text:r=>{const{normalize:n}=r;return n(["文本"])}}}},common_colors:{_tab_label:r=>{const{normalize:n}=r;return n(["常规"])},main:r=>{const{normalize:n}=r;return n(["常用颜色"])},foreground_hint:r=>{const{normalize:n}=r;return n(["点击”高级“ 标签进行细致的控制"])},rgbo:r=>{const{normalize:n}=r;return n(["图标,强调,徽章"])}},advanced_colors:{_tab_label:r=>{const{normalize:n}=r;return n(["高级"])},alert:r=>{const{normalize:n}=r;return n(["提醒或警告背景色"])},alert_error:r=>{const{normalize:n}=r;return n(["错误"])},badge:r=>{const{normalize:n}=r;return n(["徽章背景"])},badge_notification:r=>{const{normalize:n}=r;return n(["通知"])},panel_header:r=>{const{normalize:n}=r;return n(["面板标题"])},top_bar:r=>{const{normalize:n}=r;return n(["顶栏"])},borders:r=>{const{normalize:n}=r;return n(["边框"])},buttons:r=>{const{normalize:n}=r;return n(["按钮"])},inputs:r=>{const{normalize:n}=r;return n(["输入框"])},faint_text:r=>{const{normalize:n}=r;return n(["灰度文字"])},chat:{border:r=>{const{normalize:n}=r;return n(["边框"])},outgoing:r=>{const{normalize:n}=r;return n(["发出的"])},incoming:r=>{const{normalize:n}=r;return n(["收到的"])}},disabled:r=>{const{normalize:n}=r;return n(["禁用的"])},pressed:r=>{const{normalize:n}=r;return n(["压下的"])},highlight:r=>{const{normalize:n}=r;return n(["强调元素"])},selectedMenu:r=>{const{normalize:n}=r;return n(["选中的菜单项"])},selectedPost:r=>{const{normalize:n}=r;return n(["选中的发布内容"])},icons:r=>{const{normalize:n}=r;return n(["图标"])},poll:r=>{const{normalize:n}=r;return n(["投票统计图"])},popover:r=>{const{normalize:n}=r;return n(["提示框,菜单,弹出框"])},post:r=>{const{normalize:n}=r;return n(["发布内容/用户简介"])},alert_neutral:r=>{const{normalize:n}=r;return n(["中性"])},alert_warning:r=>{const{normalize:n}=r;return n(["警告"])},tabs:r=>{const{normalize:n}=r;return n(["标签页"])},underlay:r=>{const{normalize:n}=r;return n(["底衬"])},toggled:r=>{const{normalize:n}=r;return n(["按下的"])},wallpaper:r=>{const{normalize:n}=r;return n(["壁纸"])}},radii:{_tab_label:r=>{const{normalize:n}=r;return n(["圆角"])}},shadows:{_tab_label:r=>{const{normalize:n}=r;return n(["阴影和照明"])},component:r=>{const{normalize:n}=r;return n(["组件"])},override:r=>{const{normalize:n}=r;return n(["覆盖"])},shadow_id:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["阴影 #",e(t("value"))])},blur:r=>{const{normalize:n}=r;return n(["模糊"])},spread:r=>{const{normalize:n}=r;return n(["扩散"])},inset:r=>{const{normalize:n}=r;return n(["内阴影"])},hint:r=>{const{normalize:n}=r;return n(["对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。"])},filter_hint:{always_drop_shadow:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["警告,此阴影设置会总是使用 ",e(t(0))," ,如果浏览器支持的话。"])},drop_shadow_syntax:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 不支持参数 ",e(t(1))," 和关键词 ",e(t(2))," 。"])},avatar_inset:r=>{const{normalize:n}=r;return n(["请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。"])},spread_zero:r=>{const{normalize:n}=r;return n(["阴影的扩散 > 0 会同设置成零一样"])},inset_classic:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["内阴影会使用 ",e(t(0))])}},components:{panel:r=>{const{normalize:n}=r;return n(["面板"])},panelHeader:r=>{const{normalize:n}=r;return n(["面板标题"])},topBar:r=>{const{normalize:n}=r;return n(["顶栏"])},avatar:r=>{const{normalize:n}=r;return n(["用户头像(在个人资料栏)"])},avatarStatus:r=>{const{normalize:n}=r;return n(["用户头像(在帖子显示栏)"])},popup:r=>{const{normalize:n}=r;return n(["弹窗与工具提示"])},button:r=>{const{normalize:n}=r;return n(["按钮"])},buttonHover:r=>{const{normalize:n}=r;return n(["按钮(悬停)"])},buttonPressed:r=>{const{normalize:n}=r;return n(["按钮(压下)"])},buttonPressedHover:r=>{const{normalize:n}=r;return n(["按钮(压下和悬停)"])},input:r=>{const{normalize:n}=r;return n(["输入框"])}},hintV3:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["对于阴影,您还可以使用 ",e(t(0))," 表示法来使用其它颜色插槽。"])}},fonts:{_tab_label:r=>{const{normalize:n}=r;return n(["字体"])},help:r=>{const{normalize:n}=r;return n(["为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。"])},components:{interface:r=>{const{normalize:n}=r;return n(["界面"])},input:r=>{const{normalize:n}=r;return n(["输入框"])},post:r=>{const{normalize:n}=r;return n(["发帖文字"])},postCode:r=>{const{normalize:n}=r;return n(["帖子中使用等间距文字(富文本)"])}},family:r=>{const{normalize:n}=r;return n(["字体名称"])},size:r=>{const{normalize:n}=r;return n(["大小 (in px)"])},weight:r=>{const{normalize:n}=r;return n(["字重 (粗体)"])},custom:r=>{const{normalize:n}=r;return n(["自选"])}},preview:{header:r=>{const{normalize:n}=r;return n(["预览"])},content:r=>{const{normalize:n}=r;return n(["内容"])},error:r=>{const{normalize:n}=r;return n(["错误示例"])},button:r=>{const{normalize:n}=r;return n(["按钮"])},text:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["有堆 ",e(t(0))," 和 ",e(t(1))])},mono:r=>{const{normalize:n}=r;return n(["monospace 内容"])},input:r=>{const{normalize:n}=r;return n(["刚刚抵达上海。"])},faint_link:r=>{const{normalize:n}=r;return n(["帮助手册"])},fine_print:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["阅读我们的 ",e(t(0))," ,然而什么也学不到!"])},header_faint:r=>{const{normalize:n}=r;return n(["这很正常"])},checkbox:r=>{const{normalize:n}=r;return n(["我已经浏览了条款及细则"])},link:r=>{const{normalize:n}=r;return n(["一个棒棒的小小链接"])}}},version:{title:r=>{const{normalize:n}=r;return n(["版本"])},backend_version:r=>{const{normalize:n}=r;return n(["后端版本"])},frontend_version:r=>{const{normalize:n}=r;return n(["前端版本"])}},notification_setting_filters:r=>{const{normalize:n}=r;return n(["过滤器"])},domain_mutes:r=>{const{normalize:n}=r;return n(["域名"])},changed_email:r=>{const{normalize:n}=r;return n(["邮箱修改成功!"])},change_email_error:r=>{const{normalize:n}=r;return n(["修改您的电子邮箱时发生错误。"])},change_email:r=>{const{normalize:n}=r;return n(["修改电子邮箱"])},allow_following_move:r=>{const{normalize:n}=r;return n(["正在关注的账号迁移时自动重新关注"])},notification_setting_privacy_option:r=>{const{normalize:n}=r;return n(["在通知推送中隐藏发送者和内容"])},notification_setting_privacy:r=>{const{normalize:n}=r;return n(["隐私"])},hide_follows_count_description:r=>{const{normalize:n}=r;return n(["不显示关注数"])},notification_visibility_emoji_reactions:r=>{const{normalize:n}=r;return n(["互动"])},notification_visibility_moves:r=>{const{normalize:n}=r;return n(["用户迁移"])},new_email:r=>{const{normalize:n}=r;return n(["新邮箱"])},emoji_reactions_on_timeline:r=>{const{normalize:n}=r;return n(["在时间线上显示表情符号互动"])},notification_setting_hide_notification_contents:r=>{const{normalize:n}=r;return n(["隐藏推送通知中的发送者与内容信息"])},notification_setting_block_from_strangers:r=>{const{normalize:n}=r;return n(["屏蔽来自你没有关注的用户的通知"])},type_domains_to_mute:r=>{const{normalize:n}=r;return n(["搜索需要隐藏的域名"])},useStreamingApi:r=>{const{normalize:n}=r;return n(["实时接收帖子和通知"])},user_mutes:r=>{const{normalize:n}=r;return n(["用户"])},reset_background_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置背景图吗?"])},reset_banner_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置横幅图片吗?"])},reset_avatar_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置头像吗?"])},reset_profile_banner:r=>{const{normalize:n}=r;return n(["重置横幅图片"])},reset_profile_background:r=>{const{normalize:n}=r;return n(["重置个人背景图"])},reset_avatar:r=>{const{normalize:n}=r;return n(["重置头像"])},hide_followers_count_description:r=>{const{normalize:n}=r;return n(["不显示关注者数量"])},profile_fields:{value:r=>{const{normalize:n}=r;return n(["内容"])},name:r=>{const{normalize:n}=r;return n(["标签"])},add_field:r=>{const{normalize:n}=r;return n(["添加字段"])},label:r=>{const{normalize:n}=r;return n(["个人资料元数据"])}},accent:r=>{const{normalize:n}=r;return n(["强调色"])},pad_emoji:r=>{const{normalize:n}=r;return n(["从表情符号选择器插入表情符号时,在表情两侧插入空格"])},discoverable:r=>{const{normalize:n}=r;return n(["允许通过搜索检索等服务找到此账号"])},mutes_and_blocks:r=>{const{normalize:n}=r;return n(["隐藏与屏蔽"])},bot:r=>{const{normalize:n}=r;return n(["这是一个机器人账号"])},fun:r=>{const{normalize:n}=r;return n(["趣味"])},useStreamingApiWarning:r=>{const{normalize:n}=r;return n(["(不推荐使用,试验性,已知会跳过一些帖子)"])},chatMessageRadius:r=>{const{normalize:n}=r;return n(["聊天消息"])},greentext:r=>{const{normalize:n}=r;return n(["Meme 箭头"])},virtual_scrolling:r=>{const{normalize:n}=r;return n(["优化时间线渲染"])},import_mutes_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件导入隐藏名单"])},mutes_imported:r=>{const{normalize:n}=r;return n(["隐藏名单导入成功!处理它们将需要一段时间。"])},mute_import_error:r=>{const{normalize:n}=r;return n(["导入隐藏名单出错"])},mute_import:r=>{const{normalize:n}=r;return n(["隐藏名单导入"])},mute_export_button:r=>{const{normalize:n}=r;return n(["导出你的隐藏名单到一个 csv 文件"])},mute_export:r=>{const{normalize:n}=r;return n(["隐藏名单导出"])},hide_wallpaper:r=>{const{normalize:n}=r;return n(["隐藏实例壁纸"])},setting_changed:r=>{const{normalize:n}=r;return n(["与默认设置不同"])},more_settings:r=>{const{normalize:n}=r;return n(["更多设置"])},sensitive_by_default:r=>{const{normalize:n}=r;return n(["默认标记发文为敏感内容"])},reply_visibility_self_short:r=>{const{normalize:n}=r;return n(["只显示对我本人的回复"])},reply_visibility_following_short:r=>{const{normalize:n}=r;return n(["显示对我关注的人的回复"])},hide_all_muted_posts:r=>{const{normalize:n}=r;return n(["不显示已隐藏的发文"])},hide_media_previews:r=>{const{normalize:n}=r;return n(["隐藏媒体预览"])},word_filter:r=>{const{normalize:n}=r;return n(["词语过滤"])},save:r=>{const{normalize:n}=r;return n(["保存更改"])},file_export_import:{errors:{file_slightly_new:r=>{const{normalize:n}=r;return n(["文件的小版本不同,有些设置可能无法加载"])},file_too_old:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["不兼容的主版本:",e(t("fileMajor")),",文件版本过旧,不受支持(最小设置版本 ",e(t("feMajor")),")"])},file_too_new:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["不兼容的主版本:",e(t("fileMajor")),",此 PleromaFE(设置版本 ",e(t("feMajor")),")过旧,无法处理"])},invalid_file:r=>{const{normalize:n}=r;return n(["所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。"])}},restore_settings:r=>{const{normalize:n}=r;return n(["从文件恢复设置"])},backup_settings_theme:r=>{const{normalize:n}=r;return n(["备份设置和主题到文件"])},backup_settings:r=>{const{normalize:n}=r;return n(["备份设置到文件"])},backup_restore:r=>{const{normalize:n}=r;return n(["设置备份"])}},right_sidebar:r=>{const{normalize:n}=r;return n(["反转分栏的顺序"])},hide_shoutbox:r=>{const{normalize:n}=r;return n(["隐藏实例留言板"])},expert_mode:r=>{const{normalize:n}=r;return n(["显示高级"])},download_backup:r=>{const{normalize:n}=r;return n(["下载"])},mention_links:r=>{const{normalize:n}=r;return n(["提及链接"])},account_backup:r=>{const{normalize:n}=r;return n(["账号备份"])},account_backup_table_head:r=>{const{normalize:n}=r;return n(["备份"])},remove_backup:r=>{const{normalize:n}=r;return n(["移除"])},list_backups_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["获取备份列表出错:",e(t("error"))])},add_backup:r=>{const{normalize:n}=r;return n(["创建一个新备份"])},added_backup:r=>{const{normalize:n}=r;return n(["创建了一个新备份。"])},account_alias:r=>{const{normalize:n}=r;return n(["账号别名"])},account_alias_table_head:r=>{const{normalize:n}=r;return n(["别名"])},list_aliases_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["获取别名时出错:",e(t("error"))])},hide_list_aliases_error_action:r=>{const{normalize:n}=r;return n(["关闭"])},remove_alias:r=>{const{normalize:n}=r;return n(["移除这个别名"])},new_alias_target:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加一个新别名(例如 ",e(t("example")),")"])},added_alias:r=>{const{normalize:n}=r;return n(["别名添加好了。"])},move_account:r=>{const{normalize:n}=r;return n(["移动账号"])},move_account_target:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["目标账号(例如 ",e(t("example")),")"])},moved_account:r=>{const{normalize:n}=r;return n(["账号移动好了。"])},move_account_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["移动账号时出错:",e(t("error"))])},setting_server_side:r=>{const{normalize:n}=r;return n(["这个设置是捆绑到你的个人资料的,能影响所有会话和客户端"])},post_look_feel:r=>{const{normalize:n}=r;return n(["文章的样子跟感受"])},email_language:r=>{const{normalize:n}=r;return n(["从服务器收邮件的语言"])},account_backup_description:r=>{const{normalize:n}=r;return n(["这个允许你下载一份账号信息和文章的存档,但是现在还不能导入到 Pleroma 账号里。"])},backup_not_ready:r=>{const{normalize:n}=r;return n(["备份还没准备好。"])},add_backup_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加新备份时出错:",e(t("error"))])},add_alias_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加别名时出错:",e(t("error"))])},move_account_notes:r=>{const{normalize:n}=r;return n(["如果你想把账号移动到别的地方,你必须去目标账号,然后加一个指向这里的别名。"])},wordfilter:r=>{const{normalize:n}=r;return n(["词语过滤器"])},user_profiles:r=>{const{normalize:n}=r;return n(["用户资料"])},third_column_mode_notifications:r=>{const{normalize:n}=r;return n(["通知栏"])},backup_running:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n(["此备份正在进行,已处理 ",e(t("number"))," 条记录。"]),n(["此备份正在进行,已处理 ",e(t("number"))," 条记录。"])])},lists_navigation:r=>{const{normalize:n}=r;return n(["在导航中显示列表"])},word_filter_and_more:r=>{const{normalize:n}=r;return n(["词过滤器及其它..."])},backup_failed:r=>{const{normalize:n}=r;return n(["此备份已失败。"])},birthday:{label:r=>{const{normalize:n}=r;return n(["生日"])},show_birthday:r=>{const{normalize:n}=r;return n(["展示我的生日"])}},hide_favorites_description:r=>{const{normalize:n}=r;return n(["不显示我的喜欢列表(人们仍然会收到通知)"])},third_column_mode:r=>{const{normalize:n}=r;return n(["当有足够的空间时,显示第三栏包含"])},third_column_mode_postform:r=>{const{normalize:n}=r;return n(["主要的发文形式和导航"])},columns:r=>{const{normalize:n}=r;return n(["分栏"])},user_popover_avatar_overlay:r=>{const{normalize:n}=r;return n(["在用户头像上显示用户弹出窗口"])},navbar_column_stretch:r=>{const{normalize:n}=r;return n(["延伸导航栏至分栏宽度"])},posts:r=>{const{normalize:n}=r;return n(["帖子"])},conversation_display_linear_quick:r=>{const{normalize:n}=r;return n(["线性视图"])},conversation_other_replies_button:r=>{const{normalize:n}=r;return n(["显示 “其它回复” 按钮"])},confirm_dialogs_delete:r=>{const{normalize:n}=r;return n(["删除状态"])},confirm_dialogs_mute:r=>{const{normalize:n}=r;return n(["隐藏用户"])},column_sizes:r=>{const{normalize:n}=r;return n(["分栏大小"])},column_sizes_sidebar:r=>{const{normalize:n}=r;return n(["侧栏"])},column_sizes_content:r=>{const{normalize:n}=r;return n(["內容"])},column_sizes_notifs:r=>{const{normalize:n}=r;return n(["通知"])},conversation_other_replies_button_below:r=>{const{normalize:n}=r;return n(["在状态下方"])},conversation_other_replies_button_inside:r=>{const{normalize:n}=r;return n(["在状态中"])},auto_update:r=>{const{normalize:n}=r;return n(["自动显示新的帖子"])},use_websockets:r=>{const{normalize:n}=r;return n(["使用 websockets(实时更新)"])},max_depth_in_thread:r=>{const{normalize:n}=r;return n(["默认显示同主题帖子中的最大层数"])},hide_wordfiltered_statuses:r=>{const{normalize:n}=r;return n(["隐藏经过词语过滤的状态"])},hide_muted_threads:r=>{const{normalize:n}=r;return n(["不显示已隐藏的同主题帖子"])},notification_visibility_polls:r=>{const{normalize:n}=r;return n(["你所投的投票的结束于"])},tree_advanced:r=>{const{normalize:n}=r;return n(["允许在树状视图中进行更灵活的导航"])},tree_fade_ancestors:r=>{const{normalize:n}=r;return n(["以模糊的文字显示当前状态的上级"])},conversation_display_linear:r=>{const{normalize:n}=r;return n(["线性样式"])},mention_link_fade_domain:r=>{const{normalize:n}=r;return n(["淡化域名(例如:","@","example.org 中的 ","@","foo","@","example.org)"])},mention_link_bolden_you:r=>{const{normalize:n}=r;return n(["当你被提及时突出显示提及你"])},user_popover_avatar_action:r=>{const{normalize:n}=r;return n(["弹出式头像点击动作"])},user_popover_avatar_action_zoom:r=>{const{normalize:n}=r;return n(["缩放头像"])},user_popover_avatar_action_close:r=>{const{normalize:n}=r;return n(["关闭弹出窗口"])},show_yous:r=>{const{normalize:n}=r;return n(["显示 (You)s"])},add_language:r=>{const{normalize:n}=r;return n(["添加备用语言"])},remove_language:r=>{const{normalize:n}=r;return n(["移除"])},primary_language:r=>{const{normalize:n}=r;return n(["主要语言:"])},fallback_language:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["备用语言 ",e(t("index")),":"])},account_privacy:r=>{const{normalize:n}=r;return n(["隐私"])},conversation_display:r=>{const{normalize:n}=r;return n(["对话显示样式"])},conversation_display_tree:r=>{const{normalize:n}=r;return n(["树状样式"])},conversation_display_tree_quick:r=>{const{normalize:n}=r;return n(["树状视图"])},disable_sticky_headers:r=>{const{normalize:n}=r;return n(["不要把分栏的顶栏固定在屏幕的顶部"])},confirm_dialogs:r=>{const{normalize:n}=r;return n(["请求确认于"])},confirm_dialogs_logout:r=>{const{normalize:n}=r;return n(["登出"])},confirm_dialogs_deny_follow:r=>{const{normalize:n}=r;return n(["拒绝关注请求"])},confirm_dialogs_approve_follow:r=>{const{normalize:n}=r;return n(["批准关注请求"])},confirm_dialogs_block:r=>{const{normalize:n}=r;return n(["屏蔽用户"])},confirm_dialogs_unfollow:r=>{const{normalize:n}=r;return n(["取消关注用户"])},confirm_dialogs_repeat:r=>{const{normalize:n}=r;return n(["转发状态"])},confirm_dialogs_remove_follower:r=>{const{normalize:n}=r;return n(["移除关注者"])},mute_bot_posts:r=>{const{normalize:n}=r;return n(["隐藏机器人的帖子"])},hide_bot_indication:r=>{const{normalize:n}=r;return n(["隐藏帖子中的机器人提示"])},always_show_post_button:r=>{const{normalize:n}=r;return n(["始终显示浮动的新帖子按钮"])},show_scrollbars:r=>{const{normalize:n}=r;return n(["显示侧栏的滚动条"])},third_column_mode_none:r=>{const{normalize:n}=r;return n(["完全不显示第三栏"])},use_at_icon:r=>{const{normalize:n}=r;return n(["将 ","@"," 符号显示为图标而不是文本"])},mention_link_display:r=>{const{normalize:n}=r;return n(["显示提及链接"])},mention_link_display_short:r=>{const{normalize:n}=r;return n(["始终以简称的形式出现(例如:","@","foo)"])},mention_link_display_full_for_remote:r=>{const{normalize:n}=r;return n(["仅远程实例用户以全名的形式出现(例如:","@","foo","@","example.org)"])},mention_link_display_full:r=>{const{normalize:n}=r;return n(["始终以全名的形式出现(例如:","@","foo","@","example.org)"])},mention_link_use_tooltip:r=>{const{normalize:n}=r;return n(["点击提及链接时显示用户卡片"])},mention_link_show_avatar:r=>{const{normalize:n}=r;return n(["在链接旁边显示用户头像"])},mention_link_show_avatar_quick:r=>{const{normalize:n}=r;return n(["在提及内容旁边显示用户头像"])},user_popover_avatar_action_open:r=>{const{normalize:n}=r;return n(["打开个人资料"])},autocomplete_select_first:r=>{const{normalize:n}=r;return n(["当有自动完成的结果时,自动选择第一个候选项"])},url:r=>{const{normalize:n}=r;return n(["URL"])},preview:r=>{const{normalize:n}=r;return n(["预览"])},commit_value:r=>{const{normalize:n}=r;return n(["保存"])},commit_value_tooltip:r=>{const{normalize:n}=r;return n(["当前值未保存,请按此按钮以提交你的修改"])},reset_value:r=>{const{normalize:n}=r;return n(["重置"])},reset_value_tooltip:r=>{const{normalize:n}=r;return n(["重置草稿"])},hard_reset_value:r=>{const{normalize:n}=r;return n(["硬重置"])},hard_reset_value_tooltip:r=>{const{normalize:n}=r;return n(["从存储中移除设置,强制使用默认值"])},emoji_reactions_scale:r=>{const{normalize:n}=r;return n(["表情回应比例系数"])}},time:{day:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},days:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},day_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"d"])},days_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"d"])},hour:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hours:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hour_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"h"])},hours_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"h"])},in_future:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["还有 ",e(t(0))])},in_past:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 之前"])},minute:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分钟"])},minutes:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分钟"])},minute_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"min"])},minutes_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"min"])},month:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},months:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},month_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"mo"])},months_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"mo"])},now:r=>{const{normalize:n}=r;return n(["刚刚"])},now_short:r=>{const{normalize:n}=r;return n(["刚刚"])},second:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},seconds:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},second_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"s"])},seconds_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"s"])},week:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},weeks:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},week_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"w"])},weeks_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"w"])},year:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},years:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},year_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"y"])},years_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"y"])},unit:{days_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},hours:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hours_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 时"])},minutes:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分"])},minutes_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分"])},months:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 个月"])},months_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},seconds:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},seconds_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},weeks_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},years:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},years_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},weeks:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},days:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])}}},timeline:{collapse:r=>{const{normalize:n}=r;return n(["折叠"])},conversation:r=>{const{normalize:n}=r;return n(["对话"])},error_fetching:r=>{const{normalize:n}=r;return n(["获取更新时发生错误"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的状态"])},no_retweet_hint:r=>{const{normalize:n}=r;return n(["这条内容仅关注者可见,或者是私信,因此不能转发"])},repeated:r=>{const{normalize:n}=r;return n(["转发了"])},show_new:r=>{const{normalize:n}=r;return n(["显示新内容"])},up_to_date:r=>{const{normalize:n}=r;return n(["已是最新"])},no_more_statuses:r=>{const{normalize:n}=r;return n(["没有更多的状态"])},no_statuses:r=>{const{normalize:n}=r;return n(["没有状态更新"])},reload:r=>{const{normalize:n}=r;return n(["重新载入"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["取得时间轴时发生错误:",e(t(0))])},socket_broke:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["丢失实时连接:CloseEvent code ",e(t(0))])},socket_reconnected:r=>{const{normalize:n}=r;return n(["已建立实时连接"])},quick_view_settings:r=>{const{normalize:n}=r;return n(["快速视图设置"])},quick_filter_settings:r=>{const{normalize:n}=r;return n(["快速过滤设置"])}},status:{favorites:r=>{const{normalize:n}=r;return n(["喜欢"])},repeats:r=>{const{normalize:n}=r;return n(["转发"])},delete:r=>{const{normalize:n}=r;return n(["删除状态"])},pin:r=>{const{normalize:n}=r;return n(["在个人资料置顶"])},unpin:r=>{const{normalize:n}=r;return n(["取消在个人资料置顶"])},pinned:r=>{const{normalize:n}=r;return n(["置顶"])},delete_confirm:r=>{const{normalize:n}=r;return n(["您确定要删除这条状态吗?"])},reply_to:r=>{const{normalize:n}=r;return n(["回复"])},replies_list:r=>{const{normalize:n}=r;return n(["回复:"])},mute_conversation:r=>{const{normalize:n}=r;return n(["隐藏对话"])},unmute_conversation:r=>{const{normalize:n}=r;return n(["对话取消隐藏"])},hide_content:r=>{const{normalize:n}=r;return n(["隐藏内容"])},show_content:r=>{const{normalize:n}=r;return n(["显示内容"])},hide_full_subject:r=>{const{normalize:n}=r;return n(["隐藏此部分标题"])},show_full_subject:r=>{const{normalize:n}=r;return n(["显示全部标题"])},thread_muted:r=>{const{normalize:n}=r;return n(["同主题帖子已被隐藏"])},copy_link:r=>{const{normalize:n}=r;return n(["复制状态链接"])},status_unavailable:r=>{const{normalize:n}=r;return n(["状态不可取得"])},unbookmark:r=>{const{normalize:n}=r;return n(["取消书签"])},bookmark:r=>{const{normalize:n}=r;return n(["书签"])},thread_muted_and_words:r=>{const{normalize:n}=r;return n([",含有过滤词:"])},status_deleted:r=>{const{normalize:n}=r;return n(["该状态已被删除"])},nsfw:r=>{const{normalize:n}=r;return n(["NSFW"])},external_source:r=>{const{normalize:n}=r;return n(["外部来源"])},expand:r=>{const{normalize:n}=r;return n(["展开"])},you:r=>{const{normalize:n}=r;return n(["(你)"])},plus_more:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["还有 ",e(t("number"))," 个"])},many_attachments:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["文章有 ",e(t("number"))," 个附件"])},collapse_attachments:r=>{const{normalize:n}=r;return n(["折起附件"])},show_all_attachments:r=>{const{normalize:n}=r;return n(["显示所有附件"])},show_attachment_description:r=>{const{normalize:n}=r;return n(["预览描述(打开附件能看完整描述)"])},hide_attachment:r=>{const{normalize:n}=r;return n(["隐藏附件"])},remove_attachment:r=>{const{normalize:n}=r;return n(["移除附件"])},attachment_stop_flash:r=>{const{normalize:n}=r;return n(["停止 Flash 播放器"])},move_up:r=>{const{normalize:n}=r;return n(["把附件左移"])},open_gallery:r=>{const{normalize:n}=r;return n(["打开图库"])},thread_hide:r=>{const{normalize:n}=r;return n(["隐藏这个同主题帖子"])},thread_show:r=>{const{normalize:n}=r;return n(["显示这个同主题帖子"])},thread_show_full_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},thread_follow:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["查看这个同主题帖子的剩余部分(一共有 ",e(t("numStatus"))," 个状态)"])},thread_follow_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},ancestor_follow:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["查看这个状态下的别的 ",e(t("numReplies"))," 个回复"])},ancestor_follow_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},show_all_conversation_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},show_all_conversation:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["显示完整对话(还有 ",e(t("numStatus"))," 个状态)"])},mentions:r=>{const{normalize:n}=r;return n(["提及"])},replies_list_with_others:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["回复(另外 +",e(t("numReplies"))," 个):"])},move_down:r=>{const{normalize:n}=r;return n(["把附件右移"])},thread_show_full:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["显示这个同主题帖子下的所有东西(一共有 ",e(t("numStatus"))," 个状态,最大深度 ",e(t("depth")),")"])},show_only_conversation_under_this:r=>{const{normalize:n}=r;return n(["只显示这个状态的回复"])},repeat_confirm:r=>{const{normalize:n}=r;return n(["您确定要转发这条状态吗?"])},repeat_confirm_title:r=>{const{normalize:n}=r;return n(["确认转发"])},repeat_confirm_accept_button:r=>{const{normalize:n}=r;return n(["转发"])},repeat_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要转发"])},edit:r=>{const{normalize:n}=r;return n(["编辑状态"])},edited_at:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(最后编辑于 ",e(t("time")),")"])},delete_confirm_title:r=>{const{normalize:n}=r;return n(["确认删除"])},delete_confirm_accept_button:r=>{const{normalize:n}=r;return n(["删除"])},delete_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["保留"])},show_attachment_in_modal:r=>{const{normalize:n}=r;return n(["在媒体模式中显示"])},status_history:r=>{const{normalize:n}=r;return n(["状态历史"])},delete_error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["删除状态时出错:",e(t(0))])},reaction_count_label:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("num"))," 人作出了表情回应"])}},user_card:{approve:r=>{const{normalize:n}=r;return n(["核准"])},block:r=>{const{normalize:n}=r;return n(["屏蔽"])},blocked:r=>{const{normalize:n}=r;return n(["已屏蔽!"])},deny:r=>{const{normalize:n}=r;return n(["拒绝"])},favorites:r=>{const{normalize:n}=r;return n(["喜欢"])},follow:r=>{const{normalize:n}=r;return n(["关注"])},follow_sent:r=>{const{normalize:n}=r;return n(["请求已发送!"])},follow_progress:r=>{const{normalize:n}=r;return n(["请求中…"])},follow_unfollow:r=>{const{normalize:n}=r;return n(["取消关注"])},followees:r=>{const{normalize:n}=r;return n(["正在关注"])},followers:r=>{const{normalize:n}=r;return n(["关注者"])},following:r=>{const{normalize:n}=r;return n(["正在关注!"])},follows_you:r=>{const{normalize:n}=r;return n(["关注了你!"])},its_you:r=>{const{normalize:n}=r;return n(["就是你!"])},media:r=>{const{normalize:n}=r;return n(["媒体"])},mute:r=>{const{normalize:n}=r;return n(["隐藏"])},muted:r=>{const{normalize:n}=r;return n(["已隐藏"])},per_day:r=>{const{normalize:n}=r;return n(["每天"])},remote_follow:r=>{const{normalize:n}=r;return n(["跨站关注"])},report:r=>{const{normalize:n}=r;return n(["报告"])},statuses:r=>{const{normalize:n}=r;return n(["状态"])},subscribe:r=>{const{normalize:n}=r;return n(["订阅"])},unsubscribe:r=>{const{normalize:n}=r;return n(["退订"])},unblock:r=>{const{normalize:n}=r;return n(["取消屏蔽"])},unblock_progress:r=>{const{normalize:n}=r;return n(["正在取消屏蔽…"])},block_progress:r=>{const{normalize:n}=r;return n(["正在屏蔽…"])},unmute:r=>{const{normalize:n}=r;return n(["取消隐藏"])},unmute_progress:r=>{const{normalize:n}=r;return n(["取消隐藏中…"])},mute_progress:r=>{const{normalize:n}=r;return n(["隐藏中…"])},admin_menu:{moderation:r=>{const{normalize:n}=r;return n(["仲裁"])},grant_admin:r=>{const{normalize:n}=r;return n(["赋予管理权限"])},revoke_admin:r=>{const{normalize:n}=r;return n(["撤销管理权限"])},grant_moderator:r=>{const{normalize:n}=r;return n(["赋予监察员权限"])},revoke_moderator:r=>{const{normalize:n}=r;return n(["撤销监察员权限"])},activate_account:r=>{const{normalize:n}=r;return n(["激活账号"])},deactivate_account:r=>{const{normalize:n}=r;return n(["关闭账号"])},delete_account:r=>{const{normalize:n}=r;return n(["删除账号"])},force_nsfw:r=>{const{normalize:n}=r;return n(["标记所有的帖子都是 - 工作场合不适"])},strip_media:r=>{const{normalize:n}=r;return n(["从帖子里删除媒体文件"])},force_unlisted:r=>{const{normalize:n}=r;return n(["强制帖子为不公开"])},sandbox:r=>{const{normalize:n}=r;return n(["强制帖子为只有关注者可看"])},disable_remote_subscription:r=>{const{normalize:n}=r;return n(["禁止从远程实例关注用户"])},disable_any_subscription:r=>{const{normalize:n}=r;return n(["完全禁止关注用户"])},quarantine:r=>{const{normalize:n}=r;return n(["从联合实例中禁止用户帖子"])},delete_user:r=>{const{normalize:n}=r;return n(["删除用户"])},delete_user_data_and_deactivate_confirmation:r=>{const{normalize:n}=r;return n(["这将永久删除该账户的数据并停用该账户。你完全确定吗?"])}},hidden:r=>{const{normalize:n}=r;return n(["已隐藏"])},show_repeats:r=>{const{normalize:n}=r;return n(["显示转发"])},hide_repeats:r=>{const{normalize:n}=r;return n(["隐藏转发"])},message:r=>{const{normalize:n}=r;return n(["消息"])},mention:r=>{const{normalize:n}=r;return n(["提及"])},bot:r=>{const{normalize:n}=r;return n(["机器人"])},highlight:{side:r=>{const{normalize:n}=r;return n(["侧边条纹"])},striped:r=>{const{normalize:n}=r;return n(["条纹背景"])},solid:r=>{const{normalize:n}=r;return n(["单一颜色背景"])},disabled:r=>{const{normalize:n}=r;return n(["不突出显示"])}},edit_profile:r=>{const{normalize:n}=r;return n(["编辑个人资料"])},approve_confirm_title:r=>{const{normalize:n}=r;return n(["确认批准"])},approve_confirm_accept_button:r=>{const{normalize:n}=r;return n(["批准"])},block_confirm_accept_button:r=>{const{normalize:n}=r;return n(["屏蔽"])},block_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要屏蔽"])},deactivated:r=>{const{normalize:n}=r;return n(["已停用"])},deny_confirm_title:r=>{const{normalize:n}=r;return n(["确认拒绝"])},deny_confirm_accept_button:r=>{const{normalize:n}=r;return n(["拒绝"])},deny_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要拒绝"])},deny_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您是否要拒绝 ",e(t("user"))," 的关注请求?"])},follow_cancel:r=>{const{normalize:n}=r;return n(["取消请求"])},unfollow_confirm_title:r=>{const{normalize:n}=r;return n(["确认取消关注"])},unfollow_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要取消关注 ",e(t("user"))," 吗?"])},unfollow_confirm_accept_button:r=>{const{normalize:n}=r;return n(["取消关注"])},unfollow_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要取消关注"])},mute_confirm_title:r=>{const{normalize:n}=r;return n(["确认隐藏"])},mute_confirm_accept_button:r=>{const{normalize:n}=r;return n(["隐藏"])},mute_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要隐藏"])},mute_duration_prompt:r=>{const{normalize:n}=r;return n(["让这个用户隐藏(0表示无限期):"])},remove_follower:r=>{const{normalize:n}=r;return n(["移除关注者"])},remove_follower_confirm_title:r=>{const{normalize:n}=r;return n(["确认移除关注者"])},remove_follower_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["保留"])},remove_follower_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要将 ",e(t("user"))," 从您的关注者里移除吗?"])},birthday:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["生于 ",e(t("birthday"))])},note:r=>{const{normalize:n}=r;return n(["备注"])},approve_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要批准"])},approve_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您是否要批准 ",e(t("user"))," 的关注请求?"])},block_confirm_title:r=>{const{normalize:n}=r;return n(["确认屏蔽"])},block_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要屏蔽 ",e(t("user"))," 吗?"])},mute_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要隐藏 ",e(t("user"))," 吗?"])},remove_follower_confirm_accept_button:r=>{const{normalize:n}=r;return n(["移除"])},note_blank:r=>{const{normalize:n}=r;return n(["(空)"])},edit_note:r=>{const{normalize:n}=r;return n(["编辑备注"])},edit_note_apply:r=>{const{normalize:n}=r;return n(["应用"])},edit_note_cancel:r=>{const{normalize:n}=r;return n(["取消"])}},user_profile:{timeline_title:r=>{const{normalize:n}=r;return n(["用户时间线"])},profile_does_not_exist:r=>{const{normalize:n}=r;return n(["抱歉,此个人资料不存在。"])},profile_loading_error:r=>{const{normalize:n}=r;return n(["抱歉,载入个人资料时出错。"])}},user_reporting:{title:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["报告 ",e(t(0))])},add_comment_description:r=>{const{normalize:n}=r;return n(["此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:"])},additional_comments:r=>{const{normalize:n}=r;return n(["其它信息"])},forward_description:r=>{const{normalize:n}=r;return n(["这个账号来自另一个服务器。是否同时发送一份报告副本到那里?"])},forward_to:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["转发 ",e(t(0))])},submit:r=>{const{normalize:n}=r;return n(["提交"])},generic_error:r=>{const{normalize:n}=r;return n(["当处理您的请求时,发生了一个错误。"])}},who_to_follow:{more:r=>{const{normalize:n}=r;return n(["更多"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])}},tool_tip:{media_upload:r=>{const{normalize:n}=r;return n(["上传媒体"])},repeat:r=>{const{normalize:n}=r;return n(["转发"])},reply:r=>{const{normalize:n}=r;return n(["回复"])},favorite:r=>{const{normalize:n}=r;return n(["喜欢"])},user_settings:r=>{const{normalize:n}=r;return n(["用户设置"])},reject_follow_request:r=>{const{normalize:n}=r;return n(["拒绝关注请求"])},add_reaction:r=>{const{normalize:n}=r;return n(["添加互动"])},bookmark:r=>{const{normalize:n}=r;return n(["书签"])},accept_follow_request:r=>{const{normalize:n}=r;return n(["接受关注请求"])},toggle_expand:r=>{const{normalize:n}=r;return n(["展开或折叠通知以显示帖子全文"])},toggle_mute:r=>{const{normalize:n}=r;return n(["展开或折叠通知以显示已隐藏的内容"])},autocomplete_available:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["共有 ",e(t("number"))," 个结果可用。使用向上和向下键浏览它们。"])}},upload:{error:{base:r=>{const{normalize:n}=r;return n(["上传不成功。"])},file_too_big:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["文件太大了 [",e(t("filesize")),e(t("filesizeunit"))," / ",e(t("allowedsize")),e(t("allowedsizeunit")),"]"])},default:r=>{const{normalize:n}=r;return n(["迟些再试"])},message:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["上传错误:",e(t(0))])}},file_size_units:{B:r=>{const{normalize:n}=r;return n(["B"])},KiB:r=>{const{normalize:n}=r;return n(["KiB"])},MiB:r=>{const{normalize:n}=r;return n(["MiB"])},GiB:r=>{const{normalize:n}=r;return n(["GiB"])},TiB:r=>{const{normalize:n}=r;return n(["TiB"])}}},search:{people:r=>{const{normalize:n}=r;return n(["人"])},hashtags:r=>{const{normalize:n}=r;return n(["话题标签"])},person_talking:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("count"))," 人正在讨论"])},people_talking:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("count"))," 人正在讨论"])},no_results:r=>{const{normalize:n}=r;return n(["没有搜索结果"])},no_more_results:r=>{const{normalize:n}=r;return n(["没有更多结果"])},load_more:r=>{const{normalize:n}=r;return n(["加载更多结果"])}},password_reset:{forgot_password:r=>{const{normalize:n}=r;return n(["忘记密码了?"])},password_reset:r=>{const{normalize:n}=r;return n(["重置密码"])},instruction:r=>{const{normalize:n}=r;return n(["输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。"])},placeholder:r=>{const{normalize:n}=r;return n(["您的电邮地址或者用户名"])},check_email:r=>{const{normalize:n}=r;return n(["检查您的邮箱,会有一个链接用于重置密码。"])},return_home:r=>{const{normalize:n}=r;return n(["回到首页"])},too_many_requests:r=>{const{normalize:n}=r;return n(["您达到了尝试次数的上限,请稍后再试。"])},password_reset_disabled:r=>{const{normalize:n}=r;return n(["密码重置已被禁用。请联系您的实例管理员。"])},password_reset_required_but_mailer_is_disabled:r=>{const{normalize:n}=r;return n(["您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。"])},password_reset_required:r=>{const{normalize:n}=r;return n(["您必须重置密码才能登陆。"])}},remote_user_resolver:{error:r=>{const{normalize:n}=r;return n(["未找到。"])},searching_for:r=>{const{normalize:n}=r;return n(["搜索"])},remote_user_resolver:r=>{const{normalize:n}=r;return n(["远程用户解析器"])}},emoji:{keep_open:r=>{const{normalize:n}=r;return n(["选择器保持打开"])},stickers:r=>{const{normalize:n}=r;return n(["贴纸"])},unicode:r=>{const{normalize:n}=r;return n(["Unicode 表情符号"])},custom:r=>{const{normalize:n}=r;return n(["自定义表情符号"])},add_emoji:r=>{const{normalize:n}=r;return n(["插入表情符号"])},search_emoji:r=>{const{normalize:n}=r;return n(["搜索表情符号"])},emoji:r=>{const{normalize:n}=r;return n(["表情符号"])},load_all:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["加载所有表情符号(共 ",e(t("emojiAmount"))," 个)"])},load_all_hint:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["最先加载的 ",e(t("saneAmount"))," 表情符号,加载全部表情符号可能会带来性能问题。"])},unicode_groups:{flags:r=>{const{normalize:n}=r;return n(["旗帜"])},"food-and-drink":r=>{const{normalize:n}=r;return n(["饮食"])},objects:r=>{const{normalize:n}=r;return n(["物件"])},"people-and-body":r=>{const{normalize:n}=r;return n(["人和身体"])},symbols:r=>{const{normalize:n}=r;return n(["符号"])},"travel-and-places":r=>{const{normalize:n}=r;return n(["旅行和地点"])},activities:r=>{const{normalize:n}=r;return n(["活动"])},"animals-and-nature":r=>{const{normalize:n}=r;return n(["动物和自然"])},"smileys-and-emotion":r=>{const{normalize:n}=r;return n(["表情与情感"])}},regional_indicator:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["地区指示符 ",e(t("letter"))])},unpacked:r=>{const{normalize:n}=r;return n(["未分组的表情符号"])}},about:{mrf:{simple:{quarantine_desc:r=>{const{normalize:n}=r;return n(["本实例向以下实例仅发送公开的帖子:"])},quarantine:r=>{const{normalize:n}=r;return n(["隔离"])},reject_desc:r=>{const{normalize:n}=r;return n(["本实例不会接收来自下列实例的消息:"])},reject:r=>{const{normalize:n}=r;return n(["拒绝"])},accept_desc:r=>{const{normalize:n}=r;return n(["本实例只接收来自下列实例的消息:"])},simple_policies:r=>{const{normalize:n}=r;return n(["对于特定实例的策略"])},accept:r=>{const{normalize:n}=r;return n(["接受"])},media_removal:r=>{const{normalize:n}=r;return n(["移除媒体"])},media_nsfw_desc:r=>{const{normalize:n}=r;return n(["本实例将来自以下实例的媒体内容强制设置为敏感内容:"])},media_nsfw:r=>{const{normalize:n}=r;return n(["强制设置媒体为敏感内容"])},media_removal_desc:r=>{const{normalize:n}=r;return n(["本实例移除来自以下实例的媒体内容:"])},ftl_removal_desc:r=>{const{normalize:n}=r;return n(["该实例在从“已知网络”时间线上移除了下列实例:"])},ftl_removal:r=>{const{normalize:n}=r;return n(["从“已知网络”时间线上移除"])},reason:r=>{const{normalize:n}=r;return n(["理由"])},not_applicable:r=>{const{normalize:n}=r;return n(["无"])},instance:r=>{const{normalize:n}=r;return n(["实例"])}},mrf_policies_desc:r=>{const{normalize:n}=r;return n(["MRF 策略会影响本实例的互通行为。以下策略已启用:"])},mrf_policies:r=>{const{normalize:n}=r;return n(["已启用的 MRF 策略"])},keyword:{ftl_removal:r=>{const{normalize:n}=r;return n(["从“全部已知网络”时间线上移除"])},keyword_policies:r=>{const{normalize:n}=r;return n(["关键词策略"])},is_replaced_by:r=>{const{normalize:n}=r;return n(["→"])},replace:r=>{const{normalize:n}=r;return n(["替换"])},reject:r=>{const{normalize:n}=r;return n(["拒绝"])}},federation:r=>{const{normalize:n}=r;return n(["联邦互通"])}},staff:r=>{const{normalize:n}=r;return n(["管理人员"])}},domain_mute_card:{unmute_progress:r=>{const{normalize:n}=r;return n(["正在取消隐藏…"])},unmute:r=>{const{normalize:n}=r;return n(["取消隐藏"])},mute_progress:r=>{const{normalize:n}=r;return n(["隐藏中…"])},mute:r=>{const{normalize:n}=r;return n(["隐藏"])}},errors:{storage_unavailable:r=>{const{normalize:n}=r;return n(["Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"])}},shoutbox:{title:r=>{const{normalize:n}=r;return n(["留言板"])}},display_date:{today:r=>{const{normalize:n}=r;return n(["今天"])}},file_type:{file:r=>{const{normalize:n}=r;return n(["文件"])},image:r=>{const{normalize:n}=r;return n(["图片"])},video:r=>{const{normalize:n}=r;return n(["视频"])},audio:r=>{const{normalize:n}=r;return n(["音频"])}},chats:{empty_chat_list_placeholder:r=>{const{normalize:n}=r;return n(["您还没有任何聊天记录。开始聊天吧!"])},error_sending_message:r=>{const{normalize:n}=r;return n(["发送消息时出了点问题。"])},error_loading_chat:r=>{const{normalize:n}=r;return n(["加载聊天时出了点问题。"])},delete_confirm:r=>{const{normalize:n}=r;return n(["您确定要删除此消息吗?"])},more:r=>{const{normalize:n}=r;return n(["更多"])},empty_message_error:r=>{const{normalize:n}=r;return n(["无法发布空消息"])},new:r=>{const{normalize:n}=r;return n(["新聊天"])},chats:r=>{const{normalize:n}=r;return n(["聊天"])},delete:r=>{const{normalize:n}=r;return n(["删除"])},message_user:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["发消息给 ",e(t("nickname"))])},you:r=>{const{normalize:n}=r;return n(["你:"])}},announcements:{page_header:r=>{const{normalize:n}=r;return n(["公告"])},title:r=>{const{normalize:n}=r;return n(["公告"])},mark_as_read_action:r=>{const{normalize:n}=r;return n(["标为已读"])},post_form_header:r=>{const{normalize:n}=r;return n(["发布公告"])},post_placeholder:r=>{const{normalize:n}=r;return n(["在这里输入公告内容..."])},post_action:r=>{const{normalize:n}=r;return n(["发布"])},post_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["错误:",e(t("error"))])},close_error:r=>{const{normalize:n}=r;return n(["关闭"])},delete_action:r=>{const{normalize:n}=r;return n(["删除"])},start_time_prompt:r=>{const{normalize:n}=r;return n(["起始时间: "])},end_time_prompt:r=>{const{normalize:n}=r;return n(["终止时间: "])},all_day_prompt:r=>{const{normalize:n}=r;return n(["这是全天的事件"])},published_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["发表于 ",e(t("time"))])},start_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["开始于 ",e(t("time"))])},end_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["结束于 ",e(t("time"))])},edit_action:r=>{const{normalize:n}=r;return n(["编辑"])},submit_edit_action:r=>{const{normalize:n}=r;return n(["提交"])},cancel_edit_action:r=>{const{normalize:n}=r;return n(["取消"])},inactive_message:r=>{const{normalize:n}=r;return n(["这个公告不活跃"])}},report:{reported_user:r=>{const{normalize:n}=r;return n(["被举报者:"])},state_closed:r=>{const{normalize:n}=r;return n(["已关闭"])},state_resolved:r=>{const{normalize:n}=r;return n(["已解决"])},reporter:r=>{const{normalize:n}=r;return n(["举报者:"])},state_open:r=>{const{normalize:n}=r;return n(["开启"])},reported_statuses:r=>{const{normalize:n}=r;return n(["已举报的状态:"])},notes:r=>{const{normalize:n}=r;return n(["备注:"])},state:r=>{const{normalize:n}=r;return n(["状态:"])}},unicode_domain_indicator:{tooltip:r=>{const{normalize:n}=r;return n(["此域名包含非 ascii 字符。"])}},update:{update_bugs_gitlab:r=>{const{normalize:n}=r;return n(["Pleroma GitLab"])},update_changelog:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["关于变化的更多细节,请参见 ",e(t("theFullChangelog"))," 。"])},update_changelog_here:r=>{const{normalize:n}=r;return n(["完整的更新日志"])},big_update_title:r=>{const{normalize:n}=r;return n(["请忍耐一下"])},big_update_content:r=>{const{normalize:n}=r;return n(["我们已经有一段时间没有发布发行版,所以事情的外观和感觉可能与你习惯的不一样。"])},update_bugs:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["请在 ",e(t("pleromaGitlab"))," 上报告任何问题和bug,因为我们已经改变了很多,虽然我们进行了彻底的测试,并且自己使用了开发版本,但我们可能错过了一些东西。我们欢迎你对你可能遇到的问题或如何改进Pleroma和Pleroma-FE提出反馈和建议。"])},art_by:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["Art by ",e(t("linkToArtist"))])}},lists:{search:r=>{const{normalize:n}=r;return n(["搜索用户"])},create:r=>{const{normalize:n}=r;return n(["创建"])},save:r=>{const{normalize:n}=r;return n(["保存更改"])},delete:r=>{const{normalize:n}=r;return n(["删除列表"])},following_only:r=>{const{normalize:n}=r;return n(["限制于正在关注"])},manage_lists:r=>{const{normalize:n}=r;return n(["管理列表"])},manage_members:r=>{const{normalize:n}=r;return n(["管理列表成员"])},add_members:r=>{const{normalize:n}=r;return n(["搜索更多用户"])},remove_from_list:r=>{const{normalize:n}=r;return n(["从列表中移除"])},add_to_list:r=>{const{normalize:n}=r;return n(["添加到列表"])},is_in_list:r=>{const{normalize:n}=r;return n(["已在列表中"])},editing_list:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["正在编辑列表 ",e(t("listTitle"))])},creating_list:r=>{const{normalize:n}=r;return n(["正在创建新的列表"])},update_title:r=>{const{normalize:n}=r;return n(["保存标题"])},really_delete:r=>{const{normalize:n}=r;return n(["真的要删除列表吗?"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["操作列表时出错:",e(t(0))])},lists:r=>{const{normalize:n}=r;return n(["列表"])},new:r=>{const{normalize:n}=r;return n(["新的列表"])},title:r=>{const{normalize:n}=r;return n(["列表标题"])}},admin_dash:{window_title:r=>{const{normalize:n}=r;return n(["管理员"])},old_ui_link:r=>{const{normalize:n}=r;return n(["旧的管理界面在此处"])},reset_all:r=>{const{normalize:n}=r;return n(["重置全部"])},commit_all:r=>{const{normalize:n}=r;return n(["保存全部"])},tabs:{nodb:r=>{const{normalize:n}=r;return n(["无数据库配置"])},instance:r=>{const{normalize:n}=r;return n(["实例"])},limits:r=>{const{normalize:n}=r;return n(["限制"])},frontends:r=>{const{normalize:n}=r;return n(["前端"])}},nodb:{heading:r=>{const{normalize:n}=r;return n(["数据库配置已禁用"])},documentation:r=>{const{normalize:n}=r;return n(["文档"])},text2:r=>{const{normalize:n}=r;return n(["大多数配置选项将不可用。"])},text:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["你需要修改后端配置文件,以便将 ",e(t("property"))," 设置为 ",e(t("value")),",更多内容请参见 ",e(t("documentation")),"。"])}},captcha:{native:r=>{const{normalize:n}=r;return n(["本地"])},kocaptcha:r=>{const{normalize:n}=r;return n(["KoCaptcha"])}},instance:{instance:r=>{const{normalize:n}=r;return n(["实例信息"])},registrations:r=>{const{normalize:n}=r;return n(["用户注册"])},captcha_header:r=>{const{normalize:n}=r;return n(["验证码"])},kocaptcha:r=>{const{normalize:n}=r;return n(["KoCaptcha 设置"])},access:r=>{const{normalize:n}=r;return n(["实例访问"])},restrict:{header:r=>{const{normalize:n}=r;return n(["限制匿名访客的访问"])},timelines:r=>{const{normalize:n}=r;return n(["时间线访问"])},profiles:r=>{const{normalize:n}=r;return n(["用户个人资料访问"])},activities:r=>{const{normalize:n}=r;return n(["状态/活动访问"])},description:r=>{const{normalize:n}=r;return n(["允许/不允许访问特定 API 的详细设置。默认情况下(不确定状态),如果实例不是公开的,它将拒绝访问;勾选复选框意味着即使实例是公开的,也拒绝访问;不勾选意味着即使实例是私有的,也允许访问。请注意,如果某些设置被设定,可能会发生意想不到的行为,例如,如果个人资料访问被禁用,显示的帖文将不包含个人资料信息。"])}}},limits:{arbitrary_limits:r=>{const{normalize:n}=r;return n(["任意限制"])},posts:r=>{const{normalize:n}=r;return n(["帖文限制"])},uploads:r=>{const{normalize:n}=r;return n(["附件限制"])},users:r=>{const{normalize:n}=r;return n(["用户个人资料限制"])},profile_fields:r=>{const{normalize:n}=r;return n(["个人资料字段限制"])},user_uploads:r=>{const{normalize:n}=r;return n(["个人资料媒体限制"])}},frontend:{repository:r=>{const{normalize:n}=r;return n(["存储库链接"])},versions:r=>{const{normalize:n}=r;return n(["可用版本"])},build_url:r=>{const{normalize:n}=r;return n(["构建产物 URL"])},reinstall:r=>{const{normalize:n}=r;return n(["重新安装"])},is_default:r=>{const{normalize:n}=r;return n(["(默认)"])},is_default_custom:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(默认,版本:",e(t("version")),")"])},install:r=>{const{normalize:n}=r;return n(["安装"])},install_version:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["安装版本 ",e(t("version"))])},more_install_options:r=>{const{normalize:n}=r;return n(["更多安装选项"])},more_default_options:r=>{const{normalize:n}=r;return n(["更多默认设置选项"])},set_default:r=>{const{normalize:n}=r;return n(["设为默认"])},set_default_version:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["将版本 ",e(t("version"))," 设为默认"])},wip_notice:r=>{const{normalize:n}=r;return n(["请注意,此部分是一个WIP,缺乏某些功能,因为前端管理的后台实现并不完整。"])},default_frontend:r=>{const{normalize:n}=r;return n(["默认前端"])},default_frontend_tip:r=>{const{normalize:n}=r;return n(["默认的前端将显示给所有用户。目前还没有办法让用户选择个人的前端。如果你不使用 PleromaFE,你很可能不得不使用旧的和有问题的 AdminFE 来进行实例配置,直到我们替换它。"])},default_frontend_tip2:r=>{const{normalize:n}=r;return n(["WIP: 由于 Pleroma 后端没有正确列出所有已安装的前端,你必须手动输入名称和引用。下面的列表提供了填写这些值的快捷方式。"])},available_frontends:r=>{const{normalize:n}=r;return n(["可供安装"])}},temp_overrides:{":pleroma":{":instance":{":public":{label:r=>{const{normalize:n}=r;return n(["实例是公开的"])},description:r=>{const{normalize:n}=r;return n(["禁用此功能将使所有的 API 只能被已登录用户访问,这将使公共和联邦时间线无法被匿名访客访问。"])}},":limit_to_local_content":{label:r=>{const{normalize:n}=r;return n(["将搜索限于本地内容"])},description:r=>{const{normalize:n}=r;return n(["禁用未认证用户(默认)、所有用户或无人的全局网络搜索"])}},":description_limit":{label:r=>{const{normalize:n}=r;return n(["限制"])},description:r=>{const{normalize:n}=r;return n(["附件描述的字数限制"])}},":background_image":{label:r=>{const{normalize:n}=r;return n(["背景图片"])},description:r=>{const{normalize:n}=r;return n(["背景图片(主要使用于 PleromaFE)"])}}}}},wip_notice:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["此管理仪表板是实验性和 WIP 的,",e(t("adminFeLink")),"。"])}}}}}]); -//# sourceMappingURL=zh-json.5831b903c3e6d281f122.js.map -\ No newline at end of file diff --git a/priv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js.map b/priv/static/static/js/i18n/zh-json.5831b903c3e6d281f122.js.map @@ -1 +0,0 @@ -{"version":3,"file":"static/js/i18n/zh-json.5831b903c3e6d281f122.js","mappings":"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","sources":["webpack://pleroma_fe/./src/i18n/zh.json"],"sourcesContent":["export default {\n \"chat\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])}\n },\n \"exporter\": {\n \"export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出\"])},\n \"processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在处理,稍后会提示您下载文件\"])}\n },\n \"features_panel\": {\n \"chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"gopher\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gopher\"])},\n \"media_proxy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体代理\"])},\n \"scope_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可见范围设置\"])},\n \"text_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文字数量限制\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"功能\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])},\n \"pleroma_chat_messages\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 聊天\"])},\n \"upload_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传限制\"])},\n \"shout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"留言板\"])}\n },\n \"finder\": {\n \"error_fetching_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"获取用户时发生错误\"])},\n \"find_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"寻找用户\"])}\n },\n \"general\": {\n \"apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"应用\"])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发生了一个错误\"])},\n \"optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可选\"])},\n \"show_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开\"])},\n \"show_less\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"收起\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])},\n \"disable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用\"])},\n \"enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"启用\"])},\n \"confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认\"])},\n \"verify\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证\"])},\n \"dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"忽略\"])},\n \"peek\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重试\"])},\n \"error_retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请重试\"])},\n \"loading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"载入中…\"])},\n \"role\": {\n \"moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"监察员\"])},\n \"admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])}\n },\n \"flash_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击以使用 Ruffle 显示 Flash 内容(实验性,可能无效)。\"])},\n \"flash_security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注意这可能有潜在的危险,因为 Flash 内容仍然是任意的代码。\"])},\n \"flash_fail\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Flash 内容加载失败,请在控制台查看详情。\"])},\n \"scope_in_timeline\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公开\"])},\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私讯\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅关注者\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列外\"])}\n },\n \"scroll_to_top\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"滚动至顶\"])},\n \"generic_error_message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"发生一个错误:\", _interpolate(_list(0))])},\n \"never_show_again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不再显示\"])},\n \"undo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销\"])},\n \"yes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"是\"])},\n \"no\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"否\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消固定该项\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"固定该项\"])}\n },\n \"image_cropper\": {\n \"crop_picture\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"裁剪图片\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存\"])},\n \"save_without_cropping\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存未经裁剪的图片\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])}\n },\n \"importer\": {\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"success\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入成功。\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入此文件时出现一个错误。\"])}\n },\n \"login\": {\n \"login\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登录\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用 OAuth 登录\"])},\n \"logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:lain\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"username\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户名\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登录后加入讨论\"])},\n \"authentication_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证码\"])},\n \"enter_recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入一个恢复码\"])},\n \"enter_two_factor_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入一个双重因素验证码\"])},\n \"recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"恢复码\"])},\n \"heading\": {\n \"totp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双重因素验证\"])},\n \"recovery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双重因素恢复\"])}\n },\n \"logout_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要登出\"])},\n \"logout_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认登出\"])},\n \"logout_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"logout_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要登出吗?\"])}\n },\n \"media_modal\": {\n \"previous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"往前\"])},\n \"next\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"往后\"])},\n \"hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭媒体查看器\"])},\n \"counter\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"current\")), \" / \", _interpolate(_named(\"total\"))])}\n },\n \"nav\": {\n \"about\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关于\"])},\n \"back\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"后退\"])},\n \"chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本站聊天\"])},\n \"friend_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注请求\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"interactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"互动\"])},\n \"dms\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私信\"])},\n \"public_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公共时间线\"])},\n \"timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线\"])},\n \"twkn\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已知网络\"])},\n \"user_search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户搜索\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])},\n \"preferences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"偏好设置\"])},\n \"administration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线\"])},\n \"bookmarks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"home_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主页时间线\"])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表\"])},\n \"edit_finish\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完成编辑\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开通知(有未读的)\"])},\n \"mobile_notifications_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭通知\"])},\n \"announcements\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"edit_nav_mobile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自定义导航栏\"])},\n \"edit_pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑固定的项目\"])},\n \"mobile_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"切换移动设备侧栏\"])},\n \"search_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭搜索栏\"])}\n },\n \"notifications\": {\n \"broken_favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未知的状态,正在搜索中…\"])},\n \"favorited_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢了你的状态\"])},\n \"followed_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注了你\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的通知\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"read\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已阅!\"])},\n \"repeated_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发了你的状态\"])},\n \"no_more_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多的通知\"])},\n \"reacted_with\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"作出了 \", _interpolate(_list(0)), \" 的反应\"])},\n \"migrated_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"迁移到了\"])},\n \"follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"想要关注你\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"取得通知时发生错误:\", _interpolate(_list(0))])},\n \"poll_ended\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票结束了\"])},\n \"submitted_report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交举报\"])}\n },\n \"polls\": {\n \"add_poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"增加投票\"])},\n \"add_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"增加选项\"])},\n \"option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选项\"])},\n \"votes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票\"])},\n \"vote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票\"])},\n \"type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票类型\"])},\n \"single_choice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"单选\"])},\n \"multiple_choices\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"多选\"])},\n \"expiry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票期限\"])},\n \"expires_in\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"投票于 \", _interpolate(_list(0)), \" 后结束\"])},\n \"expired\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"投票 \", _interpolate(_list(0)), \" 前已结束\"])},\n \"not_enough_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票的选项太少\"])},\n \"votes_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" 票\"]), _normalize([_interpolate(_named(\"count\")), \" 票\"])])},\n \"people_voted_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" 人已投票\"]), _normalize([_interpolate(_named(\"count\")), \" 人已投票\"])])}\n },\n \"stickers\": {\n \"add_sticker\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加贴纸\"])}\n },\n \"interactions\": {\n \"favs_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发和喜欢\"])},\n \"follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新的关注者\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的互动\"])},\n \"moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户迁移\"])},\n \"reports\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"举报\"])},\n \"emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情回应\"])}\n },\n \"post_status\": {\n \"new_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布新状态\"])},\n \"account_not_locked_warning\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"你的帐号没有 \", _interpolate(_list(0)), \"。任何人都可以关注你并浏览你的上锁内容。\"])},\n \"account_not_locked_warning_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上锁\"])},\n \"attachments_sensitive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标记附件为敏感内容\"])},\n \"content_type\": {\n \"text/plain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"纯文本\"])},\n \"text/html\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"HTML\"])},\n \"text/markdown\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Markdown\"])},\n \"text/bbcode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"BBCode\"])}\n },\n \"content_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题(可选)\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚抵达上海。\"])},\n \"direct_warning_to_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容只有被提及的用户能够看到。\"])},\n \"direct_warning_to_first_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容只有被在消息开始处提及的用户能够看到。\"])},\n \"posting\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送中\"])},\n \"scope_notice\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容可以被所有人看到\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注你的人才能看到本条内容\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容既不在公共时间线,也不会在所有已知网络上可见\"])}\n },\n \"scope\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私信 - 只发送给被提及的用户\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅关注者 - 只有关注了你的人能看到\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公共 - 发送到公共时间轴\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不公开 - 不会发送到公共时间轴\"])}\n },\n \"preview_empty\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"空的\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"media_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体描述\"])},\n \"media_description_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更新媒体失败,请重试\"])},\n \"empty_status_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能发布没有内容、没有附件的发文\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送\"])},\n \"edit_remote_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"其它远程实例可能不支持编辑并且无法接收您的帖子的最新版本。\"])},\n \"edit_unsupported_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 不支持对提及或投票进行编辑。\"])},\n \"edit_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑状态\"])},\n \"content_type_selection\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发帖格式\"])},\n \"scope_notice_dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭此提示\"])}\n },\n \"registration\": {\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"简介\"])},\n \"email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"电子邮箱\"])},\n \"fullname\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示名称\"])},\n \"password_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认密码\"])},\n \"registration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"邀请码\"])},\n \"captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"new_captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击图片获取新的验证码\"])},\n \"username_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:lain\"])},\n \"fullname_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:岩仓玲音\"])},\n \"bio_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:\\n你好,我是玲音。\\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。\"])},\n \"validations\": {\n \"username_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"fullname_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"email_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_confirmation_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_confirmation_match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码不一致\"])},\n \"birthday_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能为空\"])},\n \"birthday_min_age\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"必须在 \", _interpolate(_named(\"date\")), \" 或之前\"])}\n },\n \"reason_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此实例的注册需要手动批准。\\n请让管理员知道您为什么想要注册。\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册理由\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你想从服务器收到什么语言的邮件?\"])},\n \"bio_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"介绍(可选)\"])},\n \"email_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"电子邮件(可选)\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日:\"])},\n \"birthday_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日(可选):\"])}\n },\n \"selectable_list\": {\n \"select_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选择全部\"])}\n },\n \"settings\": {\n \"app_name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"App 名称\"])},\n \"security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安全\"])},\n \"enter_current_password_to_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入您当前的密码来确认您的身份\"])},\n \"mfa\": {\n \"otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OTP\"])},\n \"setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置 OTP\"])},\n \"wait_pre_setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预设 OTP\"])},\n \"confirm_and_enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认并启用 OTP\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双因素验证\"])},\n \"generate_new_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生成新的恢复码\"])},\n \"warning_of_generate_new_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当您生成新的恢复码时,您旧的恢复码将会失效。\"])},\n \"recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"恢复码。\"])},\n \"waiting_a_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在接收备份码…\"])},\n \"recovery_codes_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。\"])},\n \"authentication_methods\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"身份验证方法\"])},\n \"scan\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"扫一下\"])},\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:\"])},\n \"secret_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密钥\"])}\n },\n \"verify\": {\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要启用双因素验证,请输入您的双因素验证 app 里的数字:\"])}\n }\n },\n \"attachmentRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件\"])},\n \"attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像\"])},\n \"avatarAltRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像(通知)\"])},\n \"avatarRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像\"])},\n \"background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景\"])},\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"简介\"])},\n \"block_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导出\"])},\n \"block_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出你的屏蔽名单到一个 csv 文件\"])},\n \"block_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导入\"])},\n \"block_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入屏蔽名单出错\"])},\n \"blocks_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导入成功!需要一点时间来处理。\"])},\n \"blocks_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"btnRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"cBlue\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"蓝色(回复,关注)\"])},\n \"cGreen\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"绿色(转发)\"])},\n \"cOrange\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"橙色(喜欢)\"])},\n \"cRed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"红色(取消)\"])},\n \"change_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改密码\"])},\n \"change_password_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改密码的时候出了点问题。\"])},\n \"changed_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"成功修改了密码!\"])},\n \"collapse_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折叠带主题的内容\"])},\n \"composing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撰写\"])},\n \"confirm_new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认新密码\"])},\n \"current_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前头像\"])},\n \"current_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前密码\"])},\n \"current_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您当前的横幅图片\"])},\n \"data_import_export_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"数据导入/导出\"])},\n \"default_vis\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认可见范围\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账户\"])},\n \"delete_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"永久删除你的帐号和所有数据。\"])},\n \"delete_account_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账户时发生错误,如果一直删除不了,请联系实例管理员。\"])},\n \"delete_account_instructions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在下面输入您的密码来确认删除账户。\"])},\n \"avatar_size_instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐的头像图片最小尺寸为 150x150 像素。\"])},\n \"export_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出预置主题\"])},\n \"filtering\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"过滤器\"])},\n \"filtering_explanation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"所有包含以下词汇的内容都会被隐藏,一行一个\"])},\n \"follow_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出关注\"])},\n \"follow_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将关注导出成 csv 文件\"])},\n \"follow_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入关注\"])},\n \"follow_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入关注时错误\"])},\n \"follows_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注已导入!尚需要一些时间来处理。\"])},\n \"foreground\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前景\"])},\n \"general\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通用\"])},\n \"hide_attachments_in_convo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在对话中隐藏附件\"])},\n \"hide_attachments_in_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在时间线上隐藏附件\"])},\n \"hide_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示被隐藏的用户的帖子\"])},\n \"max_thumbnails\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"每个帖子最多能显示的缩略图数量\"])},\n \"hide_isp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例独有的面板\"])},\n \"preload_images\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预载图片\"])},\n \"use_one_click_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击一次以打开工作场所不适宜(NSFW)的附件\"])},\n \"hide_post_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏帖子的统计数据(例如:喜欢的次数)\"])},\n \"hide_user_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏用户的统计数据(例如:关注者的数量)\"])},\n \"hide_filtered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏过滤的状态\"])},\n \"import_blocks_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件中导入拉黑名单\"])},\n \"import_followers_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件中导入关注\"])},\n \"import_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入预置主题\"])},\n \"inputRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"checkboxRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"复选框\"])},\n \"instance_default\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(默认:\", _interpolate(_named(\"value\")), \")\"])},\n \"instance_default_simple\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(默认)\"])},\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面\"])},\n \"interfaceLanguage\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面语言\"])},\n \"invalid_theme_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。\"])},\n \"limited_availability\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在您的浏览器中无法使用\"])},\n \"links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"链接\"])},\n \"lock_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您需要手动审核关注请求\"])},\n \"loop_video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"循环视频\"])},\n \"loop_video_silent_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只循环没有声音的视频(例如:Mastodon 里的“GIF”)\"])},\n \"mutes_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"play_videos_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在弹出框内播放视频\"])},\n \"use_contain_fit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生成缩略图时不要裁剪附件\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"名字\"])},\n \"name_bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"名字及简介\"])},\n \"new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新密码\"])},\n \"notification_visibility\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要显示的通知类型\"])},\n \"notification_visibility_follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注\"])},\n \"notification_visibility_likes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"notification_visibility_mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"notification_visibility_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"no_rich_text_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示富文本格式\"])},\n \"no_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有屏蔽\"])},\n \"no_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有隐藏\"])},\n \"hide_follows_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要显示我所关注的人\"])},\n \"hide_followers_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要显示关注我的人\"])},\n \"show_admin_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在我的个人资料中显示“管理员”徽章\"])},\n \"show_moderator_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在我的个人资料中显示“监察员”徽章\"])},\n \"nsfw_clickthrough\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将不和谐附件和链接预览隐藏,点击才会显示\"])},\n \"oauth_tokens\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth令牌\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"令牌\"])},\n \"refresh_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刷新令牌\"])},\n \"valid_until\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"有效期至\"])},\n \"revoke_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤消\"])},\n \"panelRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板\"])},\n \"pause_on_unfocused\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在离开页面时暂停时间线推送\"])},\n \"presets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预置\"])},\n \"profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人背景图\"])},\n \"profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"横幅图片\"])},\n \"profile_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料\"])},\n \"radii_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置界面边缘的圆角 (单位:像素)\"])},\n \"replies_in_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线中的回复\"])},\n \"reply_visibility_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示所有回复\"])},\n \"reply_visibility_following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示发送给我的回复/发送给我关注的用户的回复\"])},\n \"reply_visibility_self\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示发送给我的回复\"])},\n \"autohide_floating_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自动隐藏新帖子的按钮(移动设备)\"])},\n \"saving_err\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存设置时发生错误\"])},\n \"saving_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置已保存\"])},\n \"search_user_to_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索你想屏蔽的用户\"])},\n \"search_user_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索你想要隐藏的用户\"])},\n \"security_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安全\"])},\n \"scope_copy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复时复制可见范围(私信中永远会复制)\"])},\n \"minimal_scopes_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使发文可见范围的选项最少化\"])},\n \"set_new_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新头像\"])},\n \"set_new_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新的个人资料背景\"])},\n \"set_new_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新的横幅图片\"])},\n \"settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置\"])},\n \"subject_input_always_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"总是显示主题框\"])},\n \"subject_line_behavior\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复时复制主题\"])},\n \"subject_line_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"类似电子邮件: \\\"re: 主题\\\"\"])},\n \"subject_line_mastodon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"类似 mastodon: 与原主题相同\"])},\n \"subject_line_noop\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要复制\"])},\n \"post_status_content_type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发文状态内容类型\"])},\n \"stop_gifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"鼠标悬停时播放GIF\"])},\n \"streaming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"滚动到顶部时自动推送新内容\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文本\"])},\n \"theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题\"])},\n \"theme_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用十六进制代码(#rrggbb)来设置主题颜色。\"])},\n \"theme_help_v2_1\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。\"])},\n \"theme_help_v2_2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。\"])},\n \"tooltipRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提醒\"])},\n \"upload_a_photo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传照片\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户设置\"])},\n \"values\": {\n \"false\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"否\"])},\n \"true\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"是\"])}\n },\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"notification_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要停止收到某个指定的用户的通知,请使用隐藏功能。\"])},\n \"notification_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。\"])},\n \"enable_web_push_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"启用 web 推送通知\"])},\n \"style\": {\n \"switcher\": {\n \"keep_color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留颜色\"])},\n \"keep_shadows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留阴影\"])},\n \"keep_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留透明度\"])},\n \"keep_roundness\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留圆角\"])},\n \"keep_fonts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留字体\"])},\n \"save_load_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"\\\"保留\\\" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。\"])},\n \"reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置\"])},\n \"clear_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"清除全部\"])},\n \"clear_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"清除透明度\"])},\n \"load_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载主题\"])},\n \"help\": {\n \"upgraded_from_v2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 已升级,主题会与您记忆中的不太一样。\"])},\n \"older_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件来自旧版本的 FE。\"])},\n \"future_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件来自更高版本的 FE。\"])},\n \"v2_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。\"])},\n \"snapshot_source_mismatch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。\"])},\n \"migration_napshot_gone\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。\"])},\n \"migration_snapshot_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"为保万无一失,加载了主题快照。您可以试着加载主题数据。\"])},\n \"fe_downgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 的版本回滚了。\"])},\n \"fe_upgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 的主题引擎随着版本更新升级了。\"])},\n \"snapshot_missing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在文件中没有主题快照,所以网站外观可能会与原来预想的不同。\"])},\n \"snapshot_present\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。\"])}\n },\n \"use_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新版本\"])},\n \"use_snapshot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"老版本\"])},\n \"keep_as_is\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保持原状\"])}\n },\n \"common\": {\n \"color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"颜色\"])},\n \"opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"透明度\"])},\n \"contrast\": {\n \"hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"对比度是 \", _interpolate(_named(\"ratio\")), \", 它 \", _interpolate(_named(\"level\")), \" \", _interpolate(_named(\"context\"))])},\n \"level\": {\n \"aa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符合 AA 等级准则(最低)\"])},\n \"aaa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符合 AAA 等级准则(推荐)\"])},\n \"bad\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不符合任何辅助功能指南\"])}\n },\n \"context\": {\n \"18pt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大字文本 (18pt+)\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文本\"])}\n }\n }\n },\n \"common_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"常规\"])},\n \"main\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"常用颜色\"])},\n \"foreground_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击”高级“ 标签进行细致的控制\"])},\n \"rgbo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图标,强调,徽章\"])}\n },\n \"advanced_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"高级\"])},\n \"alert\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提醒或警告背景色\"])},\n \"alert_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"错误\"])},\n \"badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"徽章背景\"])},\n \"badge_notification\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"panel_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板标题\"])},\n \"top_bar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"顶栏\"])},\n \"borders\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"边框\"])},\n \"buttons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"inputs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"faint_text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"灰度文字\"])},\n \"chat\": {\n \"border\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"边框\"])},\n \"outgoing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发出的\"])},\n \"incoming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"收到的\"])}\n },\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用的\"])},\n \"pressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"压下的\"])},\n \"highlight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强调元素\"])},\n \"selectedMenu\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选中的菜单项\"])},\n \"selectedPost\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选中的发布内容\"])},\n \"icons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图标\"])},\n \"poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票统计图\"])},\n \"popover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提示框,菜单,弹出框\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布内容/用户简介\"])},\n \"alert_neutral\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"中性\"])},\n \"alert_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"警告\"])},\n \"tabs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标签页\"])},\n \"underlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"底衬\"])},\n \"toggled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按下的\"])},\n \"wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"壁纸\"])}\n },\n \"radii\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"圆角\"])}\n },\n \"shadows\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"阴影和照明\"])},\n \"component\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"组件\"])},\n \"override\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"覆盖\"])},\n \"shadow_id\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"阴影 #\", _interpolate(_named(\"value\"))])},\n \"blur\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"模糊\"])},\n \"spread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"扩散\"])},\n \"inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内阴影\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。\"])},\n \"filter_hint\": {\n \"always_drop_shadow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"警告,此阴影设置会总是使用 \", _interpolate(_list(0)), \" ,如果浏览器支持的话。\"])},\n \"drop_shadow_syntax\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 不支持参数 \", _interpolate(_list(1)), \" 和关键词 \", _interpolate(_list(2)), \" 。\"])},\n \"avatar_inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。\"])},\n \"spread_zero\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"阴影的扩散 > 0 会同设置成零一样\"])},\n \"inset_classic\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"内阴影会使用 \", _interpolate(_list(0))])}\n },\n \"components\": {\n \"panel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板\"])},\n \"panelHeader\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板标题\"])},\n \"topBar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"顶栏\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户头像(在个人资料栏)\"])},\n \"avatarStatus\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户头像(在帖子显示栏)\"])},\n \"popup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"弹窗与工具提示\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"buttonHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(悬停)\"])},\n \"buttonPressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(压下)\"])},\n \"buttonPressedHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(压下和悬停)\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])}\n },\n \"hintV3\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"对于阴影,您还可以使用 \", _interpolate(_list(0)), \" 表示法来使用其它颜色插槽。\"])}\n },\n \"fonts\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字体\"])},\n \"help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。\"])},\n \"components\": {\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发帖文字\"])},\n \"postCode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖子中使用等间距文字(富文本)\"])}\n },\n \"family\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字体名称\"])},\n \"size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大小 (in px)\"])},\n \"weight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字重 (粗体)\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自选\"])}\n },\n \"preview\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内容\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"错误示例\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"有堆 \", _interpolate(_list(0)), \" 和 \", _interpolate(_list(1))])},\n \"mono\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"monospace 内容\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚抵达上海。\"])},\n \"faint_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帮助手册\"])},\n \"fine_print\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"阅读我们的 \", _interpolate(_list(0)), \" ,然而什么也学不到!\"])},\n \"header_faint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这很正常\"])},\n \"checkbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"我已经浏览了条款及细则\"])},\n \"link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"一个棒棒的小小链接\"])}\n }\n },\n \"version\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"版本\"])},\n \"backend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"后端版本\"])},\n \"frontend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前端版本\"])}\n },\n \"notification_setting_filters\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"过滤器\"])},\n \"domain_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"域名\"])},\n \"changed_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"邮箱修改成功!\"])},\n \"change_email_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改您的电子邮箱时发生错误。\"])},\n \"change_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改电子邮箱\"])},\n \"allow_following_move\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注的账号迁移时自动重新关注\"])},\n \"notification_setting_privacy_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在通知推送中隐藏发送者和内容\"])},\n \"notification_setting_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐私\"])},\n \"hide_follows_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示关注数\"])},\n \"notification_visibility_emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"互动\"])},\n \"notification_visibility_moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户迁移\"])},\n \"new_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新邮箱\"])},\n \"emoji_reactions_on_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在时间线上显示表情符号互动\"])},\n \"notification_setting_hide_notification_contents\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏推送通知中的发送者与内容信息\"])},\n \"notification_setting_block_from_strangers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽来自你没有关注的用户的通知\"])},\n \"type_domains_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索需要隐藏的域名\"])},\n \"useStreamingApi\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实时接收帖子和通知\"])},\n \"user_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户\"])},\n \"reset_background_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置背景图吗?\"])},\n \"reset_banner_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置横幅图片吗?\"])},\n \"reset_avatar_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置头像吗?\"])},\n \"reset_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置横幅图片\"])},\n \"reset_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置个人背景图\"])},\n \"reset_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置头像\"])},\n \"hide_followers_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示关注者数量\"])},\n \"profile_fields\": {\n \"value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内容\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标签\"])},\n \"add_field\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加字段\"])},\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料元数据\"])}\n },\n \"accent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强调色\"])},\n \"pad_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从表情符号选择器插入表情符号时,在表情两侧插入空格\"])},\n \"discoverable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许通过搜索检索等服务找到此账号\"])},\n \"mutes_and_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏与屏蔽\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这是一个机器人账号\"])},\n \"fun\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"趣味\"])},\n \"useStreamingApiWarning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(不推荐使用,试验性,已知会跳过一些帖子)\"])},\n \"chatMessageRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天消息\"])},\n \"greentext\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Meme 箭头\"])},\n \"virtual_scrolling\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"优化时间线渲染\"])},\n \"import_mutes_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件导入隐藏名单\"])},\n \"mutes_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导入成功!处理它们将需要一段时间。\"])},\n \"mute_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入隐藏名单出错\"])},\n \"mute_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导入\"])},\n \"mute_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出你的隐藏名单到一个 csv 文件\"])},\n \"mute_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导出\"])},\n \"hide_wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例壁纸\"])},\n \"setting_changed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"与默认设置不同\"])},\n \"more_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多设置\"])},\n \"sensitive_by_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认标记发文为敏感内容\"])},\n \"reply_visibility_self_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示对我本人的回复\"])},\n \"reply_visibility_following_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示对我关注的人的回复\"])},\n \"hide_all_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示已隐藏的发文\"])},\n \"hide_media_previews\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏媒体预览\"])},\n \"word_filter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词语过滤\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存更改\"])},\n \"file_export_import\": {\n \"errors\": {\n \"file_slightly_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文件的小版本不同,有些设置可能无法加载\"])},\n \"file_too_old\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"不兼容的主版本:\", _interpolate(_named(\"fileMajor\")), \",文件版本过旧,不受支持(最小设置版本 \", _interpolate(_named(\"feMajor\")), \")\"])},\n \"file_too_new\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"不兼容的主版本:\", _interpolate(_named(\"fileMajor\")), \",此 PleromaFE(设置版本 \", _interpolate(_named(\"feMajor\")), \")过旧,无法处理\"])},\n \"invalid_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。\"])}\n },\n \"restore_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从文件恢复设置\"])},\n \"backup_settings_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份设置和主题到文件\"])},\n \"backup_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份设置到文件\"])},\n \"backup_restore\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置备份\"])}\n },\n \"right_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"反转分栏的顺序\"])},\n \"hide_shoutbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例留言板\"])},\n \"expert_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示高级\"])},\n \"download_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"下载\"])},\n \"mention_links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及链接\"])},\n \"account_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号备份\"])},\n \"account_backup_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份\"])},\n \"remove_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"list_backups_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"获取备份列表出错:\", _interpolate(_named(\"error\"))])},\n \"add_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建一个新备份\"])},\n \"added_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建了一个新备份。\"])},\n \"account_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号别名\"])},\n \"account_alias_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"别名\"])},\n \"list_aliases_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"获取别名时出错:\", _interpolate(_named(\"error\"))])},\n \"hide_list_aliases_error_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"remove_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除这个别名\"])},\n \"new_alias_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加一个新别名(例如 \", _interpolate(_named(\"example\")), \")\"])},\n \"added_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"别名添加好了。\"])},\n \"move_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移动账号\"])},\n \"move_account_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"目标账号(例如 \", _interpolate(_named(\"example\")), \")\"])},\n \"moved_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号移动好了。\"])},\n \"move_account_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"移动账号时出错:\", _interpolate(_named(\"error\"))])},\n \"setting_server_side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个设置是捆绑到你的个人资料的,能影响所有会话和客户端\"])},\n \"post_look_feel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文章的样子跟感受\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从服务器收邮件的语言\"])},\n \"account_backup_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个允许你下载一份账号信息和文章的存档,但是现在还不能导入到 Pleroma 账号里。\"])},\n \"backup_not_ready\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份还没准备好。\"])},\n \"add_backup_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加新备份时出错:\", _interpolate(_named(\"error\"))])},\n \"add_alias_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加别名时出错:\", _interpolate(_named(\"error\"))])},\n \"move_account_notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"如果你想把账号移动到别的地方,你必须去目标账号,然后加一个指向这里的别名。\"])},\n \"wordfilter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词语过滤器\"])},\n \"user_profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户资料\"])},\n \"third_column_mode_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知栏\"])},\n \"backup_running\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"此备份正在进行,已处理 \", _interpolate(_named(\"number\")), \" 条记录。\"]), _normalize([\"此备份正在进行,已处理 \", _interpolate(_named(\"number\")), \" 条记录。\"])])},\n \"lists_navigation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在导航中显示列表\"])},\n \"word_filter_and_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词过滤器及其它...\"])},\n \"backup_failed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此备份已失败。\"])},\n \"birthday\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日\"])},\n \"show_birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展示我的生日\"])}\n },\n \"hide_favorites_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示我的喜欢列表(人们仍然会收到通知)\"])},\n \"third_column_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当有足够的空间时,显示第三栏包含\"])},\n \"third_column_mode_postform\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主要的发文形式和导航\"])},\n \"columns\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"分栏\"])},\n \"user_popover_avatar_overlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在用户头像上显示用户弹出窗口\"])},\n \"navbar_column_stretch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"延伸导航栏至分栏宽度\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖子\"])},\n \"conversation_display_linear_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"线性视图\"])},\n \"conversation_other_replies_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示 “其它回复” 按钮\"])},\n \"confirm_dialogs_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除状态\"])},\n \"confirm_dialogs_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏用户\"])},\n \"column_sizes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"分栏大小\"])},\n \"column_sizes_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"侧栏\"])},\n \"column_sizes_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"內容\"])},\n \"column_sizes_notifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"conversation_other_replies_button_below\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在状态下方\"])},\n \"conversation_other_replies_button_inside\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在状态中\"])},\n \"auto_update\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自动显示新的帖子\"])},\n \"use_websockets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用 websockets(实时更新)\"])},\n \"max_depth_in_thread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认显示同主题帖子中的最大层数\"])},\n \"hide_wordfiltered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏经过词语过滤的状态\"])},\n \"hide_muted_threads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示已隐藏的同主题帖子\"])},\n \"notification_visibility_polls\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你所投的投票的结束于\"])},\n \"tree_advanced\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许在树状视图中进行更灵活的导航\"])},\n \"tree_fade_ancestors\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"以模糊的文字显示当前状态的上级\"])},\n \"conversation_display_linear\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"线性样式\"])},\n \"mention_link_fade_domain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"淡化域名(例如:\", \"@\", \"example.org 中的 \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_bolden_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当你被提及时突出显示提及你\"])},\n \"user_popover_avatar_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"弹出式头像点击动作\"])},\n \"user_popover_avatar_action_zoom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"缩放头像\"])},\n \"user_popover_avatar_action_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭弹出窗口\"])},\n \"show_yous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示 (You)s\"])},\n \"add_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加备用语言\"])},\n \"remove_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"primary_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主要语言:\"])},\n \"fallback_language\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"备用语言 \", _interpolate(_named(\"index\")), \":\"])},\n \"account_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐私\"])},\n \"conversation_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话显示样式\"])},\n \"conversation_display_tree\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"树状样式\"])},\n \"conversation_display_tree_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"树状视图\"])},\n \"disable_sticky_headers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要把分栏的顶栏固定在屏幕的顶部\"])},\n \"confirm_dialogs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求确认于\"])},\n \"confirm_dialogs_logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"confirm_dialogs_deny_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝关注请求\"])},\n \"confirm_dialogs_approve_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"批准关注请求\"])},\n \"confirm_dialogs_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽用户\"])},\n \"confirm_dialogs_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注用户\"])},\n \"confirm_dialogs_repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发状态\"])},\n \"confirm_dialogs_remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除关注者\"])},\n \"mute_bot_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏机器人的帖子\"])},\n \"hide_bot_indication\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏帖子中的机器人提示\"])},\n \"always_show_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终显示浮动的新帖子按钮\"])},\n \"show_scrollbars\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示侧栏的滚动条\"])},\n \"third_column_mode_none\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完全不显示第三栏\"])},\n \"use_at_icon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将 \", \"@\", \" 符号显示为图标而不是文本\"])},\n \"mention_link_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示提及链接\"])},\n \"mention_link_display_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终以简称的形式出现(例如:\", \"@\", \"foo)\"])},\n \"mention_link_display_full_for_remote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅远程实例用户以全名的形式出现(例如:\", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_display_full\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终以全名的形式出现(例如:\", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_use_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击提及链接时显示用户卡片\"])},\n \"mention_link_show_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在链接旁边显示用户头像\"])},\n \"mention_link_show_avatar_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在提及内容旁边显示用户头像\"])},\n \"user_popover_avatar_action_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开个人资料\"])},\n \"autocomplete_select_first\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当有自动完成的结果时,自动选择第一个候选项\"])},\n \"url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"commit_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存\"])},\n \"commit_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前值未保存,请按此按钮以提交你的修改\"])},\n \"reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置\"])},\n \"reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置草稿\"])},\n \"hard_reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"硬重置\"])},\n \"hard_reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从存储中移除设置,强制使用默认值\"])},\n \"emoji_reactions_scale\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情回应比例系数\"])}\n },\n \"time\": {\n \"day\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"day_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"hour\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hour_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"in_future\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"还有 \", _interpolate(_list(0))])},\n \"in_past\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 之前\"])},\n \"minute\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分钟\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分钟\"])},\n \"minute_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"month\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"month_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"now\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚\"])},\n \"now_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚\"])},\n \"second\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"second_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"week\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"week_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"year\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"year_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])},\n \"unit\": {\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 时\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分\"])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 个月\"])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])}\n }\n },\n \"timeline\": {\n \"collapse\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折叠\"])},\n \"conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话\"])},\n \"error_fetching\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"获取更新时发生错误\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的状态\"])},\n \"no_retweet_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这条内容仅关注者可见,或者是私信,因此不能转发\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发了\"])},\n \"show_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示新内容\"])},\n \"up_to_date\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已是最新\"])},\n \"no_more_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多的状态\"])},\n \"no_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有状态更新\"])},\n \"reload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重新载入\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"取得时间轴时发生错误:\", _interpolate(_list(0))])},\n \"socket_broke\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"丢失实时连接:CloseEvent code \", _interpolate(_list(0))])},\n \"socket_reconnected\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已建立实时连接\"])},\n \"quick_view_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"快速视图设置\"])},\n \"quick_filter_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"快速过滤设置\"])}\n },\n \"status\": {\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除状态\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在个人资料置顶\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消在个人资料置顶\"])},\n \"pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"置顶\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要删除这条状态吗?\"])},\n \"reply_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复\"])},\n \"replies_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复:\"])},\n \"mute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏对话\"])},\n \"unmute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话取消隐藏\"])},\n \"hide_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏内容\"])},\n \"show_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示内容\"])},\n \"hide_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏此部分标题\"])},\n \"show_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示全部标题\"])},\n \"thread_muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"同主题帖子已被隐藏\"])},\n \"copy_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"复制状态链接\"])},\n \"status_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态不可取得\"])},\n \"unbookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消书签\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"thread_muted_and_words\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\",含有过滤词:\"])},\n \"status_deleted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"该状态已被删除\"])},\n \"nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NSFW\"])},\n \"external_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"外部来源\"])},\n \"expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开\"])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(你)\"])},\n \"plus_more\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"还有 \", _interpolate(_named(\"number\")), \" 个\"])},\n \"many_attachments\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"文章有 \", _interpolate(_named(\"number\")), \" 个附件\"])},\n \"collapse_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折起附件\"])},\n \"show_all_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示所有附件\"])},\n \"show_attachment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览描述(打开附件能看完整描述)\"])},\n \"hide_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏附件\"])},\n \"remove_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除附件\"])},\n \"attachment_stop_flash\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"停止 Flash 播放器\"])},\n \"move_up\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"把附件左移\"])},\n \"open_gallery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开图库\"])},\n \"thread_hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏这个同主题帖子\"])},\n \"thread_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示这个同主题帖子\"])},\n \"thread_show_full_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"thread_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"查看这个同主题帖子的剩余部分(一共有 \", _interpolate(_named(\"numStatus\")), \" 个状态)\"])},\n \"thread_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"ancestor_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"查看这个状态下的别的 \", _interpolate(_named(\"numReplies\")), \" 个回复\"])},\n \"ancestor_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"显示完整对话(还有 \", _interpolate(_named(\"numStatus\")), \" 个状态)\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"replies_list_with_others\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"回复(另外 +\", _interpolate(_named(\"numReplies\")), \" 个):\"])},\n \"move_down\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"把附件右移\"])},\n \"thread_show_full\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"显示这个同主题帖子下的所有东西(一共有 \", _interpolate(_named(\"numStatus\")), \" 个状态,最大深度 \", _interpolate(_named(\"depth\")), \")\"])},\n \"show_only_conversation_under_this\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示这个状态的回复\"])},\n \"repeat_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要转发这条状态吗?\"])},\n \"repeat_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认转发\"])},\n \"repeat_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"repeat_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要转发\"])},\n \"edit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑状态\"])},\n \"edited_at\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(最后编辑于 \", _interpolate(_named(\"time\")), \")\"])},\n \"delete_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认删除\"])},\n \"delete_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"delete_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留\"])},\n \"show_attachment_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在媒体模式中显示\"])},\n \"status_history\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态历史\"])},\n \"delete_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"删除状态时出错:\", _interpolate(_list(0))])},\n \"reaction_count_label\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"num\")), \" 人作出了表情回应\"])}\n },\n \"user_card\": {\n \"approve\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"核准\"])},\n \"block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"blocked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已屏蔽!\"])},\n \"deny\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注\"])},\n \"follow_sent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求已发送!\"])},\n \"follow_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求中…\"])},\n \"follow_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注\"])},\n \"followees\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注\"])},\n \"followers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注者\"])},\n \"following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注!\"])},\n \"follows_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注了你!\"])},\n \"its_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"就是你!\"])},\n \"media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已隐藏\"])},\n \"per_day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"每天\"])},\n \"remote_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"跨站关注\"])},\n \"report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"报告\"])},\n \"statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态\"])},\n \"subscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"订阅\"])},\n \"unsubscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"退订\"])},\n \"unblock\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消屏蔽\"])},\n \"unblock_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在取消屏蔽…\"])},\n \"block_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在屏蔽…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏中…\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏中…\"])},\n \"admin_menu\": {\n \"moderation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仲裁\"])},\n \"grant_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"赋予管理权限\"])},\n \"revoke_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销管理权限\"])},\n \"grant_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"赋予监察员权限\"])},\n \"revoke_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销监察员权限\"])},\n \"activate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"激活账号\"])},\n \"deactivate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭账号\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账号\"])},\n \"force_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标记所有的帖子都是 - 工作场合不适\"])},\n \"strip_media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从帖子里删除媒体文件\"])},\n \"force_unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制帖子为不公开\"])},\n \"sandbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制帖子为只有关注者可看\"])},\n \"disable_remote_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁止从远程实例关注用户\"])},\n \"disable_any_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完全禁止关注用户\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从联合实例中禁止用户帖子\"])},\n \"delete_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除用户\"])},\n \"delete_user_data_and_deactivate_confirmation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这将永久删除该账户的数据并停用该账户。你完全确定吗?\"])}\n },\n \"hidden\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已隐藏\"])},\n \"show_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示转发\"])},\n \"hide_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏转发\"])},\n \"message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"消息\"])},\n \"mention\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"机器人\"])},\n \"highlight\": {\n \"side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"侧边条纹\"])},\n \"striped\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"条纹背景\"])},\n \"solid\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"单一颜色背景\"])},\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不突出显示\"])}\n },\n \"edit_profile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑个人资料\"])},\n \"approve_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认批准\"])},\n \"approve_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"批准\"])},\n \"block_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"block_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要屏蔽\"])},\n \"deactivated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已停用\"])},\n \"deny_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认拒绝\"])},\n \"deny_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"deny_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要拒绝\"])},\n \"deny_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您是否要拒绝 \", _interpolate(_named(\"user\")), \" 的关注请求?\"])},\n \"follow_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消请求\"])},\n \"unfollow_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认取消关注\"])},\n \"unfollow_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要取消关注 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"unfollow_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注\"])},\n \"unfollow_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要取消关注\"])},\n \"mute_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认隐藏\"])},\n \"mute_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"mute_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要隐藏\"])},\n \"mute_duration_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"让这个用户隐藏(0表示无限期):\"])},\n \"remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除关注者\"])},\n \"remove_follower_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认移除关注者\"])},\n \"remove_follower_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留\"])},\n \"remove_follower_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要将 \", _interpolate(_named(\"user\")), \" 从您的关注者里移除吗?\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"生于 \", _interpolate(_named(\"birthday\"))])},\n \"note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备注\"])},\n \"approve_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要批准\"])},\n \"approve_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您是否要批准 \", _interpolate(_named(\"user\")), \" 的关注请求?\"])},\n \"block_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认屏蔽\"])},\n \"block_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要屏蔽 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"mute_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要隐藏 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"remove_follower_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"note_blank\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(空)\"])},\n \"edit_note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑备注\"])},\n \"edit_note_apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"应用\"])},\n \"edit_note_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])}\n },\n \"user_profile\": {\n \"timeline_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户时间线\"])},\n \"profile_does_not_exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抱歉,此个人资料不存在。\"])},\n \"profile_loading_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抱歉,载入个人资料时出错。\"])}\n },\n \"user_reporting\": {\n \"title\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"报告 \", _interpolate(_list(0))])},\n \"add_comment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:\"])},\n \"additional_comments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"其它信息\"])},\n \"forward_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个账号来自另一个服务器。是否同时发送一份报告副本到那里?\"])},\n \"forward_to\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"转发 \", _interpolate(_list(0))])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当处理您的请求时,发生了一个错误。\"])}\n },\n \"who_to_follow\": {\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])}\n },\n \"tool_tip\": {\n \"media_upload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传媒体\"])},\n \"repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"reply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复\"])},\n \"favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户设置\"])},\n \"reject_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝关注请求\"])},\n \"add_reaction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加互动\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"accept_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"接受关注请求\"])},\n \"toggle_expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开或折叠通知以显示帖子全文\"])},\n \"toggle_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开或折叠通知以显示已隐藏的内容\"])},\n \"autocomplete_available\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"共有 \", _interpolate(_named(\"number\")), \" 个结果可用。使用向上和向下键浏览它们。\"])}\n },\n \"upload\": {\n \"error\": {\n \"base\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传不成功。\"])},\n \"file_too_big\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"文件太大了 [\", _interpolate(_named(\"filesize\")), _interpolate(_named(\"filesizeunit\")), \" / \", _interpolate(_named(\"allowedsize\")), _interpolate(_named(\"allowedsizeunit\")), \"]\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"迟些再试\"])},\n \"message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"上传错误:\", _interpolate(_list(0))])}\n },\n \"file_size_units\": {\n \"B\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"B\"])},\n \"KiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KiB\"])},\n \"MiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MiB\"])},\n \"GiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"GiB\"])},\n \"TiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"TiB\"])}\n }\n },\n \"search\": {\n \"people\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"人\"])},\n \"hashtags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"话题标签\"])},\n \"person_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" 人正在讨论\"])},\n \"people_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" 人正在讨论\"])},\n \"no_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有搜索结果\"])},\n \"no_more_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多结果\"])},\n \"load_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更多结果\"])}\n },\n \"password_reset\": {\n \"forgot_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"忘记密码了?\"])},\n \"password_reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置密码\"])},\n \"instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您的电邮地址或者用户名\"])},\n \"check_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"检查您的邮箱,会有一个链接用于重置密码。\"])},\n \"return_home\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回到首页\"])},\n \"too_many_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您达到了尝试次数的上限,请稍后再试。\"])},\n \"password_reset_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码重置已被禁用。请联系您的实例管理员。\"])},\n \"password_reset_required_but_mailer_is_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。\"])},\n \"password_reset_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您必须重置密码才能登陆。\"])}\n },\n \"remote_user_resolver\": {\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未找到。\"])},\n \"searching_for\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索\"])},\n \"remote_user_resolver\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"远程用户解析器\"])}\n },\n \"emoji\": {\n \"keep_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选择器保持打开\"])},\n \"stickers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"贴纸\"])},\n \"unicode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unicode 表情符号\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自定义表情符号\"])},\n \"add_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"插入表情符号\"])},\n \"search_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索表情符号\"])},\n \"emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情符号\"])},\n \"load_all\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"加载所有表情符号(共 \", _interpolate(_named(\"emojiAmount\")), \" 个)\"])},\n \"load_all_hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"最先加载的 \", _interpolate(_named(\"saneAmount\")), \" 表情符号,加载全部表情符号可能会带来性能问题。\"])},\n \"unicode_groups\": {\n \"flags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旗帜\"])},\n \"food-and-drink\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"饮食\"])},\n \"objects\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"物件\"])},\n \"people-and-body\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"人和身体\"])},\n \"symbols\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符号\"])},\n \"travel-and-places\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旅行和地点\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"活动\"])},\n \"animals-and-nature\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"动物和自然\"])},\n \"smileys-and-emotion\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情与情感\"])}\n },\n \"regional_indicator\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"地区指示符 \", _interpolate(_named(\"letter\"))])},\n \"unpacked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未分组的表情符号\"])}\n },\n \"about\": {\n \"mrf\": {\n \"simple\": {\n \"quarantine_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例向以下实例仅发送公开的帖子:\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隔离\"])},\n \"reject_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例不会接收来自下列实例的消息:\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"accept_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例只接收来自下列实例的消息:\"])},\n \"simple_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对于特定实例的策略\"])},\n \"accept\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"接受\"])},\n \"media_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除媒体\"])},\n \"media_nsfw_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例将来自以下实例的媒体内容强制设置为敏感内容:\"])},\n \"media_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制设置媒体为敏感内容\"])},\n \"media_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例移除来自以下实例的媒体内容:\"])},\n \"ftl_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"该实例在从“已知网络”时间线上移除了下列实例:\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从“已知网络”时间线上移除\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"理由\"])},\n \"not_applicable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例\"])}\n },\n \"mrf_policies_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MRF 策略会影响本实例的互通行为。以下策略已启用:\"])},\n \"mrf_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已启用的 MRF 策略\"])},\n \"keyword\": {\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从“全部已知网络”时间线上移除\"])},\n \"keyword_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关键词策略\"])},\n \"is_replaced_by\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"→\"])},\n \"replace\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"替换\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])}\n },\n \"federation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"联邦互通\"])}\n },\n \"staff\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理人员\"])}\n },\n \"domain_mute_card\": {\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在取消隐藏…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏中…\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])}\n },\n \"errors\": {\n \"storage_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。\"])}\n },\n \"shoutbox\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"留言板\"])}\n },\n \"display_date\": {\n \"today\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"今天\"])}\n },\n \"file_type\": {\n \"file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文件\"])},\n \"image\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图片\"])},\n \"video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"视频\"])},\n \"audio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"音频\"])}\n },\n \"chats\": {\n \"empty_chat_list_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您还没有任何聊天记录。开始聊天吧!\"])},\n \"error_sending_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送消息时出了点问题。\"])},\n \"error_loading_chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载聊天时出了点问题。\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要删除此消息吗?\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"empty_message_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无法发布空消息\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新聊天\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"message_user\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"发消息给 \", _interpolate(_named(\"nickname\"))])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你:\"])}\n },\n \"announcements\": {\n \"page_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"mark_as_read_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标为已读\"])},\n \"post_form_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布公告\"])},\n \"post_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在这里输入公告内容...\"])},\n \"post_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布\"])},\n \"post_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"错误:\", _interpolate(_named(\"error\"))])},\n \"close_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"delete_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"start_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"起始时间: \"])},\n \"end_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"终止时间: \"])},\n \"all_day_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这是全天的事件\"])},\n \"published_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"发表于 \", _interpolate(_named(\"time\"))])},\n \"start_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"开始于 \", _interpolate(_named(\"time\"))])},\n \"end_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"结束于 \", _interpolate(_named(\"time\"))])},\n \"edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑\"])},\n \"submit_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"cancel_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])},\n \"inactive_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个公告不活跃\"])}\n },\n \"report\": {\n \"reported_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"被举报者:\"])},\n \"state_closed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已关闭\"])},\n \"state_resolved\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已解决\"])},\n \"reporter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"举报者:\"])},\n \"state_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"开启\"])},\n \"reported_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已举报的状态:\"])},\n \"notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备注:\"])},\n \"state\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态:\"])}\n },\n \"unicode_domain_indicator\": {\n \"tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此域名包含非 ascii 字符。\"])}\n },\n \"update\": {\n \"update_bugs_gitlab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma GitLab\"])},\n \"update_changelog\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"关于变化的更多细节,请参见 \", _interpolate(_named(\"theFullChangelog\")), \" 。\"])},\n \"update_changelog_here\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完整的更新日志\"])},\n \"big_update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请忍耐一下\"])},\n \"big_update_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"我们已经有一段时间没有发布发行版,所以事情的外观和感觉可能与你习惯的不一样。\"])},\n \"update_bugs\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"请在 \", _interpolate(_named(\"pleromaGitlab\")), \" 上报告任何问题和bug,因为我们已经改变了很多,虽然我们进行了彻底的测试,并且自己使用了开发版本,但我们可能错过了一些东西。我们欢迎你对你可能遇到的问题或如何改进Pleroma和Pleroma-FE提出反馈和建议。\"])},\n \"art_by\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Art by \", _interpolate(_named(\"linkToArtist\"))])}\n },\n \"lists\": {\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索用户\"])},\n \"create\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存更改\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除列表\"])},\n \"following_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制于正在关注\"])},\n \"manage_lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理列表\"])},\n \"manage_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理列表成员\"])},\n \"add_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索更多用户\"])},\n \"remove_from_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从列表中移除\"])},\n \"add_to_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加到列表\"])},\n \"is_in_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已在列表中\"])},\n \"editing_list\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"正在编辑列表 \", _interpolate(_named(\"listTitle\"))])},\n \"creating_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在创建新的列表\"])},\n \"update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存标题\"])},\n \"really_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"真的要删除列表吗?\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"操作列表时出错:\", _interpolate(_list(0))])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新的列表\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表标题\"])}\n },\n \"admin_dash\": {\n \"window_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])},\n \"old_ui_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旧的管理界面在此处\"])},\n \"reset_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置全部\"])},\n \"commit_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存全部\"])},\n \"tabs\": {\n \"nodb\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无数据库配置\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例\"])},\n \"limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制\"])},\n \"frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前端\"])}\n },\n \"nodb\": {\n \"heading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"数据库配置已禁用\"])},\n \"documentation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文档\"])},\n \"text2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大多数配置选项将不可用。\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"你需要修改后端配置文件,以便将 \", _interpolate(_named(\"property\")), \" 设置为 \", _interpolate(_named(\"value\")), \",更多内容请参见 \", _interpolate(_named(\"documentation\")), \"。\"])}\n },\n \"captcha\": {\n \"native\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本地\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha\"])}\n },\n \"instance\": {\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例信息\"])},\n \"registrations\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户注册\"])},\n \"captcha_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证码\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha 设置\"])},\n \"access\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例访问\"])},\n \"restrict\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制匿名访客的访问\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线访问\"])},\n \"profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户个人资料访问\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态/活动访问\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许/不允许访问特定 API 的详细设置。默认情况下(不确定状态),如果实例不是公开的,它将拒绝访问;勾选复选框意味着即使实例是公开的,也拒绝访问;不勾选意味着即使实例是私有的,也允许访问。请注意,如果某些设置被设定,可能会发生意想不到的行为,例如,如果个人资料访问被禁用,显示的帖文将不包含个人资料信息。\"])}\n }\n },\n \"limits\": {\n \"arbitrary_limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"任意限制\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖文限制\"])},\n \"uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件限制\"])},\n \"users\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户个人资料限制\"])},\n \"profile_fields\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料字段限制\"])},\n \"user_uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料媒体限制\"])}\n },\n \"frontend\": {\n \"repository\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"存储库链接\"])},\n \"versions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可用版本\"])},\n \"build_url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"构建产物 URL\"])},\n \"reinstall\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重新安装\"])},\n \"is_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(默认)\"])},\n \"is_default_custom\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(默认,版本:\", _interpolate(_named(\"version\")), \")\"])},\n \"install\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安装\"])},\n \"install_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"安装版本 \", _interpolate(_named(\"version\"))])},\n \"more_install_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多安装选项\"])},\n \"more_default_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多默认设置选项\"])},\n \"set_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设为默认\"])},\n \"set_default_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"将版本 \", _interpolate(_named(\"version\")), \" 设为默认\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请注意,此部分是一个WIP,缺乏某些功能,因为前端管理的后台实现并不完整。\"])},\n \"default_frontend\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认前端\"])},\n \"default_frontend_tip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认的前端将显示给所有用户。目前还没有办法让用户选择个人的前端。如果你不使用 PleromaFE,你很可能不得不使用旧的和有问题的 AdminFE 来进行实例配置,直到我们替换它。\"])},\n \"default_frontend_tip2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WIP: 由于 Pleroma 后端没有正确列出所有已安装的前端,你必须手动输入名称和引用。下面的列表提供了填写这些值的快捷方式。\"])},\n \"available_frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可供安装\"])}\n },\n \"temp_overrides\": {\n \":pleroma\": {\n \":instance\": {\n \":public\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例是公开的\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用此功能将使所有的 API 只能被已登录用户访问,这将使公共和联邦时间线无法被匿名访客访问。\"])}\n },\n \":limit_to_local_content\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将搜索限于本地内容\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用未认证用户(默认)、所有用户或无人的全局网络搜索\"])}\n },\n \":description_limit\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件描述的字数限制\"])}\n },\n \":background_image\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景图片\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景图片(主要使用于 PleromaFE)\"])}\n }\n }\n }\n },\n \"wip_notice\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"此管理仪表板是实验性和 WIP 的,\", _interpolate(_named(\"adminFeLink\")), \"。\"])}\n }\n}"],"names":["ctx","normalize","_normalize","interpolate","_interpolate","list","_list","named","_named","plural","_plural"],"sourceRoot":""} -\ No newline at end of file diff --git a/priv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js b/priv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkpleroma_fe=self.webpackChunkpleroma_fe||[]).push([[5929],{4425:(r,n,e)=>{e.r(n),e.d(n,{default:()=>t});const t={chat:{title:r=>{const{normalize:n}=r;return n(["聊天"])}},exporter:{export:r=>{const{normalize:n}=r;return n(["导出"])},processing:r=>{const{normalize:n}=r;return n(["正在处理,稍后会提示您下载文件"])}},features_panel:{chat:r=>{const{normalize:n}=r;return n(["聊天"])},gopher:r=>{const{normalize:n}=r;return n(["Gopher"])},media_proxy:r=>{const{normalize:n}=r;return n(["媒体代理"])},scope_options:r=>{const{normalize:n}=r;return n(["可见范围设置"])},text_limit:r=>{const{normalize:n}=r;return n(["文字数量限制"])},title:r=>{const{normalize:n}=r;return n(["功能"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])},pleroma_chat_messages:r=>{const{normalize:n}=r;return n(["Pleroma 聊天"])},upload_limit:r=>{const{normalize:n}=r;return n(["上传限制"])},shout:r=>{const{normalize:n}=r;return n(["留言板"])}},finder:{error_fetching_user:r=>{const{normalize:n}=r;return n(["获取用户时发生错误"])},find_user:r=>{const{normalize:n}=r;return n(["寻找用户"])}},general:{apply:r=>{const{normalize:n}=r;return n(["应用"])},submit:r=>{const{normalize:n}=r;return n(["提交"])},more:r=>{const{normalize:n}=r;return n(["更多"])},generic_error:r=>{const{normalize:n}=r;return n(["发生了一个错误"])},optional:r=>{const{normalize:n}=r;return n(["可选"])},show_more:r=>{const{normalize:n}=r;return n(["展开"])},show_less:r=>{const{normalize:n}=r;return n(["收起"])},cancel:r=>{const{normalize:n}=r;return n(["取消"])},disable:r=>{const{normalize:n}=r;return n(["禁用"])},enable:r=>{const{normalize:n}=r;return n(["启用"])},confirm:r=>{const{normalize:n}=r;return n(["确认"])},verify:r=>{const{normalize:n}=r;return n(["验证"])},dismiss:r=>{const{normalize:n}=r;return n(["忽略"])},peek:r=>{const{normalize:n}=r;return n(["预览"])},close:r=>{const{normalize:n}=r;return n(["关闭"])},retry:r=>{const{normalize:n}=r;return n(["重试"])},error_retry:r=>{const{normalize:n}=r;return n(["请重试"])},loading:r=>{const{normalize:n}=r;return n(["载入中…"])},role:{moderator:r=>{const{normalize:n}=r;return n(["监察员"])},admin:r=>{const{normalize:n}=r;return n(["管理员"])}},flash_content:r=>{const{normalize:n}=r;return n(["点击以使用 Ruffle 显示 Flash 内容(实验性,可能无效)。"])},flash_security:r=>{const{normalize:n}=r;return n(["注意这可能有潜在的危险,因为 Flash 内容仍然是任意的代码。"])},flash_fail:r=>{const{normalize:n}=r;return n(["Flash 内容加载失败,请在控制台查看详情。"])},scope_in_timeline:{public:r=>{const{normalize:n}=r;return n(["公开"])},direct:r=>{const{normalize:n}=r;return n(["私讯"])},private:r=>{const{normalize:n}=r;return n(["仅关注者"])},unlisted:r=>{const{normalize:n}=r;return n(["列外"])}},scroll_to_top:r=>{const{normalize:n}=r;return n(["滚动至顶"])},generic_error_message:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["发生一个错误:",e(t(0))])},never_show_again:r=>{const{normalize:n}=r;return n(["不再显示"])},undo:r=>{const{normalize:n}=r;return n(["撤销"])},yes:r=>{const{normalize:n}=r;return n(["是"])},no:r=>{const{normalize:n}=r;return n(["否"])},unpin:r=>{const{normalize:n}=r;return n(["取消固定该项"])},pin:r=>{const{normalize:n}=r;return n(["固定该项"])}},image_cropper:{crop_picture:r=>{const{normalize:n}=r;return n(["裁剪图片"])},save:r=>{const{normalize:n}=r;return n(["保存"])},save_without_cropping:r=>{const{normalize:n}=r;return n(["保存未经裁剪的图片"])},cancel:r=>{const{normalize:n}=r;return n(["取消"])}},importer:{submit:r=>{const{normalize:n}=r;return n(["提交"])},success:r=>{const{normalize:n}=r;return n(["导入成功。"])},error:r=>{const{normalize:n}=r;return n(["导入此文件时出现一个错误。"])}},login:{login:r=>{const{normalize:n}=r;return n(["登录"])},description:r=>{const{normalize:n}=r;return n(["用 OAuth 登录"])},logout:r=>{const{normalize:n}=r;return n(["登出"])},password:r=>{const{normalize:n}=r;return n(["密码"])},placeholder:r=>{const{normalize:n}=r;return n(["例如:lain"])},register:r=>{const{normalize:n}=r;return n(["注册"])},username:r=>{const{normalize:n}=r;return n(["用户名"])},hint:r=>{const{normalize:n}=r;return n(["登录后加入讨论"])},authentication_code:r=>{const{normalize:n}=r;return n(["验证码"])},enter_recovery_code:r=>{const{normalize:n}=r;return n(["输入一个恢复码"])},enter_two_factor_code:r=>{const{normalize:n}=r;return n(["输入一个双重因素验证码"])},recovery_code:r=>{const{normalize:n}=r;return n(["恢复码"])},heading:{totp:r=>{const{normalize:n}=r;return n(["双重因素验证"])},recovery:r=>{const{normalize:n}=r;return n(["双重因素恢复"])}},logout_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要登出"])},logout_confirm_title:r=>{const{normalize:n}=r;return n(["确认登出"])},logout_confirm_accept_button:r=>{const{normalize:n}=r;return n(["登出"])},logout_confirm:r=>{const{normalize:n}=r;return n(["您确定要登出吗?"])}},media_modal:{previous:r=>{const{normalize:n}=r;return n(["往前"])},next:r=>{const{normalize:n}=r;return n(["往后"])},hide:r=>{const{normalize:n}=r;return n(["关闭媒体查看器"])},counter:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("current"))," / ",e(t("total"))])}},nav:{about:r=>{const{normalize:n}=r;return n(["关于"])},back:r=>{const{normalize:n}=r;return n(["后退"])},chat:r=>{const{normalize:n}=r;return n(["本站聊天"])},friend_requests:r=>{const{normalize:n}=r;return n(["关注请求"])},mentions:r=>{const{normalize:n}=r;return n(["提及"])},interactions:r=>{const{normalize:n}=r;return n(["互动"])},dms:r=>{const{normalize:n}=r;return n(["私信"])},public_tl:r=>{const{normalize:n}=r;return n(["公共时间线"])},timeline:r=>{const{normalize:n}=r;return n(["时间线"])},twkn:r=>{const{normalize:n}=r;return n(["已知网络"])},user_search:r=>{const{normalize:n}=r;return n(["用户搜索"])},search:r=>{const{normalize:n}=r;return n(["搜索"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])},preferences:r=>{const{normalize:n}=r;return n(["偏好设置"])},administration:r=>{const{normalize:n}=r;return n(["管理员"])},chats:r=>{const{normalize:n}=r;return n(["聊天"])},timelines:r=>{const{normalize:n}=r;return n(["时间线"])},bookmarks:r=>{const{normalize:n}=r;return n(["书签"])},home_timeline:r=>{const{normalize:n}=r;return n(["主页时间线"])},lists:r=>{const{normalize:n}=r;return n(["列表"])},edit_finish:r=>{const{normalize:n}=r;return n(["完成编辑"])},mobile_notifications:r=>{const{normalize:n}=r;return n(["打开通知(有未读的)"])},mobile_notifications_close:r=>{const{normalize:n}=r;return n(["关闭通知"])},announcements:r=>{const{normalize:n}=r;return n(["公告"])},edit_nav_mobile:r=>{const{normalize:n}=r;return n(["自定义导航栏"])},edit_pinned:r=>{const{normalize:n}=r;return n(["编辑固定的项目"])},mobile_sidebar:r=>{const{normalize:n}=r;return n(["切换移动设备侧栏"])},search_close:r=>{const{normalize:n}=r;return n(["关闭搜索栏"])}},notifications:{broken_favorite:r=>{const{normalize:n}=r;return n(["未知的状态,正在搜索中…"])},favorited_you:r=>{const{normalize:n}=r;return n(["喜欢了你的状态"])},followed_you:r=>{const{normalize:n}=r;return n(["关注了你"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的通知"])},notifications:r=>{const{normalize:n}=r;return n(["通知"])},read:r=>{const{normalize:n}=r;return n(["已阅!"])},repeated_you:r=>{const{normalize:n}=r;return n(["转发了你的状态"])},no_more_notifications:r=>{const{normalize:n}=r;return n(["没有更多的通知"])},reacted_with:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["作出了 ",e(t(0))," 的反应"])},migrated_to:r=>{const{normalize:n}=r;return n(["迁移到了"])},follow_request:r=>{const{normalize:n}=r;return n(["想要关注你"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["取得通知时发生错误:",e(t(0))])},poll_ended:r=>{const{normalize:n}=r;return n(["投票结束了"])},submitted_report:r=>{const{normalize:n}=r;return n(["提交举报"])}},polls:{add_poll:r=>{const{normalize:n}=r;return n(["增加投票"])},add_option:r=>{const{normalize:n}=r;return n(["增加选项"])},option:r=>{const{normalize:n}=r;return n(["选项"])},votes:r=>{const{normalize:n}=r;return n(["投票"])},vote:r=>{const{normalize:n}=r;return n(["投票"])},type:r=>{const{normalize:n}=r;return n(["投票类型"])},single_choice:r=>{const{normalize:n}=r;return n(["单选"])},multiple_choices:r=>{const{normalize:n}=r;return n(["多选"])},expiry:r=>{const{normalize:n}=r;return n(["投票期限"])},expires_in:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["投票于 ",e(t(0))," 后结束"])},expired:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["投票 ",e(t(0))," 前已结束"])},not_enough_options:r=>{const{normalize:n}=r;return n(["投票的选项太少"])},votes_count:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n([e(t("count"))," 票"]),n([e(t("count"))," 票"])])},people_voted_count:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n([e(t("count"))," 人已投票"]),n([e(t("count"))," 人已投票"])])}},stickers:{add_sticker:r=>{const{normalize:n}=r;return n(["添加贴纸"])}},interactions:{favs_repeats:r=>{const{normalize:n}=r;return n(["转发和喜欢"])},follows:r=>{const{normalize:n}=r;return n(["新的关注者"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的互动"])},moves:r=>{const{normalize:n}=r;return n(["用户迁移"])},reports:r=>{const{normalize:n}=r;return n(["举报"])},emoji_reactions:r=>{const{normalize:n}=r;return n(["表情回应"])}},post_status:{new_status:r=>{const{normalize:n}=r;return n(["发布新状态"])},account_not_locked_warning:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["你的帐号没有 ",e(t(0)),"。任何人都可以关注你并浏览你的上锁内容。"])},account_not_locked_warning_link:r=>{const{normalize:n}=r;return n(["上锁"])},attachments_sensitive:r=>{const{normalize:n}=r;return n(["标记附件为敏感内容"])},content_type:{"text/plain":r=>{const{normalize:n}=r;return n(["纯文本"])},"text/html":r=>{const{normalize:n}=r;return n(["HTML"])},"text/markdown":r=>{const{normalize:n}=r;return n(["Markdown"])},"text/bbcode":r=>{const{normalize:n}=r;return n(["BBCode"])}},content_warning:r=>{const{normalize:n}=r;return n(["主题(可选)"])},default:r=>{const{normalize:n}=r;return n(["刚刚抵达上海。"])},direct_warning_to_all:r=>{const{normalize:n}=r;return n(["本条内容只有被提及的用户能够看到。"])},direct_warning_to_first_only:r=>{const{normalize:n}=r;return n(["本条内容只有被在消息开始处提及的用户能够看到。"])},posting:r=>{const{normalize:n}=r;return n(["发送中"])},scope_notice:{public:r=>{const{normalize:n}=r;return n(["本条内容可以被所有人看到"])},private:r=>{const{normalize:n}=r;return n(["关注你的人才能看到本条内容"])},unlisted:r=>{const{normalize:n}=r;return n(["本条内容既不在公共时间线,也不会在所有已知网络上可见"])}},scope:{direct:r=>{const{normalize:n}=r;return n(["私信 - 只发送给被提及的用户"])},private:r=>{const{normalize:n}=r;return n(["仅关注者 - 只有关注了你的人能看到"])},public:r=>{const{normalize:n}=r;return n(["公共 - 发送到公共时间轴"])},unlisted:r=>{const{normalize:n}=r;return n(["不公开 - 不会发送到公共时间轴"])}},preview_empty:r=>{const{normalize:n}=r;return n(["空的"])},preview:r=>{const{normalize:n}=r;return n(["预览"])},media_description:r=>{const{normalize:n}=r;return n(["媒体描述"])},media_description_error:r=>{const{normalize:n}=r;return n(["更新媒体失败,请重试"])},empty_status_error:r=>{const{normalize:n}=r;return n(["不能发布没有内容、没有附件的发文"])},post:r=>{const{normalize:n}=r;return n(["发送"])},edit_remote_warning:r=>{const{normalize:n}=r;return n(["其它远程实例可能不支持编辑并且无法接收您的帖子的最新版本。"])},edit_unsupported_warning:r=>{const{normalize:n}=r;return n(["Pleroma 不支持对提及或投票进行编辑。"])},edit_status:r=>{const{normalize:n}=r;return n(["编辑状态"])},content_type_selection:r=>{const{normalize:n}=r;return n(["发帖格式"])},scope_notice_dismiss:r=>{const{normalize:n}=r;return n(["关闭此提示"])}},registration:{bio:r=>{const{normalize:n}=r;return n(["简介"])},email:r=>{const{normalize:n}=r;return n(["电子邮箱"])},fullname:r=>{const{normalize:n}=r;return n(["显示名称"])},password_confirm:r=>{const{normalize:n}=r;return n(["确认密码"])},registration:r=>{const{normalize:n}=r;return n(["注册"])},token:r=>{const{normalize:n}=r;return n(["邀请码"])},captcha:r=>{const{normalize:n}=r;return n(["CAPTCHA"])},new_captcha:r=>{const{normalize:n}=r;return n(["点击图片获取新的验证码"])},username_placeholder:r=>{const{normalize:n}=r;return n(["例如:lain"])},fullname_placeholder:r=>{const{normalize:n}=r;return n(["例如:岩仓玲音"])},bio_placeholder:r=>{const{normalize:n}=r;return n(["例如:\n你好,我是玲音。\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。"])},validations:{username_required:r=>{const{normalize:n}=r;return n(["不能留空"])},fullname_required:r=>{const{normalize:n}=r;return n(["不能留空"])},email_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_confirmation_required:r=>{const{normalize:n}=r;return n(["不能留空"])},password_confirmation_match:r=>{const{normalize:n}=r;return n(["密码不一致"])},birthday_required:r=>{const{normalize:n}=r;return n(["不能为空"])},birthday_min_age:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["必须在 ",e(t("date"))," 或之前"])}},reason_placeholder:r=>{const{normalize:n}=r;return n(["此实例的注册需要手动批准。\n请让管理员知道您为什么想要注册。"])},reason:r=>{const{normalize:n}=r;return n(["注册理由"])},register:r=>{const{normalize:n}=r;return n(["注册"])},email_language:r=>{const{normalize:n}=r;return n(["你想从服务器收到什么语言的邮件?"])},bio_optional:r=>{const{normalize:n}=r;return n(["介绍(可选)"])},email_optional:r=>{const{normalize:n}=r;return n(["电子邮件(可选)"])},birthday:r=>{const{normalize:n}=r;return n(["生日:"])},birthday_optional:r=>{const{normalize:n}=r;return n(["生日(可选):"])}},selectable_list:{select_all:r=>{const{normalize:n}=r;return n(["选择全部"])}},settings:{app_name:r=>{const{normalize:n}=r;return n(["App 名称"])},security:r=>{const{normalize:n}=r;return n(["安全"])},enter_current_password_to_confirm:r=>{const{normalize:n}=r;return n(["输入您当前的密码来确认您的身份"])},mfa:{otp:r=>{const{normalize:n}=r;return n(["OTP"])},setup_otp:r=>{const{normalize:n}=r;return n(["设置 OTP"])},wait_pre_setup_otp:r=>{const{normalize:n}=r;return n(["预设 OTP"])},confirm_and_enable:r=>{const{normalize:n}=r;return n(["确认并启用 OTP"])},title:r=>{const{normalize:n}=r;return n(["双因素验证"])},generate_new_recovery_codes:r=>{const{normalize:n}=r;return n(["生成新的恢复码"])},warning_of_generate_new_codes:r=>{const{normalize:n}=r;return n(["当您生成新的恢复码时,您旧的恢复码将会失效。"])},recovery_codes:r=>{const{normalize:n}=r;return n(["恢复码。"])},waiting_a_recovery_codes:r=>{const{normalize:n}=r;return n(["正在接收备份码…"])},recovery_codes_warning:r=>{const{normalize:n}=r;return n(["抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。"])},authentication_methods:r=>{const{normalize:n}=r;return n(["身份验证方法"])},scan:{title:r=>{const{normalize:n}=r;return n(["扫一下"])},desc:r=>{const{normalize:n}=r;return n(["使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:"])},secret_code:r=>{const{normalize:n}=r;return n(["密钥"])}},verify:{desc:r=>{const{normalize:n}=r;return n(["要启用双因素验证,请输入您的双因素验证 app 里的数字:"])}}},attachmentRadius:r=>{const{normalize:n}=r;return n(["附件"])},attachments:r=>{const{normalize:n}=r;return n(["附件"])},avatar:r=>{const{normalize:n}=r;return n(["头像"])},avatarAltRadius:r=>{const{normalize:n}=r;return n(["头像(通知)"])},avatarRadius:r=>{const{normalize:n}=r;return n(["头像"])},background:r=>{const{normalize:n}=r;return n(["背景"])},bio:r=>{const{normalize:n}=r;return n(["简介"])},block_export:r=>{const{normalize:n}=r;return n(["屏蔽名单导出"])},block_export_button:r=>{const{normalize:n}=r;return n(["导出你的屏蔽名单到一个 csv 文件"])},block_import:r=>{const{normalize:n}=r;return n(["屏蔽名单导入"])},block_import_error:r=>{const{normalize:n}=r;return n(["导入屏蔽名单出错"])},blocks_imported:r=>{const{normalize:n}=r;return n(["屏蔽名单导入成功!需要一点时间来处理。"])},blocks_tab:r=>{const{normalize:n}=r;return n(["屏蔽"])},btnRadius:r=>{const{normalize:n}=r;return n(["按钮"])},cBlue:r=>{const{normalize:n}=r;return n(["蓝色(回复,关注)"])},cGreen:r=>{const{normalize:n}=r;return n(["绿色(转发)"])},cOrange:r=>{const{normalize:n}=r;return n(["橙色(喜欢)"])},cRed:r=>{const{normalize:n}=r;return n(["红色(取消)"])},change_password:r=>{const{normalize:n}=r;return n(["修改密码"])},change_password_error:r=>{const{normalize:n}=r;return n(["修改密码的时候出了点问题。"])},changed_password:r=>{const{normalize:n}=r;return n(["成功修改了密码!"])},collapse_subject:r=>{const{normalize:n}=r;return n(["折叠带主题的内容"])},composing:r=>{const{normalize:n}=r;return n(["撰写"])},confirm_new_password:r=>{const{normalize:n}=r;return n(["确认新密码"])},current_avatar:r=>{const{normalize:n}=r;return n(["当前头像"])},current_password:r=>{const{normalize:n}=r;return n(["当前密码"])},current_profile_banner:r=>{const{normalize:n}=r;return n(["您当前的横幅图片"])},data_import_export_tab:r=>{const{normalize:n}=r;return n(["数据导入/导出"])},default_vis:r=>{const{normalize:n}=r;return n(["默认可见范围"])},delete_account:r=>{const{normalize:n}=r;return n(["删除账户"])},delete_account_description:r=>{const{normalize:n}=r;return n(["永久删除你的帐号和所有数据。"])},delete_account_error:r=>{const{normalize:n}=r;return n(["删除账户时发生错误,如果一直删除不了,请联系实例管理员。"])},delete_account_instructions:r=>{const{normalize:n}=r;return n(["在下面输入您的密码来确认删除账户。"])},avatar_size_instruction:r=>{const{normalize:n}=r;return n(["推荐的头像图片最小尺寸为 150x150 像素。"])},export_theme:r=>{const{normalize:n}=r;return n(["导出预置主题"])},filtering:r=>{const{normalize:n}=r;return n(["过滤器"])},filtering_explanation:r=>{const{normalize:n}=r;return n(["所有包含以下词汇的内容都会被隐藏,一行一个"])},follow_export:r=>{const{normalize:n}=r;return n(["导出关注"])},follow_export_button:r=>{const{normalize:n}=r;return n(["将关注导出成 csv 文件"])},follow_import:r=>{const{normalize:n}=r;return n(["导入关注"])},follow_import_error:r=>{const{normalize:n}=r;return n(["导入关注时错误"])},follows_imported:r=>{const{normalize:n}=r;return n(["关注已导入!尚需要一些时间来处理。"])},foreground:r=>{const{normalize:n}=r;return n(["前景"])},general:r=>{const{normalize:n}=r;return n(["通用"])},hide_attachments_in_convo:r=>{const{normalize:n}=r;return n(["在对话中隐藏附件"])},hide_attachments_in_tl:r=>{const{normalize:n}=r;return n(["在时间线上隐藏附件"])},hide_muted_posts:r=>{const{normalize:n}=r;return n(["不显示被隐藏的用户的帖子"])},max_thumbnails:r=>{const{normalize:n}=r;return n(["每个帖子最多能显示的缩略图数量"])},hide_isp:r=>{const{normalize:n}=r;return n(["隐藏实例独有的面板"])},preload_images:r=>{const{normalize:n}=r;return n(["预载图片"])},use_one_click_nsfw:r=>{const{normalize:n}=r;return n(["点击一次以打开工作场所不适宜(NSFW)的附件"])},hide_post_stats:r=>{const{normalize:n}=r;return n(["隐藏帖子的统计数据(例如:喜欢的次数)"])},hide_user_stats:r=>{const{normalize:n}=r;return n(["隐藏用户的统计数据(例如:关注者的数量)"])},hide_filtered_statuses:r=>{const{normalize:n}=r;return n(["隐藏过滤的状态"])},import_blocks_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件中导入拉黑名单"])},import_followers_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件中导入关注"])},import_theme:r=>{const{normalize:n}=r;return n(["导入预置主题"])},inputRadius:r=>{const{normalize:n}=r;return n(["输入框"])},checkboxRadius:r=>{const{normalize:n}=r;return n(["复选框"])},instance_default:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(默认:",e(t("value")),")"])},instance_default_simple:r=>{const{normalize:n}=r;return n(["(默认)"])},interface:r=>{const{normalize:n}=r;return n(["界面"])},interfaceLanguage:r=>{const{normalize:n}=r;return n(["界面语言"])},invalid_theme_imported:r=>{const{normalize:n}=r;return n(["您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。"])},limited_availability:r=>{const{normalize:n}=r;return n(["在您的浏览器中无法使用"])},links:r=>{const{normalize:n}=r;return n(["链接"])},lock_account_description:r=>{const{normalize:n}=r;return n(["您需要手动审核关注请求"])},loop_video:r=>{const{normalize:n}=r;return n(["循环视频"])},loop_video_silent_only:r=>{const{normalize:n}=r;return n(["只循环没有声音的视频(例如:Mastodon 里的“GIF”)"])},mutes_tab:r=>{const{normalize:n}=r;return n(["隐藏"])},play_videos_in_modal:r=>{const{normalize:n}=r;return n(["在弹出框内播放视频"])},use_contain_fit:r=>{const{normalize:n}=r;return n(["生成缩略图时不要裁剪附件"])},name:r=>{const{normalize:n}=r;return n(["名字"])},name_bio:r=>{const{normalize:n}=r;return n(["名字及简介"])},new_password:r=>{const{normalize:n}=r;return n(["新密码"])},notification_visibility:r=>{const{normalize:n}=r;return n(["要显示的通知类型"])},notification_visibility_follows:r=>{const{normalize:n}=r;return n(["关注"])},notification_visibility_likes:r=>{const{normalize:n}=r;return n(["喜欢"])},notification_visibility_mentions:r=>{const{normalize:n}=r;return n(["提及"])},notification_visibility_repeats:r=>{const{normalize:n}=r;return n(["转发"])},no_rich_text_description:r=>{const{normalize:n}=r;return n(["不显示富文本格式"])},no_blocks:r=>{const{normalize:n}=r;return n(["没有屏蔽"])},no_mutes:r=>{const{normalize:n}=r;return n(["没有隐藏"])},hide_follows_description:r=>{const{normalize:n}=r;return n(["不要显示我所关注的人"])},hide_followers_description:r=>{const{normalize:n}=r;return n(["不要显示关注我的人"])},show_admin_badge:r=>{const{normalize:n}=r;return n(["在我的个人资料中显示“管理员”徽章"])},show_moderator_badge:r=>{const{normalize:n}=r;return n(["在我的个人资料中显示“监察员”徽章"])},nsfw_clickthrough:r=>{const{normalize:n}=r;return n(["将不和谐附件和链接预览隐藏,点击才会显示"])},oauth_tokens:r=>{const{normalize:n}=r;return n(["OAuth令牌"])},token:r=>{const{normalize:n}=r;return n(["令牌"])},refresh_token:r=>{const{normalize:n}=r;return n(["刷新令牌"])},valid_until:r=>{const{normalize:n}=r;return n(["有效期至"])},revoke_token:r=>{const{normalize:n}=r;return n(["撤消"])},panelRadius:r=>{const{normalize:n}=r;return n(["面板"])},pause_on_unfocused:r=>{const{normalize:n}=r;return n(["在离开页面时暂停时间线推送"])},presets:r=>{const{normalize:n}=r;return n(["预置"])},profile_background:r=>{const{normalize:n}=r;return n(["个人背景图"])},profile_banner:r=>{const{normalize:n}=r;return n(["横幅图片"])},profile_tab:r=>{const{normalize:n}=r;return n(["个人资料"])},radii_help:r=>{const{normalize:n}=r;return n(["设置界面边缘的圆角 (单位:像素)"])},replies_in_timeline:r=>{const{normalize:n}=r;return n(["时间线中的回复"])},reply_visibility_all:r=>{const{normalize:n}=r;return n(["显示所有回复"])},reply_visibility_following:r=>{const{normalize:n}=r;return n(["只显示发送给我的回复/发送给我关注的用户的回复"])},reply_visibility_self:r=>{const{normalize:n}=r;return n(["只显示发送给我的回复"])},autohide_floating_post_button:r=>{const{normalize:n}=r;return n(["自动隐藏新帖子的按钮(移动设备)"])},saving_err:r=>{const{normalize:n}=r;return n(["保存设置时发生错误"])},saving_ok:r=>{const{normalize:n}=r;return n(["设置已保存"])},search_user_to_block:r=>{const{normalize:n}=r;return n(["搜索你想屏蔽的用户"])},search_user_to_mute:r=>{const{normalize:n}=r;return n(["搜索你想要隐藏的用户"])},security_tab:r=>{const{normalize:n}=r;return n(["安全"])},scope_copy:r=>{const{normalize:n}=r;return n(["回复时复制可见范围(私信中永远会复制)"])},minimal_scopes_mode:r=>{const{normalize:n}=r;return n(["使发文可见范围的选项最少化"])},set_new_avatar:r=>{const{normalize:n}=r;return n(["设置新头像"])},set_new_profile_background:r=>{const{normalize:n}=r;return n(["设置新的个人资料背景"])},set_new_profile_banner:r=>{const{normalize:n}=r;return n(["设置新的横幅图片"])},settings:r=>{const{normalize:n}=r;return n(["设置"])},subject_input_always_show:r=>{const{normalize:n}=r;return n(["总是显示主题框"])},subject_line_behavior:r=>{const{normalize:n}=r;return n(["回复时复制主题"])},subject_line_email:r=>{const{normalize:n}=r;return n(['类似电子邮件: "re: 主题"'])},subject_line_mastodon:r=>{const{normalize:n}=r;return n(["类似 mastodon: 与原主题相同"])},subject_line_noop:r=>{const{normalize:n}=r;return n(["不要复制"])},post_status_content_type:r=>{const{normalize:n}=r;return n(["发文状态内容类型"])},stop_gifs:r=>{const{normalize:n}=r;return n(["鼠标悬停时播放GIF"])},streaming:r=>{const{normalize:n}=r;return n(["滚动到顶部时自动推送新内容"])},text:r=>{const{normalize:n}=r;return n(["文本"])},theme:r=>{const{normalize:n}=r;return n(["主题"])},theme_help:r=>{const{normalize:n}=r;return n(["使用十六进制代码(#rrggbb)来设置主题颜色。"])},theme_help_v2_1:r=>{const{normalize:n}=r;return n(["您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。"])},theme_help_v2_2:r=>{const{normalize:n}=r;return n(["某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。"])},tooltipRadius:r=>{const{normalize:n}=r;return n(["提醒"])},upload_a_photo:r=>{const{normalize:n}=r;return n(["上传照片"])},user_settings:r=>{const{normalize:n}=r;return n(["用户设置"])},values:{false:r=>{const{normalize:n}=r;return n(["否"])},true:r=>{const{normalize:n}=r;return n(["是"])}},notifications:r=>{const{normalize:n}=r;return n(["通知"])},notification_mutes:r=>{const{normalize:n}=r;return n(["要停止收到某个指定的用户的通知,请使用隐藏功能。"])},notification_blocks:r=>{const{normalize:n}=r;return n(["屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。"])},enable_web_push_notifications:r=>{const{normalize:n}=r;return n(["启用 web 推送通知"])},style:{switcher:{keep_color:r=>{const{normalize:n}=r;return n(["保留颜色"])},keep_shadows:r=>{const{normalize:n}=r;return n(["保留阴影"])},keep_opacity:r=>{const{normalize:n}=r;return n(["保留透明度"])},keep_roundness:r=>{const{normalize:n}=r;return n(["保留圆角"])},keep_fonts:r=>{const{normalize:n}=r;return n(["保留字体"])},save_load_hint:r=>{const{normalize:n}=r;return n(['"保留" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。'])},reset:r=>{const{normalize:n}=r;return n(["重置"])},clear_all:r=>{const{normalize:n}=r;return n(["清除全部"])},clear_opacity:r=>{const{normalize:n}=r;return n(["清除透明度"])},load_theme:r=>{const{normalize:n}=r;return n(["加载主题"])},help:{upgraded_from_v2:r=>{const{normalize:n}=r;return n(["PleromaFE 已升级,主题会与您记忆中的不太一样。"])},older_version_imported:r=>{const{normalize:n}=r;return n(["您导入的文件来自旧版本的 FE。"])},future_version_imported:r=>{const{normalize:n}=r;return n(["您导入的文件来自更高版本的 FE。"])},v2_imported:r=>{const{normalize:n}=r;return n(["您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。"])},snapshot_source_mismatch:r=>{const{normalize:n}=r;return n(["版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。"])},migration_napshot_gone:r=>{const{normalize:n}=r;return n(["不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。"])},migration_snapshot_ok:r=>{const{normalize:n}=r;return n(["为保万无一失,加载了主题快照。您可以试着加载主题数据。"])},fe_downgraded:r=>{const{normalize:n}=r;return n(["PleromaFE 的版本回滚了。"])},fe_upgraded:r=>{const{normalize:n}=r;return n(["PleromaFE 的主题引擎随着版本更新升级了。"])},snapshot_missing:r=>{const{normalize:n}=r;return n(["在文件中没有主题快照,所以网站外观可能会与原来预想的不同。"])},snapshot_present:r=>{const{normalize:n}=r;return n(["主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。"])}},use_source:r=>{const{normalize:n}=r;return n(["新版本"])},use_snapshot:r=>{const{normalize:n}=r;return n(["老版本"])},keep_as_is:r=>{const{normalize:n}=r;return n(["保持原状"])}},common:{color:r=>{const{normalize:n}=r;return n(["颜色"])},opacity:r=>{const{normalize:n}=r;return n(["透明度"])},contrast:{hint:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["对比度是 ",e(t("ratio")),", 它 ",e(t("level"))," ",e(t("context"))])},level:{aa:r=>{const{normalize:n}=r;return n(["符合 AA 等级准则(最低)"])},aaa:r=>{const{normalize:n}=r;return n(["符合 AAA 等级准则(推荐)"])},bad:r=>{const{normalize:n}=r;return n(["不符合任何辅助功能指南"])}},context:{"18pt":r=>{const{normalize:n}=r;return n(["大字文本 (18pt+)"])},text:r=>{const{normalize:n}=r;return n(["文本"])}}}},common_colors:{_tab_label:r=>{const{normalize:n}=r;return n(["常规"])},main:r=>{const{normalize:n}=r;return n(["常用颜色"])},foreground_hint:r=>{const{normalize:n}=r;return n(["点击”高级“ 标签进行细致的控制"])},rgbo:r=>{const{normalize:n}=r;return n(["图标,强调,徽章"])}},advanced_colors:{_tab_label:r=>{const{normalize:n}=r;return n(["高级"])},alert:r=>{const{normalize:n}=r;return n(["提醒或警告背景色"])},alert_error:r=>{const{normalize:n}=r;return n(["错误"])},badge:r=>{const{normalize:n}=r;return n(["徽章背景"])},badge_notification:r=>{const{normalize:n}=r;return n(["通知"])},panel_header:r=>{const{normalize:n}=r;return n(["面板标题"])},top_bar:r=>{const{normalize:n}=r;return n(["顶栏"])},borders:r=>{const{normalize:n}=r;return n(["边框"])},buttons:r=>{const{normalize:n}=r;return n(["按钮"])},inputs:r=>{const{normalize:n}=r;return n(["输入框"])},faint_text:r=>{const{normalize:n}=r;return n(["灰度文字"])},chat:{border:r=>{const{normalize:n}=r;return n(["边框"])},outgoing:r=>{const{normalize:n}=r;return n(["发出的"])},incoming:r=>{const{normalize:n}=r;return n(["收到的"])}},disabled:r=>{const{normalize:n}=r;return n(["禁用的"])},pressed:r=>{const{normalize:n}=r;return n(["压下的"])},highlight:r=>{const{normalize:n}=r;return n(["强调元素"])},selectedMenu:r=>{const{normalize:n}=r;return n(["选中的菜单项"])},selectedPost:r=>{const{normalize:n}=r;return n(["选中的发布内容"])},icons:r=>{const{normalize:n}=r;return n(["图标"])},poll:r=>{const{normalize:n}=r;return n(["投票统计图"])},popover:r=>{const{normalize:n}=r;return n(["提示框,菜单,弹出框"])},post:r=>{const{normalize:n}=r;return n(["发布内容/用户简介"])},alert_neutral:r=>{const{normalize:n}=r;return n(["中性"])},alert_warning:r=>{const{normalize:n}=r;return n(["警告"])},tabs:r=>{const{normalize:n}=r;return n(["标签页"])},underlay:r=>{const{normalize:n}=r;return n(["底衬"])},toggled:r=>{const{normalize:n}=r;return n(["按下的"])},wallpaper:r=>{const{normalize:n}=r;return n(["壁纸"])}},radii:{_tab_label:r=>{const{normalize:n}=r;return n(["圆角"])}},shadows:{_tab_label:r=>{const{normalize:n}=r;return n(["阴影和照明"])},component:r=>{const{normalize:n}=r;return n(["组件"])},override:r=>{const{normalize:n}=r;return n(["覆盖"])},shadow_id:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["阴影 #",e(t("value"))])},blur:r=>{const{normalize:n}=r;return n(["模糊"])},spread:r=>{const{normalize:n}=r;return n(["扩散"])},inset:r=>{const{normalize:n}=r;return n(["内阴影"])},hint:r=>{const{normalize:n}=r;return n(["对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。"])},filter_hint:{always_drop_shadow:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["警告,此阴影设置会总是使用 ",e(t(0))," ,如果浏览器支持的话。"])},drop_shadow_syntax:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 不支持参数 ",e(t(1))," 和关键词 ",e(t(2))," 。"])},avatar_inset:r=>{const{normalize:n}=r;return n(["请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。"])},spread_zero:r=>{const{normalize:n}=r;return n(["阴影的扩散 > 0 会同设置成零一样"])},inset_classic:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["内阴影会使用 ",e(t(0))])}},components:{panel:r=>{const{normalize:n}=r;return n(["面板"])},panelHeader:r=>{const{normalize:n}=r;return n(["面板标题"])},topBar:r=>{const{normalize:n}=r;return n(["顶栏"])},avatar:r=>{const{normalize:n}=r;return n(["用户头像(在个人资料栏)"])},avatarStatus:r=>{const{normalize:n}=r;return n(["用户头像(在帖子显示栏)"])},popup:r=>{const{normalize:n}=r;return n(["弹窗与工具提示"])},button:r=>{const{normalize:n}=r;return n(["按钮"])},buttonHover:r=>{const{normalize:n}=r;return n(["按钮(悬停)"])},buttonPressed:r=>{const{normalize:n}=r;return n(["按钮(压下)"])},buttonPressedHover:r=>{const{normalize:n}=r;return n(["按钮(压下和悬停)"])},input:r=>{const{normalize:n}=r;return n(["输入框"])}},hintV3:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["对于阴影,您还可以使用 ",e(t(0))," 表示法来使用其它颜色插槽。"])}},fonts:{_tab_label:r=>{const{normalize:n}=r;return n(["字体"])},help:r=>{const{normalize:n}=r;return n(["为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。"])},components:{interface:r=>{const{normalize:n}=r;return n(["界面"])},input:r=>{const{normalize:n}=r;return n(["输入框"])},post:r=>{const{normalize:n}=r;return n(["发帖文字"])},postCode:r=>{const{normalize:n}=r;return n(["帖子中使用等间距文字(富文本)"])}},family:r=>{const{normalize:n}=r;return n(["字体名称"])},size:r=>{const{normalize:n}=r;return n(["大小 (in px)"])},weight:r=>{const{normalize:n}=r;return n(["字重 (粗体)"])},custom:r=>{const{normalize:n}=r;return n(["自选"])}},preview:{header:r=>{const{normalize:n}=r;return n(["预览"])},content:r=>{const{normalize:n}=r;return n(["内容"])},error:r=>{const{normalize:n}=r;return n(["错误示例"])},button:r=>{const{normalize:n}=r;return n(["按钮"])},text:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["有堆 ",e(t(0))," 和 ",e(t(1))])},mono:r=>{const{normalize:n}=r;return n(["monospace 内容"])},input:r=>{const{normalize:n}=r;return n(["刚刚抵达上海。"])},faint_link:r=>{const{normalize:n}=r;return n(["帮助手册"])},fine_print:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["阅读我们的 ",e(t(0))," ,然而什么也学不到!"])},header_faint:r=>{const{normalize:n}=r;return n(["这很正常"])},checkbox:r=>{const{normalize:n}=r;return n(["我已经浏览了条款及细则"])},link:r=>{const{normalize:n}=r;return n(["一个棒棒的小小链接"])}}},version:{title:r=>{const{normalize:n}=r;return n(["版本"])},backend_version:r=>{const{normalize:n}=r;return n(["后端版本"])},frontend_version:r=>{const{normalize:n}=r;return n(["前端版本"])}},notification_setting_filters:r=>{const{normalize:n}=r;return n(["过滤器"])},domain_mutes:r=>{const{normalize:n}=r;return n(["域名"])},changed_email:r=>{const{normalize:n}=r;return n(["邮箱修改成功!"])},change_email_error:r=>{const{normalize:n}=r;return n(["修改您的电子邮箱时发生错误。"])},change_email:r=>{const{normalize:n}=r;return n(["修改电子邮箱"])},allow_following_move:r=>{const{normalize:n}=r;return n(["正在关注的账号迁移时自动重新关注"])},notification_setting_privacy_option:r=>{const{normalize:n}=r;return n(["在通知推送中隐藏发送者和内容"])},notification_setting_privacy:r=>{const{normalize:n}=r;return n(["隐私"])},hide_follows_count_description:r=>{const{normalize:n}=r;return n(["不显示关注数"])},notification_visibility_emoji_reactions:r=>{const{normalize:n}=r;return n(["互动"])},notification_visibility_moves:r=>{const{normalize:n}=r;return n(["用户迁移"])},new_email:r=>{const{normalize:n}=r;return n(["新邮箱"])},emoji_reactions_on_timeline:r=>{const{normalize:n}=r;return n(["在时间线上显示表情符号互动"])},notification_setting_hide_notification_contents:r=>{const{normalize:n}=r;return n(["隐藏推送通知中的发送者与内容信息"])},notification_setting_block_from_strangers:r=>{const{normalize:n}=r;return n(["屏蔽来自你没有关注的用户的通知"])},type_domains_to_mute:r=>{const{normalize:n}=r;return n(["搜索需要隐藏的域名"])},useStreamingApi:r=>{const{normalize:n}=r;return n(["实时接收帖子和通知"])},user_mutes:r=>{const{normalize:n}=r;return n(["用户"])},reset_background_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置背景图吗?"])},reset_banner_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置横幅图片吗?"])},reset_avatar_confirm:r=>{const{normalize:n}=r;return n(["您确定要重置头像吗?"])},reset_profile_banner:r=>{const{normalize:n}=r;return n(["重置横幅图片"])},reset_profile_background:r=>{const{normalize:n}=r;return n(["重置个人背景图"])},reset_avatar:r=>{const{normalize:n}=r;return n(["重置头像"])},hide_followers_count_description:r=>{const{normalize:n}=r;return n(["不显示关注者数量"])},profile_fields:{value:r=>{const{normalize:n}=r;return n(["内容"])},name:r=>{const{normalize:n}=r;return n(["标签"])},add_field:r=>{const{normalize:n}=r;return n(["添加字段"])},label:r=>{const{normalize:n}=r;return n(["个人资料元数据"])}},accent:r=>{const{normalize:n}=r;return n(["强调色"])},pad_emoji:r=>{const{normalize:n}=r;return n(["从表情符号选择器插入表情符号时,在表情两侧插入空格"])},discoverable:r=>{const{normalize:n}=r;return n(["允许通过搜索检索等服务找到此账号"])},mutes_and_blocks:r=>{const{normalize:n}=r;return n(["隐藏与屏蔽"])},bot:r=>{const{normalize:n}=r;return n(["这是一个机器人账号"])},fun:r=>{const{normalize:n}=r;return n(["趣味"])},useStreamingApiWarning:r=>{const{normalize:n}=r;return n(["(不推荐使用,试验性,已知会跳过一些帖子)"])},chatMessageRadius:r=>{const{normalize:n}=r;return n(["聊天消息"])},greentext:r=>{const{normalize:n}=r;return n(["Meme 箭头"])},virtual_scrolling:r=>{const{normalize:n}=r;return n(["优化时间线渲染"])},import_mutes_from_a_csv_file:r=>{const{normalize:n}=r;return n(["从 csv 文件导入隐藏名单"])},mutes_imported:r=>{const{normalize:n}=r;return n(["隐藏名单导入成功!处理它们将需要一段时间。"])},mute_import_error:r=>{const{normalize:n}=r;return n(["导入隐藏名单出错"])},mute_import:r=>{const{normalize:n}=r;return n(["隐藏名单导入"])},mute_export_button:r=>{const{normalize:n}=r;return n(["导出你的隐藏名单到一个 csv 文件"])},mute_export:r=>{const{normalize:n}=r;return n(["隐藏名单导出"])},hide_wallpaper:r=>{const{normalize:n}=r;return n(["隐藏实例壁纸"])},setting_changed:r=>{const{normalize:n}=r;return n(["与默认设置不同"])},more_settings:r=>{const{normalize:n}=r;return n(["更多设置"])},sensitive_by_default:r=>{const{normalize:n}=r;return n(["默认标记发文为敏感内容"])},reply_visibility_self_short:r=>{const{normalize:n}=r;return n(["只显示对我本人的回复"])},reply_visibility_following_short:r=>{const{normalize:n}=r;return n(["显示对我关注的人的回复"])},hide_all_muted_posts:r=>{const{normalize:n}=r;return n(["不显示已隐藏的发文"])},hide_media_previews:r=>{const{normalize:n}=r;return n(["隐藏媒体预览"])},word_filter:r=>{const{normalize:n}=r;return n(["词语过滤"])},save:r=>{const{normalize:n}=r;return n(["保存更改"])},file_export_import:{errors:{file_slightly_new:r=>{const{normalize:n}=r;return n(["文件的小版本不同,有些设置可能无法加载"])},file_too_old:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["不兼容的主版本:",e(t("fileMajor")),",文件版本过旧,不受支持(最小设置版本 ",e(t("feMajor")),")"])},file_too_new:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["不兼容的主版本:",e(t("fileMajor")),",此 PleromaFE(设置版本 ",e(t("feMajor")),")过旧,无法处理"])},invalid_file:r=>{const{normalize:n}=r;return n(["所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。"])}},restore_settings:r=>{const{normalize:n}=r;return n(["从文件恢复设置"])},backup_settings_theme:r=>{const{normalize:n}=r;return n(["备份设置和主题到文件"])},backup_settings:r=>{const{normalize:n}=r;return n(["备份设置到文件"])},backup_restore:r=>{const{normalize:n}=r;return n(["设置备份"])}},right_sidebar:r=>{const{normalize:n}=r;return n(["反转分栏的顺序"])},hide_shoutbox:r=>{const{normalize:n}=r;return n(["隐藏实例留言板"])},expert_mode:r=>{const{normalize:n}=r;return n(["显示高级"])},download_backup:r=>{const{normalize:n}=r;return n(["下载"])},mention_links:r=>{const{normalize:n}=r;return n(["提及链接"])},account_backup:r=>{const{normalize:n}=r;return n(["账号备份"])},account_backup_table_head:r=>{const{normalize:n}=r;return n(["备份"])},remove_backup:r=>{const{normalize:n}=r;return n(["移除"])},list_backups_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["获取备份列表出错:",e(t("error"))])},add_backup:r=>{const{normalize:n}=r;return n(["创建一个新备份"])},added_backup:r=>{const{normalize:n}=r;return n(["创建了一个新备份。"])},account_alias:r=>{const{normalize:n}=r;return n(["账号别名"])},account_alias_table_head:r=>{const{normalize:n}=r;return n(["别名"])},list_aliases_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["获取别名时出错:",e(t("error"))])},hide_list_aliases_error_action:r=>{const{normalize:n}=r;return n(["关闭"])},remove_alias:r=>{const{normalize:n}=r;return n(["移除这个别名"])},new_alias_target:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加一个新别名(例如 ",e(t("example")),")"])},added_alias:r=>{const{normalize:n}=r;return n(["别名添加好了。"])},move_account:r=>{const{normalize:n}=r;return n(["移动账号"])},move_account_target:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["目标账号(例如 ",e(t("example")),")"])},moved_account:r=>{const{normalize:n}=r;return n(["账号移动好了。"])},move_account_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["移动账号时出错:",e(t("error"))])},setting_server_side:r=>{const{normalize:n}=r;return n(["这个设置是捆绑到你的个人资料的,能影响所有会话和客户端"])},post_look_feel:r=>{const{normalize:n}=r;return n(["文章的样子跟感受"])},email_language:r=>{const{normalize:n}=r;return n(["从服务器收邮件的语言"])},account_backup_description:r=>{const{normalize:n}=r;return n(["这个允许你下载一份账号信息和文章的存档,但是现在还不能导入到 Pleroma 账号里。"])},backup_not_ready:r=>{const{normalize:n}=r;return n(["备份还没准备好。"])},add_backup_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加新备份时出错:",e(t("error"))])},add_alias_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["添加别名时出错:",e(t("error"))])},move_account_notes:r=>{const{normalize:n}=r;return n(["如果你想把账号移动到别的地方,你必须去目标账号,然后加一个指向这里的别名。"])},wordfilter:r=>{const{normalize:n}=r;return n(["词语过滤器"])},user_profiles:r=>{const{normalize:n}=r;return n(["用户资料"])},third_column_mode_notifications:r=>{const{normalize:n}=r;return n(["通知栏"])},backup_running:r=>{const{normalize:n,interpolate:e,named:t,plural:o}=r;return o([n(["此备份正在进行,已处理 ",e(t("number"))," 条记录。"]),n(["此备份正在进行,已处理 ",e(t("number"))," 条记录。"])])},lists_navigation:r=>{const{normalize:n}=r;return n(["在导航中显示列表"])},word_filter_and_more:r=>{const{normalize:n}=r;return n(["词过滤器及其它..."])},backup_failed:r=>{const{normalize:n}=r;return n(["此备份已失败。"])},birthday:{label:r=>{const{normalize:n}=r;return n(["生日"])},show_birthday:r=>{const{normalize:n}=r;return n(["展示我的生日"])}},hide_favorites_description:r=>{const{normalize:n}=r;return n(["不显示我的喜欢列表(人们仍然会收到通知)"])},third_column_mode:r=>{const{normalize:n}=r;return n(["当有足够的空间时,显示第三栏包含"])},third_column_mode_postform:r=>{const{normalize:n}=r;return n(["主要的发文形式和导航"])},columns:r=>{const{normalize:n}=r;return n(["分栏"])},user_popover_avatar_overlay:r=>{const{normalize:n}=r;return n(["在用户头像上显示用户弹出窗口"])},navbar_column_stretch:r=>{const{normalize:n}=r;return n(["延伸导航栏至分栏宽度"])},posts:r=>{const{normalize:n}=r;return n(["帖子"])},conversation_display_linear_quick:r=>{const{normalize:n}=r;return n(["线性视图"])},conversation_other_replies_button:r=>{const{normalize:n}=r;return n(["显示 “其它回复” 按钮"])},confirm_dialogs_delete:r=>{const{normalize:n}=r;return n(["删除状态"])},confirm_dialogs_mute:r=>{const{normalize:n}=r;return n(["隐藏用户"])},column_sizes:r=>{const{normalize:n}=r;return n(["分栏大小"])},column_sizes_sidebar:r=>{const{normalize:n}=r;return n(["侧栏"])},column_sizes_content:r=>{const{normalize:n}=r;return n(["內容"])},column_sizes_notifs:r=>{const{normalize:n}=r;return n(["通知"])},conversation_other_replies_button_below:r=>{const{normalize:n}=r;return n(["在状态下方"])},conversation_other_replies_button_inside:r=>{const{normalize:n}=r;return n(["在状态中"])},auto_update:r=>{const{normalize:n}=r;return n(["自动显示新的帖子"])},use_websockets:r=>{const{normalize:n}=r;return n(["使用 websockets(实时更新)"])},max_depth_in_thread:r=>{const{normalize:n}=r;return n(["默认显示同主题帖子中的最大层数"])},hide_wordfiltered_statuses:r=>{const{normalize:n}=r;return n(["隐藏经过词语过滤的状态"])},hide_muted_threads:r=>{const{normalize:n}=r;return n(["不显示已隐藏的同主题帖子"])},notification_visibility_polls:r=>{const{normalize:n}=r;return n(["你所投的投票的结束于"])},tree_advanced:r=>{const{normalize:n}=r;return n(["允许在树状视图中进行更灵活的导航"])},tree_fade_ancestors:r=>{const{normalize:n}=r;return n(["以模糊的文字显示当前状态的上级"])},conversation_display_linear:r=>{const{normalize:n}=r;return n(["线性样式"])},mention_link_fade_domain:r=>{const{normalize:n}=r;return n(["淡化域名(例如:","@","example.org 中的 ","@","foo","@","example.org)"])},mention_link_bolden_you:r=>{const{normalize:n}=r;return n(["当你被提及时突出显示提及你"])},user_popover_avatar_action:r=>{const{normalize:n}=r;return n(["弹出式头像点击动作"])},user_popover_avatar_action_zoom:r=>{const{normalize:n}=r;return n(["缩放头像"])},user_popover_avatar_action_close:r=>{const{normalize:n}=r;return n(["关闭弹出窗口"])},show_yous:r=>{const{normalize:n}=r;return n(["显示 (You)s"])},add_language:r=>{const{normalize:n}=r;return n(["添加备用语言"])},remove_language:r=>{const{normalize:n}=r;return n(["移除"])},primary_language:r=>{const{normalize:n}=r;return n(["主要语言:"])},fallback_language:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["备用语言 ",e(t("index")),":"])},account_privacy:r=>{const{normalize:n}=r;return n(["隐私"])},conversation_display:r=>{const{normalize:n}=r;return n(["对话显示样式"])},conversation_display_tree:r=>{const{normalize:n}=r;return n(["树状样式"])},conversation_display_tree_quick:r=>{const{normalize:n}=r;return n(["树状视图"])},disable_sticky_headers:r=>{const{normalize:n}=r;return n(["不要把分栏的顶栏固定在屏幕的顶部"])},confirm_dialogs:r=>{const{normalize:n}=r;return n(["请求确认于"])},confirm_dialogs_logout:r=>{const{normalize:n}=r;return n(["登出"])},confirm_dialogs_deny_follow:r=>{const{normalize:n}=r;return n(["拒绝关注请求"])},confirm_dialogs_approve_follow:r=>{const{normalize:n}=r;return n(["批准关注请求"])},confirm_dialogs_block:r=>{const{normalize:n}=r;return n(["屏蔽用户"])},confirm_dialogs_unfollow:r=>{const{normalize:n}=r;return n(["取消关注用户"])},confirm_dialogs_repeat:r=>{const{normalize:n}=r;return n(["转发状态"])},confirm_dialogs_remove_follower:r=>{const{normalize:n}=r;return n(["移除关注者"])},mute_bot_posts:r=>{const{normalize:n}=r;return n(["隐藏机器人的帖子"])},hide_bot_indication:r=>{const{normalize:n}=r;return n(["隐藏帖子中的机器人提示"])},always_show_post_button:r=>{const{normalize:n}=r;return n(["始终显示浮动的新帖子按钮"])},show_scrollbars:r=>{const{normalize:n}=r;return n(["显示侧栏的滚动条"])},third_column_mode_none:r=>{const{normalize:n}=r;return n(["完全不显示第三栏"])},use_at_icon:r=>{const{normalize:n}=r;return n(["将 ","@"," 符号显示为图标而不是文本"])},mention_link_display:r=>{const{normalize:n}=r;return n(["显示提及链接"])},mention_link_display_short:r=>{const{normalize:n}=r;return n(["始终以简称的形式出现(例如:","@","foo)"])},mention_link_display_full_for_remote:r=>{const{normalize:n}=r;return n(["仅远程实例用户以全名的形式出现(例如:","@","foo","@","example.org)"])},mention_link_display_full:r=>{const{normalize:n}=r;return n(["始终以全名的形式出现(例如:","@","foo","@","example.org)"])},mention_link_use_tooltip:r=>{const{normalize:n}=r;return n(["点击提及链接时显示用户卡片"])},mention_link_show_avatar:r=>{const{normalize:n}=r;return n(["在链接旁边显示用户头像"])},mention_link_show_avatar_quick:r=>{const{normalize:n}=r;return n(["在提及内容旁边显示用户头像"])},user_popover_avatar_action_open:r=>{const{normalize:n}=r;return n(["打开个人资料"])},autocomplete_select_first:r=>{const{normalize:n}=r;return n(["当有自动完成的结果时,自动选择第一个候选项"])},url:r=>{const{normalize:n}=r;return n(["URL"])},preview:r=>{const{normalize:n}=r;return n(["预览"])},commit_value:r=>{const{normalize:n}=r;return n(["保存"])},commit_value_tooltip:r=>{const{normalize:n}=r;return n(["当前值未保存,请按此按钮以提交你的修改"])},reset_value:r=>{const{normalize:n}=r;return n(["重置"])},reset_value_tooltip:r=>{const{normalize:n}=r;return n(["重置草稿"])},hard_reset_value:r=>{const{normalize:n}=r;return n(["硬重置"])},hard_reset_value_tooltip:r=>{const{normalize:n}=r;return n(["从存储中移除设置,强制使用默认值"])},emoji_reactions_scale:r=>{const{normalize:n}=r;return n(["表情回应比例系数"])}},time:{day:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},days:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},day_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"d"])},days_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"d"])},hour:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hours:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hour_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"h"])},hours_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"h"])},in_future:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["还有 ",e(t(0))])},in_past:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 之前"])},minute:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分钟"])},minutes:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分钟"])},minute_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"min"])},minutes_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"min"])},month:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},months:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},month_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"mo"])},months_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"mo"])},now:r=>{const{normalize:n}=r;return n(["刚刚"])},now_short:r=>{const{normalize:n}=r;return n(["刚刚"])},second:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},seconds:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},second_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"s"])},seconds_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"s"])},week:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},weeks:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},week_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"w"])},weeks_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"w"])},year:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},years:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},year_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"y"])},years_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0)),"y"])},unit:{days_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])},hours:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 小时"])},hours_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 时"])},minutes:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分"])},minutes_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 分"])},months:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 个月"])},months_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 月"])},seconds:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},seconds_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 秒"])},weeks_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},years:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},years_short:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 年"])},weeks:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 周"])},days:r=>{const{normalize:n,interpolate:e,list:t}=r;return n([e(t(0))," 天"])}}},timeline:{collapse:r=>{const{normalize:n}=r;return n(["折叠"])},conversation:r=>{const{normalize:n}=r;return n(["对话"])},error_fetching:r=>{const{normalize:n}=r;return n(["获取更新时发生错误"])},load_older:r=>{const{normalize:n}=r;return n(["加载更早的状态"])},no_retweet_hint:r=>{const{normalize:n}=r;return n(["这条内容仅关注者可见,或者是私信,因此不能转发"])},repeated:r=>{const{normalize:n}=r;return n(["转发了"])},show_new:r=>{const{normalize:n}=r;return n(["显示新内容"])},up_to_date:r=>{const{normalize:n}=r;return n(["已是最新"])},no_more_statuses:r=>{const{normalize:n}=r;return n(["没有更多的状态"])},no_statuses:r=>{const{normalize:n}=r;return n(["没有状态更新"])},reload:r=>{const{normalize:n}=r;return n(["重新载入"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["取得时间轴时发生错误:",e(t(0))])},socket_broke:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["丢失实时连接:CloseEvent code ",e(t(0))])},socket_reconnected:r=>{const{normalize:n}=r;return n(["已建立实时连接"])},quick_view_settings:r=>{const{normalize:n}=r;return n(["快速视图设置"])},quick_filter_settings:r=>{const{normalize:n}=r;return n(["快速过滤设置"])}},status:{favorites:r=>{const{normalize:n}=r;return n(["喜欢"])},repeats:r=>{const{normalize:n}=r;return n(["转发"])},delete:r=>{const{normalize:n}=r;return n(["删除状态"])},pin:r=>{const{normalize:n}=r;return n(["在个人资料置顶"])},unpin:r=>{const{normalize:n}=r;return n(["取消在个人资料置顶"])},pinned:r=>{const{normalize:n}=r;return n(["置顶"])},delete_confirm:r=>{const{normalize:n}=r;return n(["您确定要删除这条状态吗?"])},reply_to:r=>{const{normalize:n}=r;return n(["回复"])},replies_list:r=>{const{normalize:n}=r;return n(["回复:"])},mute_conversation:r=>{const{normalize:n}=r;return n(["隐藏对话"])},unmute_conversation:r=>{const{normalize:n}=r;return n(["对话取消隐藏"])},hide_content:r=>{const{normalize:n}=r;return n(["隐藏内容"])},show_content:r=>{const{normalize:n}=r;return n(["显示内容"])},hide_full_subject:r=>{const{normalize:n}=r;return n(["隐藏此部分标题"])},show_full_subject:r=>{const{normalize:n}=r;return n(["显示全部标题"])},thread_muted:r=>{const{normalize:n}=r;return n(["同主题帖子已被隐藏"])},copy_link:r=>{const{normalize:n}=r;return n(["复制状态链接"])},status_unavailable:r=>{const{normalize:n}=r;return n(["状态不可取得"])},unbookmark:r=>{const{normalize:n}=r;return n(["取消书签"])},bookmark:r=>{const{normalize:n}=r;return n(["书签"])},thread_muted_and_words:r=>{const{normalize:n}=r;return n([",含有过滤词:"])},status_deleted:r=>{const{normalize:n}=r;return n(["该状态已被删除"])},nsfw:r=>{const{normalize:n}=r;return n(["NSFW"])},external_source:r=>{const{normalize:n}=r;return n(["外部来源"])},expand:r=>{const{normalize:n}=r;return n(["展开"])},you:r=>{const{normalize:n}=r;return n(["(你)"])},plus_more:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["还有 ",e(t("number"))," 个"])},many_attachments:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["文章有 ",e(t("number"))," 个附件"])},collapse_attachments:r=>{const{normalize:n}=r;return n(["折起附件"])},show_all_attachments:r=>{const{normalize:n}=r;return n(["显示所有附件"])},show_attachment_description:r=>{const{normalize:n}=r;return n(["预览描述(打开附件能看完整描述)"])},hide_attachment:r=>{const{normalize:n}=r;return n(["隐藏附件"])},remove_attachment:r=>{const{normalize:n}=r;return n(["移除附件"])},attachment_stop_flash:r=>{const{normalize:n}=r;return n(["停止 Flash 播放器"])},move_up:r=>{const{normalize:n}=r;return n(["把附件左移"])},open_gallery:r=>{const{normalize:n}=r;return n(["打开图库"])},thread_hide:r=>{const{normalize:n}=r;return n(["隐藏这个同主题帖子"])},thread_show:r=>{const{normalize:n}=r;return n(["显示这个同主题帖子"])},thread_show_full_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},thread_follow:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["查看这个同主题帖子的剩余部分(一共有 ",e(t("numStatus"))," 个状态)"])},thread_follow_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},ancestor_follow:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["查看这个状态下的别的 ",e(t("numReplies"))," 个回复"])},ancestor_follow_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},show_all_conversation_with_icon:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("icon"))," ",e(t("text"))])},show_all_conversation:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["显示完整对话(还有 ",e(t("numStatus"))," 个状态)"])},mentions:r=>{const{normalize:n}=r;return n(["提及"])},replies_list_with_others:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["回复(另外 +",e(t("numReplies"))," 个):"])},move_down:r=>{const{normalize:n}=r;return n(["把附件右移"])},thread_show_full:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["显示这个同主题帖子下的所有东西(一共有 ",e(t("numStatus"))," 个状态,最大深度 ",e(t("depth")),")"])},show_only_conversation_under_this:r=>{const{normalize:n}=r;return n(["只显示这个状态的回复"])},repeat_confirm:r=>{const{normalize:n}=r;return n(["您确定要转发这条状态吗?"])},repeat_confirm_title:r=>{const{normalize:n}=r;return n(["确认转发"])},repeat_confirm_accept_button:r=>{const{normalize:n}=r;return n(["转发"])},repeat_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要转发"])},edit:r=>{const{normalize:n}=r;return n(["编辑状态"])},edited_at:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(最后编辑于 ",e(t("time")),")"])},delete_confirm_title:r=>{const{normalize:n}=r;return n(["确认删除"])},delete_confirm_accept_button:r=>{const{normalize:n}=r;return n(["删除"])},delete_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["保留"])},show_attachment_in_modal:r=>{const{normalize:n}=r;return n(["在媒体模式中显示"])},status_history:r=>{const{normalize:n}=r;return n(["状态历史"])},delete_error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["删除状态时出错:",e(t(0))])},reaction_count_label:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("num"))," 人作出了表情回应"])}},user_card:{approve:r=>{const{normalize:n}=r;return n(["核准"])},block:r=>{const{normalize:n}=r;return n(["屏蔽"])},blocked:r=>{const{normalize:n}=r;return n(["已屏蔽!"])},deny:r=>{const{normalize:n}=r;return n(["拒绝"])},favorites:r=>{const{normalize:n}=r;return n(["喜欢"])},follow:r=>{const{normalize:n}=r;return n(["关注"])},follow_sent:r=>{const{normalize:n}=r;return n(["请求已发送!"])},follow_progress:r=>{const{normalize:n}=r;return n(["请求中…"])},follow_unfollow:r=>{const{normalize:n}=r;return n(["取消关注"])},followees:r=>{const{normalize:n}=r;return n(["正在关注"])},followers:r=>{const{normalize:n}=r;return n(["关注者"])},following:r=>{const{normalize:n}=r;return n(["正在关注!"])},follows_you:r=>{const{normalize:n}=r;return n(["关注了你!"])},its_you:r=>{const{normalize:n}=r;return n(["就是你!"])},media:r=>{const{normalize:n}=r;return n(["媒体"])},mute:r=>{const{normalize:n}=r;return n(["隐藏"])},muted:r=>{const{normalize:n}=r;return n(["已隐藏"])},per_day:r=>{const{normalize:n}=r;return n(["每天"])},remote_follow:r=>{const{normalize:n}=r;return n(["跨站关注"])},report:r=>{const{normalize:n}=r;return n(["报告"])},statuses:r=>{const{normalize:n}=r;return n(["状态"])},subscribe:r=>{const{normalize:n}=r;return n(["订阅"])},unsubscribe:r=>{const{normalize:n}=r;return n(["退订"])},unblock:r=>{const{normalize:n}=r;return n(["取消屏蔽"])},unblock_progress:r=>{const{normalize:n}=r;return n(["正在取消屏蔽…"])},block_progress:r=>{const{normalize:n}=r;return n(["正在屏蔽…"])},unmute:r=>{const{normalize:n}=r;return n(["取消隐藏"])},unmute_progress:r=>{const{normalize:n}=r;return n(["取消隐藏中…"])},mute_progress:r=>{const{normalize:n}=r;return n(["隐藏中…"])},admin_menu:{moderation:r=>{const{normalize:n}=r;return n(["仲裁"])},grant_admin:r=>{const{normalize:n}=r;return n(["赋予管理权限"])},revoke_admin:r=>{const{normalize:n}=r;return n(["撤销管理权限"])},grant_moderator:r=>{const{normalize:n}=r;return n(["赋予监察员权限"])},revoke_moderator:r=>{const{normalize:n}=r;return n(["撤销监察员权限"])},activate_account:r=>{const{normalize:n}=r;return n(["激活账号"])},deactivate_account:r=>{const{normalize:n}=r;return n(["关闭账号"])},delete_account:r=>{const{normalize:n}=r;return n(["删除账号"])},force_nsfw:r=>{const{normalize:n}=r;return n(["标记所有的帖子都是 - 工作场合不适"])},strip_media:r=>{const{normalize:n}=r;return n(["从帖子里删除媒体文件"])},force_unlisted:r=>{const{normalize:n}=r;return n(["强制帖子为不公开"])},sandbox:r=>{const{normalize:n}=r;return n(["强制帖子为只有关注者可看"])},disable_remote_subscription:r=>{const{normalize:n}=r;return n(["禁止从远程实例关注用户"])},disable_any_subscription:r=>{const{normalize:n}=r;return n(["完全禁止关注用户"])},quarantine:r=>{const{normalize:n}=r;return n(["从联合实例中禁止用户帖子"])},delete_user:r=>{const{normalize:n}=r;return n(["删除用户"])},delete_user_data_and_deactivate_confirmation:r=>{const{normalize:n}=r;return n(["这将永久删除该账户的数据并停用该账户。你完全确定吗?"])}},hidden:r=>{const{normalize:n}=r;return n(["已隐藏"])},show_repeats:r=>{const{normalize:n}=r;return n(["显示转发"])},hide_repeats:r=>{const{normalize:n}=r;return n(["隐藏转发"])},message:r=>{const{normalize:n}=r;return n(["消息"])},mention:r=>{const{normalize:n}=r;return n(["提及"])},bot:r=>{const{normalize:n}=r;return n(["机器人"])},highlight:{side:r=>{const{normalize:n}=r;return n(["侧边条纹"])},striped:r=>{const{normalize:n}=r;return n(["条纹背景"])},solid:r=>{const{normalize:n}=r;return n(["单一颜色背景"])},disabled:r=>{const{normalize:n}=r;return n(["不突出显示"])}},edit_profile:r=>{const{normalize:n}=r;return n(["编辑个人资料"])},approve_confirm_title:r=>{const{normalize:n}=r;return n(["确认批准"])},approve_confirm_accept_button:r=>{const{normalize:n}=r;return n(["批准"])},block_confirm_accept_button:r=>{const{normalize:n}=r;return n(["屏蔽"])},block_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要屏蔽"])},deactivated:r=>{const{normalize:n}=r;return n(["已停用"])},deny_confirm_title:r=>{const{normalize:n}=r;return n(["确认拒绝"])},deny_confirm_accept_button:r=>{const{normalize:n}=r;return n(["拒绝"])},deny_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要拒绝"])},deny_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您是否要拒绝 ",e(t("user"))," 的关注请求?"])},follow_cancel:r=>{const{normalize:n}=r;return n(["取消请求"])},unfollow_confirm_title:r=>{const{normalize:n}=r;return n(["确认取消关注"])},unfollow_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要取消关注 ",e(t("user"))," 吗?"])},unfollow_confirm_accept_button:r=>{const{normalize:n}=r;return n(["取消关注"])},unfollow_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要取消关注"])},mute_confirm_title:r=>{const{normalize:n}=r;return n(["确认隐藏"])},mute_confirm_accept_button:r=>{const{normalize:n}=r;return n(["隐藏"])},mute_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要隐藏"])},mute_duration_prompt:r=>{const{normalize:n}=r;return n(["让这个用户隐藏(0表示无限期):"])},remove_follower:r=>{const{normalize:n}=r;return n(["移除关注者"])},remove_follower_confirm_title:r=>{const{normalize:n}=r;return n(["确认移除关注者"])},remove_follower_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["保留"])},remove_follower_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要将 ",e(t("user"))," 从您的关注者里移除吗?"])},birthday:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["生于 ",e(t("birthday"))])},note:r=>{const{normalize:n}=r;return n(["备注"])},approve_confirm_cancel_button:r=>{const{normalize:n}=r;return n(["不要批准"])},approve_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您是否要批准 ",e(t("user"))," 的关注请求?"])},block_confirm_title:r=>{const{normalize:n}=r;return n(["确认屏蔽"])},block_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要屏蔽 ",e(t("user"))," 吗?"])},mute_confirm:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["您确定要隐藏 ",e(t("user"))," 吗?"])},remove_follower_confirm_accept_button:r=>{const{normalize:n}=r;return n(["移除"])},note_blank:r=>{const{normalize:n}=r;return n(["(空)"])},edit_note:r=>{const{normalize:n}=r;return n(["编辑备注"])},edit_note_apply:r=>{const{normalize:n}=r;return n(["应用"])},edit_note_cancel:r=>{const{normalize:n}=r;return n(["取消"])}},user_profile:{timeline_title:r=>{const{normalize:n}=r;return n(["用户时间线"])},profile_does_not_exist:r=>{const{normalize:n}=r;return n(["抱歉,此个人资料不存在。"])},profile_loading_error:r=>{const{normalize:n}=r;return n(["抱歉,载入个人资料时出错。"])}},user_reporting:{title:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["报告 ",e(t(0))])},add_comment_description:r=>{const{normalize:n}=r;return n(["此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:"])},additional_comments:r=>{const{normalize:n}=r;return n(["其它信息"])},forward_description:r=>{const{normalize:n}=r;return n(["这个账号来自另一个服务器。是否同时发送一份报告副本到那里?"])},forward_to:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["转发 ",e(t(0))])},submit:r=>{const{normalize:n}=r;return n(["提交"])},generic_error:r=>{const{normalize:n}=r;return n(["当处理您的请求时,发生了一个错误。"])}},who_to_follow:{more:r=>{const{normalize:n}=r;return n(["更多"])},who_to_follow:r=>{const{normalize:n}=r;return n(["推荐关注"])}},tool_tip:{media_upload:r=>{const{normalize:n}=r;return n(["上传媒体"])},repeat:r=>{const{normalize:n}=r;return n(["转发"])},reply:r=>{const{normalize:n}=r;return n(["回复"])},favorite:r=>{const{normalize:n}=r;return n(["喜欢"])},user_settings:r=>{const{normalize:n}=r;return n(["用户设置"])},reject_follow_request:r=>{const{normalize:n}=r;return n(["拒绝关注请求"])},add_reaction:r=>{const{normalize:n}=r;return n(["添加互动"])},bookmark:r=>{const{normalize:n}=r;return n(["书签"])},accept_follow_request:r=>{const{normalize:n}=r;return n(["接受关注请求"])},toggle_expand:r=>{const{normalize:n}=r;return n(["展开或折叠通知以显示帖子全文"])},toggle_mute:r=>{const{normalize:n}=r;return n(["展开或折叠通知以显示已隐藏的内容"])},autocomplete_available:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["共有 ",e(t("number"))," 个结果可用。使用向上和向下键浏览它们。"])}},upload:{error:{base:r=>{const{normalize:n}=r;return n(["上传不成功。"])},file_too_big:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["文件太大了 [",e(t("filesize")),e(t("filesizeunit"))," / ",e(t("allowedsize")),e(t("allowedsizeunit")),"]"])},default:r=>{const{normalize:n}=r;return n(["迟些再试"])},message:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["上传错误:",e(t(0))])}},file_size_units:{B:r=>{const{normalize:n}=r;return n(["B"])},KiB:r=>{const{normalize:n}=r;return n(["KiB"])},MiB:r=>{const{normalize:n}=r;return n(["MiB"])},GiB:r=>{const{normalize:n}=r;return n(["GiB"])},TiB:r=>{const{normalize:n}=r;return n(["TiB"])}}},search:{people:r=>{const{normalize:n}=r;return n(["人"])},hashtags:r=>{const{normalize:n}=r;return n(["话题标签"])},person_talking:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("count"))," 人正在讨论"])},people_talking:r=>{const{normalize:n,interpolate:e,named:t}=r;return n([e(t("count"))," 人正在讨论"])},no_results:r=>{const{normalize:n}=r;return n(["没有搜索结果"])},no_more_results:r=>{const{normalize:n}=r;return n(["没有更多结果"])},load_more:r=>{const{normalize:n}=r;return n(["加载更多结果"])}},password_reset:{forgot_password:r=>{const{normalize:n}=r;return n(["忘记密码了?"])},password_reset:r=>{const{normalize:n}=r;return n(["重置密码"])},instruction:r=>{const{normalize:n}=r;return n(["输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。"])},placeholder:r=>{const{normalize:n}=r;return n(["您的电邮地址或者用户名"])},check_email:r=>{const{normalize:n}=r;return n(["检查您的邮箱,会有一个链接用于重置密码。"])},return_home:r=>{const{normalize:n}=r;return n(["回到首页"])},too_many_requests:r=>{const{normalize:n}=r;return n(["您达到了尝试次数的上限,请稍后再试。"])},password_reset_disabled:r=>{const{normalize:n}=r;return n(["密码重置已被禁用。请联系您的实例管理员。"])},password_reset_required_but_mailer_is_disabled:r=>{const{normalize:n}=r;return n(["您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。"])},password_reset_required:r=>{const{normalize:n}=r;return n(["您必须重置密码才能登陆。"])}},remote_user_resolver:{error:r=>{const{normalize:n}=r;return n(["未找到。"])},searching_for:r=>{const{normalize:n}=r;return n(["搜索"])},remote_user_resolver:r=>{const{normalize:n}=r;return n(["远程用户解析器"])}},emoji:{keep_open:r=>{const{normalize:n}=r;return n(["选择器保持打开"])},stickers:r=>{const{normalize:n}=r;return n(["贴纸"])},unicode:r=>{const{normalize:n}=r;return n(["Unicode 表情符号"])},custom:r=>{const{normalize:n}=r;return n(["自定义表情符号"])},add_emoji:r=>{const{normalize:n}=r;return n(["插入表情符号"])},search_emoji:r=>{const{normalize:n}=r;return n(["搜索表情符号"])},emoji:r=>{const{normalize:n}=r;return n(["表情符号"])},load_all:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["加载所有表情符号(共 ",e(t("emojiAmount"))," 个)"])},load_all_hint:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["最先加载的 ",e(t("saneAmount"))," 表情符号,加载全部表情符号可能会带来性能问题。"])},unicode_groups:{flags:r=>{const{normalize:n}=r;return n(["旗帜"])},"food-and-drink":r=>{const{normalize:n}=r;return n(["饮食"])},objects:r=>{const{normalize:n}=r;return n(["物件"])},"people-and-body":r=>{const{normalize:n}=r;return n(["人和身体"])},symbols:r=>{const{normalize:n}=r;return n(["符号"])},"travel-and-places":r=>{const{normalize:n}=r;return n(["旅行和地点"])},activities:r=>{const{normalize:n}=r;return n(["活动"])},"animals-and-nature":r=>{const{normalize:n}=r;return n(["动物和自然"])},"smileys-and-emotion":r=>{const{normalize:n}=r;return n(["表情与情感"])}},regional_indicator:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["地区指示符 ",e(t("letter"))])},unpacked:r=>{const{normalize:n}=r;return n(["未分组的表情符号"])}},about:{mrf:{simple:{quarantine_desc:r=>{const{normalize:n}=r;return n(["本实例向以下实例仅发送公开的帖子:"])},quarantine:r=>{const{normalize:n}=r;return n(["隔离"])},reject_desc:r=>{const{normalize:n}=r;return n(["本实例不会接收来自下列实例的消息:"])},reject:r=>{const{normalize:n}=r;return n(["拒绝"])},accept_desc:r=>{const{normalize:n}=r;return n(["本实例只接收来自下列实例的消息:"])},simple_policies:r=>{const{normalize:n}=r;return n(["对于特定实例的策略"])},accept:r=>{const{normalize:n}=r;return n(["接受"])},media_removal:r=>{const{normalize:n}=r;return n(["移除媒体"])},media_nsfw_desc:r=>{const{normalize:n}=r;return n(["本实例将来自以下实例的媒体内容强制设置为敏感内容:"])},media_nsfw:r=>{const{normalize:n}=r;return n(["强制设置媒体为敏感内容"])},media_removal_desc:r=>{const{normalize:n}=r;return n(["本实例移除来自以下实例的媒体内容:"])},ftl_removal_desc:r=>{const{normalize:n}=r;return n(["该实例在从“已知网络”时间线上移除了下列实例:"])},ftl_removal:r=>{const{normalize:n}=r;return n(["从“已知网络”时间线上移除"])},reason:r=>{const{normalize:n}=r;return n(["理由"])},not_applicable:r=>{const{normalize:n}=r;return n(["无"])},instance:r=>{const{normalize:n}=r;return n(["实例"])}},mrf_policies_desc:r=>{const{normalize:n}=r;return n(["MRF 策略会影响本实例的互通行为。以下策略已启用:"])},mrf_policies:r=>{const{normalize:n}=r;return n(["已启用的 MRF 策略"])},keyword:{ftl_removal:r=>{const{normalize:n}=r;return n(["从“全部已知网络”时间线上移除"])},keyword_policies:r=>{const{normalize:n}=r;return n(["关键词策略"])},is_replaced_by:r=>{const{normalize:n}=r;return n(["→"])},replace:r=>{const{normalize:n}=r;return n(["替换"])},reject:r=>{const{normalize:n}=r;return n(["拒绝"])}},federation:r=>{const{normalize:n}=r;return n(["联邦互通"])}},staff:r=>{const{normalize:n}=r;return n(["管理人员"])}},domain_mute_card:{unmute_progress:r=>{const{normalize:n}=r;return n(["正在取消隐藏…"])},unmute:r=>{const{normalize:n}=r;return n(["取消隐藏"])},mute_progress:r=>{const{normalize:n}=r;return n(["隐藏中…"])},mute:r=>{const{normalize:n}=r;return n(["隐藏"])}},errors:{storage_unavailable:r=>{const{normalize:n}=r;return n(["Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"])}},shoutbox:{title:r=>{const{normalize:n}=r;return n(["留言板"])}},display_date:{today:r=>{const{normalize:n}=r;return n(["今天"])}},file_type:{file:r=>{const{normalize:n}=r;return n(["文件"])},image:r=>{const{normalize:n}=r;return n(["图片"])},video:r=>{const{normalize:n}=r;return n(["视频"])},audio:r=>{const{normalize:n}=r;return n(["音频"])}},chats:{empty_chat_list_placeholder:r=>{const{normalize:n}=r;return n(["您还没有任何聊天记录。开始聊天吧!"])},error_sending_message:r=>{const{normalize:n}=r;return n(["发送消息时出了点问题。"])},error_loading_chat:r=>{const{normalize:n}=r;return n(["加载聊天时出了点问题。"])},delete_confirm:r=>{const{normalize:n}=r;return n(["您确定要删除此消息吗?"])},more:r=>{const{normalize:n}=r;return n(["更多"])},empty_message_error:r=>{const{normalize:n}=r;return n(["无法发布空消息"])},new:r=>{const{normalize:n}=r;return n(["新聊天"])},chats:r=>{const{normalize:n}=r;return n(["聊天"])},delete:r=>{const{normalize:n}=r;return n(["删除"])},message_user:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["发消息给 ",e(t("nickname"))])},you:r=>{const{normalize:n}=r;return n(["你:"])}},announcements:{page_header:r=>{const{normalize:n}=r;return n(["公告"])},title:r=>{const{normalize:n}=r;return n(["公告"])},mark_as_read_action:r=>{const{normalize:n}=r;return n(["标为已读"])},post_form_header:r=>{const{normalize:n}=r;return n(["发布公告"])},post_placeholder:r=>{const{normalize:n}=r;return n(["在这里输入公告内容..."])},post_action:r=>{const{normalize:n}=r;return n(["发布"])},post_error:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["错误:",e(t("error"))])},close_error:r=>{const{normalize:n}=r;return n(["关闭"])},delete_action:r=>{const{normalize:n}=r;return n(["删除"])},start_time_prompt:r=>{const{normalize:n}=r;return n(["起始时间: "])},end_time_prompt:r=>{const{normalize:n}=r;return n(["终止时间: "])},all_day_prompt:r=>{const{normalize:n}=r;return n(["这是全天的事件"])},published_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["发表于 ",e(t("time"))])},start_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["开始于 ",e(t("time"))])},end_time_display:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["结束于 ",e(t("time"))])},edit_action:r=>{const{normalize:n}=r;return n(["编辑"])},submit_edit_action:r=>{const{normalize:n}=r;return n(["提交"])},cancel_edit_action:r=>{const{normalize:n}=r;return n(["取消"])},inactive_message:r=>{const{normalize:n}=r;return n(["这个公告不活跃"])}},report:{reported_user:r=>{const{normalize:n}=r;return n(["被举报者:"])},state_closed:r=>{const{normalize:n}=r;return n(["已关闭"])},state_resolved:r=>{const{normalize:n}=r;return n(["已解决"])},reporter:r=>{const{normalize:n}=r;return n(["举报者:"])},state_open:r=>{const{normalize:n}=r;return n(["开启"])},reported_statuses:r=>{const{normalize:n}=r;return n(["已举报的状态:"])},notes:r=>{const{normalize:n}=r;return n(["备注:"])},state:r=>{const{normalize:n}=r;return n(["状态:"])}},unicode_domain_indicator:{tooltip:r=>{const{normalize:n}=r;return n(["此域名包含非 ascii 字符。"])}},update:{update_bugs_gitlab:r=>{const{normalize:n}=r;return n(["Pleroma GitLab"])},update_changelog:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["关于变化的更多细节,请参见 ",e(t("theFullChangelog"))," 。"])},update_changelog_here:r=>{const{normalize:n}=r;return n(["完整的更新日志"])},big_update_title:r=>{const{normalize:n}=r;return n(["请忍耐一下"])},big_update_content:r=>{const{normalize:n}=r;return n(["我们已经有一段时间没有发布发行版,所以事情的外观和感觉可能与你习惯的不一样。"])},update_bugs:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["请在 ",e(t("pleromaGitlab"))," 上报告任何问题和bug,因为我们已经改变了很多,虽然我们进行了彻底的测试,并且自己使用了开发版本,但我们可能错过了一些东西。我们欢迎你对你可能遇到的问题或如何改进Pleroma和Pleroma-FE提出反馈和建议。"])},art_by:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["Art by ",e(t("linkToArtist"))])}},lists:{search:r=>{const{normalize:n}=r;return n(["搜索用户"])},create:r=>{const{normalize:n}=r;return n(["创建"])},save:r=>{const{normalize:n}=r;return n(["保存更改"])},delete:r=>{const{normalize:n}=r;return n(["删除列表"])},following_only:r=>{const{normalize:n}=r;return n(["限制于正在关注"])},manage_lists:r=>{const{normalize:n}=r;return n(["管理列表"])},manage_members:r=>{const{normalize:n}=r;return n(["管理列表成员"])},add_members:r=>{const{normalize:n}=r;return n(["搜索更多用户"])},remove_from_list:r=>{const{normalize:n}=r;return n(["从列表中移除"])},add_to_list:r=>{const{normalize:n}=r;return n(["添加到列表"])},is_in_list:r=>{const{normalize:n}=r;return n(["已在列表中"])},editing_list:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["正在编辑列表 ",e(t("listTitle"))])},creating_list:r=>{const{normalize:n}=r;return n(["正在创建新的列表"])},update_title:r=>{const{normalize:n}=r;return n(["保存标题"])},really_delete:r=>{const{normalize:n}=r;return n(["真的要删除列表吗?"])},error:r=>{const{normalize:n,interpolate:e,list:t}=r;return n(["操作列表时出错:",e(t(0))])},lists:r=>{const{normalize:n}=r;return n(["列表"])},new:r=>{const{normalize:n}=r;return n(["新的列表"])},title:r=>{const{normalize:n}=r;return n(["列表标题"])}},admin_dash:{window_title:r=>{const{normalize:n}=r;return n(["管理员"])},old_ui_link:r=>{const{normalize:n}=r;return n(["旧的管理界面在此处"])},reset_all:r=>{const{normalize:n}=r;return n(["重置全部"])},commit_all:r=>{const{normalize:n}=r;return n(["保存全部"])},tabs:{nodb:r=>{const{normalize:n}=r;return n(["无数据库配置"])},instance:r=>{const{normalize:n}=r;return n(["实例"])},limits:r=>{const{normalize:n}=r;return n(["限制"])},frontends:r=>{const{normalize:n}=r;return n(["前端"])}},nodb:{heading:r=>{const{normalize:n}=r;return n(["数据库配置已禁用"])},documentation:r=>{const{normalize:n}=r;return n(["文档"])},text2:r=>{const{normalize:n}=r;return n(["大多数配置选项将不可用。"])},text:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["你需要修改后端配置文件,以便将 ",e(t("property"))," 设置为 ",e(t("value")),",更多内容请参见 ",e(t("documentation")),"。"])}},captcha:{native:r=>{const{normalize:n}=r;return n(["本地"])},kocaptcha:r=>{const{normalize:n}=r;return n(["KoCaptcha"])}},instance:{instance:r=>{const{normalize:n}=r;return n(["实例信息"])},registrations:r=>{const{normalize:n}=r;return n(["用户注册"])},captcha_header:r=>{const{normalize:n}=r;return n(["验证码"])},kocaptcha:r=>{const{normalize:n}=r;return n(["KoCaptcha 设置"])},access:r=>{const{normalize:n}=r;return n(["实例访问"])},restrict:{header:r=>{const{normalize:n}=r;return n(["限制匿名访客的访问"])},timelines:r=>{const{normalize:n}=r;return n(["时间线访问"])},profiles:r=>{const{normalize:n}=r;return n(["用户个人资料访问"])},activities:r=>{const{normalize:n}=r;return n(["状态/活动访问"])},description:r=>{const{normalize:n}=r;return n(["允许/不允许访问特定 API 的详细设置。默认情况下(不确定状态),如果实例不是公开的,它将拒绝访问;勾选复选框意味着即使实例是公开的,也拒绝访问;不勾选意味着即使实例是私有的,也允许访问。请注意,如果某些设置被设定,可能会发生意想不到的行为,例如,如果个人资料访问被禁用,显示的帖文将不包含个人资料信息。"])}}},limits:{arbitrary_limits:r=>{const{normalize:n}=r;return n(["任意限制"])},posts:r=>{const{normalize:n}=r;return n(["帖文限制"])},uploads:r=>{const{normalize:n}=r;return n(["附件限制"])},users:r=>{const{normalize:n}=r;return n(["用户个人资料限制"])},profile_fields:r=>{const{normalize:n}=r;return n(["个人资料字段限制"])},user_uploads:r=>{const{normalize:n}=r;return n(["个人资料媒体限制"])}},frontend:{repository:r=>{const{normalize:n}=r;return n(["存储库链接"])},versions:r=>{const{normalize:n}=r;return n(["可用版本"])},build_url:r=>{const{normalize:n}=r;return n(["构建产物 URL"])},reinstall:r=>{const{normalize:n}=r;return n(["重新安装"])},is_default:r=>{const{normalize:n}=r;return n(["(默认)"])},is_default_custom:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["(默认,版本:",e(t("version")),")"])},install:r=>{const{normalize:n}=r;return n(["安装"])},install_version:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["安装版本 ",e(t("version"))])},more_install_options:r=>{const{normalize:n}=r;return n(["更多安装选项"])},more_default_options:r=>{const{normalize:n}=r;return n(["更多默认设置选项"])},set_default:r=>{const{normalize:n}=r;return n(["设为默认"])},set_default_version:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["将版本 ",e(t("version"))," 设为默认"])},wip_notice:r=>{const{normalize:n}=r;return n(["请注意,此部分是一个WIP,缺乏某些功能,因为前端管理的后台实现并不完整。"])},default_frontend:r=>{const{normalize:n}=r;return n(["默认前端"])},default_frontend_tip:r=>{const{normalize:n}=r;return n(["默认的前端将显示给所有用户。目前还没有办法让用户选择个人的前端。如果你不使用 PleromaFE,你很可能不得不使用旧的和有问题的 AdminFE 来进行实例配置,直到我们替换它。"])},available_frontends:r=>{const{normalize:n}=r;return n(["可供安装"])}},temp_overrides:{":pleroma":{":instance":{":public":{label:r=>{const{normalize:n}=r;return n(["实例是公开的"])},description:r=>{const{normalize:n}=r;return n(["禁用此功能将使所有的 API 只能被已登录用户访问,这将使公共和联邦时间线无法被匿名访客访问。"])}},":limit_to_local_content":{label:r=>{const{normalize:n}=r;return n(["将搜索限于本地内容"])},description:r=>{const{normalize:n}=r;return n(["禁用未认证用户(默认)、所有用户或无人的全局网络搜索"])}},":description_limit":{label:r=>{const{normalize:n}=r;return n(["限制"])},description:r=>{const{normalize:n}=r;return n(["附件描述的字数限制"])}},":background_image":{label:r=>{const{normalize:n}=r;return n(["背景图片"])},description:r=>{const{normalize:n}=r;return n(["背景图片(主要使用于 PleromaFE)"])}}}}},wip_notice:r=>{const{normalize:n,interpolate:e,named:t}=r;return n(["此管理仪表板是实验性和 WIP 的,",e(t("adminFeLink")),"。"])}}}}}]); +//# sourceMappingURL=zh-json.a0a26f6d62ddbe0b49cc.js.map +\ No newline at end of file diff --git a/priv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js.map b/priv/static/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js","mappings":"sIAAA,SACE,KAAQ,CACN,MAAUA,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEnF,SAAY,CACV,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAErG,eAAkB,CAChB,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC7F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC1F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACzG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,OAAU,CACR,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACtG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAEzF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACxF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,KAAQ,CACN,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAC1H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACxH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC3G,kBAAqB,CACnB,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEtF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,sBAA0BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaE,EAAM,KAAI,EACtK,iBAAqBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC9E,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC7E,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAEnF,cAAiB,CACf,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEpF,SAAY,CACV,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,GAE9F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC/F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrF,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACpG,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC1G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC1F,QAAW,CACT,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAE1F,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1G,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAElG,YAAe,CACb,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrF,QAAYF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,YAAa,MAAOJ,EAAaI,EAAO,WAAU,GAEhM,IAAO,CACL,MAAUR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/E,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC3F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC5F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC5F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAE7F,cAAiB,CACf,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACrG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACjF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC7F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtG,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaE,EAAM,IAAK,QAAO,EAClK,YAAgBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC7F,MAAUF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,aAAcE,EAAaE,EAAM,KAAI,EACzJ,WAAeN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAEhG,MAAS,CACP,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC5F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,WAAeF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaE,EAAM,IAAK,QAAO,EAChK,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaE,EAAM,IAAK,SAAQ,EAC7J,mBAAuBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACnG,YAAgBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,EAAQC,OAAQC,GAAYV,EAAI,OAAOU,EAAQ,CAACR,EAAW,CAACE,EAAaI,EAAO,UAAW,OAAQN,EAAW,CAACE,EAAaI,EAAO,UAAW,QAAO,EAC/O,mBAAuBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,EAAQC,OAAQC,GAAYV,EAAI,OAAOU,EAAQ,CAACR,EAAW,CAACE,EAAaI,EAAO,UAAW,UAAWN,EAAW,CAACE,EAAaI,EAAO,UAAW,WAAU,GAE9P,SAAY,CACV,YAAgBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE3F,aAAgB,CACd,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC3F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE/F,YAAe,CACb,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,2BAA+BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaE,EAAM,IAAK,wBAAuB,EACnM,gCAAoCN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3G,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxG,aAAgB,CACd,aAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACvF,YAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,gBAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC/F,cAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAE7F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAChH,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC7H,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACpF,aAAgB,CACd,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC5F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC9F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAE9G,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC/F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACnG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC7F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,GAEpG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC3G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC5G,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EAC1H,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EACxH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAErG,aAAgB,CACd,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/E,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EACvI,YAAe,CACb,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5G,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC1G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,SAAU,QAAO,GAEhL,mBAAuBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC3H,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACxG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAEpG,gBAAmB,CACjB,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE1F,SAAY,CACV,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACxF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC1H,IAAO,CACL,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACzF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAClG,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACrG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC5G,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC7H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6EAA4E,EACzK,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtG,KAAQ,CACN,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EAC/G,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEzF,OAAU,CACR,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,IAG/G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC5F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/E,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC/G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACpG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC5G,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACvF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC5G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAClG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAClG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxG,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAClH,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EAC1H,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACtH,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACzH,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACpH,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC3G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACpG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC3G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACtG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACvG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACnH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC5G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC7G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACtH,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACvH,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACxF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC3F,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,UAAW,KAAI,EAC5K,wBAA4BR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EAChI,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACzG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC7G,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC/H,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACvG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACrG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzF,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACzG,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3G,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzG,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC5G,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3G,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5G,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC7G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC/G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC/G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC7F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACzG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACjG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACrG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC3H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACzG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACvH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC7F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACvG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACvG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACvG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC1G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC7F,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC9G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC1G,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtG,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAqB,EAC9G,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAClH,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAChG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAC7G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EACvI,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EAC5I,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,GAEjF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACpH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAChI,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAClH,MAAS,CACP,SAAY,CACV,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oEAAqE,EAC1J,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC5F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,KAAQ,CACN,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACtH,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAChH,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAClH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4CAA2C,EAC7H,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qEAAoE,EACnK,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EAChI,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAC1H,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACxG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAC9G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EACvH,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sCAAqC,GAE9H,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE1F,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACpF,SAAY,CACV,KAASF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,QAASE,EAAaI,EAAO,UAAW,OAAQJ,EAAaI,EAAO,UAAW,IAAKJ,EAAaI,EAAO,aAAY,EACzO,MAAS,CACP,GAAOR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC1F,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC5F,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,GAE1F,QAAW,CACT,OAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,KAItF,cAAiB,CACf,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACzG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAExF,gBAAmB,CACjB,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACvF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACnF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,KAAQ,CACN,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEvF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACpF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC7F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC3F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACvF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACjF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACpF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEvF,MAAS,CACP,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAExF,QAAW,CACT,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,UAAcF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,WAAU,EAChK,KAASR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+DAA8D,EACzI,YAAe,CACb,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,iBAAkBE,EAAaE,EAAM,IAAK,gBAAe,EAC1L,mBAAuBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,UAAWF,EAAaE,EAAM,IAAK,SAAUF,EAAaE,EAAM,IAAK,MAAK,EACnO,aAAiBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAC7H,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACvG,cAAkBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaE,EAAM,KAAI,GAEhK,WAAc,CACZ,MAAUN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC7F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACrG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,OAAWF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,eAAgBE,EAAaE,EAAM,IAAK,kBAAiB,GAEhL,MAAS,CACP,WAAeN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EACxH,WAAc,CACZ,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAEnG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEpF,QAAW,CACT,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,KAASF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaE,EAAM,IAAK,MAAOF,EAAaE,EAAM,KAAI,EAChL,KAASN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC1F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,WAAeF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaE,EAAM,IAAK,eAAc,EACzK,aAAiBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC7F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,IAG3F,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAEhG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC1G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC9G,oCAAwCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC3H,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxG,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC9G,wCAA4CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnH,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAClH,gDAAoDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACzI,0CAA8CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAClI,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACvG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAClG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC7G,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC1G,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACzG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAClH,eAAkB,CAChB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAExF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACnF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAC5G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACtG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC/F,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACtF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/E,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACrH,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC1F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAClG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACpH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC7G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACnG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC9G,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC9F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAChG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACzG,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC/G,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACrH,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACvG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACnG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,mBAAsB,CACpB,OAAU,CACR,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC9G,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,cAAe,uBAAwBJ,EAAaI,EAAO,YAAa,KAAI,EACzO,aAAiBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,cAAe,qBAAsBJ,EAAaI,EAAO,YAAa,YAAW,EAC9O,aAAiBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,GAEzH,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACjG,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACzG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAChG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE9F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,YAAaE,EAAaI,EAAO,WAAU,EAC9K,WAAeR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC/F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpG,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,WAAU,EAC7K,+BAAmCR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC1G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,cAAeE,EAAaI,EAAO,YAAa,KAAI,EACrL,YAAgBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,oBAAwBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,YAAa,KAAI,EACrL,cAAkBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,WAAU,EAC7K,oBAAwBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACxH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAClG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EAC/I,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAClG,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,YAAaE,EAAaI,EAAO,WAAU,EAC5K,gBAAoBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaI,EAAO,WAAU,EAC1K,mBAAuBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EACjI,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC5G,eAAmBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,EAAQC,OAAQC,GAAYV,EAAI,OAAOU,EAAQ,CAACR,EAAW,CAAC,eAAgBE,EAAaI,EAAO,WAAY,UAAWN,EAAW,CAAC,eAAgBE,EAAaI,EAAO,WAAY,WAAU,EAC1R,iBAAqBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAClG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9F,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAE/F,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACxH,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC3G,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC9G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACnH,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACzG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/G,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACvH,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/F,wCAA4CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtH,yCAA6CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC7F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC3G,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC5G,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC/G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACxG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACjH,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACvG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC5G,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAY,IAAK,kBAAmB,IAAK,MAAO,IAAK,gBAAe,EACnK,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC9G,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC7G,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7G,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAChH,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC/F,kBAAsBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,QAASE,EAAaI,EAAO,UAAW,KAAI,EAC9K,gBAAoBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvG,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAChH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC9F,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClG,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3G,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC9G,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACxG,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpG,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC9G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACxG,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC7G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACjG,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAM,IAAK,iBAAgB,EAC7G,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAkB,IAAK,QAAO,EAC/H,qCAAyCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAuB,IAAK,MAAO,IAAK,gBAAe,EAClK,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAkB,IAAK,MAAO,IAAK,gBAAe,EAClJ,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC/G,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC7G,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACrH,gCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/G,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACxH,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACjH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC7F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAClH,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAEzG,KAAQ,CACN,IAAQF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAC/I,KAASN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAChJ,UAAcN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACpJ,WAAeN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACrJ,KAASN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACjJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EAClJ,WAAeN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACrJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACtJ,UAAcN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaE,EAAM,KAAI,EACtJ,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACpJ,OAAWN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACnJ,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACpJ,aAAiBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACzJ,cAAkBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EAC1J,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACjJ,OAAWN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAClJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACvJ,aAAiBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACxJ,IAAQN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC/E,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,OAAWF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAClJ,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACnJ,aAAiBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACvJ,cAAkBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACxJ,KAASN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAChJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACjJ,WAAeN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACrJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACtJ,KAASN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EAChJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACjJ,WAAeN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACrJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,KAAI,EACtJ,KAAQ,CACN,WAAeN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACtJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EAClJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACvJ,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACnJ,cAAkBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACzJ,OAAWN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,OAAM,EACnJ,aAAiBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACxJ,QAAYN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACnJ,cAAkBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACzJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACvJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACjJ,YAAgBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACvJ,MAAUN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,EACjJ,KAASN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,MAAK,IAGpJ,SAAY,CACV,SAAaN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACjG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAChH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACvF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACjG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,MAAUF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,cAAeE,EAAaE,EAAM,KAAI,EAC1J,aAAiBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,0BAA2BE,EAAaE,EAAM,KAAI,EAC7K,mBAAuBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACnG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACnG,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvG,OAAU,CACR,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACpF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACpG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACnG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAClG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACjG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC/F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACzF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAClG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC/F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,UAAcF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaI,EAAO,WAAY,MAAK,EACtK,iBAAqBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,WAAY,QAAO,EAChL,qBAAyBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACrH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC/F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC9F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC9F,2BAA+BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,SAAU,IAAKJ,EAAaI,EAAO,UAAS,EAC3M,cAAkBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,sBAAuBE,EAAaI,EAAO,cAAe,SAAQ,EAChM,wBAA4BR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,SAAU,IAAKJ,EAAaI,EAAO,UAAS,EACxM,gBAAoBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,cAAeE,EAAaI,EAAO,eAAgB,QAAO,EAC1L,0BAA8BR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,SAAU,IAAKJ,EAAaI,EAAO,UAAS,EAC1M,gCAAoCR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,SAAU,IAAKJ,EAAaI,EAAO,UAAS,EAChN,sBAA0BR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,aAAcE,EAAaI,EAAO,cAAe,SAAQ,EAC/L,SAAaR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,yBAA6BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,eAAgB,QAAO,EAC/L,UAAcR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,uBAAwBE,EAAaI,EAAO,cAAe,aAAcJ,EAAaI,EAAO,UAAW,KAAI,EAC7O,kCAAsCR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACrH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1G,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,UAAcF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,SAAU,KAAI,EACvK,qBAAyBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACxG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaE,EAAM,KAAI,EAC9J,qBAAyBN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,QAAS,aAAY,GAEhL,UAAa,CACX,QAAYR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC1F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACjG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC7F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,WAAc,CACZ,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAChG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACjG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAChG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC/F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC7F,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChH,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1G,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,6CAAiDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAElJ,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACnF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,UAAa,CACX,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEzF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzG,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvG,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACxF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAChG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxG,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,SAAU,WAAU,EAChL,cAAkBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtG,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,YAAaE,EAAaI,EAAO,SAAU,OAAM,EAClL,+BAAmCR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5G,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC9G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAChG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtG,2BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC9G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC9F,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC9G,sCAA0CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjH,wBAA4BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaI,EAAO,SAAU,gBAAe,EAC/L,SAAaR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaI,EAAO,cAAa,EACjK,KAASR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3G,gBAAoBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,SAAU,WAAU,EACnL,oBAAwBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjG,cAAkBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,SAAU,OAAM,EAC7K,aAAiBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,SAAU,OAAM,EAC5K,sCAA0CR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACvF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC3F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAE9F,aAAgB,CACd,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC7F,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC5G,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,GAE9G,eAAkB,CAChB,MAAUF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaE,EAAM,KAAI,EAClJ,wBAA4BN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EACtI,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EAC1H,WAAeF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaE,EAAM,KAAI,EACvJ,OAAWN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GAE1G,cAAiB,CACf,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE7F,SAAY,CACV,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACrG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACrG,uBAA2BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaI,EAAO,WAAY,wBAAuB,GAEvM,OAAU,CACR,MAAS,CACP,KAASR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,aAAcJ,EAAaI,EAAO,iBAAkB,MAAOJ,EAAaI,EAAO,gBAAiBJ,EAAaI,EAAO,oBAAqB,KAAI,EACzS,QAAYR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,QAAYF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,QAASE,EAAaE,EAAM,KAAI,GAExJ,gBAAmB,CACjB,EAAMN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,IAGpF,OAAU,CACR,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EACjF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,eAAmBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,UAAW,UAAS,EACvK,eAAmBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAACE,EAAaI,EAAO,UAAW,UAAS,EACvK,WAAeR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC1F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAE3F,eAAkB,CAChB,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC5F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACzH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACzG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC7G,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACrH,+CAAmDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACxJ,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,GAE/G,qBAAwB,CACtB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAEvG,MAAS,CACP,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC7F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACzF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC5F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,SAAaF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,cAAeE,EAAaI,EAAO,gBAAiB,OAAM,EACnL,cAAkBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaI,EAAO,eAAgB,4BAA2B,EACvM,eAAkB,CAChB,MAAUR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,iBAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC1F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,kBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC7F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,oBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAChG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,qBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACjG,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEpG,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaI,EAAO,YAAW,EAC5K,SAAaR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAE5F,MAAS,CACP,IAAO,CACL,OAAU,CACR,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC1G,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACtG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACrG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAClG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAClH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC/F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC7G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACjH,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAClG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EACzF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEtF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACrH,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACjG,QAAW,CACT,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACpG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC/F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EACzF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEpF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAE1F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAErF,iBAAoB,CAClB,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAChG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAElF,OAAU,CACR,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gEAA+D,GAE3J,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,aAAgB,CACd,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEnF,UAAa,CACX,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEnF,MAAS,CACP,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACtH,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC1G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACvG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACnG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAChF,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACpG,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,QAASE,EAAaI,EAAO,cAAa,EACvK,IAAQR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEjF,cAAiB,CACf,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,WAAeF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaI,EAAO,WAAU,EAChK,YAAgBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACjG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC/F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC/F,uBAA2BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,UAAS,EAC5K,mBAAuBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,UAAS,EACxK,iBAAqBR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,UAAS,EACtK,YAAgBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACvF,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAEnG,OAAU,CACR,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC3F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACtF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAClG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,yBAA4B,CAC1B,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,GAEnG,OAAU,CACR,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC1G,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,iBAAkBE,EAAaI,EAAO,qBAAsB,MAAK,EAClM,sBAA0BR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC/F,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EAClI,YAAgBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,MAAOE,EAAaI,EAAO,kBAAmB,gHAA+G,EACzR,OAAWR,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,kBAAiB,GAEzK,MAAS,CACP,OAAWR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC/F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC9F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC3F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAC1F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,aAAiBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,eAAc,EAC1K,cAAkBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC/F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC1F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAChG,MAAUF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,WAAYE,EAAaE,EAAM,KAAI,EACvJ,MAAUN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAErF,WAAc,CACZ,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACzF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC9F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,KAAQ,CACN,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GAEvF,KAAQ,CACN,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACzF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACzF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,KAASF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,mBAAoBE,EAAaI,EAAO,aAAc,QAASJ,EAAaI,EAAO,UAAW,YAAaJ,EAAaI,EAAO,kBAAmB,KAAI,GAE7Q,QAAW,CACT,OAAWR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAClF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GAE9F,SAAY,CACV,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC3F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC3F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC/F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACpF,SAAY,CACV,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6JAA4J,IAGlP,OAAU,CACR,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACvF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAChG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAEhG,SAAY,CACV,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACzF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC3F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACxF,kBAAsBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaI,EAAO,YAAa,KAAI,EAClL,QAAYR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACnF,gBAAoBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,QAASE,EAAaI,EAAO,aAAY,EACzK,qBAAyBR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACzF,oBAAwBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,OAAQE,EAAaI,EAAO,YAAa,SAAQ,EACrL,WAAeR,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EACzH,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAC9F,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8FAA6F,EACxL,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,GAEnG,eAAkB,CAChB,WAAY,CACV,YAAa,CACX,UAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mDAAkD,GAEtI,0BAA2B,CACzB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAEjH,qBAAsB,CACpB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACjF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GAEhG,oBAAqB,CACnB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,MAKlH,WAAeF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcG,MAAOC,GAAWR,EAAI,OAAOE,EAAW,CAAC,qBAAsBE,EAAaI,EAAO,gBAAiB,KAAI,G","sources":["webpack://pleroma_fe/./src/i18n/zh.json"],"sourcesContent":["export default {\n \"chat\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])}\n },\n \"exporter\": {\n \"export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出\"])},\n \"processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在处理,稍后会提示您下载文件\"])}\n },\n \"features_panel\": {\n \"chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"gopher\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gopher\"])},\n \"media_proxy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体代理\"])},\n \"scope_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可见范围设置\"])},\n \"text_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文字数量限制\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"功能\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])},\n \"pleroma_chat_messages\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 聊天\"])},\n \"upload_limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传限制\"])},\n \"shout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"留言板\"])}\n },\n \"finder\": {\n \"error_fetching_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"获取用户时发生错误\"])},\n \"find_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"寻找用户\"])}\n },\n \"general\": {\n \"apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"应用\"])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发生了一个错误\"])},\n \"optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可选\"])},\n \"show_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开\"])},\n \"show_less\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"收起\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])},\n \"disable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用\"])},\n \"enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"启用\"])},\n \"confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认\"])},\n \"verify\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证\"])},\n \"dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"忽略\"])},\n \"peek\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重试\"])},\n \"error_retry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请重试\"])},\n \"loading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"载入中…\"])},\n \"role\": {\n \"moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"监察员\"])},\n \"admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])}\n },\n \"flash_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击以使用 Ruffle 显示 Flash 内容(实验性,可能无效)。\"])},\n \"flash_security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注意这可能有潜在的危险,因为 Flash 内容仍然是任意的代码。\"])},\n \"flash_fail\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Flash 内容加载失败,请在控制台查看详情。\"])},\n \"scope_in_timeline\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公开\"])},\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私讯\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅关注者\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列外\"])}\n },\n \"scroll_to_top\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"滚动至顶\"])},\n \"generic_error_message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"发生一个错误:\", _interpolate(_list(0))])},\n \"never_show_again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不再显示\"])},\n \"undo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销\"])},\n \"yes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"是\"])},\n \"no\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"否\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消固定该项\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"固定该项\"])}\n },\n \"image_cropper\": {\n \"crop_picture\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"裁剪图片\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存\"])},\n \"save_without_cropping\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存未经裁剪的图片\"])},\n \"cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])}\n },\n \"importer\": {\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"success\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入成功。\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入此文件时出现一个错误。\"])}\n },\n \"login\": {\n \"login\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登录\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用 OAuth 登录\"])},\n \"logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:lain\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"username\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户名\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登录后加入讨论\"])},\n \"authentication_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证码\"])},\n \"enter_recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入一个恢复码\"])},\n \"enter_two_factor_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入一个双重因素验证码\"])},\n \"recovery_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"恢复码\"])},\n \"heading\": {\n \"totp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双重因素验证\"])},\n \"recovery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双重因素恢复\"])}\n },\n \"logout_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要登出\"])},\n \"logout_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认登出\"])},\n \"logout_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"logout_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要登出吗?\"])}\n },\n \"media_modal\": {\n \"previous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"往前\"])},\n \"next\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"往后\"])},\n \"hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭媒体查看器\"])},\n \"counter\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"current\")), \" / \", _interpolate(_named(\"total\"))])}\n },\n \"nav\": {\n \"about\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关于\"])},\n \"back\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"后退\"])},\n \"chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本站聊天\"])},\n \"friend_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注请求\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"interactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"互动\"])},\n \"dms\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私信\"])},\n \"public_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公共时间线\"])},\n \"timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线\"])},\n \"twkn\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已知网络\"])},\n \"user_search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户搜索\"])},\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])},\n \"preferences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"偏好设置\"])},\n \"administration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线\"])},\n \"bookmarks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"home_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主页时间线\"])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表\"])},\n \"edit_finish\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完成编辑\"])},\n \"mobile_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开通知(有未读的)\"])},\n \"mobile_notifications_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭通知\"])},\n \"announcements\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"edit_nav_mobile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自定义导航栏\"])},\n \"edit_pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑固定的项目\"])},\n \"mobile_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"切换移动设备侧栏\"])},\n \"search_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭搜索栏\"])}\n },\n \"notifications\": {\n \"broken_favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未知的状态,正在搜索中…\"])},\n \"favorited_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢了你的状态\"])},\n \"followed_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注了你\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的通知\"])},\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"read\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已阅!\"])},\n \"repeated_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发了你的状态\"])},\n \"no_more_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多的通知\"])},\n \"reacted_with\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"作出了 \", _interpolate(_list(0)), \" 的反应\"])},\n \"migrated_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"迁移到了\"])},\n \"follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"想要关注你\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"取得通知时发生错误:\", _interpolate(_list(0))])},\n \"poll_ended\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票结束了\"])},\n \"submitted_report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交举报\"])}\n },\n \"polls\": {\n \"add_poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"增加投票\"])},\n \"add_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"增加选项\"])},\n \"option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选项\"])},\n \"votes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票\"])},\n \"vote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票\"])},\n \"type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票类型\"])},\n \"single_choice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"单选\"])},\n \"multiple_choices\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"多选\"])},\n \"expiry\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票期限\"])},\n \"expires_in\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"投票于 \", _interpolate(_list(0)), \" 后结束\"])},\n \"expired\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"投票 \", _interpolate(_list(0)), \" 前已结束\"])},\n \"not_enough_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票的选项太少\"])},\n \"votes_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" 票\"]), _normalize([_interpolate(_named(\"count\")), \" 票\"])])},\n \"people_voted_count\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([_interpolate(_named(\"count\")), \" 人已投票\"]), _normalize([_interpolate(_named(\"count\")), \" 人已投票\"])])}\n },\n \"stickers\": {\n \"add_sticker\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加贴纸\"])}\n },\n \"interactions\": {\n \"favs_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发和喜欢\"])},\n \"follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新的关注者\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的互动\"])},\n \"moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户迁移\"])},\n \"reports\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"举报\"])},\n \"emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情回应\"])}\n },\n \"post_status\": {\n \"new_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布新状态\"])},\n \"account_not_locked_warning\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"你的帐号没有 \", _interpolate(_list(0)), \"。任何人都可以关注你并浏览你的上锁内容。\"])},\n \"account_not_locked_warning_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上锁\"])},\n \"attachments_sensitive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标记附件为敏感内容\"])},\n \"content_type\": {\n \"text/plain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"纯文本\"])},\n \"text/html\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"HTML\"])},\n \"text/markdown\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Markdown\"])},\n \"text/bbcode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"BBCode\"])}\n },\n \"content_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题(可选)\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚抵达上海。\"])},\n \"direct_warning_to_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容只有被提及的用户能够看到。\"])},\n \"direct_warning_to_first_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容只有被在消息开始处提及的用户能够看到。\"])},\n \"posting\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送中\"])},\n \"scope_notice\": {\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容可以被所有人看到\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注你的人才能看到本条内容\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本条内容既不在公共时间线,也不会在所有已知网络上可见\"])}\n },\n \"scope\": {\n \"direct\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"私信 - 只发送给被提及的用户\"])},\n \"private\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅关注者 - 只有关注了你的人能看到\"])},\n \"public\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公共 - 发送到公共时间轴\"])},\n \"unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不公开 - 不会发送到公共时间轴\"])}\n },\n \"preview_empty\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"空的\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"media_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体描述\"])},\n \"media_description_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更新媒体失败,请重试\"])},\n \"empty_status_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能发布没有内容、没有附件的发文\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送\"])},\n \"edit_remote_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"其它远程实例可能不支持编辑并且无法接收您的帖子的最新版本。\"])},\n \"edit_unsupported_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 不支持对提及或投票进行编辑。\"])},\n \"edit_status\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑状态\"])},\n \"content_type_selection\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发帖格式\"])},\n \"scope_notice_dismiss\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭此提示\"])}\n },\n \"registration\": {\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"简介\"])},\n \"email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"电子邮箱\"])},\n \"fullname\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示名称\"])},\n \"password_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认密码\"])},\n \"registration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"邀请码\"])},\n \"captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"CAPTCHA\"])},\n \"new_captcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击图片获取新的验证码\"])},\n \"username_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:lain\"])},\n \"fullname_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:岩仓玲音\"])},\n \"bio_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"例如:\\n你好,我是玲音。\\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。\"])},\n \"validations\": {\n \"username_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"fullname_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"email_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_confirmation_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能留空\"])},\n \"password_confirmation_match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码不一致\"])},\n \"birthday_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不能为空\"])},\n \"birthday_min_age\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"必须在 \", _interpolate(_named(\"date\")), \" 或之前\"])}\n },\n \"reason_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此实例的注册需要手动批准。\\n请让管理员知道您为什么想要注册。\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册理由\"])},\n \"register\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"注册\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你想从服务器收到什么语言的邮件?\"])},\n \"bio_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"介绍(可选)\"])},\n \"email_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"电子邮件(可选)\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日:\"])},\n \"birthday_optional\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日(可选):\"])}\n },\n \"selectable_list\": {\n \"select_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选择全部\"])}\n },\n \"settings\": {\n \"app_name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"App 名称\"])},\n \"security\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安全\"])},\n \"enter_current_password_to_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入您当前的密码来确认您的身份\"])},\n \"mfa\": {\n \"otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OTP\"])},\n \"setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置 OTP\"])},\n \"wait_pre_setup_otp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预设 OTP\"])},\n \"confirm_and_enable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认并启用 OTP\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"双因素验证\"])},\n \"generate_new_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生成新的恢复码\"])},\n \"warning_of_generate_new_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当您生成新的恢复码时,您旧的恢复码将会失效。\"])},\n \"recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"恢复码。\"])},\n \"waiting_a_recovery_codes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在接收备份码…\"])},\n \"recovery_codes_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。\"])},\n \"authentication_methods\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"身份验证方法\"])},\n \"scan\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"扫一下\"])},\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:\"])},\n \"secret_code\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密钥\"])}\n },\n \"verify\": {\n \"desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要启用双因素验证,请输入您的双因素验证 app 里的数字:\"])}\n }\n },\n \"attachmentRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件\"])},\n \"attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像\"])},\n \"avatarAltRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像(通知)\"])},\n \"avatarRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"头像\"])},\n \"background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景\"])},\n \"bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"简介\"])},\n \"block_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导出\"])},\n \"block_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出你的屏蔽名单到一个 csv 文件\"])},\n \"block_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导入\"])},\n \"block_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入屏蔽名单出错\"])},\n \"blocks_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽名单导入成功!需要一点时间来处理。\"])},\n \"blocks_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"btnRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"cBlue\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"蓝色(回复,关注)\"])},\n \"cGreen\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"绿色(转发)\"])},\n \"cOrange\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"橙色(喜欢)\"])},\n \"cRed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"红色(取消)\"])},\n \"change_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改密码\"])},\n \"change_password_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改密码的时候出了点问题。\"])},\n \"changed_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"成功修改了密码!\"])},\n \"collapse_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折叠带主题的内容\"])},\n \"composing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撰写\"])},\n \"confirm_new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认新密码\"])},\n \"current_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前头像\"])},\n \"current_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前密码\"])},\n \"current_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您当前的横幅图片\"])},\n \"data_import_export_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"数据导入/导出\"])},\n \"default_vis\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认可见范围\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账户\"])},\n \"delete_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"永久删除你的帐号和所有数据。\"])},\n \"delete_account_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账户时发生错误,如果一直删除不了,请联系实例管理员。\"])},\n \"delete_account_instructions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在下面输入您的密码来确认删除账户。\"])},\n \"avatar_size_instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐的头像图片最小尺寸为 150x150 像素。\"])},\n \"export_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出预置主题\"])},\n \"filtering\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"过滤器\"])},\n \"filtering_explanation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"所有包含以下词汇的内容都会被隐藏,一行一个\"])},\n \"follow_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出关注\"])},\n \"follow_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将关注导出成 csv 文件\"])},\n \"follow_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入关注\"])},\n \"follow_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入关注时错误\"])},\n \"follows_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注已导入!尚需要一些时间来处理。\"])},\n \"foreground\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前景\"])},\n \"general\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通用\"])},\n \"hide_attachments_in_convo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在对话中隐藏附件\"])},\n \"hide_attachments_in_tl\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在时间线上隐藏附件\"])},\n \"hide_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示被隐藏的用户的帖子\"])},\n \"max_thumbnails\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"每个帖子最多能显示的缩略图数量\"])},\n \"hide_isp\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例独有的面板\"])},\n \"preload_images\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预载图片\"])},\n \"use_one_click_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击一次以打开工作场所不适宜(NSFW)的附件\"])},\n \"hide_post_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏帖子的统计数据(例如:喜欢的次数)\"])},\n \"hide_user_stats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏用户的统计数据(例如:关注者的数量)\"])},\n \"hide_filtered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏过滤的状态\"])},\n \"import_blocks_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件中导入拉黑名单\"])},\n \"import_followers_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件中导入关注\"])},\n \"import_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入预置主题\"])},\n \"inputRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"checkboxRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"复选框\"])},\n \"instance_default\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(默认:\", _interpolate(_named(\"value\")), \")\"])},\n \"instance_default_simple\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(默认)\"])},\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面\"])},\n \"interfaceLanguage\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面语言\"])},\n \"invalid_theme_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。\"])},\n \"limited_availability\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在您的浏览器中无法使用\"])},\n \"links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"链接\"])},\n \"lock_account_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您需要手动审核关注请求\"])},\n \"loop_video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"循环视频\"])},\n \"loop_video_silent_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只循环没有声音的视频(例如:Mastodon 里的“GIF”)\"])},\n \"mutes_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"play_videos_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在弹出框内播放视频\"])},\n \"use_contain_fit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生成缩略图时不要裁剪附件\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"名字\"])},\n \"name_bio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"名字及简介\"])},\n \"new_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新密码\"])},\n \"notification_visibility\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要显示的通知类型\"])},\n \"notification_visibility_follows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注\"])},\n \"notification_visibility_likes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"notification_visibility_mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"notification_visibility_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"no_rich_text_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示富文本格式\"])},\n \"no_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有屏蔽\"])},\n \"no_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有隐藏\"])},\n \"hide_follows_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要显示我所关注的人\"])},\n \"hide_followers_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要显示关注我的人\"])},\n \"show_admin_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在我的个人资料中显示“管理员”徽章\"])},\n \"show_moderator_badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在我的个人资料中显示“监察员”徽章\"])},\n \"nsfw_clickthrough\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将不和谐附件和链接预览隐藏,点击才会显示\"])},\n \"oauth_tokens\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth令牌\"])},\n \"token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"令牌\"])},\n \"refresh_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刷新令牌\"])},\n \"valid_until\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"有效期至\"])},\n \"revoke_token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤消\"])},\n \"panelRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板\"])},\n \"pause_on_unfocused\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在离开页面时暂停时间线推送\"])},\n \"presets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预置\"])},\n \"profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人背景图\"])},\n \"profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"横幅图片\"])},\n \"profile_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料\"])},\n \"radii_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置界面边缘的圆角 (单位:像素)\"])},\n \"replies_in_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线中的回复\"])},\n \"reply_visibility_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示所有回复\"])},\n \"reply_visibility_following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示发送给我的回复/发送给我关注的用户的回复\"])},\n \"reply_visibility_self\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示发送给我的回复\"])},\n \"autohide_floating_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自动隐藏新帖子的按钮(移动设备)\"])},\n \"saving_err\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存设置时发生错误\"])},\n \"saving_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置已保存\"])},\n \"search_user_to_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索你想屏蔽的用户\"])},\n \"search_user_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索你想要隐藏的用户\"])},\n \"security_tab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安全\"])},\n \"scope_copy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复时复制可见范围(私信中永远会复制)\"])},\n \"minimal_scopes_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使发文可见范围的选项最少化\"])},\n \"set_new_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新头像\"])},\n \"set_new_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新的个人资料背景\"])},\n \"set_new_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置新的横幅图片\"])},\n \"settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置\"])},\n \"subject_input_always_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"总是显示主题框\"])},\n \"subject_line_behavior\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复时复制主题\"])},\n \"subject_line_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"类似电子邮件: \\\"re: 主题\\\"\"])},\n \"subject_line_mastodon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"类似 mastodon: 与原主题相同\"])},\n \"subject_line_noop\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要复制\"])},\n \"post_status_content_type\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发文状态内容类型\"])},\n \"stop_gifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"鼠标悬停时播放GIF\"])},\n \"streaming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"滚动到顶部时自动推送新内容\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文本\"])},\n \"theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题\"])},\n \"theme_help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用十六进制代码(#rrggbb)来设置主题颜色。\"])},\n \"theme_help_v2_1\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。\"])},\n \"theme_help_v2_2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。\"])},\n \"tooltipRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提醒\"])},\n \"upload_a_photo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传照片\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户设置\"])},\n \"values\": {\n \"false\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"否\"])},\n \"true\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"是\"])}\n },\n \"notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"notification_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"要停止收到某个指定的用户的通知,请使用隐藏功能。\"])},\n \"notification_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。\"])},\n \"enable_web_push_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"启用 web 推送通知\"])},\n \"style\": {\n \"switcher\": {\n \"keep_color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留颜色\"])},\n \"keep_shadows\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留阴影\"])},\n \"keep_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留透明度\"])},\n \"keep_roundness\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留圆角\"])},\n \"keep_fonts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留字体\"])},\n \"save_load_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"\\\"保留\\\" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。\"])},\n \"reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置\"])},\n \"clear_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"清除全部\"])},\n \"clear_opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"清除透明度\"])},\n \"load_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载主题\"])},\n \"help\": {\n \"upgraded_from_v2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 已升级,主题会与您记忆中的不太一样。\"])},\n \"older_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件来自旧版本的 FE。\"])},\n \"future_version_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件来自更高版本的 FE。\"])},\n \"v2_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。\"])},\n \"snapshot_source_mismatch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。\"])},\n \"migration_napshot_gone\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。\"])},\n \"migration_snapshot_ok\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"为保万无一失,加载了主题快照。您可以试着加载主题数据。\"])},\n \"fe_downgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 的版本回滚了。\"])},\n \"fe_upgraded\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"PleromaFE 的主题引擎随着版本更新升级了。\"])},\n \"snapshot_missing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在文件中没有主题快照,所以网站外观可能会与原来预想的不同。\"])},\n \"snapshot_present\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。\"])}\n },\n \"use_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新版本\"])},\n \"use_snapshot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"老版本\"])},\n \"keep_as_is\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保持原状\"])}\n },\n \"common\": {\n \"color\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"颜色\"])},\n \"opacity\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"透明度\"])},\n \"contrast\": {\n \"hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"对比度是 \", _interpolate(_named(\"ratio\")), \", 它 \", _interpolate(_named(\"level\")), \" \", _interpolate(_named(\"context\"))])},\n \"level\": {\n \"aa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符合 AA 等级准则(最低)\"])},\n \"aaa\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符合 AAA 等级准则(推荐)\"])},\n \"bad\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不符合任何辅助功能指南\"])}\n },\n \"context\": {\n \"18pt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大字文本 (18pt+)\"])},\n \"text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文本\"])}\n }\n }\n },\n \"common_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"常规\"])},\n \"main\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"常用颜色\"])},\n \"foreground_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击”高级“ 标签进行细致的控制\"])},\n \"rgbo\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图标,强调,徽章\"])}\n },\n \"advanced_colors\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"高级\"])},\n \"alert\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提醒或警告背景色\"])},\n \"alert_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"错误\"])},\n \"badge\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"徽章背景\"])},\n \"badge_notification\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"panel_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板标题\"])},\n \"top_bar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"顶栏\"])},\n \"borders\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"边框\"])},\n \"buttons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"inputs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"faint_text\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"灰度文字\"])},\n \"chat\": {\n \"border\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"边框\"])},\n \"outgoing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发出的\"])},\n \"incoming\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"收到的\"])}\n },\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用的\"])},\n \"pressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"压下的\"])},\n \"highlight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强调元素\"])},\n \"selectedMenu\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选中的菜单项\"])},\n \"selectedPost\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选中的发布内容\"])},\n \"icons\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图标\"])},\n \"poll\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"投票统计图\"])},\n \"popover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提示框,菜单,弹出框\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布内容/用户简介\"])},\n \"alert_neutral\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"中性\"])},\n \"alert_warning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"警告\"])},\n \"tabs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标签页\"])},\n \"underlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"底衬\"])},\n \"toggled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按下的\"])},\n \"wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"壁纸\"])}\n },\n \"radii\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"圆角\"])}\n },\n \"shadows\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"阴影和照明\"])},\n \"component\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"组件\"])},\n \"override\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"覆盖\"])},\n \"shadow_id\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"阴影 #\", _interpolate(_named(\"value\"))])},\n \"blur\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"模糊\"])},\n \"spread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"扩散\"])},\n \"inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内阴影\"])},\n \"hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。\"])},\n \"filter_hint\": {\n \"always_drop_shadow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"警告,此阴影设置会总是使用 \", _interpolate(_list(0)), \" ,如果浏览器支持的话。\"])},\n \"drop_shadow_syntax\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 不支持参数 \", _interpolate(_list(1)), \" 和关键词 \", _interpolate(_list(2)), \" 。\"])},\n \"avatar_inset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。\"])},\n \"spread_zero\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"阴影的扩散 > 0 会同设置成零一样\"])},\n \"inset_classic\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"内阴影会使用 \", _interpolate(_list(0))])}\n },\n \"components\": {\n \"panel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板\"])},\n \"panelHeader\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"面板标题\"])},\n \"topBar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"顶栏\"])},\n \"avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户头像(在个人资料栏)\"])},\n \"avatarStatus\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户头像(在帖子显示栏)\"])},\n \"popup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"弹窗与工具提示\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"buttonHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(悬停)\"])},\n \"buttonPressed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(压下)\"])},\n \"buttonPressedHover\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮(压下和悬停)\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])}\n },\n \"hintV3\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"对于阴影,您还可以使用 \", _interpolate(_list(0)), \" 表示法来使用其它颜色插槽。\"])}\n },\n \"fonts\": {\n \"_tab_label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字体\"])},\n \"help\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。\"])},\n \"components\": {\n \"interface\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"界面\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入框\"])},\n \"post\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发帖文字\"])},\n \"postCode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖子中使用等间距文字(富文本)\"])}\n },\n \"family\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字体名称\"])},\n \"size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大小 (in px)\"])},\n \"weight\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"字重 (粗体)\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自选\"])}\n },\n \"preview\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内容\"])},\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"错误示例\"])},\n \"button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"按钮\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"有堆 \", _interpolate(_list(0)), \" 和 \", _interpolate(_list(1))])},\n \"mono\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"monospace 内容\"])},\n \"input\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚抵达上海。\"])},\n \"faint_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帮助手册\"])},\n \"fine_print\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"阅读我们的 \", _interpolate(_list(0)), \" ,然而什么也学不到!\"])},\n \"header_faint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这很正常\"])},\n \"checkbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"我已经浏览了条款及细则\"])},\n \"link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"一个棒棒的小小链接\"])}\n }\n },\n \"version\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"版本\"])},\n \"backend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"后端版本\"])},\n \"frontend_version\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前端版本\"])}\n },\n \"notification_setting_filters\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"过滤器\"])},\n \"domain_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"域名\"])},\n \"changed_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"邮箱修改成功!\"])},\n \"change_email_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改您的电子邮箱时发生错误。\"])},\n \"change_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"修改电子邮箱\"])},\n \"allow_following_move\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注的账号迁移时自动重新关注\"])},\n \"notification_setting_privacy_option\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在通知推送中隐藏发送者和内容\"])},\n \"notification_setting_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐私\"])},\n \"hide_follows_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示关注数\"])},\n \"notification_visibility_emoji_reactions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"互动\"])},\n \"notification_visibility_moves\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户迁移\"])},\n \"new_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新邮箱\"])},\n \"emoji_reactions_on_timeline\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在时间线上显示表情符号互动\"])},\n \"notification_setting_hide_notification_contents\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏推送通知中的发送者与内容信息\"])},\n \"notification_setting_block_from_strangers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽来自你没有关注的用户的通知\"])},\n \"type_domains_to_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索需要隐藏的域名\"])},\n \"useStreamingApi\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实时接收帖子和通知\"])},\n \"user_mutes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户\"])},\n \"reset_background_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置背景图吗?\"])},\n \"reset_banner_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置横幅图片吗?\"])},\n \"reset_avatar_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要重置头像吗?\"])},\n \"reset_profile_banner\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置横幅图片\"])},\n \"reset_profile_background\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置个人背景图\"])},\n \"reset_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置头像\"])},\n \"hide_followers_count_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示关注者数量\"])},\n \"profile_fields\": {\n \"value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"内容\"])},\n \"name\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标签\"])},\n \"add_field\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加字段\"])},\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料元数据\"])}\n },\n \"accent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强调色\"])},\n \"pad_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从表情符号选择器插入表情符号时,在表情两侧插入空格\"])},\n \"discoverable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许通过搜索检索等服务找到此账号\"])},\n \"mutes_and_blocks\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏与屏蔽\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这是一个机器人账号\"])},\n \"fun\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"趣味\"])},\n \"useStreamingApiWarning\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(不推荐使用,试验性,已知会跳过一些帖子)\"])},\n \"chatMessageRadius\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天消息\"])},\n \"greentext\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Meme 箭头\"])},\n \"virtual_scrolling\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"优化时间线渲染\"])},\n \"import_mutes_from_a_csv_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从 csv 文件导入隐藏名单\"])},\n \"mutes_imported\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导入成功!处理它们将需要一段时间。\"])},\n \"mute_import_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导入隐藏名单出错\"])},\n \"mute_import\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导入\"])},\n \"mute_export_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"导出你的隐藏名单到一个 csv 文件\"])},\n \"mute_export\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏名单导出\"])},\n \"hide_wallpaper\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例壁纸\"])},\n \"setting_changed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"与默认设置不同\"])},\n \"more_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多设置\"])},\n \"sensitive_by_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认标记发文为敏感内容\"])},\n \"reply_visibility_self_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示对我本人的回复\"])},\n \"reply_visibility_following_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示对我关注的人的回复\"])},\n \"hide_all_muted_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示已隐藏的发文\"])},\n \"hide_media_previews\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏媒体预览\"])},\n \"word_filter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词语过滤\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存更改\"])},\n \"file_export_import\": {\n \"errors\": {\n \"file_slightly_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文件的小版本不同,有些设置可能无法加载\"])},\n \"file_too_old\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"不兼容的主版本:\", _interpolate(_named(\"fileMajor\")), \",文件版本过旧,不受支持(最小设置版本 \", _interpolate(_named(\"feMajor\")), \")\"])},\n \"file_too_new\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"不兼容的主版本:\", _interpolate(_named(\"fileMajor\")), \",此 PleromaFE(设置版本 \", _interpolate(_named(\"feMajor\")), \")过旧,无法处理\"])},\n \"invalid_file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。\"])}\n },\n \"restore_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从文件恢复设置\"])},\n \"backup_settings_theme\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份设置和主题到文件\"])},\n \"backup_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份设置到文件\"])},\n \"backup_restore\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设置备份\"])}\n },\n \"right_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"反转分栏的顺序\"])},\n \"hide_shoutbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏实例留言板\"])},\n \"expert_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示高级\"])},\n \"download_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"下载\"])},\n \"mention_links\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及链接\"])},\n \"account_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号备份\"])},\n \"account_backup_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份\"])},\n \"remove_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"list_backups_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"获取备份列表出错:\", _interpolate(_named(\"error\"))])},\n \"add_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建一个新备份\"])},\n \"added_backup\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建了一个新备份。\"])},\n \"account_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号别名\"])},\n \"account_alias_table_head\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"别名\"])},\n \"list_aliases_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"获取别名时出错:\", _interpolate(_named(\"error\"))])},\n \"hide_list_aliases_error_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"remove_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除这个别名\"])},\n \"new_alias_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加一个新别名(例如 \", _interpolate(_named(\"example\")), \")\"])},\n \"added_alias\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"别名添加好了。\"])},\n \"move_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移动账号\"])},\n \"move_account_target\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"目标账号(例如 \", _interpolate(_named(\"example\")), \")\"])},\n \"moved_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"账号移动好了。\"])},\n \"move_account_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"移动账号时出错:\", _interpolate(_named(\"error\"))])},\n \"setting_server_side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个设置是捆绑到你的个人资料的,能影响所有会话和客户端\"])},\n \"post_look_feel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文章的样子跟感受\"])},\n \"email_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从服务器收邮件的语言\"])},\n \"account_backup_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个允许你下载一份账号信息和文章的存档,但是现在还不能导入到 Pleroma 账号里。\"])},\n \"backup_not_ready\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备份还没准备好。\"])},\n \"add_backup_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加新备份时出错:\", _interpolate(_named(\"error\"))])},\n \"add_alias_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"添加别名时出错:\", _interpolate(_named(\"error\"))])},\n \"move_account_notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"如果你想把账号移动到别的地方,你必须去目标账号,然后加一个指向这里的别名。\"])},\n \"wordfilter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词语过滤器\"])},\n \"user_profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户资料\"])},\n \"third_column_mode_notifications\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知栏\"])},\n \"backup_running\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named, plural: _plural } = ctx;return _plural([_normalize([\"此备份正在进行,已处理 \", _interpolate(_named(\"number\")), \" 条记录。\"]), _normalize([\"此备份正在进行,已处理 \", _interpolate(_named(\"number\")), \" 条记录。\"])])},\n \"lists_navigation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在导航中显示列表\"])},\n \"word_filter_and_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"词过滤器及其它...\"])},\n \"backup_failed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此备份已失败。\"])},\n \"birthday\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"生日\"])},\n \"show_birthday\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展示我的生日\"])}\n },\n \"hide_favorites_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示我的喜欢列表(人们仍然会收到通知)\"])},\n \"third_column_mode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当有足够的空间时,显示第三栏包含\"])},\n \"third_column_mode_postform\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主要的发文形式和导航\"])},\n \"columns\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"分栏\"])},\n \"user_popover_avatar_overlay\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在用户头像上显示用户弹出窗口\"])},\n \"navbar_column_stretch\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"延伸导航栏至分栏宽度\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖子\"])},\n \"conversation_display_linear_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"线性视图\"])},\n \"conversation_other_replies_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示 “其它回复” 按钮\"])},\n \"confirm_dialogs_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除状态\"])},\n \"confirm_dialogs_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏用户\"])},\n \"column_sizes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"分栏大小\"])},\n \"column_sizes_sidebar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"侧栏\"])},\n \"column_sizes_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"內容\"])},\n \"column_sizes_notifs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"通知\"])},\n \"conversation_other_replies_button_below\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在状态下方\"])},\n \"conversation_other_replies_button_inside\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在状态中\"])},\n \"auto_update\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自动显示新的帖子\"])},\n \"use_websockets\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"使用 websockets(实时更新)\"])},\n \"max_depth_in_thread\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认显示同主题帖子中的最大层数\"])},\n \"hide_wordfiltered_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏经过词语过滤的状态\"])},\n \"hide_muted_threads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不显示已隐藏的同主题帖子\"])},\n \"notification_visibility_polls\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你所投的投票的结束于\"])},\n \"tree_advanced\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许在树状视图中进行更灵活的导航\"])},\n \"tree_fade_ancestors\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"以模糊的文字显示当前状态的上级\"])},\n \"conversation_display_linear\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"线性样式\"])},\n \"mention_link_fade_domain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"淡化域名(例如:\", \"@\", \"example.org 中的 \", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_bolden_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当你被提及时突出显示提及你\"])},\n \"user_popover_avatar_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"弹出式头像点击动作\"])},\n \"user_popover_avatar_action_zoom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"缩放头像\"])},\n \"user_popover_avatar_action_close\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭弹出窗口\"])},\n \"show_yous\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示 (You)s\"])},\n \"add_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加备用语言\"])},\n \"remove_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"primary_language\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"主要语言:\"])},\n \"fallback_language\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"备用语言 \", _interpolate(_named(\"index\")), \":\"])},\n \"account_privacy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐私\"])},\n \"conversation_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话显示样式\"])},\n \"conversation_display_tree\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"树状样式\"])},\n \"conversation_display_tree_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"树状视图\"])},\n \"disable_sticky_headers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要把分栏的顶栏固定在屏幕的顶部\"])},\n \"confirm_dialogs\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求确认于\"])},\n \"confirm_dialogs_logout\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"登出\"])},\n \"confirm_dialogs_deny_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝关注请求\"])},\n \"confirm_dialogs_approve_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"批准关注请求\"])},\n \"confirm_dialogs_block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽用户\"])},\n \"confirm_dialogs_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注用户\"])},\n \"confirm_dialogs_repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发状态\"])},\n \"confirm_dialogs_remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除关注者\"])},\n \"mute_bot_posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏机器人的帖子\"])},\n \"hide_bot_indication\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏帖子中的机器人提示\"])},\n \"always_show_post_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终显示浮动的新帖子按钮\"])},\n \"show_scrollbars\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示侧栏的滚动条\"])},\n \"third_column_mode_none\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完全不显示第三栏\"])},\n \"use_at_icon\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将 \", \"@\", \" 符号显示为图标而不是文本\"])},\n \"mention_link_display\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示提及链接\"])},\n \"mention_link_display_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终以简称的形式出现(例如:\", \"@\", \"foo)\"])},\n \"mention_link_display_full_for_remote\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仅远程实例用户以全名的形式出现(例如:\", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_display_full\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"始终以全名的形式出现(例如:\", \"@\", \"foo\", \"@\", \"example.org)\"])},\n \"mention_link_use_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"点击提及链接时显示用户卡片\"])},\n \"mention_link_show_avatar\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在链接旁边显示用户头像\"])},\n \"mention_link_show_avatar_quick\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在提及内容旁边显示用户头像\"])},\n \"user_popover_avatar_action_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开个人资料\"])},\n \"autocomplete_select_first\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当有自动完成的结果时,自动选择第一个候选项\"])},\n \"url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL\"])},\n \"preview\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览\"])},\n \"commit_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存\"])},\n \"commit_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当前值未保存,请按此按钮以提交你的修改\"])},\n \"reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置\"])},\n \"reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置草稿\"])},\n \"hard_reset_value\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"硬重置\"])},\n \"hard_reset_value_tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从存储中移除设置,强制使用默认值\"])},\n \"emoji_reactions_scale\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情回应比例系数\"])}\n },\n \"time\": {\n \"day\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"day_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"d\"])},\n \"hour\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hour_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"h\"])},\n \"in_future\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"还有 \", _interpolate(_list(0))])},\n \"in_past\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 之前\"])},\n \"minute\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分钟\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分钟\"])},\n \"minute_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"min\"])},\n \"month\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"month_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"mo\"])},\n \"now\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚\"])},\n \"now_short\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"刚刚\"])},\n \"second\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"second_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"s\"])},\n \"week\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"week_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"w\"])},\n \"year\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"year_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \"y\"])},\n \"unit\": {\n \"days_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])},\n \"hours\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 小时\"])},\n \"hours_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 时\"])},\n \"minutes\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分\"])},\n \"minutes_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 分\"])},\n \"months\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 个月\"])},\n \"months_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 月\"])},\n \"seconds\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"seconds_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 秒\"])},\n \"weeks_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"years\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"years_short\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 年\"])},\n \"weeks\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 周\"])},\n \"days\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" 天\"])}\n }\n },\n \"timeline\": {\n \"collapse\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折叠\"])},\n \"conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话\"])},\n \"error_fetching\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"获取更新时发生错误\"])},\n \"load_older\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更早的状态\"])},\n \"no_retweet_hint\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这条内容仅关注者可见,或者是私信,因此不能转发\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发了\"])},\n \"show_new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示新内容\"])},\n \"up_to_date\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已是最新\"])},\n \"no_more_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多的状态\"])},\n \"no_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有状态更新\"])},\n \"reload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重新载入\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"取得时间轴时发生错误:\", _interpolate(_list(0))])},\n \"socket_broke\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"丢失实时连接:CloseEvent code \", _interpolate(_list(0))])},\n \"socket_reconnected\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已建立实时连接\"])},\n \"quick_view_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"快速视图设置\"])},\n \"quick_filter_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"快速过滤设置\"])}\n },\n \"status\": {\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除状态\"])},\n \"pin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在个人资料置顶\"])},\n \"unpin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消在个人资料置顶\"])},\n \"pinned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"置顶\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要删除这条状态吗?\"])},\n \"reply_to\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复\"])},\n \"replies_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复:\"])},\n \"mute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏对话\"])},\n \"unmute_conversation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对话取消隐藏\"])},\n \"hide_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏内容\"])},\n \"show_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示内容\"])},\n \"hide_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏此部分标题\"])},\n \"show_full_subject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示全部标题\"])},\n \"thread_muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"同主题帖子已被隐藏\"])},\n \"copy_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"复制状态链接\"])},\n \"status_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态不可取得\"])},\n \"unbookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消书签\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"thread_muted_and_words\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\",含有过滤词:\"])},\n \"status_deleted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"该状态已被删除\"])},\n \"nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NSFW\"])},\n \"external_source\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"外部来源\"])},\n \"expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开\"])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(你)\"])},\n \"plus_more\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"还有 \", _interpolate(_named(\"number\")), \" 个\"])},\n \"many_attachments\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"文章有 \", _interpolate(_named(\"number\")), \" 个附件\"])},\n \"collapse_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"折起附件\"])},\n \"show_all_attachments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示所有附件\"])},\n \"show_attachment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"预览描述(打开附件能看完整描述)\"])},\n \"hide_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏附件\"])},\n \"remove_attachment\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除附件\"])},\n \"attachment_stop_flash\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"停止 Flash 播放器\"])},\n \"move_up\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"把附件左移\"])},\n \"open_gallery\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"打开图库\"])},\n \"thread_hide\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏这个同主题帖子\"])},\n \"thread_show\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示这个同主题帖子\"])},\n \"thread_show_full_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"thread_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"查看这个同主题帖子的剩余部分(一共有 \", _interpolate(_named(\"numStatus\")), \" 个状态)\"])},\n \"thread_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"ancestor_follow\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"查看这个状态下的别的 \", _interpolate(_named(\"numReplies\")), \" 个回复\"])},\n \"ancestor_follow_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation_with_icon\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"icon\")), \" \", _interpolate(_named(\"text\"))])},\n \"show_all_conversation\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"显示完整对话(还有 \", _interpolate(_named(\"numStatus\")), \" 个状态)\"])},\n \"mentions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"replies_list_with_others\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"回复(另外 +\", _interpolate(_named(\"numReplies\")), \" 个):\"])},\n \"move_down\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"把附件右移\"])},\n \"thread_show_full\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"显示这个同主题帖子下的所有东西(一共有 \", _interpolate(_named(\"numStatus\")), \" 个状态,最大深度 \", _interpolate(_named(\"depth\")), \")\"])},\n \"show_only_conversation_under_this\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"只显示这个状态的回复\"])},\n \"repeat_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要转发这条状态吗?\"])},\n \"repeat_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认转发\"])},\n \"repeat_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"repeat_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要转发\"])},\n \"edit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑状态\"])},\n \"edited_at\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(最后编辑于 \", _interpolate(_named(\"time\")), \")\"])},\n \"delete_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认删除\"])},\n \"delete_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"delete_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留\"])},\n \"show_attachment_in_modal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在媒体模式中显示\"])},\n \"status_history\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态历史\"])},\n \"delete_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"删除状态时出错:\", _interpolate(_list(0))])},\n \"reaction_count_label\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"num\")), \" 人作出了表情回应\"])}\n },\n \"user_card\": {\n \"approve\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"核准\"])},\n \"block\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"blocked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已屏蔽!\"])},\n \"deny\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"favorites\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注\"])},\n \"follow_sent\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求已发送!\"])},\n \"follow_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请求中…\"])},\n \"follow_unfollow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注\"])},\n \"followees\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注\"])},\n \"followers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注者\"])},\n \"following\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在关注!\"])},\n \"follows_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关注了你!\"])},\n \"its_you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"就是你!\"])},\n \"media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"媒体\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"muted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已隐藏\"])},\n \"per_day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"每天\"])},\n \"remote_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"跨站关注\"])},\n \"report\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"报告\"])},\n \"statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态\"])},\n \"subscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"订阅\"])},\n \"unsubscribe\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"退订\"])},\n \"unblock\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消屏蔽\"])},\n \"unblock_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在取消屏蔽…\"])},\n \"block_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在屏蔽…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏\"])},\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏中…\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏中…\"])},\n \"admin_menu\": {\n \"moderation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"仲裁\"])},\n \"grant_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"赋予管理权限\"])},\n \"revoke_admin\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销管理权限\"])},\n \"grant_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"赋予监察员权限\"])},\n \"revoke_moderator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"撤销监察员权限\"])},\n \"activate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"激活账号\"])},\n \"deactivate_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭账号\"])},\n \"delete_account\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除账号\"])},\n \"force_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标记所有的帖子都是 - 工作场合不适\"])},\n \"strip_media\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从帖子里删除媒体文件\"])},\n \"force_unlisted\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制帖子为不公开\"])},\n \"sandbox\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制帖子为只有关注者可看\"])},\n \"disable_remote_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁止从远程实例关注用户\"])},\n \"disable_any_subscription\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完全禁止关注用户\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从联合实例中禁止用户帖子\"])},\n \"delete_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除用户\"])},\n \"delete_user_data_and_deactivate_confirmation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这将永久删除该账户的数据并停用该账户。你完全确定吗?\"])}\n },\n \"hidden\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已隐藏\"])},\n \"show_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"显示转发\"])},\n \"hide_repeats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏转发\"])},\n \"message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"消息\"])},\n \"mention\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提及\"])},\n \"bot\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"机器人\"])},\n \"highlight\": {\n \"side\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"侧边条纹\"])},\n \"striped\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"条纹背景\"])},\n \"solid\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"单一颜色背景\"])},\n \"disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不突出显示\"])}\n },\n \"edit_profile\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑个人资料\"])},\n \"approve_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认批准\"])},\n \"approve_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"批准\"])},\n \"block_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"屏蔽\"])},\n \"block_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要屏蔽\"])},\n \"deactivated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已停用\"])},\n \"deny_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认拒绝\"])},\n \"deny_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"deny_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要拒绝\"])},\n \"deny_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您是否要拒绝 \", _interpolate(_named(\"user\")), \" 的关注请求?\"])},\n \"follow_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消请求\"])},\n \"unfollow_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认取消关注\"])},\n \"unfollow_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要取消关注 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"unfollow_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消关注\"])},\n \"unfollow_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要取消关注\"])},\n \"mute_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认隐藏\"])},\n \"mute_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])},\n \"mute_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要隐藏\"])},\n \"mute_duration_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"让这个用户隐藏(0表示无限期):\"])},\n \"remove_follower\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除关注者\"])},\n \"remove_follower_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认移除关注者\"])},\n \"remove_follower_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保留\"])},\n \"remove_follower_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要将 \", _interpolate(_named(\"user\")), \" 从您的关注者里移除吗?\"])},\n \"birthday\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"生于 \", _interpolate(_named(\"birthday\"))])},\n \"note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备注\"])},\n \"approve_confirm_cancel_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"不要批准\"])},\n \"approve_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您是否要批准 \", _interpolate(_named(\"user\")), \" 的关注请求?\"])},\n \"block_confirm_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"确认屏蔽\"])},\n \"block_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要屏蔽 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"mute_confirm\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"您确定要隐藏 \", _interpolate(_named(\"user\")), \" 吗?\"])},\n \"remove_follower_confirm_accept_button\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除\"])},\n \"note_blank\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(空)\"])},\n \"edit_note\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑备注\"])},\n \"edit_note_apply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"应用\"])},\n \"edit_note_cancel\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])}\n },\n \"user_profile\": {\n \"timeline_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户时间线\"])},\n \"profile_does_not_exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抱歉,此个人资料不存在。\"])},\n \"profile_loading_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"抱歉,载入个人资料时出错。\"])}\n },\n \"user_reporting\": {\n \"title\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"报告 \", _interpolate(_list(0))])},\n \"add_comment_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:\"])},\n \"additional_comments\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"其它信息\"])},\n \"forward_description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个账号来自另一个服务器。是否同时发送一份报告副本到那里?\"])},\n \"forward_to\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"转发 \", _interpolate(_list(0))])},\n \"submit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"generic_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"当处理您的请求时,发生了一个错误。\"])}\n },\n \"who_to_follow\": {\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"who_to_follow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"推荐关注\"])}\n },\n \"tool_tip\": {\n \"media_upload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传媒体\"])},\n \"repeat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"转发\"])},\n \"reply\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回复\"])},\n \"favorite\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"喜欢\"])},\n \"user_settings\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户设置\"])},\n \"reject_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝关注请求\"])},\n \"add_reaction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加互动\"])},\n \"bookmark\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"书签\"])},\n \"accept_follow_request\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"接受关注请求\"])},\n \"toggle_expand\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开或折叠通知以显示帖子全文\"])},\n \"toggle_mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"展开或折叠通知以显示已隐藏的内容\"])},\n \"autocomplete_available\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"共有 \", _interpolate(_named(\"number\")), \" 个结果可用。使用向上和向下键浏览它们。\"])}\n },\n \"upload\": {\n \"error\": {\n \"base\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"上传不成功。\"])},\n \"file_too_big\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"文件太大了 [\", _interpolate(_named(\"filesize\")), _interpolate(_named(\"filesizeunit\")), \" / \", _interpolate(_named(\"allowedsize\")), _interpolate(_named(\"allowedsizeunit\")), \"]\"])},\n \"default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"迟些再试\"])},\n \"message\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"上传错误:\", _interpolate(_list(0))])}\n },\n \"file_size_units\": {\n \"B\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"B\"])},\n \"KiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KiB\"])},\n \"MiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MiB\"])},\n \"GiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"GiB\"])},\n \"TiB\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"TiB\"])}\n }\n },\n \"search\": {\n \"people\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"人\"])},\n \"hashtags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"话题标签\"])},\n \"person_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" 人正在讨论\"])},\n \"people_talking\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([_interpolate(_named(\"count\")), \" 人正在讨论\"])},\n \"no_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有搜索结果\"])},\n \"no_more_results\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"没有更多结果\"])},\n \"load_more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载更多结果\"])}\n },\n \"password_reset\": {\n \"forgot_password\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"忘记密码了?\"])},\n \"password_reset\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置密码\"])},\n \"instruction\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。\"])},\n \"placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您的电邮地址或者用户名\"])},\n \"check_email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"检查您的邮箱,会有一个链接用于重置密码。\"])},\n \"return_home\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"回到首页\"])},\n \"too_many_requests\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您达到了尝试次数的上限,请稍后再试。\"])},\n \"password_reset_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"密码重置已被禁用。请联系您的实例管理员。\"])},\n \"password_reset_required_but_mailer_is_disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。\"])},\n \"password_reset_required\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您必须重置密码才能登陆。\"])}\n },\n \"remote_user_resolver\": {\n \"error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未找到。\"])},\n \"searching_for\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索\"])},\n \"remote_user_resolver\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"远程用户解析器\"])}\n },\n \"emoji\": {\n \"keep_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"选择器保持打开\"])},\n \"stickers\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"贴纸\"])},\n \"unicode\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unicode 表情符号\"])},\n \"custom\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"自定义表情符号\"])},\n \"add_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"插入表情符号\"])},\n \"search_emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索表情符号\"])},\n \"emoji\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情符号\"])},\n \"load_all\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"加载所有表情符号(共 \", _interpolate(_named(\"emojiAmount\")), \" 个)\"])},\n \"load_all_hint\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"最先加载的 \", _interpolate(_named(\"saneAmount\")), \" 表情符号,加载全部表情符号可能会带来性能问题。\"])},\n \"unicode_groups\": {\n \"flags\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旗帜\"])},\n \"food-and-drink\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"饮食\"])},\n \"objects\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"物件\"])},\n \"people-and-body\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"人和身体\"])},\n \"symbols\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"符号\"])},\n \"travel-and-places\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旅行和地点\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"活动\"])},\n \"animals-and-nature\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"动物和自然\"])},\n \"smileys-and-emotion\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"表情与情感\"])}\n },\n \"regional_indicator\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"地区指示符 \", _interpolate(_named(\"letter\"))])},\n \"unpacked\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"未分组的表情符号\"])}\n },\n \"about\": {\n \"mrf\": {\n \"simple\": {\n \"quarantine_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例向以下实例仅发送公开的帖子:\"])},\n \"quarantine\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隔离\"])},\n \"reject_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例不会接收来自下列实例的消息:\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])},\n \"accept_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例只接收来自下列实例的消息:\"])},\n \"simple_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"对于特定实例的策略\"])},\n \"accept\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"接受\"])},\n \"media_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"移除媒体\"])},\n \"media_nsfw_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例将来自以下实例的媒体内容强制设置为敏感内容:\"])},\n \"media_nsfw\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"强制设置媒体为敏感内容\"])},\n \"media_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本实例移除来自以下实例的媒体内容:\"])},\n \"ftl_removal_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"该实例在从“已知网络”时间线上移除了下列实例:\"])},\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从“已知网络”时间线上移除\"])},\n \"reason\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"理由\"])},\n \"not_applicable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例\"])}\n },\n \"mrf_policies_desc\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"MRF 策略会影响本实例的互通行为。以下策略已启用:\"])},\n \"mrf_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已启用的 MRF 策略\"])},\n \"keyword\": {\n \"ftl_removal\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从“全部已知网络”时间线上移除\"])},\n \"keyword_policies\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关键词策略\"])},\n \"is_replaced_by\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"→\"])},\n \"replace\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"替换\"])},\n \"reject\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"拒绝\"])}\n },\n \"federation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"联邦互通\"])}\n },\n \"staff\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理人员\"])}\n },\n \"domain_mute_card\": {\n \"unmute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在取消隐藏…\"])},\n \"unmute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消隐藏\"])},\n \"mute_progress\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏中…\"])},\n \"mute\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"隐藏\"])}\n },\n \"errors\": {\n \"storage_unavailable\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。\"])}\n },\n \"shoutbox\": {\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"留言板\"])}\n },\n \"display_date\": {\n \"today\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"今天\"])}\n },\n \"file_type\": {\n \"file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文件\"])},\n \"image\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"图片\"])},\n \"video\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"视频\"])},\n \"audio\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"音频\"])}\n },\n \"chats\": {\n \"empty_chat_list_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您还没有任何聊天记录。开始聊天吧!\"])},\n \"error_sending_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发送消息时出了点问题。\"])},\n \"error_loading_chat\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"加载聊天时出了点问题。\"])},\n \"delete_confirm\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"您确定要删除此消息吗?\"])},\n \"more\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多\"])},\n \"empty_message_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无法发布空消息\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新聊天\"])},\n \"chats\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"聊天\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"message_user\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"发消息给 \", _interpolate(_named(\"nickname\"))])},\n \"you\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"你:\"])}\n },\n \"announcements\": {\n \"page_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"公告\"])},\n \"mark_as_read_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"标为已读\"])},\n \"post_form_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布公告\"])},\n \"post_placeholder\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"在这里输入公告内容...\"])},\n \"post_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"发布\"])},\n \"post_error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"错误:\", _interpolate(_named(\"error\"))])},\n \"close_error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"关闭\"])},\n \"delete_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除\"])},\n \"start_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"起始时间: \"])},\n \"end_time_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"终止时间: \"])},\n \"all_day_prompt\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这是全天的事件\"])},\n \"published_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"发表于 \", _interpolate(_named(\"time\"))])},\n \"start_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"开始于 \", _interpolate(_named(\"time\"))])},\n \"end_time_display\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"结束于 \", _interpolate(_named(\"time\"))])},\n \"edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"编辑\"])},\n \"submit_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"提交\"])},\n \"cancel_edit_action\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"取消\"])},\n \"inactive_message\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"这个公告不活跃\"])}\n },\n \"report\": {\n \"reported_user\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"被举报者:\"])},\n \"state_closed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已关闭\"])},\n \"state_resolved\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已解决\"])},\n \"reporter\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"举报者:\"])},\n \"state_open\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"开启\"])},\n \"reported_statuses\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已举报的状态:\"])},\n \"notes\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"备注:\"])},\n \"state\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态:\"])}\n },\n \"unicode_domain_indicator\": {\n \"tooltip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"此域名包含非 ascii 字符。\"])}\n },\n \"update\": {\n \"update_bugs_gitlab\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pleroma GitLab\"])},\n \"update_changelog\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"关于变化的更多细节,请参见 \", _interpolate(_named(\"theFullChangelog\")), \" 。\"])},\n \"update_changelog_here\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"完整的更新日志\"])},\n \"big_update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请忍耐一下\"])},\n \"big_update_content\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"我们已经有一段时间没有发布发行版,所以事情的外观和感觉可能与你习惯的不一样。\"])},\n \"update_bugs\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"请在 \", _interpolate(_named(\"pleromaGitlab\")), \" 上报告任何问题和bug,因为我们已经改变了很多,虽然我们进行了彻底的测试,并且自己使用了开发版本,但我们可能错过了一些东西。我们欢迎你对你可能遇到的问题或如何改进Pleroma和Pleroma-FE提出反馈和建议。\"])},\n \"art_by\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"Art by \", _interpolate(_named(\"linkToArtist\"))])}\n },\n \"lists\": {\n \"search\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索用户\"])},\n \"create\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"创建\"])},\n \"save\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存更改\"])},\n \"delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"删除列表\"])},\n \"following_only\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制于正在关注\"])},\n \"manage_lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理列表\"])},\n \"manage_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理列表成员\"])},\n \"add_members\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"搜索更多用户\"])},\n \"remove_from_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"从列表中移除\"])},\n \"add_to_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"添加到列表\"])},\n \"is_in_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"已在列表中\"])},\n \"editing_list\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"正在编辑列表 \", _interpolate(_named(\"listTitle\"))])},\n \"creating_list\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"正在创建新的列表\"])},\n \"update_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存标题\"])},\n \"really_delete\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"真的要删除列表吗?\"])},\n \"error\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"操作列表时出错:\", _interpolate(_list(0))])},\n \"lists\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表\"])},\n \"new\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"新的列表\"])},\n \"title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"列表标题\"])}\n },\n \"admin_dash\": {\n \"window_title\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"管理员\"])},\n \"old_ui_link\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"旧的管理界面在此处\"])},\n \"reset_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重置全部\"])},\n \"commit_all\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"保存全部\"])},\n \"tabs\": {\n \"nodb\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"无数据库配置\"])},\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例\"])},\n \"limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制\"])},\n \"frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"前端\"])}\n },\n \"nodb\": {\n \"heading\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"数据库配置已禁用\"])},\n \"documentation\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"文档\"])},\n \"text2\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"大多数配置选项将不可用。\"])},\n \"text\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"你需要修改后端配置文件,以便将 \", _interpolate(_named(\"property\")), \" 设置为 \", _interpolate(_named(\"value\")), \",更多内容请参见 \", _interpolate(_named(\"documentation\")), \"。\"])}\n },\n \"captcha\": {\n \"native\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"本地\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha\"])}\n },\n \"instance\": {\n \"instance\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例信息\"])},\n \"registrations\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户注册\"])},\n \"captcha_header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"验证码\"])},\n \"kocaptcha\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"KoCaptcha 设置\"])},\n \"access\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例访问\"])},\n \"restrict\": {\n \"header\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制匿名访客的访问\"])},\n \"timelines\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"时间线访问\"])},\n \"profiles\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户个人资料访问\"])},\n \"activities\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"状态/活动访问\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"允许/不允许访问特定 API 的详细设置。默认情况下(不确定状态),如果实例不是公开的,它将拒绝访问;勾选复选框意味着即使实例是公开的,也拒绝访问;不勾选意味着即使实例是私有的,也允许访问。请注意,如果某些设置被设定,可能会发生意想不到的行为,例如,如果个人资料访问被禁用,显示的帖文将不包含个人资料信息。\"])}\n }\n },\n \"limits\": {\n \"arbitrary_limits\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"任意限制\"])},\n \"posts\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"帖文限制\"])},\n \"uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件限制\"])},\n \"users\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"用户个人资料限制\"])},\n \"profile_fields\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料字段限制\"])},\n \"user_uploads\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"个人资料媒体限制\"])}\n },\n \"frontend\": {\n \"repository\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"存储库链接\"])},\n \"versions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可用版本\"])},\n \"build_url\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"构建产物 URL\"])},\n \"reinstall\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"重新安装\"])},\n \"is_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"(默认)\"])},\n \"is_default_custom\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"(默认,版本:\", _interpolate(_named(\"version\")), \")\"])},\n \"install\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"安装\"])},\n \"install_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"安装版本 \", _interpolate(_named(\"version\"))])},\n \"more_install_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多安装选项\"])},\n \"more_default_options\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"更多默认设置选项\"])},\n \"set_default\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"设为默认\"])},\n \"set_default_version\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"将版本 \", _interpolate(_named(\"version\")), \" 设为默认\"])},\n \"wip_notice\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"请注意,此部分是一个WIP,缺乏某些功能,因为前端管理的后台实现并不完整。\"])},\n \"default_frontend\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认前端\"])},\n \"default_frontend_tip\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"默认的前端将显示给所有用户。目前还没有办法让用户选择个人的前端。如果你不使用 PleromaFE,你很可能不得不使用旧的和有问题的 AdminFE 来进行实例配置,直到我们替换它。\"])},\n \"available_frontends\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"可供安装\"])}\n },\n \"temp_overrides\": {\n \":pleroma\": {\n \":instance\": {\n \":public\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"实例是公开的\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用此功能将使所有的 API 只能被已登录用户访问,这将使公共和联邦时间线无法被匿名访客访问。\"])}\n },\n \":limit_to_local_content\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"将搜索限于本地内容\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"禁用未认证用户(默认)、所有用户或无人的全局网络搜索\"])}\n },\n \":description_limit\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"限制\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"附件描述的字数限制\"])}\n },\n \":background_image\": {\n \"label\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景图片\"])},\n \"description\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"背景图片(主要使用于 PleromaFE)\"])}\n }\n }\n }\n },\n \"wip_notice\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, named: _named } = ctx;return _normalize([\"此管理仪表板是实验性和 WIP 的,\", _interpolate(_named(\"adminFeLink\")), \"。\"])}\n }\n}"],"names":["ctx","normalize","_normalize","interpolate","_interpolate","list","_list","named","_named","plural","_plural"],"sourceRoot":""} +\ No newline at end of file diff --git a/priv/static/sw-pleroma.js b/priv/static/sw-pleroma.js @@ -1,4 +1,4 @@ -var serviceWorkerOption = {"assets":["/sw-pleroma.js.LICENSE.txt","/static/js/app.7c4b412b26221a7c8572.js","/static/img/nsfw.2958239.png","/static/img/pleromatan_apology.f9d5180.png","/static/img/pleromatan_apology_fox.038b0bb.png","/static/js/emoji.33eab91b64f59431137d.js","/static/js/i18n/ar-json.4916f840147303aa65fe.js","/static/js/i18n/ca-json.1eb24bc001efa3c0627f.js","/static/js/i18n/cs-json.5eedbe9f7084c349fbe8.js","/static/js/i18n/de-json.bfa48615ac92f87ff37a.js","/static/js/i18n/eo-json.6c62eef99e850912498b.js","/static/js/i18n/es-json.4a302899a65e1f67d8a2.js","/static/js/i18n/et-json.580b101d6bb83a8aee75.js","/static/js/i18n/eu-json.d2eab39b0427995fc314.js","/static/js/i18n/fa-json.a19100f6a5a9431e2adb.js","/static/js/i18n/fi-json.d1934c18f12d80493ab1.js","/static/js/i18n/fr-json.36ef21ccb1203d3e65ae.js","/static/js/i18n/ga-json.3f1981817977a16f1d7e.js","/static/js/i18n/he-json.03c5d271a4034de06e6f.js","/static/js/i18n/hu-json.0487899ca7a7a8505ed8.js","/static/js/i18n/id-json.e5c9ee768155f88128b9.js","/static/js/i18n/it-json.99a21d5c98376af17141.js","/static/js/i18n/ja_easy-json.1d5ea7e755b066ac2cdd.js","/static/js/i18n/ja_pedantic-json.b52fa70f0bf89ae01cfb.js","/static/js/i18n/ko-json.9029d09084bb22d8b705.js","/static/js/i18n/nan-TW-json.7f2789d8a461e86d1734.js","/static/js/i18n/nb-json.a54af3b1f47d576ad4aa.js","/static/js/i18n/nl-json.3fb9758b10c29434b613.js","/static/js/i18n/oc-json.4f52bf1b6e3213acc33c.js","/static/js/i18n/pl-json.c963247822381b05579b.js","/static/js/i18n/pt-json.3fc5593e030268bcd291.js","/static/js/i18n/ro-json.3fd9977ed1c1413059ae.js","/static/js/i18n/ru-json.b913eb7f7e9f0c642438.js","/static/js/i18n/sk-json.d8d0eba80f94e6f55145.js","/static/js/i18n/te-json.ce6db28261b2f824064f.js","/static/js/i18n/uk-json.003908af9b15becdd382.js","/static/js/i18n/vi-json.703c1e731be6e857bbf3.js","/static/js/i18n/zh-json.5831b903c3e6d281f122.js","/static/js/i18n/zh_Hant-json.f7e1d0f4b873c60d6396.js","/static/js/emoji-annotations/af-json.96c988285a6a2cce6246.js","/static/js/emoji-annotations/am-json.94388548f7c18233fec3.js","/static/js/emoji-annotations/ar-json.5527466d349f2954d49b.js","/static/js/emoji-annotations/ar_SA-json.4a6f4402931a867070f0.js","/static/js/emoji-annotations/as-json.34cf67edc1cecd195738.js","/static/js/emoji-annotations/ast-json.7e4da8cb7e539c19a9b9.js","/static/js/emoji-annotations/az-json.9a32f2941d9c4d1f834c.js","/static/js/emoji-annotations/be-json.f92f80669873a4100c69.js","/static/js/emoji-annotations/bg-json.7c69c52572a7bf87e1db.js","/static/js/emoji-annotations/bn-json.657aac057f36ad06c58d.js","/static/js/emoji-annotations/br-json.c7175423d8965ed10bae.js","/static/js/emoji-annotations/bs-json.48ef42da1c7976cf083c.js","/static/js/emoji-annotations/ca-json.ce029e860b10b242c6a5.js","/static/js/emoji-annotations/ccp-json.02836537ffe2b02291cb.js","/static/js/emoji-annotations/ceb-json.9db0336f168aa77ee395.js","/static/js/emoji-annotations/chr-json.e7e542ab5a74167dec10.js","/static/js/emoji-annotations/ckb-json.13dc83db1e15aa76051a.js","/static/js/emoji-annotations/cs-json.48d8bba230dc9fe6b3dc.js","/static/js/emoji-annotations/cy-json.e09dd13da5ad56530ead.js","/static/js/emoji-annotations/da-json.8d074e27df71edafc543.js","/static/js/emoji-annotations/de-json.e1443c01a191af1665e1.js","/static/js/emoji-annotations/de_CH-json.b4a5891ea2f38d616ec0.js","/static/js/emoji-annotations/doi-json.7841c3f3ceb4e3da0bd1.js","/static/js/emoji-annotations/dsb-json.7635686ffd8d62264466.js","/static/js/emoji-annotations/el-json.b36610f2ea16d56c2314.js","/static/js/emoji-annotations/en-json.6c3947f7c49c3952084d.js","/static/js/emoji-annotations/en_001-json.72d8c47269350f59aa9f.js","/static/js/emoji-annotations/en_AU-json.33aac9bbd887273a34b1.js","/static/js/emoji-annotations/en_CA-json.5de965778a6b8a5a4bb4.js","/static/js/emoji-annotations/en_GB-json.bd687f904492facc81d1.js","/static/js/emoji-annotations/en_IN-json.002faa48c09121928fca.js","/static/js/emoji-annotations/es-json.f593b0dc2367a9d7fb30.js","/static/js/emoji-annotations/es_419-json.d81991295392b6ed83bb.js","/static/js/emoji-annotations/es_MX-json.ee359d4b611fdb1aeb33.js","/static/js/emoji-annotations/es_US-json.280bdb036dfd651d079a.js","/static/js/emoji-annotations/et-json.c42e3f186a55ecb061cd.js","/static/js/emoji-annotations/eu-json.931b429f5fcc141549a5.js","/static/js/emoji-annotations/fa-json.819c7f263c8594ccf4fa.js","/static/js/emoji-annotations/fi-json.0f254bb4b0faaba4abcc.js","/static/js/emoji-annotations/fil-json.4fca833f178d1b889b69.js","/static/js/emoji-annotations/fo-json.9b060e8009b3a8be4597.js","/static/js/emoji-annotations/fr-json.da49ed0d1a6622fe1c67.js","/static/js/emoji-annotations/fr_CA-json.59ed6b59e2ca68707292.js","/static/js/emoji-annotations/ga-json.cb3f9e613a8c445aea23.js","/static/js/emoji-annotations/gd-json.e3d0aea3725be774ad81.js","/static/js/emoji-annotations/gl-json.ce89036f0ae72224c994.js","/static/js/emoji-annotations/gu-json.8a899f364cf260376905.js","/static/js/emoji-annotations/ha-json.2a08912b38925c10f970.js","/static/js/emoji-annotations/ha_NE-json.e4855d92aaccfdd6ba57.js","/static/js/emoji-annotations/he-json.a3d7631f32182b0955a2.js","/static/js/emoji-annotations/hi-json.04bc5f73dc2169def97e.js","/static/js/emoji-annotations/hi_Latn-json.3cb73c456f31261f1908.js","/static/js/emoji-annotations/hr-json.fe847ade1f18a60e513c.js","/static/js/emoji-annotations/hsb-json.438721731b4171bc6fc3.js","/static/js/emoji-annotations/hu-json.1faf52040deda872b416.js","/static/js/emoji-annotations/hy-json.2d819f7faabfeba8457f.js","/static/js/emoji-annotations/ia-json.8e8365e2bf41779e2beb.js","/static/js/emoji-annotations/id-json.55f83c46d753b0b69330.js","/static/js/emoji-annotations/ig-json.f19fa5fe3582463ba73c.js","/static/js/emoji-annotations/is-json.62e220c65215b034533d.js","/static/js/emoji-annotations/it-json.9c1758f4fd3391f7f61a.js","/static/js/emoji-annotations/ja-json.0bd51f8c40c106355b0e.js","/static/js/emoji-annotations/jv-json.1c8d5ffcff22b46b6214.js","/static/js/emoji-annotations/ka-json.567e7b051d90a37003f3.js","/static/js/emoji-annotations/kab-json.1a2de4774f4ddc2b51dd.js","/static/js/emoji-annotations/kk-json.a20b59d47bdfe99786ad.js","/static/js/emoji-annotations/kl-json.87ab8661b4bdecd09faf.js","/static/js/emoji-annotations/km-json.9bc922b2e0faa64b4c53.js","/static/js/emoji-annotations/kn-json.efdac8ac0cb00991ba1e.js","/static/js/emoji-annotations/ko-json.d175900fe48f48ce87c8.js","/static/js/emoji-annotations/kok-json.116e4f72db3bfb846233.js","/static/js/emoji-annotations/ku-json.2173ed87f8d7372ee209.js","/static/js/emoji-annotations/ky-json.310bda579c819eda9472.js","/static/js/emoji-annotations/lb-json.499c526f3a653618ea9b.js","/static/js/emoji-annotations/lo-json.ecb06d61465a355b8157.js","/static/js/emoji-annotations/lt-json.ced4d5e70edc60127df6.js","/static/js/emoji-annotations/lv-json.5600c2eb6d59fa0aa2e2.js","/static/js/emoji-annotations/mai-json.302386b3358f4d34f9c8.js","/static/js/emoji-annotations/mi-json.9efe6f146ecd8987f80a.js","/static/js/emoji-annotations/mk-json.a254cabb8570419cc426.js","/static/js/emoji-annotations/ml-json.3f2902a84240faff1b48.js","/static/js/emoji-annotations/mn-json.764169f1168d0432640f.js","/static/js/emoji-annotations/mni-json.7db7f76ab1ce34e3683d.js","/static/js/emoji-annotations/mr-json.cb0a87d9aabf8a52161d.js","/static/js/emoji-annotations/ms-json.272ee4735aabc37015dd.js","/static/js/emoji-annotations/mt-json.3ddf7dbc114adf90c500.js","/static/js/emoji-annotations/my-json.8e7dd1485813d15bba7e.js","/static/js/emoji-annotations/ne-json.a0118dca2096a101b8e8.js","/static/js/emoji-annotations/nl-json.52f4b93b8fa5e22cb585.js","/static/js/emoji-annotations/nn-json.7293cd5d7205681cf48c.js","/static/js/emoji-annotations/no-json.22bdbbc77cc3c14ada58.js","/static/js/emoji-annotations/or-json.b007c2f6f92dcc95efac.js","/static/js/emoji-annotations/pa-json.7d60d69762a108270669.js","/static/js/emoji-annotations/pa_Arab-json.5ae021308b1c5f6dd8a7.js","/static/js/emoji-annotations/pcm-json.eac3a5ad0b4b5b33289d.js","/static/js/emoji-annotations/pl-json.e9e8f1ed84dc6c169516.js","/static/js/emoji-annotations/ps-json.a0d9eea5b81bcad11e64.js","/static/js/emoji-annotations/pt-json.2b2512ee44291bdb2ae7.js","/static/js/emoji-annotations/pt_PT-json.c381b13e323f91b0e6b3.js","/static/js/emoji-annotations/qu-json.55f4df57e71076dbad9f.js","/static/js/emoji-annotations/rm-json.985d4934f386fd05a75c.js","/static/js/emoji-annotations/ro-json.cb62f86ce78c94d1e813.js","/static/js/emoji-annotations/ru-json.a81d0df34460837ccacc.js","/static/js/emoji-annotations/rw-json.031838c5374676191131.js","/static/js/emoji-annotations/sa-json.21b06234a08c7469ccb4.js","/static/js/emoji-annotations/sat-json.71e92700b2aaca8e021c.js","/static/js/emoji-annotations/sc-json.c84c9c47d2e104c43e4c.js","/static/js/emoji-annotations/sd-json.8f2a6a06dc3cf185f79d.js","/static/js/emoji-annotations/si-json.841b356da03623c10dbf.js","/static/js/emoji-annotations/sk-json.5d96bdb4da82655d0314.js","/static/js/emoji-annotations/sl-json.a40c5548da34fce6f1d0.js","/static/js/emoji-annotations/so-json.f75abd16637c8924c075.js","/static/js/emoji-annotations/sq-json.bcf154ed8a6138aa089c.js","/static/js/emoji-annotations/sr-json.e29a20e59a708df0c6a8.js","/static/js/emoji-annotations/sr_Cyrl_BA-json.83c7c64b9696ae2339f2.js","/static/js/emoji-annotations/sr_Latn-json.ff27d1f455bf2afb8d70.js","/static/js/emoji-annotations/sr_Latn_BA-json.72933405032b81344754.js","/static/js/emoji-annotations/su-json.daff15251020cbecea7d.js","/static/js/emoji-annotations/sv-json.8b0374cbca3a77519876.js","/static/js/emoji-annotations/sw-json.d5f350641b9cbcc0e126.js","/static/js/emoji-annotations/sw_KE-json.f3563cbeac1c158563d5.js","/static/js/emoji-annotations/ta-json.675cc6c7607449d4a91b.js","/static/js/emoji-annotations/te-json.8a69a10f62cdf626244e.js","/static/js/emoji-annotations/tg-json.9647f559a4477d7d8e96.js","/static/js/emoji-annotations/th-json.34709bae223bb9d2587c.js","/static/js/emoji-annotations/ti-json.5b173bd33bb960be805b.js","/static/js/emoji-annotations/tk-json.23a9a6229829921704ad.js","/static/js/emoji-annotations/to-json.50ac37d101caaf592c94.js","/static/js/emoji-annotations/tr-json.6462e8cfd5006cf5b6cf.js","/static/js/emoji-annotations/tt-json.4c089389ba9983ec8ef7.js","/static/js/emoji-annotations/ug-json.bf768bd32e9ff02b0a8a.js","/static/js/emoji-annotations/uk-json.af110c8eef232638fc4d.js","/static/js/emoji-annotations/ur-json.983c02109444c883a18f.js","/static/js/emoji-annotations/uz-json.ac43f4c54d4587324a20.js","/static/js/emoji-annotations/vi-json.f6a364b2add7f8c8bc67.js","/static/js/emoji-annotations/wo-json.e0d689e22cda0dd77e9a.js","/static/js/emoji-annotations/xh-json.21e88c05ad3113dfc7f2.js","/static/js/emoji-annotations/yo-json.ea1150d6bc360dd86f2e.js","/static/js/emoji-annotations/yo_BJ-json.650318c25fe4da92bad8.js","/static/js/emoji-annotations/yue-json.15102c0ddfdf19bdfb4c.js","/static/js/emoji-annotations/yue_Hans-json.cc60bb10d32fab3d8207.js","/static/js/emoji-annotations/zh-json.e42a28127d5c1aff6c85.js","/static/js/emoji-annotations/zh_Hant-json.9cbb765c181d443828a9.js","/static/js/emoji-annotations/zh_Hant_HK-json.7eee03c705347a21c612.js","/static/js/emoji-annotations/zu-json.e0cb7cd3890583fd0f6d.js","/static/js/7586.981b2305a0019f6042a5.js","/static/js/6464.eb9c90a1c948cde554e9.js","/static/js/159.903e90c9de8ef6c67077.js","/static/js/7962.e25d40b042f8ee7389c3.js","/static/js/9801.99ace6b5dc657bf1a65b.js","/static/js/3733.7060d1e6bca813125a0c.js","/static/js/48.b5ecdbc517423af07ca4.js","/static/js/9060.24271e167e0471a1a732.js","/static/ruffle/56f009143a5a7685fad9.wasm","/static/ruffle/92614a5efc3434baeaa9.wasm","/static/ruffle/LICENSE_APACHE","/static/ruffle/LICENSE_MIT","/static/ruffle/README.md","/static/ruffle/core.ruffle.61b3dd915983ae8a8b16.js","/static/ruffle/core.ruffle.848d766d6fc336164c2f.js","/static/ruffle/package.json","/static/ruffle/ruffle.js","/static/js/3733.7060d1e6bca813125a0c.js.LICENSE.txt","/static/js/48.b5ecdbc517423af07ca4.js.LICENSE.txt","/index.html","/static/css/app.c18a2c80794a1b699a61.css","/static/css/7586.0d43f70bc6240422f179.css","/static/css/6464.169260b661120cc50815.css","/static/css/159.1d523a00378ebd68c5b3.css","/static/css/7962.76663e78ad5ea0bb0b90.css","/static/css/9801.cfe503d4c949ae0c3813.css"]}; +var serviceWorkerOption = {"assets":["/sw-pleroma.js.LICENSE.txt","/static/js/app.d42ab31e1d50a3265a82.js","/static/img/nsfw.2958239.png","/static/img/pleromatan_apology.f9d5180.png","/static/img/pleromatan_apology_fox.038b0bb.png","/static/js/emoji.33eab91b64f59431137d.js","/static/js/i18n/ar-json.4916f840147303aa65fe.js","/static/js/i18n/ca-json.1eb24bc001efa3c0627f.js","/static/js/i18n/cs-json.5eedbe9f7084c349fbe8.js","/static/js/i18n/de-json.bfa48615ac92f87ff37a.js","/static/js/i18n/eo-json.6c62eef99e850912498b.js","/static/js/i18n/es-json.4a302899a65e1f67d8a2.js","/static/js/i18n/et-json.580b101d6bb83a8aee75.js","/static/js/i18n/eu-json.d2eab39b0427995fc314.js","/static/js/i18n/fa-json.a19100f6a5a9431e2adb.js","/static/js/i18n/fi-json.d1934c18f12d80493ab1.js","/static/js/i18n/fr-json.36ef21ccb1203d3e65ae.js","/static/js/i18n/ga-json.3f1981817977a16f1d7e.js","/static/js/i18n/he-json.03c5d271a4034de06e6f.js","/static/js/i18n/hu-json.0487899ca7a7a8505ed8.js","/static/js/i18n/id-json.e5c9ee768155f88128b9.js","/static/js/i18n/it-json.99a21d5c98376af17141.js","/static/js/i18n/ja_easy-json.1d5ea7e755b066ac2cdd.js","/static/js/i18n/ja_pedantic-json.b52fa70f0bf89ae01cfb.js","/static/js/i18n/ko-json.9029d09084bb22d8b705.js","/static/js/i18n/nan-TW-json.7f2789d8a461e86d1734.js","/static/js/i18n/nb-json.a54af3b1f47d576ad4aa.js","/static/js/i18n/nl-json.3fb9758b10c29434b613.js","/static/js/i18n/oc-json.4f52bf1b6e3213acc33c.js","/static/js/i18n/pl-json.c963247822381b05579b.js","/static/js/i18n/pt-json.3fc5593e030268bcd291.js","/static/js/i18n/ro-json.3fd9977ed1c1413059ae.js","/static/js/i18n/ru-json.b913eb7f7e9f0c642438.js","/static/js/i18n/sk-json.d8d0eba80f94e6f55145.js","/static/js/i18n/te-json.ce6db28261b2f824064f.js","/static/js/i18n/uk-json.003908af9b15becdd382.js","/static/js/i18n/vi-json.703c1e731be6e857bbf3.js","/static/js/i18n/zh-json.a0a26f6d62ddbe0b49cc.js","/static/js/i18n/zh_Hant-json.f7e1d0f4b873c60d6396.js","/static/js/emoji-annotations/af-json.96c988285a6a2cce6246.js","/static/js/emoji-annotations/am-json.94388548f7c18233fec3.js","/static/js/emoji-annotations/ar-json.5527466d349f2954d49b.js","/static/js/emoji-annotations/ar_SA-json.4a6f4402931a867070f0.js","/static/js/emoji-annotations/as-json.34cf67edc1cecd195738.js","/static/js/emoji-annotations/ast-json.7e4da8cb7e539c19a9b9.js","/static/js/emoji-annotations/az-json.9a32f2941d9c4d1f834c.js","/static/js/emoji-annotations/be-json.f92f80669873a4100c69.js","/static/js/emoji-annotations/bg-json.7c69c52572a7bf87e1db.js","/static/js/emoji-annotations/bn-json.657aac057f36ad06c58d.js","/static/js/emoji-annotations/br-json.c7175423d8965ed10bae.js","/static/js/emoji-annotations/bs-json.48ef42da1c7976cf083c.js","/static/js/emoji-annotations/ca-json.ce029e860b10b242c6a5.js","/static/js/emoji-annotations/ccp-json.02836537ffe2b02291cb.js","/static/js/emoji-annotations/ceb-json.9db0336f168aa77ee395.js","/static/js/emoji-annotations/chr-json.e7e542ab5a74167dec10.js","/static/js/emoji-annotations/ckb-json.13dc83db1e15aa76051a.js","/static/js/emoji-annotations/cs-json.48d8bba230dc9fe6b3dc.js","/static/js/emoji-annotations/cy-json.e09dd13da5ad56530ead.js","/static/js/emoji-annotations/da-json.8d074e27df71edafc543.js","/static/js/emoji-annotations/de-json.e1443c01a191af1665e1.js","/static/js/emoji-annotations/de_CH-json.b4a5891ea2f38d616ec0.js","/static/js/emoji-annotations/doi-json.7841c3f3ceb4e3da0bd1.js","/static/js/emoji-annotations/dsb-json.7635686ffd8d62264466.js","/static/js/emoji-annotations/el-json.b36610f2ea16d56c2314.js","/static/js/emoji-annotations/en-json.6c3947f7c49c3952084d.js","/static/js/emoji-annotations/en_001-json.72d8c47269350f59aa9f.js","/static/js/emoji-annotations/en_AU-json.33aac9bbd887273a34b1.js","/static/js/emoji-annotations/en_CA-json.5de965778a6b8a5a4bb4.js","/static/js/emoji-annotations/en_GB-json.bd687f904492facc81d1.js","/static/js/emoji-annotations/en_IN-json.002faa48c09121928fca.js","/static/js/emoji-annotations/es-json.f593b0dc2367a9d7fb30.js","/static/js/emoji-annotations/es_419-json.d81991295392b6ed83bb.js","/static/js/emoji-annotations/es_MX-json.ee359d4b611fdb1aeb33.js","/static/js/emoji-annotations/es_US-json.280bdb036dfd651d079a.js","/static/js/emoji-annotations/et-json.c42e3f186a55ecb061cd.js","/static/js/emoji-annotations/eu-json.931b429f5fcc141549a5.js","/static/js/emoji-annotations/fa-json.819c7f263c8594ccf4fa.js","/static/js/emoji-annotations/fi-json.0f254bb4b0faaba4abcc.js","/static/js/emoji-annotations/fil-json.4fca833f178d1b889b69.js","/static/js/emoji-annotations/fo-json.9b060e8009b3a8be4597.js","/static/js/emoji-annotations/fr-json.da49ed0d1a6622fe1c67.js","/static/js/emoji-annotations/fr_CA-json.59ed6b59e2ca68707292.js","/static/js/emoji-annotations/ga-json.cb3f9e613a8c445aea23.js","/static/js/emoji-annotations/gd-json.e3d0aea3725be774ad81.js","/static/js/emoji-annotations/gl-json.ce89036f0ae72224c994.js","/static/js/emoji-annotations/gu-json.8a899f364cf260376905.js","/static/js/emoji-annotations/ha-json.2a08912b38925c10f970.js","/static/js/emoji-annotations/ha_NE-json.e4855d92aaccfdd6ba57.js","/static/js/emoji-annotations/he-json.a3d7631f32182b0955a2.js","/static/js/emoji-annotations/hi-json.04bc5f73dc2169def97e.js","/static/js/emoji-annotations/hi_Latn-json.3cb73c456f31261f1908.js","/static/js/emoji-annotations/hr-json.fe847ade1f18a60e513c.js","/static/js/emoji-annotations/hsb-json.438721731b4171bc6fc3.js","/static/js/emoji-annotations/hu-json.1faf52040deda872b416.js","/static/js/emoji-annotations/hy-json.2d819f7faabfeba8457f.js","/static/js/emoji-annotations/ia-json.8e8365e2bf41779e2beb.js","/static/js/emoji-annotations/id-json.55f83c46d753b0b69330.js","/static/js/emoji-annotations/ig-json.f19fa5fe3582463ba73c.js","/static/js/emoji-annotations/is-json.62e220c65215b034533d.js","/static/js/emoji-annotations/it-json.9c1758f4fd3391f7f61a.js","/static/js/emoji-annotations/ja-json.0bd51f8c40c106355b0e.js","/static/js/emoji-annotations/jv-json.1c8d5ffcff22b46b6214.js","/static/js/emoji-annotations/ka-json.567e7b051d90a37003f3.js","/static/js/emoji-annotations/kab-json.1a2de4774f4ddc2b51dd.js","/static/js/emoji-annotations/kk-json.a20b59d47bdfe99786ad.js","/static/js/emoji-annotations/kl-json.87ab8661b4bdecd09faf.js","/static/js/emoji-annotations/km-json.9bc922b2e0faa64b4c53.js","/static/js/emoji-annotations/kn-json.efdac8ac0cb00991ba1e.js","/static/js/emoji-annotations/ko-json.d175900fe48f48ce87c8.js","/static/js/emoji-annotations/kok-json.116e4f72db3bfb846233.js","/static/js/emoji-annotations/ku-json.2173ed87f8d7372ee209.js","/static/js/emoji-annotations/ky-json.310bda579c819eda9472.js","/static/js/emoji-annotations/lb-json.499c526f3a653618ea9b.js","/static/js/emoji-annotations/lo-json.ecb06d61465a355b8157.js","/static/js/emoji-annotations/lt-json.ced4d5e70edc60127df6.js","/static/js/emoji-annotations/lv-json.5600c2eb6d59fa0aa2e2.js","/static/js/emoji-annotations/mai-json.302386b3358f4d34f9c8.js","/static/js/emoji-annotations/mi-json.9efe6f146ecd8987f80a.js","/static/js/emoji-annotations/mk-json.a254cabb8570419cc426.js","/static/js/emoji-annotations/ml-json.3f2902a84240faff1b48.js","/static/js/emoji-annotations/mn-json.764169f1168d0432640f.js","/static/js/emoji-annotations/mni-json.7db7f76ab1ce34e3683d.js","/static/js/emoji-annotations/mr-json.cb0a87d9aabf8a52161d.js","/static/js/emoji-annotations/ms-json.272ee4735aabc37015dd.js","/static/js/emoji-annotations/mt-json.3ddf7dbc114adf90c500.js","/static/js/emoji-annotations/my-json.8e7dd1485813d15bba7e.js","/static/js/emoji-annotations/ne-json.a0118dca2096a101b8e8.js","/static/js/emoji-annotations/nl-json.52f4b93b8fa5e22cb585.js","/static/js/emoji-annotations/nn-json.7293cd5d7205681cf48c.js","/static/js/emoji-annotations/no-json.22bdbbc77cc3c14ada58.js","/static/js/emoji-annotations/or-json.b007c2f6f92dcc95efac.js","/static/js/emoji-annotations/pa-json.7d60d69762a108270669.js","/static/js/emoji-annotations/pa_Arab-json.5ae021308b1c5f6dd8a7.js","/static/js/emoji-annotations/pcm-json.eac3a5ad0b4b5b33289d.js","/static/js/emoji-annotations/pl-json.e9e8f1ed84dc6c169516.js","/static/js/emoji-annotations/ps-json.a0d9eea5b81bcad11e64.js","/static/js/emoji-annotations/pt-json.2b2512ee44291bdb2ae7.js","/static/js/emoji-annotations/pt_PT-json.c381b13e323f91b0e6b3.js","/static/js/emoji-annotations/qu-json.55f4df57e71076dbad9f.js","/static/js/emoji-annotations/rm-json.985d4934f386fd05a75c.js","/static/js/emoji-annotations/ro-json.cb62f86ce78c94d1e813.js","/static/js/emoji-annotations/ru-json.a81d0df34460837ccacc.js","/static/js/emoji-annotations/rw-json.031838c5374676191131.js","/static/js/emoji-annotations/sa-json.21b06234a08c7469ccb4.js","/static/js/emoji-annotations/sat-json.71e92700b2aaca8e021c.js","/static/js/emoji-annotations/sc-json.c84c9c47d2e104c43e4c.js","/static/js/emoji-annotations/sd-json.8f2a6a06dc3cf185f79d.js","/static/js/emoji-annotations/si-json.841b356da03623c10dbf.js","/static/js/emoji-annotations/sk-json.5d96bdb4da82655d0314.js","/static/js/emoji-annotations/sl-json.a40c5548da34fce6f1d0.js","/static/js/emoji-annotations/so-json.f75abd16637c8924c075.js","/static/js/emoji-annotations/sq-json.bcf154ed8a6138aa089c.js","/static/js/emoji-annotations/sr-json.e29a20e59a708df0c6a8.js","/static/js/emoji-annotations/sr_Cyrl_BA-json.83c7c64b9696ae2339f2.js","/static/js/emoji-annotations/sr_Latn-json.ff27d1f455bf2afb8d70.js","/static/js/emoji-annotations/sr_Latn_BA-json.72933405032b81344754.js","/static/js/emoji-annotations/su-json.daff15251020cbecea7d.js","/static/js/emoji-annotations/sv-json.8b0374cbca3a77519876.js","/static/js/emoji-annotations/sw-json.d5f350641b9cbcc0e126.js","/static/js/emoji-annotations/sw_KE-json.f3563cbeac1c158563d5.js","/static/js/emoji-annotations/ta-json.675cc6c7607449d4a91b.js","/static/js/emoji-annotations/te-json.8a69a10f62cdf626244e.js","/static/js/emoji-annotations/tg-json.9647f559a4477d7d8e96.js","/static/js/emoji-annotations/th-json.34709bae223bb9d2587c.js","/static/js/emoji-annotations/ti-json.5b173bd33bb960be805b.js","/static/js/emoji-annotations/tk-json.23a9a6229829921704ad.js","/static/js/emoji-annotations/to-json.50ac37d101caaf592c94.js","/static/js/emoji-annotations/tr-json.6462e8cfd5006cf5b6cf.js","/static/js/emoji-annotations/tt-json.4c089389ba9983ec8ef7.js","/static/js/emoji-annotations/ug-json.bf768bd32e9ff02b0a8a.js","/static/js/emoji-annotations/uk-json.af110c8eef232638fc4d.js","/static/js/emoji-annotations/ur-json.983c02109444c883a18f.js","/static/js/emoji-annotations/uz-json.ac43f4c54d4587324a20.js","/static/js/emoji-annotations/vi-json.f6a364b2add7f8c8bc67.js","/static/js/emoji-annotations/wo-json.e0d689e22cda0dd77e9a.js","/static/js/emoji-annotations/xh-json.21e88c05ad3113dfc7f2.js","/static/js/emoji-annotations/yo-json.ea1150d6bc360dd86f2e.js","/static/js/emoji-annotations/yo_BJ-json.650318c25fe4da92bad8.js","/static/js/emoji-annotations/yue-json.15102c0ddfdf19bdfb4c.js","/static/js/emoji-annotations/yue_Hans-json.cc60bb10d32fab3d8207.js","/static/js/emoji-annotations/zh-json.e42a28127d5c1aff6c85.js","/static/js/emoji-annotations/zh_Hant-json.9cbb765c181d443828a9.js","/static/js/emoji-annotations/zh_Hant_HK-json.7eee03c705347a21c612.js","/static/js/emoji-annotations/zu-json.e0cb7cd3890583fd0f6d.js","/static/js/7586.628f729b9c8b2e6f4e1f.js","/static/js/6464.eb9c90a1c948cde554e9.js","/static/js/159.903e90c9de8ef6c67077.js","/static/js/7962.e25d40b042f8ee7389c3.js","/static/js/8859.c76b0a0c3a4b5acbef11.js","/static/js/3733.7060d1e6bca813125a0c.js","/static/js/48.b5ecdbc517423af07ca4.js","/static/js/9060.24271e167e0471a1a732.js","/static/ruffle/56f009143a5a7685fad9.wasm","/static/ruffle/92614a5efc3434baeaa9.wasm","/static/ruffle/LICENSE_APACHE","/static/ruffle/LICENSE_MIT","/static/ruffle/README.md","/static/ruffle/core.ruffle.61b3dd915983ae8a8b16.js","/static/ruffle/core.ruffle.848d766d6fc336164c2f.js","/static/ruffle/package.json","/static/ruffle/ruffle.js","/static/js/3733.7060d1e6bca813125a0c.js.LICENSE.txt","/static/js/48.b5ecdbc517423af07ca4.js.LICENSE.txt","/index.html","/static/css/app.a7f63ee9107a77599942.css","/static/css/7586.0d43f70bc6240422f179.css","/static/css/6464.169260b661120cc50815.css","/static/css/159.1d523a00378ebd68c5b3.css","/static/css/7962.76663e78ad5ea0bb0b90.css","/static/css/8859.d26a3b0841a7beb8fd4a.css"]}; /*! For license information please see sw-pleroma.js.LICENSE.txt */ (()=>{var e={5464:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["منشور مجهول، جارٍ البحث عنه…"])},favorited_you:e=>{const{normalize:t}=e;return t(["أعجِب بمنشورك"])},followed_you:e=>{const{normalize:t}=e;return t(["يُتابعك"])},load_older:e=>{const{normalize:t}=e;return t(["تحميل الإشعارات الأقدم"])},notifications:e=>{const{normalize:t}=e;return t(["الاشعارات"])},read:e=>{const{normalize:t}=e;return t(["مقروء!"])},repeated_you:e=>{const{normalize:t}=e;return t(["شارَك منشورك"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["خطأ أثناء جلب الاشعارات: ",r(n(0))])},follow_request:e=>{const{normalize:t}=e;return t(["يريد متابعتك"])},poll_ended:e=>{const{normalize:t}=e;return t(["انتهى الاستطلاع"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["لا مزيد من الإشعارات"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["تفاعل بـ",r(n(0))])},submitted_report:e=>{const{normalize:t}=e;return t(["أرسل بلاغًا"])},migrated_to:e=>{const{normalize:t}=e;return t(["انتقلَ إلى"])}}}},3708:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Publicació desconeguda, s'està cercant…"])},favorited_you:e=>{const{normalize:t}=e;return t(["ha marcat un estat teu"])},followed_you:e=>{const{normalize:t}=e;return t(["ha començat a seguir-te"])},load_older:e=>{const{normalize:t}=e;return t(["Carrega més notificacions"])},notifications:e=>{const{normalize:t}=e;return t(["Notificacions"])},read:e=>{const{normalize:t}=e;return t(["Llegit!"])},repeated_you:e=>{const{normalize:t}=e;return t(["ha repetit el teu estat"])},migrated_to:e=>{const{normalize:t}=e;return t(["migrat a"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["No més notificacions"])},follow_request:e=>{const{normalize:t}=e;return t(["et vol seguir"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["ha reaccionat amb ",r(n(0))])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Error obtenint notificacions: ",r(n(0))])}}}},122:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Neznámý příspěvek, hledám jej…"])},favorited_you:e=>{const{normalize:t}=e;return t(["si oblíbil/a váš příspěvek"])},followed_you:e=>{const{normalize:t}=e;return t(["vás nyní sleduje"])},load_older:e=>{const{normalize:t}=e;return t(["Načíst starší oznámení"])},notifications:e=>{const{normalize:t}=e;return t(["Oznámení"])},read:e=>{const{normalize:t}=e;return t(["Číst!"])},repeated_you:e=>{const{normalize:t}=e;return t(["zopakoval/a váš příspěvek"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Žádná další oznámení"])}}}},414:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Unbekannte Nachricht, suche danach…"])},favorited_you:e=>{const{normalize:t}=e;return t(["favorisierte deine Nachricht"])},followed_you:e=>{const{normalize:t}=e;return t(["folgt dir"])},load_older:e=>{const{normalize:t}=e;return t(["Ältere Benachrichtigungen laden"])},notifications:e=>{const{normalize:t}=e;return t(["Benachrichtigungen"])},read:e=>{const{normalize:t}=e;return t(["Gelesen!"])},repeated_you:e=>{const{normalize:t}=e;return t(["wiederholte deine Nachricht"])},follow_request:e=>{const{normalize:t}=e;return t(["möchte dir folgen"])},migrated_to:e=>{const{normalize:t}=e;return t(["migrierte zu"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reagierte mit ",r(n(0))])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Keine Benachrichtigungen mehr"])},error:e=>{const{normalize:t}=e;return t(["Error beim laden von Neuigkeiten"])}}}},2551:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Unknown status, searching for it…"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Error fetching notifications: ",r(n(0))])},favorited_you:e=>{const{normalize:t}=e;return t(["favorited your status"])},followed_you:e=>{const{normalize:t}=e;return t(["followed you"])},follow_request:e=>{const{normalize:t}=e;return t(["wants to follow you"])},load_older:e=>{const{normalize:t}=e;return t(["Load older notifications"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},read:e=>{const{normalize:t}=e;return t(["Read!"])},repeated_you:e=>{const{normalize:t}=e;return t(["repeated your status"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["No more notifications"])},migrated_to:e=>{const{normalize:t}=e;return t(["migrated to"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reacted with ",r(n(0))])},submitted_report:e=>{const{normalize:t}=e;return t(["submitted a report"])},poll_ended:e=>{const{normalize:t}=e;return t(["poll has ended"])}}}},5775:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Nekonata afiŝo, serĉante ĝin…"])},favorited_you:e=>{const{normalize:t}=e;return t(["ŝatis vian afiŝon"])},followed_you:e=>{const{normalize:t}=e;return t(["ekabonis vin"])},load_older:e=>{const{normalize:t}=e;return t(["Enlegi pli malnovajn sciigojn"])},notifications:e=>{const{normalize:t}=e;return t(["Sciigoj"])},read:e=>{const{normalize:t}=e;return t(["Legite!"])},repeated_you:e=>{const{normalize:t}=e;return t(["ripetis vian afiŝon"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Neniuj pliaj sciigoj"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reagis per ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["migris al"])},follow_request:e=>{const{normalize:t}=e;return t(["volas vin aboni"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Eraris akirado de sciigoj: ",r(n(0))])},submitted_report:e=>{const{normalize:t}=e;return t(["sendis raporton"])},poll_ended:e=>{const{normalize:t}=e;return t(["enketo finiĝis"])}}}},8438:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Estado desconocido, buscándolo…"])},favorited_you:e=>{const{normalize:t}=e;return t(["le gusta tu estado"])},followed_you:e=>{const{normalize:t}=e;return t(["empezó a seguirte"])},load_older:e=>{const{normalize:t}=e;return t(["Cargar notificaciones antiguas"])},notifications:e=>{const{normalize:t}=e;return t(["Notificaciones"])},read:e=>{const{normalize:t}=e;return t(["¡Leído!"])},repeated_you:e=>{const{normalize:t}=e;return t(["repitió tu estado"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["No hay más notificaciones"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reaccionó con ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["migrado a"])},follow_request:e=>{const{normalize:t}=e;return t(["quiere seguirte"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Error obteniendo notificaciones:",r(n(0))])}}}},9997:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{followed_you:e=>{const{normalize:t}=e;return t(["alustas sinu jälgimist"])},notifications:e=>{const{normalize:t}=e;return t(["Teated"])},read:e=>{const{normalize:t}=e;return t(["Loe!"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reageeris ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["kolis"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Rohkem teateid ei ole"])},repeated_you:e=>{const{normalize:t}=e;return t(["taaspostitas su staatuse"])},load_older:e=>{const{normalize:t}=e;return t(["Laadi vanemad teated"])},follow_request:e=>{const{normalize:t}=e;return t(["soovib Teid jälgida"])},favorited_you:e=>{const{normalize:t}=e;return t(["lisas su staatuse lemmikuks"])},broken_favorite:e=>{const{normalize:t}=e;return t(["Tundmatu staatus, otsin…"])}}}},9975:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Egoera ezezaguna, bilatzen…"])},favorited_you:e=>{const{normalize:t}=e;return t(["zure mezua gogoko du"])},followed_you:e=>{const{normalize:t}=e;return t(["Zu jarraitzen zaitu"])},load_older:e=>{const{normalize:t}=e;return t(["Kargatu jakinarazpen zaharragoak"])},notifications:e=>{const{normalize:t}=e;return t(["Jakinarazpenak"])},read:e=>{const{normalize:t}=e;return t(["Irakurrita!"])},repeated_you:e=>{const{normalize:t}=e;return t(["zure mezua errepikatu du"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Ez dago jakinarazpen gehiago"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t([r(n(0)),"kin erreakzionatu zuen"])},migrated_to:e=>{const{normalize:t}=e;return t(["hona migratua:"])},follow_request:e=>{const{normalize:t}=e;return t(["jarraitu nahi zaitu"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Errorea jakinarazpenak eskuratzean: ",r(n(0))])}}}},9923:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Viestiä ei löydetty…"])},favorited_you:e=>{const{normalize:t}=e;return t(["tykkäsi viestistäsi"])},followed_you:e=>{const{normalize:t}=e;return t(["seuraa sinua"])},load_older:e=>{const{normalize:t}=e;return t(["Lataa vanhempia ilmoituksia"])},notifications:e=>{const{normalize:t}=e;return t(["Ilmoitukset"])},read:e=>{const{normalize:t}=e;return t(["Lue!"])},repeated_you:e=>{const{normalize:t}=e;return t(["toisti viestisi"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Ei enempää ilmoituksia"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["lisäsi reaktion ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["siirtyi sivulle"])},follow_request:e=>{const{normalize:t}=e;return t(["haluaa seurata sinua"])}}}},8375:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Message inconnu, recherche en cours…"])},favorited_you:e=>{const{normalize:t}=e;return t(["a aimé votre statut"])},followed_you:e=>{const{normalize:t}=e;return t(["vous suit"])},load_older:e=>{const{normalize:t}=e;return t(["Charger les notifications précédentes"])},notifications:e=>{const{normalize:t}=e;return t(["Notifications"])},read:e=>{const{normalize:t}=e;return t(["Lu !"])},repeated_you:e=>{const{normalize:t}=e;return t(["a partagé votre statut"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Aucune notification supplémentaire"])},migrated_to:e=>{const{normalize:t}=e;return t(["a migré à"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["a réagi avec ",r(n(0))])},follow_request:e=>{const{normalize:t}=e;return t(["veut vous suivre"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Erreur de chargement des notifications : ",r(n(0))])},poll_ended:e=>{const{normalize:t}=e;return t(["Sondage terminé"])},submitted_report:e=>{const{normalize:t}=e;return t(["Rapport envoyé"])}}}},1746:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Post anaithnid. Cuardach dó…"])},favorited_you:e=>{const{normalize:t}=e;return t(["toghadh le do phost"])},followed_you:e=>{const{normalize:t}=e;return t(["lean tú"])},load_older:e=>{const{normalize:t}=e;return t(["Luchtaigh fógraí aosta"])},notifications:e=>{const{normalize:t}=e;return t(["Fógraí"])},read:e=>{const{normalize:t}=e;return t(["Léigh!"])},repeated_you:e=>{const{normalize:t}=e;return t(["athphostáil tú"])}}}},9369:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["סטאטוס לא ידוע, מחפש…"])},favorited_you:e=>{const{normalize:t}=e;return t(["אהב את הסטטוס שלך"])},followed_you:e=>{const{normalize:t}=e;return t(["עקב אחריך"])},load_older:e=>{const{normalize:t}=e;return t(["טען התראות ישנות"])},notifications:e=>{const{normalize:t}=e;return t(["התראות"])},read:e=>{const{normalize:t}=e;return t(["קרא!"])},repeated_you:e=>{const{normalize:t}=e;return t(["חזר על הסטטוס שלך"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["לא עוד התראות"])}}}},377:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{followed_you:e=>{const{normalize:t}=e;return t(["követ téged"])},notifications:e=>{const{normalize:t}=e;return t(["Értesítések"])},read:e=>{const{normalize:t}=e;return t(["Olvasva!"])}}}},6710:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{followed_you:e=>{const{normalize:t}=e;return t(["ti segue"])},notifications:e=>{const{normalize:t}=e;return t(["Notifiche"])},read:e=>{const{normalize:t}=e;return t(["Letto!"])},broken_favorite:e=>{const{normalize:t}=e;return t(["Stato sconosciuto, lo sto cercando…"])},favorited_you:e=>{const{normalize:t}=e;return t(["ha gradito"])},load_older:e=>{const{normalize:t}=e;return t(["Carica notifiche precedenti"])},repeated_you:e=>{const{normalize:t}=e;return t(["ha condiviso il tuo messaggio"])},follow_request:e=>{const{normalize:t}=e;return t(["vuole seguirti"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Fine delle notifiche"])},migrated_to:e=>{const{normalize:t}=e;return t(["è migrato verso"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["ha reagito con ",r(n(0))])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Errore nel caricare le notifiche: ",r(n(0))])}}}},6534:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["ステータスがみつかりません。さがしています…"])},favorited_you:e=>{const{normalize:t}=e;return t(["あなたのステータスがおきにいりされました"])},followed_you:e=>{const{normalize:t}=e;return t(["フォローされました"])},load_older:e=>{const{normalize:t}=e;return t(["ふるいつうちをみる"])},notifications:e=>{const{normalize:t}=e;return t(["つうち"])},read:e=>{const{normalize:t}=e;return t(["よんだ!"])},repeated_you:e=>{const{normalize:t}=e;return t(["あなたのステータスがリピートされました"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["つうちはありません"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["つうちをとりにいくことに、しっぱいしました: ",r(n(0))])},follow_request:e=>{const{normalize:t}=e;return t(["あなたをフォローしたいです"])},migrated_to:e=>{const{normalize:t}=e;return t(["インスタンスを、ひっこしました"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t([r(n(0))," でリアクションしました"])},poll_ended:e=>{const{normalize:t}=e;return t(["とうひょうが、おわりました"])},submitted_report:e=>{const{normalize:t}=e;return t(["つうほうしました"])}}}},333:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["ステータスが見つかりません。探しています…"])},favorited_you:e=>{const{normalize:t}=e;return t(["あなたのステータスがお気に入りされました"])},followed_you:e=>{const{normalize:t}=e;return t(["フォローされました"])},load_older:e=>{const{normalize:t}=e;return t(["古い通知をみる"])},notifications:e=>{const{normalize:t}=e;return t(["通知"])},read:e=>{const{normalize:t}=e;return t(["読んだ!"])},repeated_you:e=>{const{normalize:t}=e;return t(["あなたのステータスがリピートされました"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["通知はありません"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t([r(n(0))," でリアクションしました"])},migrated_to:e=>{const{normalize:t}=e;return t(["インスタンスを引っ越しました"])},follow_request:e=>{const{normalize:t}=e;return t(["あなたをフォローしたいです"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["通知の取得に失敗しました: ",r(n(0))])}}}},7379:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["알 수 없는 게시물입니다, 검색합니다…"])},favorited_you:e=>{const{normalize:t}=e;return t(["관심을 가짐"])},followed_you:e=>{const{normalize:t}=e;return t(["팔로우함"])},load_older:e=>{const{normalize:t}=e;return t(["이전 알림 불러오기"])},notifications:e=>{const{normalize:t}=e;return t(["알림"])},read:e=>{const{normalize:t}=e;return t(["읽음!"])},repeated_you:e=>{const{normalize:t}=e;return t(["리핏함"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["알림이 없습니다"])},migrated_to:e=>{const{normalize:t}=e;return t(["이사했습니다"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t([r(n(0))," 로 반응했습니다"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["알림 불러오기 실패: ",r(n(0))])},follow_request:e=>{const{normalize:t}=e;return t(["팔로우 요청"])},submitted_report:e=>{const{normalize:t}=e;return t(["신고 내용을 전송함"])},poll_ended:e=>{const{normalize:t}=e;return t(["투표가 끝남"])}}}},8103:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Ukjent status, leter etter den…"])},favorited_you:e=>{const{normalize:t}=e;return t(["likte din status"])},followed_you:e=>{const{normalize:t}=e;return t(["fulgte deg"])},load_older:e=>{const{normalize:t}=e;return t(["Last eldre varsler"])},notifications:e=>{const{normalize:t}=e;return t(["Varslinger"])},read:e=>{const{normalize:t}=e;return t(["Les!"])},repeated_you:e=>{const{normalize:t}=e;return t(["Gjentok din status"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Ingen gjenstående varsler"])},follow_request:e=>{const{normalize:t}=e;return t(["ønsker å følge deg"])}}}},728:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Onbekend bericht, aan het zoeken…"])},favorited_you:e=>{const{normalize:t}=e;return t(["vond je bericht leuk"])},followed_you:e=>{const{normalize:t}=e;return t(["volgt jou"])},load_older:e=>{const{normalize:t}=e;return t(["Oudere meldingen laden"])},notifications:e=>{const{normalize:t}=e;return t(["Meldingen"])},read:e=>{const{normalize:t}=e;return t(["Gelezen!"])},repeated_you:e=>{const{normalize:t}=e;return t(["herhaalde je bericht"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Geen meldingen meer"])},migrated_to:e=>{const{normalize:t}=e;return t(["is gemigreerd naar"])},follow_request:e=>{const{normalize:t}=e;return t(["wil je volgen"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reageerde met ",r(n(0))])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Fout bij ophalen van meldingen: ",r(n(0))])},poll_ended:e=>{const{normalize:t}=e;return t(["peiling is beëindigd"])}}}},3932:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Estatut desconegut, sèm a lo cercar..."])},favorited_you:e=>{const{normalize:t}=e;return t(["a aimat vòstre estatut"])},followed_you:e=>{const{normalize:t}=e;return t(["vos a seguit"])},load_older:e=>{const{normalize:t}=e;return t(["Cargar las notificacions mai ancianas"])},notifications:e=>{const{normalize:t}=e;return t(["Notficacions"])},read:e=>{const{normalize:t}=e;return t(["Legit !"])},repeated_you:e=>{const{normalize:t}=e;return t(["a repetit vòstre estatut"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Pas mai de notificacions"])}}}},7028:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Nieznany status, szukam go…"])},favorited_you:e=>{const{normalize:t}=e;return t(["dodał(-a) twój status do ulubionych"])},followed_you:e=>{const{normalize:t}=e;return t(["obserwuje cię"])},load_older:e=>{const{normalize:t}=e;return t(["Załaduj starsze powiadomienia"])},notifications:e=>{const{normalize:t}=e;return t(["Powiadomienia"])},read:e=>{const{normalize:t}=e;return t(["Przeczytane!"])},repeated_you:e=>{const{normalize:t}=e;return t(["powtórzył(-a) twój status"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Nie masz więcej powiadomień"])},migrated_to:e=>{const{normalize:t}=e;return t(["wyemigrował do"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["zareagował z ",r(n(0))])},follow_request:e=>{const{normalize:t}=e;return t(["chce ciebie obserwować"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Błąd pobierania powiadomień: ",r(n(0))])}}}},789:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Publicação desconhecida, a procurar…"])},favorited_you:e=>{const{normalize:t}=e;return t(["gostou do teu post"])},followed_you:e=>{const{normalize:t}=e;return t(["seguiu-te"])},load_older:e=>{const{normalize:t}=e;return t(["Carregar notificações antigas"])},notifications:e=>{const{normalize:t}=e;return t(["Notificações"])},read:e=>{const{normalize:t}=e;return t(["Lido!"])},repeated_you:e=>{const{normalize:t}=e;return t(["partilhou o teu post"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Sem mais notificações"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reagiu com ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["migrou para"])},follow_request:e=>{const{normalize:t}=e;return t(["quer seguir-te"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Erro ao obter notificações: ",r(n(0))])}}}},5032:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{followed_you:e=>{const{normalize:t}=e;return t(["te-a urmărit"])},notifications:e=>{const{normalize:t}=e;return t(["Notificări"])},read:e=>{const{normalize:t}=e;return t(["Citit!"])}}}},3460:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Неизвестный статус, ищем…"])},favorited_you:e=>{const{normalize:t}=e;return t(["нравится ваш статус"])},followed_you:e=>{const{normalize:t}=e;return t(["начал(а) читать вас"])},load_older:e=>{const{normalize:t}=e;return t(["Загрузить старые уведомления"])},notifications:e=>{const{normalize:t}=e;return t(["Уведомления"])},read:e=>{const{normalize:t}=e;return t(["Прочесть"])},repeated_you:e=>{const{normalize:t}=e;return t(["повторил(а) ваш статус"])},follow_request:e=>{const{normalize:t}=e;return t(["хочет читать вас"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["добавил(а) реакцию: ",r(n(0))])},migrated_to:e=>{const{normalize:t}=e;return t(["перехал на"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Нет дальнейших уведомлений"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Ошибка при обновлении уведомлений: ",r(n(0))])}}}},6139:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["Neznáma správa, dohľadávam ju…"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["Chyba získavania upozornení: ",r(n(0))])},favorited_you:e=>{const{normalize:t}=e;return t(["si obľúbil tvoju správu"])},followed_you:e=>{const{normalize:t}=e;return t(["ťa nasleduje"])},follow_request:e=>{const{normalize:t}=e;return t(["ťa chce nasledovať"])},load_older:e=>{const{normalize:t}=e;return t(["Nahrať staršie upozornenia"])},notifications:e=>{const{normalize:t}=e;return t(["Upozornenia"])},read:e=>{const{normalize:t}=e;return t(["Prečítané!"])},repeated_you:e=>{const{normalize:t}=e;return t(["zopakoval tvoju správu"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["Žiadne ďalšie upozornenia"])},migrated_to:e=>{const{normalize:t}=e;return t(["sa presťahoval na"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["reagoval nasledovne ",r(n(0))])}}}},5751:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{}}},4389:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={notifications:{broken_favorite:e=>{const{normalize:t}=e;return t(["未知的状态,正在搜索中…"])},favorited_you:e=>{const{normalize:t}=e;return t(["喜欢了你的状态"])},followed_you:e=>{const{normalize:t}=e;return t(["关注了你"])},load_older:e=>{const{normalize:t}=e;return t(["加载更早的通知"])},notifications:e=>{const{normalize:t}=e;return t(["通知"])},read:e=>{const{normalize:t}=e;return t(["已阅!"])},repeated_you:e=>{const{normalize:t}=e;return t(["转发了你的状态"])},no_more_notifications:e=>{const{normalize:t}=e;return t(["没有更多的通知"])},reacted_with:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["作出了 ",r(n(0))," 的反应"])},migrated_to:e=>{const{normalize:t}=e;return t(["迁移到了"])},follow_request:e=>{const{normalize:t}=e;return t(["想要关注你"])},error:e=>{const{normalize:t,interpolate:r,list:n}=e;return t(["取得通知时发生错误:",r(n(0))])},poll_ended:e=>{const{normalize:t}=e;return t(["投票结束了"])},submitted_report:e=>{const{normalize:t}=e;return t(["提交举报"])}}}},5573:e=>{"use strict";var t=/["'&<>]/;e.exports=function(e){var r,n=""+e,o=t.exec(n);if(!o)return n;var a="",i=0,s=0;for(i=o.index;i<n.length;i++){switch(n.charCodeAt(i)){case 34:r="&quot;";break;case 38:r="&amp;";break;case 39:r="&#39;";break;case 60:r="&lt;";break;case 62:r="&gt;";break;default:continue}s!==i&&(a+=n.substring(s,i)),s=i+1,a+=r}return s!==i?a+n.substring(s,i):a}},9483:function(e,t){!function(r){"object"==typeof t&&void 0!==e?e.exports=r():"function"==typeof define&&define.amd?define([],r):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).localforage=r()}((function(){return function e(t,r,n){function o(i,s){if(!r[i]){if(!t[i]){var l="function"==typeof require&&require;if(!s&&l)return l(i,!0);if(a)return a(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[i]={exports:{}};t[i][0].call(u.exports,(function(e){return o(t[i][1][e]||e)}),u,u.exports,e,t,r,n)}return r[i].exports}for(var a="function"==typeof require&&require,i=0;i<n.length;i++)o(n[i]);return o}({1:[function(e,t,r){(function(e){"use strict";var r,n,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var a=0,i=new o(u),s=e.document.createTextNode("");i.observe(s,{characterData:!0}),r=function(){s.data=a=++a%2}}else if(e.setImmediate||void 0===e.MessageChannel)r="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var l=new e.MessageChannel;l.port1.onmessage=u,r=function(){l.port2.postMessage(0)}}var c=[];function u(){var e,t;n=!0;for(var r=c.length;r;){for(t=c,c=[],e=-1;++e<r;)t[e]();r=c.length}n=!1}t.exports=function(e){1!==c.push(e)||n||r()}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,r){"use strict";var n=e(1);function o(){}var a={},i=["REJECTED"],s=["FULFILLED"],l=["PENDING"];function c(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=l,this.queue=[],this.outcome=void 0,e!==o&&d(this,e)}function u(e,t,r){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(e,t,r){n((function(){var n;try{n=t(r)}catch(t){return a.reject(e,t)}n===e?a.reject(e,new TypeError("Cannot resolve promise with itself")):a.resolve(e,n)}))}function p(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function d(e,t){var r=!1;function n(t){r||(r=!0,a.reject(e,t))}function o(t){r||(r=!0,a.resolve(e,t))}var i=m((function(){t(o,n)}));"error"===i.status&&n(i.value)}function m(e,t){var r={};try{r.value=e(t),r.status="success"}catch(e){r.status="error",r.value=e}return r}t.exports=c,c.prototype.catch=function(e){return this.then(null,e)},c.prototype.then=function(e,t){if("function"!=typeof e&&this.state===s||"function"!=typeof t&&this.state===i)return this;var r=new this.constructor(o);return this.state!==l?f(r,this.state===s?e:t,this.outcome):this.queue.push(new u(r,e,t)),r},u.prototype.callFulfilled=function(e){a.resolve(this.promise,e)},u.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},u.prototype.callRejected=function(e){a.reject(this.promise,e)},u.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},a.resolve=function(e,t){var r=m(p,t);if("error"===r.status)return a.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=s,e.outcome=t;for(var o=-1,i=e.queue.length;++o<i;)e.queue[o].callFulfilled(t)}return e},a.reject=function(e,t){e.state=i,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},c.resolve=function(e){return e instanceof this?e:a.resolve(new this(o),e)},c.reject=function(e){var t=new this(o);return a.reject(t,e)},c.all=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var r=e.length,n=!1;if(!r)return this.resolve([]);for(var i=new Array(r),s=0,l=-1,c=new this(o);++l<r;)u(e[l],l);return c;function u(e,o){t.resolve(e).then((function(e){i[o]=e,++s!==r||n||(n=!0,a.resolve(c,i))}),(function(e){n||(n=!0,a.reject(c,e))}))}},c.race=function(e){if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var t=e.length,r=!1;if(!t)return this.resolve([]);for(var n,i=-1,s=new this(o);++i<t;)n=e[i],this.resolve(n).then((function(e){r||(r=!0,a.resolve(s,e))}),(function(e){r||(r=!0,a.reject(s,e))}));return s}},{1:1}],3:[function(e,t,r){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(2))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(e){return}}();function a(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(o){if("TypeError"!==o.name)throw o;for(var r=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),n=0;n<e.length;n+=1)r.append(e[n]);return r.getBlob(t.type)}}"undefined"==typeof Promise&&e(3);var i=Promise;function s(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))}function l(e,t,r){"function"==typeof t&&e.then(t),"function"==typeof r&&e.catch(r)}function c(e){return"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e)),e}function u(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var f="local-forage-detect-blob-support",p=void 0,d={},m=Object.prototype.toString,h="readonly",_="readwrite";function v(e){var t=d[e.name],r={};r.promise=new i((function(e,t){r.resolve=e,r.reject=t})),t.deferredOperations.push(r),t.dbReady?t.dbReady=t.dbReady.then((function(){return r.promise})):t.dbReady=r.promise}function g(e){var t=d[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function y(e,t){var r=d[e.name].deferredOperations.pop();if(r)return r.reject(t),r.promise}function b(e,t){return new i((function(r,n){if(d[e.name]=d[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return r(e.db);v(e),e.db.close()}var a=[e.name];t&&a.push(e.version);var i=o.open.apply(o,a);t&&(i.onupgradeneeded=function(t){var r=i.result;try{r.createObjectStore(e.storeName),t.oldVersion<=1&&r.createObjectStore(f)}catch(r){if("ConstraintError"!==r.name)throw r;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),i.onerror=function(e){e.preventDefault(),n(i.error)},i.onsuccess=function(){var t=i.result;t.onversionchange=function(e){e.target.close()},r(t),g(e)}}))}function w(e){return b(e,!1)}function x(e){return b(e,!0)}function z(e,t){if(!e.db)return!0;var r=!e.db.objectStoreNames.contains(e.storeName),n=e.version<e.db.version,o=e.version>e.db.version;if(n&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),o||r){if(r){var a=e.db.version+1;a>e.version&&(e.version=a)}return!0}return!1}function k(e){return a([function(e){for(var t=e.length,r=new ArrayBuffer(t),n=new Uint8Array(r),o=0;o<t;o++)n[o]=e.charCodeAt(o);return r}(atob(e.data))],{type:e.type})}function O(e){return e&&e.__local_forage_encoded_blob}function j(e){var t=this,r=t._initReady().then((function(){var e=d[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return l(r,e,e),r}function E(e,t,r,n){void 0===n&&(n=1);try{var o=e.db.transaction(e.storeName,t);r(null,o)}catch(o){if(n>0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return i.resolve().then((function(){if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),x(e)})).then((function(){return function(e){v(e);for(var t=d[e.name],r=t.forages,n=0;n<r.length;n++){var o=r[n];o._dbInfo.db&&(o._dbInfo.db.close(),o._dbInfo.db=null)}return e.db=null,w(e).then((function(t){return e.db=t,z(e)?x(e):t})).then((function(n){e.db=t.db=n;for(var o=0;o<r.length;o++)r[o]._dbInfo.db=n})).catch((function(t){throw y(e,t),t}))}(e).then((function(){E(e,t,r,n-1)}))})).catch(r);r(o)}}var I={_driver:"asyncStorage",_initStorage:function(e){var t=this,r={db:null};if(e)for(var n in e)r[n]=e[n];var o=d[r.name];o||(o={forages:[],db:null,dbReady:null,deferredOperations:[]},d[r.name]=o),o.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=j);var a=[];function s(){return i.resolve()}for(var l=0;l<o.forages.length;l++){var c=o.forages[l];c!==t&&a.push(c._initReady().catch(s))}var u=o.forages.slice(0);return i.all(a).then((function(){return r.db=o.db,w(r)})).then((function(e){return r.db=e,z(r,t._defaultConfig.version)?x(r):e})).then((function(e){r.db=o.db=e,t._dbInfo=r;for(var n=0;n<u.length;n++){var a=u[n];a!==t&&(a._dbInfo.db=r.db,a._dbInfo.version=r.version)}}))},_support:function(){try{if(!o||!o.open)return!1;var e="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),t="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!e||t)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}}(),iterate:function(e,t){var r=this,n=new i((function(t,n){r.ready().then((function(){E(r._dbInfo,h,(function(o,a){if(o)return n(o);try{var i=a.objectStore(r._dbInfo.storeName).openCursor(),s=1;i.onsuccess=function(){var r=i.result;if(r){var n=r.value;O(n)&&(n=k(n));var o=e(n,r.key,s++);void 0!==o?t(o):r.continue()}else t()},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return s(n,t),n},getItem:function(e,t){var r=this;e=c(e);var n=new i((function(t,n){r.ready().then((function(){E(r._dbInfo,h,(function(o,a){if(o)return n(o);try{var i=a.objectStore(r._dbInfo.storeName).get(e);i.onsuccess=function(){var e=i.result;void 0===e&&(e=null),O(e)&&(e=k(e)),t(e)},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return s(n,t),n},setItem:function(e,t,r){var n=this;e=c(e);var o=new i((function(r,o){var s;n.ready().then((function(){return s=n._dbInfo,"[object Blob]"===m.call(t)?function(e){return"boolean"==typeof p?i.resolve(p):function(e){return new i((function(t){var r=e.transaction(f,_),n=a([""]);r.objectStore(f).put(n,"key"),r.onabort=function(e){e.preventDefault(),e.stopPropagation(),t(!1)},r.oncomplete=function(){var e=navigator.userAgent.match(/Chrome\/(\d+)/),r=navigator.userAgent.match(/Edge\//);t(r||!e||parseInt(e[1],10)>=43)}})).catch((function(){return!1}))}(e).then((function(e){return p=e}))}(s.db).then((function(e){return e?t:(r=t,new i((function(e,t){var n=new FileReader;n.onerror=t,n.onloadend=function(t){var n=btoa(t.target.result||"");e({__local_forage_encoded_blob:!0,data:n,type:r.type})},n.readAsBinaryString(r)})));var r})):t})).then((function(t){E(n._dbInfo,_,(function(a,i){if(a)return o(a);try{var s=i.objectStore(n._dbInfo.storeName);null===t&&(t=void 0);var l=s.put(t,e);i.oncomplete=function(){void 0===t&&(t=null),r(t)},i.onabort=i.onerror=function(){var e=l.error?l.error:l.transaction.error;o(e)}}catch(e){o(e)}}))})).catch(o)}));return s(o,r),o},removeItem:function(e,t){var r=this;e=c(e);var n=new i((function(t,n){r.ready().then((function(){E(r._dbInfo,_,(function(o,a){if(o)return n(o);try{var i=a.objectStore(r._dbInfo.storeName).delete(e);a.oncomplete=function(){t()},a.onerror=function(){n(i.error)},a.onabort=function(){var e=i.error?i.error:i.transaction.error;n(e)}}catch(e){n(e)}}))})).catch(n)}));return s(n,t),n},clear:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){E(t._dbInfo,_,(function(n,o){if(n)return r(n);try{var a=o.objectStore(t._dbInfo.storeName).clear();o.oncomplete=function(){e()},o.onabort=o.onerror=function(){var e=a.error?a.error:a.transaction.error;r(e)}}catch(e){r(e)}}))})).catch(r)}));return s(r,e),r},length:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){E(t._dbInfo,h,(function(n,o){if(n)return r(n);try{var a=o.objectStore(t._dbInfo.storeName).count();a.onsuccess=function(){e(a.result)},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return s(r,e),r},key:function(e,t){var r=this,n=new i((function(t,n){e<0?t(null):r.ready().then((function(){E(r._dbInfo,h,(function(o,a){if(o)return n(o);try{var i=a.objectStore(r._dbInfo.storeName),s=!1,l=i.openKeyCursor();l.onsuccess=function(){var r=l.result;r?0===e||s?t(r.key):(s=!0,r.advance(e)):t(null)},l.onerror=function(){n(l.error)}}catch(e){n(e)}}))})).catch(n)}));return s(n,t),n},keys:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){E(t._dbInfo,h,(function(n,o){if(n)return r(n);try{var a=o.objectStore(t._dbInfo.storeName).openKeyCursor(),i=[];a.onsuccess=function(){var t=a.result;t?(i.push(t.key),t.continue()):e(i)},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return s(r,e),r},dropInstance:function(e,t){t=u.apply(this,arguments);var r=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||r.name,e.storeName=e.storeName||r.storeName);var n,a=this;if(e.name){var l=e.name===r.name&&a._dbInfo.db,c=l?i.resolve(a._dbInfo.db):w(e).then((function(t){var r=d[e.name],n=r.forages;r.db=t;for(var o=0;o<n.length;o++)n[o]._dbInfo.db=t;return t}));n=e.storeName?c.then((function(t){if(t.objectStoreNames.contains(e.storeName)){var r=t.version+1;v(e);var n=d[e.name],a=n.forages;t.close();for(var s=0;s<a.length;s++){var l=a[s];l._dbInfo.db=null,l._dbInfo.version=r}var c=new i((function(t,n){var a=o.open(e.name,r);a.onerror=function(e){a.result.close(),n(e)},a.onupgradeneeded=function(){a.result.deleteObjectStore(e.storeName)},a.onsuccess=function(){var e=a.result;e.close(),t(e)}}));return c.then((function(e){n.db=e;for(var t=0;t<a.length;t++){var r=a[t];r._dbInfo.db=e,g(r._dbInfo)}})).catch((function(t){throw(y(e,t)||i.resolve()).catch((function(){})),t}))}})):c.then((function(t){v(e);var r=d[e.name],n=r.forages;t.close();for(var a=0;a<n.length;a++)n[a]._dbInfo.db=null;var s=new i((function(t,r){var n=o.deleteDatabase(e.name);n.onerror=function(){var e=n.result;e&&e.close(),r(n.error)},n.onblocked=function(){console.warn('dropInstance blocked for database "'+e.name+'" until all open connections are closed')},n.onsuccess=function(){var e=n.result;e&&e.close(),t(e)}}));return s.then((function(e){r.db=e;for(var t=0;t<n.length;t++)g(n[t]._dbInfo)})).catch((function(t){throw(y(e,t)||i.resolve()).catch((function(){})),t}))}))}else n=i.reject("Invalid arguments");return s(n,t),n}},S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",N=/^~~local_forage_type~([^~]+)~/,L="__lfsc__:",R=L.length,F="arbf",A="blob",T="si08",C="ui08",P="uic8",D="si16",M="si32",W="ur16",U="ui32",$="fl32",q="fl64",V=R+F.length,B=Object.prototype.toString;function H(e){var t,r,n,o,a,i=.75*e.length,s=e.length,l=0;"="===e[e.length-1]&&(i--,"="===e[e.length-2]&&i--);var c=new ArrayBuffer(i),u=new Uint8Array(c);for(t=0;t<s;t+=4)r=S.indexOf(e[t]),n=S.indexOf(e[t+1]),o=S.indexOf(e[t+2]),a=S.indexOf(e[t+3]),u[l++]=r<<2|n>>4,u[l++]=(15&n)<<4|o>>2,u[l++]=(3&o)<<6|63&a;return c}function G(e){var t,r=new Uint8Array(e),n="";for(t=0;t<r.length;t+=3)n+=S[r[t]>>2],n+=S[(3&r[t])<<4|r[t+1]>>4],n+=S[(15&r[t+1])<<2|r[t+2]>>6],n+=S[63&r[t+2]];return r.length%3==2?n=n.substring(0,n.length-1)+"=":r.length%3==1&&(n=n.substring(0,n.length-2)+"=="),n}var Y={serialize:function(e,t){var r="";if(e&&(r=B.call(e)),e&&("[object ArrayBuffer]"===r||e.buffer&&"[object ArrayBuffer]"===B.call(e.buffer))){var n,o=L;e instanceof ArrayBuffer?(n=e,o+=F):(n=e.buffer,"[object Int8Array]"===r?o+=T:"[object Uint8Array]"===r?o+=C:"[object Uint8ClampedArray]"===r?o+=P:"[object Int16Array]"===r?o+=D:"[object Uint16Array]"===r?o+=W:"[object Int32Array]"===r?o+=M:"[object Uint32Array]"===r?o+=U:"[object Float32Array]"===r?o+=$:"[object Float64Array]"===r?o+=q:t(new Error("Failed to get type for BinaryArray"))),t(o+G(n))}else if("[object Blob]"===r){var a=new FileReader;a.onload=function(){var r="~~local_forage_type~"+e.type+"~"+G(this.result);t("__lfsc__:blob"+r)},a.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(r){console.error("Couldn't convert value into a JSON string: ",e),t(null,r)}},deserialize:function(e){if(e.substring(0,R)!==L)return JSON.parse(e);var t,r=e.substring(V),n=e.substring(R,V);if(n===A&&N.test(r)){var o=r.match(N);t=o[1],r=r.substring(o[0].length)}var i=H(r);switch(n){case F:return i;case A:return a([i],{type:t});case T:return new Int8Array(i);case C:return new Uint8Array(i);case P:return new Uint8ClampedArray(i);case D:return new Int16Array(i);case W:return new Uint16Array(i);case M:return new Int32Array(i);case U:return new Uint32Array(i);case $:return new Float32Array(i);case q:return new Float64Array(i);default:throw new Error("Unkown type: "+n)}},stringToBuffer:H,bufferToString:G};function X(e,t,r,n){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],r,n)}function K(e,t,r,n,o,a){e.executeSql(r,n,o,(function(e,i){i.code===i.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,s){s.rows.length?a(e,i):X(e,t,(function(){e.executeSql(r,n,o,a)}),a)}),a):a(e,i)}),a)}function J(e,t,r,n){var o=this;e=c(e);var a=new i((function(a,i){o.ready().then((function(){void 0===t&&(t=null);var s=t,l=o._dbInfo;l.serializer.serialize(t,(function(t,c){c?i(c):l.db.transaction((function(r){K(r,l,"INSERT OR REPLACE INTO "+l.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){a(s)}),(function(e,t){i(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(n>0)return void a(J.apply(o,[e,s,r,n-1]));i(t)}}))}))})).catch(i)}));return s(a,r),a}function Q(e){return new i((function(t,r){e.transaction((function(n){n.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(r,n){for(var o=[],a=0;a<n.rows.length;a++)o.push(n.rows.item(a).name);t({db:e,storeNames:o})}),(function(e,t){r(t)}))}),(function(e){r(e)}))}))}var Z={_driver:"webSQLStorage",_initStorage:function(e){var t=this,r={db:null};if(e)for(var n in e)r[n]="string"!=typeof e[n]?e[n].toString():e[n];var o=new i((function(e,n){try{r.db=openDatabase(r.name,String(r.version),r.description,r.size)}catch(e){return n(e)}r.db.transaction((function(o){X(o,r,(function(){t._dbInfo=r,e()}),(function(e,t){n(t)}))}),n)}));return r.serializer=Y,o},_support:"function"==typeof openDatabase,iterate:function(e,t){var r=this,n=new i((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){K(r,o,"SELECT * FROM "+o.storeName,[],(function(r,n){for(var a=n.rows,i=a.length,s=0;s<i;s++){var l=a.item(s),c=l.value;if(c&&(c=o.serializer.deserialize(c)),void 0!==(c=e(c,l.key,s+1)))return void t(c)}t()}),(function(e,t){n(t)}))}))})).catch(n)}));return s(n,t),n},getItem:function(e,t){var r=this;e=c(e);var n=new i((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){K(r,o,"SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,r){var n=r.rows.length?r.rows.item(0).value:null;n&&(n=o.serializer.deserialize(n)),t(n)}),(function(e,t){n(t)}))}))})).catch(n)}));return s(n,t),n},setItem:function(e,t,r){return J.apply(this,[e,t,r,1])},removeItem:function(e,t){var r=this;e=c(e);var n=new i((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){K(r,o,"DELETE FROM "+o.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){n(t)}))}))})).catch(n)}));return s(n,t),n},clear:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){K(t,n,"DELETE FROM "+n.storeName,[],(function(){e()}),(function(e,t){r(t)}))}))})).catch(r)}));return s(r,e),r},length:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){K(t,n,"SELECT COUNT(key) as c FROM "+n.storeName,[],(function(t,r){var n=r.rows.item(0).c;e(n)}),(function(e,t){r(t)}))}))})).catch(r)}));return s(r,e),r},key:function(e,t){var r=this,n=new i((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){K(r,o,"SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,r){var n=r.rows.length?r.rows.item(0).key:null;t(n)}),(function(e,t){n(t)}))}))})).catch(n)}));return s(n,t),n},keys:function(e){var t=this,r=new i((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){K(t,n,"SELECT key FROM "+n.storeName,[],(function(t,r){for(var n=[],o=0;o<r.rows.length;o++)n.push(r.rows.item(o).key);e(n)}),(function(e,t){r(t)}))}))})).catch(r)}));return s(r,e),r},dropInstance:function(e,t){t=u.apply(this,arguments);var r=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||r.name,e.storeName=e.storeName||r.storeName);var n,o=this;return s(n=e.name?new i((function(t){var n;n=e.name===r.name?o._dbInfo.db:openDatabase(e.name,"","",0),e.storeName?t({db:n,storeNames:[e.storeName]}):t(Q(n))})).then((function(e){return new i((function(t,r){e.db.transaction((function(n){function o(e){return new i((function(t,r){n.executeSql("DROP TABLE IF EXISTS "+e,[],(function(){t()}),(function(e,t){r(t)}))}))}for(var a=[],s=0,l=e.storeNames.length;s<l;s++)a.push(o(e.storeNames[s]));i.all(a).then((function(){t()})).catch((function(e){r(e)}))}),(function(e){r(e)}))}))})):i.reject("Invalid arguments"),t),n}};function ee(e,t){var r=e.name+"/";return e.storeName!==t.storeName&&(r+=e.storeName+"/"),r}var te={_driver:"localStorageWrapper",_initStorage:function(e){var t={};if(e)for(var r in e)t[r]=e[r];return t.keyPrefix=ee(e,this._defaultConfig),!function(){var e="_localforage_support_test";try{return localStorage.setItem(e,!0),localStorage.removeItem(e),!1}catch(e){return!0}}()||localStorage.length>0?(this._dbInfo=t,t.serializer=Y,i.resolve()):i.reject()},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,t){var r=this,n=r.ready().then((function(){for(var t=r._dbInfo,n=t.keyPrefix,o=n.length,a=localStorage.length,i=1,s=0;s<a;s++){var l=localStorage.key(s);if(0===l.indexOf(n)){var c=localStorage.getItem(l);if(c&&(c=t.serializer.deserialize(c)),void 0!==(c=e(c,l.substring(o),i++)))return c}}}));return s(n,t),n},getItem:function(e,t){var r=this;e=c(e);var n=r.ready().then((function(){var t=r._dbInfo,n=localStorage.getItem(t.keyPrefix+e);return n&&(n=t.serializer.deserialize(n)),n}));return s(n,t),n},setItem:function(e,t,r){var n=this;e=c(e);var o=n.ready().then((function(){void 0===t&&(t=null);var r=t;return new i((function(o,a){var i=n._dbInfo;i.serializer.serialize(t,(function(t,n){if(n)a(n);else try{localStorage.setItem(i.keyPrefix+e,t),o(r)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||a(e),a(e)}}))}))}));return s(o,r),o},removeItem:function(e,t){var r=this;e=c(e);var n=r.ready().then((function(){var t=r._dbInfo;localStorage.removeItem(t.keyPrefix+e)}));return s(n,t),n},clear:function(e){var t=this,r=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,r=localStorage.length-1;r>=0;r--){var n=localStorage.key(r);0===n.indexOf(e)&&localStorage.removeItem(n)}}));return s(r,e),r},length:function(e){var t=this.keys().then((function(e){return e.length}));return s(t,e),t},key:function(e,t){var r=this,n=r.ready().then((function(){var t,n=r._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(n.keyPrefix.length)),t}));return s(n,t),n},keys:function(e){var t=this,r=t.ready().then((function(){for(var e=t._dbInfo,r=localStorage.length,n=[],o=0;o<r;o++){var a=localStorage.key(o);0===a.indexOf(e.keyPrefix)&&n.push(a.substring(e.keyPrefix.length))}return n}));return s(r,e),r},dropInstance:function(e,t){if(t=u.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){var r=this.config();e.name=e.name||r.name,e.storeName=e.storeName||r.storeName}var n,o=this;return s(n=e.name?new i((function(t){e.storeName?t(ee(e,o._defaultConfig)):t(e.name+"/")})).then((function(e){for(var t=localStorage.length-1;t>=0;t--){var r=localStorage.key(t);0===r.indexOf(e)&&localStorage.removeItem(r)}})):i.reject("Invalid arguments"),t),n}},re=function(e,t){for(var r,n,o=e.length,a=0;a<o;){if((r=e[a])===(n=t)||"number"==typeof r&&"number"==typeof n&&isNaN(r)&&isNaN(n))return!0;a++}return!1},ne=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},oe={},ae={},ie={INDEXEDDB:I,WEBSQL:Z,LOCALSTORAGE:te},se=[ie.INDEXEDDB._driver,ie.WEBSQL._driver,ie.LOCALSTORAGE._driver],le=["dropInstance"],ce=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(le),ue={description:"",driver:se.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function fe(e,t){e[t]=function(){var r=arguments;return e.ready().then((function(){return e[t].apply(e,r)}))}}function pe(){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var r in t)t.hasOwnProperty(r)&&(ne(t[r])?arguments[0][r]=t[r].slice():arguments[0][r]=t[r])}return arguments[0]}var de=function(){function e(t){for(var r in function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),ie)if(ie.hasOwnProperty(r)){var n=ie[r],o=n._driver;this[r]=o,oe[o]||this.defineDriver(n)}this._defaultConfig=pe({},ue),this._config=pe({},this._defaultConfig,t),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return e.prototype.config=function(e){if("object"===(void 0===e?"undefined":n(e))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var t in e){if("storeName"===t&&(e[t]=e[t].replace(/\W/g,"_")),"version"===t&&"number"!=typeof e[t])return new Error("Database version must be a number.");this._config[t]=e[t]}return!("driver"in e)||!e.driver||this.setDriver(this._config.driver)}return"string"==typeof e?this._config[e]:this._config},e.prototype.defineDriver=function(e,t,r){var n=new i((function(t,r){try{var n=e._driver,o=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!e._driver)return void r(o);for(var a=ce.concat("_initStorage"),l=0,c=a.length;l<c;l++){var u=a[l];if((!re(le,u)||e[u])&&"function"!=typeof e[u])return void r(o)}!function(){for(var t=function(e){return function(){var t=new Error("Method "+e+" is not implemented by the current driver"),r=i.reject(t);return s(r,arguments[arguments.length-1]),r}},r=0,n=le.length;r<n;r++){var o=le[r];e[o]||(e[o]=t(o))}}();var f=function(r){oe[n]&&console.info("Redefining LocalForage driver: "+n),oe[n]=e,ae[n]=r,t()};"_support"in e?e._support&&"function"==typeof e._support?e._support().then(f,r):f(!!e._support):f(!0)}catch(e){r(e)}}));return l(n,t,r),n},e.prototype.driver=function(){return this._driver||null},e.prototype.getDriver=function(e,t,r){var n=oe[e]?i.resolve(oe[e]):i.reject(new Error("Driver not found."));return l(n,t,r),n},e.prototype.getSerializer=function(e){var t=i.resolve(Y);return l(t,e),t},e.prototype.ready=function(e){var t=this,r=t._driverSet.then((function(){return null===t._ready&&(t._ready=t._initDriver()),t._ready}));return l(r,e,e),r},e.prototype.setDriver=function(e,t,r){var n=this;ne(e)||(e=[e]);var o=this._getSupportedDrivers(e);function a(){n._config.driver=n.driver()}function s(e){return n._extend(e),a(),n._ready=n._initStorage(n._config),n._ready}var c=null!==this._driverSet?this._driverSet.catch((function(){return i.resolve()})):i.resolve();return this._driverSet=c.then((function(){var e=o[0];return n._dbInfo=null,n._ready=null,n.getDriver(e).then((function(e){n._driver=e._driver,a(),n._wrapLibraryMethodsWithReady(),n._initDriver=function(e){return function(){var t=0;return function r(){for(;t<e.length;){var o=e[t];return t++,n._dbInfo=null,n._ready=null,n.getDriver(o).then(s).catch(r)}a();var l=new Error("No available storage method found.");return n._driverSet=i.reject(l),n._driverSet}()}}(o)}))})).catch((function(){a();var e=new Error("No available storage method found.");return n._driverSet=i.reject(e),n._driverSet})),l(this._driverSet,t,r),this._driverSet},e.prototype.supports=function(e){return!!ae[e]},e.prototype._extend=function(e){pe(this,e)},e.prototype._getSupportedDrivers=function(e){for(var t=[],r=0,n=e.length;r<n;r++){var o=e[r];this.supports(o)&&t.push(o)}return t},e.prototype._wrapLibraryMethodsWithReady=function(){for(var e=0,t=ce.length;e<t;e++)fe(this,ce[e])},e.prototype.createInstance=function(t){return new e(t)},e}(),me=new de;t.exports=me},{3:3}]},{},[4])(4)}))},8552:(e,t,r)=>{var n=r(852)(r(5639),"DataView");e.exports=n},1989:(e,t,r)=>{var n=r(1789),o=r(401),a=r(7667),i=r(1327),s=r(1866);function l(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}l.prototype.clear=n,l.prototype.delete=o,l.prototype.get=a,l.prototype.has=i,l.prototype.set=s,e.exports=l},8407:(e,t,r)=>{var n=r(7040),o=r(4125),a=r(2117),i=r(3755),s=r(4705);function l(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}l.prototype.clear=n,l.prototype.delete=o,l.prototype.get=a,l.prototype.has=i,l.prototype.set=s,e.exports=l},7071:(e,t,r)=>{var n=r(852)(r(5639),"Map");e.exports=n},3369:(e,t,r)=>{var n=r(4785),o=r(1285),a=r(6e3),i=r(9916),s=r(5265);function l(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}l.prototype.clear=n,l.prototype.delete=o,l.prototype.get=a,l.prototype.has=i,l.prototype.set=s,e.exports=l},3818:(e,t,r)=>{var n=r(852)(r(5639),"Promise");e.exports=n},8525:(e,t,r)=>{var n=r(852)(r(5639),"Set");e.exports=n},8668:(e,t,r)=>{var n=r(3369),o=r(619),a=r(2385);function i(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new n;++t<r;)this.add(e[t])}i.prototype.add=i.prototype.push=o,i.prototype.has=a,e.exports=i},6384:(e,t,r)=>{var n=r(8407),o=r(7465),a=r(3779),i=r(7599),s=r(4758),l=r(4309);function c(e){var t=this.__data__=new n(e);this.size=t.size}c.prototype.clear=o,c.prototype.delete=a,c.prototype.get=i,c.prototype.has=s,c.prototype.set=l,e.exports=c},2705:(e,t,r)=>{var n=r(5639).Symbol;e.exports=n},1149:(e,t,r)=>{var n=r(5639).Uint8Array;e.exports=n},577:(e,t,r)=>{var n=r(852)(r(5639),"WeakMap");e.exports=n},6874:e=>{e.exports=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}},4963:e=>{e.exports=function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,a=[];++r<n;){var i=e[r];t(i,r,e)&&(a[o++]=i)}return a}},4636:(e,t,r)=>{var n=r(2545),o=r(5694),a=r(1469),i=r(4144),s=r(5776),l=r(6719),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var r=a(e),u=!r&&o(e),f=!r&&!u&&i(e),p=!r&&!u&&!f&&l(e),d=r||u||f||p,m=d?n(e.length,String):[],h=m.length;for(var _ in e)!t&&!c.call(e,_)||d&&("length"==_||f&&("offset"==_||"parent"==_)||p&&("buffer"==_||"byteLength"==_||"byteOffset"==_)||s(_,h))||m.push(_);return m}},9932:e=>{e.exports=function(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}},2488:e=>{e.exports=function(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}},2908:e=>{e.exports=function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}},8470:(e,t,r)=>{var n=r(7813);e.exports=function(e,t){for(var r=e.length;r--;)if(n(e[r][0],t))return r;return-1}},9881:(e,t,r)=>{var n=r(7816),o=r(9291)(n);e.exports=o},760:(e,t,r)=>{var n=r(9881);e.exports=function(e,t){var r=[];return n(e,(function(e,n,o){t(e,n,o)&&r.push(e)})),r}},1848:e=>{e.exports=function(e,t,r,n){for(var o=e.length,a=r+(n?1:-1);n?a--:++a<o;)if(t(e[a],a,e))return a;return-1}},1078:(e,t,r)=>{var n=r(2488),o=r(7285);e.exports=function e(t,r,a,i,s){var l=-1,c=t.length;for(a||(a=o),s||(s=[]);++l<c;){var u=t[l];r>0&&a(u)?r>1?e(u,r-1,a,i,s):n(s,u):i||(s[s.length]=u)}return s}},8483:(e,t,r)=>{var n=r(5063)();e.exports=n},7816:(e,t,r)=>{var n=r(8483),o=r(3674);e.exports=function(e,t){return e&&n(e,t,o)}},7786:(e,t,r)=>{var n=r(1811),o=r(327);e.exports=function(e,t){for(var r=0,a=(t=n(t,e)).length;null!=e&&r<a;)e=e[o(t[r++])];return r&&r==a?e:void 0}},8866:(e,t,r)=>{var n=r(2488),o=r(1469);e.exports=function(e,t,r){var a=t(e);return o(e)?a:n(a,r(e))}},4239:(e,t,r)=>{var n=r(2705),o=r(9607),a=r(2333),i=n?n.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?o(e):a(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},2118:(e,t,r)=>{var n=r(1848),o=r(2722),a=r(2351);e.exports=function(e,t,r){return t==t?a(e,t,r):n(e,o,r)}},9454:(e,t,r)=>{var n=r(4239),o=r(7005);e.exports=function(e){return o(e)&&"[object Arguments]"==n(e)}},939:(e,t,r)=>{var n=r(2492),o=r(7005);e.exports=function e(t,r,a,i,s){return t===r||(null==t||null==r||!o(t)&&!o(r)?t!=t&&r!=r:n(t,r,a,i,e,s))}},2492:(e,t,r)=>{var n=r(6384),o=r(7114),a=r(8351),i=r(6096),s=r(4160),l=r(1469),c=r(4144),u=r(6719),f="[object Arguments]",p="[object Array]",d="[object Object]",m=Object.prototype.hasOwnProperty;e.exports=function(e,t,r,h,_,v){var g=l(e),y=l(t),b=g?p:s(e),w=y?p:s(t),x=(b=b==f?d:b)==d,z=(w=w==f?d:w)==d,k=b==w;if(k&&c(e)){if(!c(t))return!1;g=!0,x=!1}if(k&&!x)return v||(v=new n),g||u(e)?o(e,t,r,h,_,v):a(e,t,b,r,h,_,v);if(!(1&r)){var O=x&&m.call(e,"__wrapped__"),j=z&&m.call(t,"__wrapped__");if(O||j){var E=O?e.value():e,I=j?t.value():t;return v||(v=new n),_(E,I,r,h,v)}}return!!k&&(v||(v=new n),i(e,t,r,h,_,v))}},2958:(e,t,r)=>{var n=r(6384),o=r(939);e.exports=function(e,t,r,a){var i=r.length,s=i,l=!a;if(null==e)return!s;for(e=Object(e);i--;){var c=r[i];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++i<s;){var u=(c=r[i])[0],f=e[u],p=c[1];if(l&&c[2]){if(void 0===f&&!(u in e))return!1}else{var d=new n;if(a)var m=a(f,p,u,e,t,d);if(!(void 0===m?o(p,f,3,a,d):m))return!1}}return!0}},2722:e=>{e.exports=function(e){return e!=e}},8458:(e,t,r)=>{var n=r(3560),o=r(5346),a=r(3218),i=r(346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,f=c.hasOwnProperty,p=RegExp("^"+u.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||o(e))&&(n(e)?p:s).test(i(e))}},8749:(e,t,r)=>{var n=r(4239),o=r(1780),a=r(7005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&o(e.length)&&!!i[n(e)]}},7206:(e,t,r)=>{var n=r(1573),o=r(6432),a=r(6557),i=r(1469),s=r(9601);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?o(e[0],e[1]):n(e):s(e)}},280:(e,t,r)=>{var n=r(5726),o=r(6916),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!n(e))return o(e);var t=[];for(var r in Object(e))a.call(e,r)&&"constructor"!=r&&t.push(r);return t}},9199:(e,t,r)=>{var n=r(9881),o=r(8612);e.exports=function(e,t){var r=-1,a=o(e)?Array(e.length):[];return n(e,(function(e,n,o){a[++r]=t(e,n,o)})),a}},1573:(e,t,r)=>{var n=r(2958),o=r(1499),a=r(2634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(r){return r===e||n(r,e,t)}}},6432:(e,t,r)=>{var n=r(939),o=r(7361),a=r(9095),i=r(5403),s=r(9162),l=r(2634),c=r(327);e.exports=function(e,t){return i(e)&&s(t)?l(c(e),t):function(r){var i=o(r,e);return void 0===i&&i===t?a(r,e):n(t,i,3)}}},2689:(e,t,r)=>{var n=r(9932),o=r(7786),a=r(7206),i=r(9199),s=r(1131),l=r(7518),c=r(5022),u=r(6557),f=r(1469);e.exports=function(e,t,r){t=t.length?n(t,(function(e){return f(e)?function(t){return o(t,1===e.length?e[0]:e)}:e})):[u];var p=-1;t=n(t,l(a));var d=i(e,(function(e,r,o){return{criteria:n(t,(function(t){return t(e)})),index:++p,value:e}}));return s(d,(function(e,t){return c(e,t,r)}))}},371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},9152:(e,t,r)=>{var n=r(7786);e.exports=function(e){return function(t){return n(t,e)}}},5976:(e,t,r)=>{var n=r(6557),o=r(5357),a=r(61);e.exports=function(e,t){return a(o(e,t,n),e+"")}},6560:(e,t,r)=>{var n=r(5703),o=r(8777),a=r(6557),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:n(t),writable:!0})}:a;e.exports=i},1131:e=>{e.exports=function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}},2545:e=>{e.exports=function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}},531:(e,t,r)=>{var n=r(2705),o=r(9932),a=r(1469),i=r(3448),s=n?n.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return o(t,e)+"";if(i(t))return l?l.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r}},7561:(e,t,r)=>{var n=r(7990),o=/^\s+/;e.exports=function(e){return e?e.slice(0,n(e)+1).replace(o,""):e}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},7415:(e,t,r)=>{var n=r(9932);e.exports=function(e,t){return n(t,(function(t){return e[t]}))}},4757:e=>{e.exports=function(e,t){return e.has(t)}},1811:(e,t,r)=>{var n=r(1469),o=r(5403),a=r(5514),i=r(9833);e.exports=function(e,t){return n(e)?e:o(e,t)?[e]:a(i(e))}},6393:(e,t,r)=>{var n=r(3448);e.exports=function(e,t){if(e!==t){var r=void 0!==e,o=null===e,a=e==e,i=n(e),s=void 0!==t,l=null===t,c=t==t,u=n(t);if(!l&&!u&&!i&&e>t||i&&s&&c&&!l&&!u||o&&s&&c||!r&&c||!a)return 1;if(!o&&!i&&!u&&e<t||u&&r&&a&&!o&&!i||l&&r&&a||!s&&a||!c)return-1}return 0}},5022:(e,t,r)=>{var n=r(6393);e.exports=function(e,t,r){for(var o=-1,a=e.criteria,i=t.criteria,s=a.length,l=r.length;++o<s;){var c=n(a[o],i[o]);if(c)return o>=l?c:c*("desc"==r[o]?-1:1)}return e.index-t.index}},4429:(e,t,r)=>{var n=r(5639)["__core-js_shared__"];e.exports=n},9291:(e,t,r)=>{var n=r(8612);e.exports=function(e,t){return function(r,o){if(null==r)return r;if(!n(r))return e(r,o);for(var a=r.length,i=t?a:-1,s=Object(r);(t?i--:++i<a)&&!1!==o(s[i],i,s););return r}}},5063:e=>{e.exports=function(e){return function(t,r,n){for(var o=-1,a=Object(t),i=n(t),s=i.length;s--;){var l=i[e?s:++o];if(!1===r(a[l],l,a))break}return t}}},8777:(e,t,r)=>{var n=r(852),o=function(){try{var e=n(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},7114:(e,t,r)=>{var n=r(8668),o=r(2908),a=r(4757);e.exports=function(e,t,r,i,s,l){var c=1&r,u=e.length,f=t.length;if(u!=f&&!(c&&f>u))return!1;var p=l.get(e),d=l.get(t);if(p&&d)return p==t&&d==e;var m=-1,h=!0,_=2&r?new n:void 0;for(l.set(e,t),l.set(t,e);++m<u;){var v=e[m],g=t[m];if(i)var y=c?i(g,v,m,t,e,l):i(v,g,m,e,t,l);if(void 0!==y){if(y)continue;h=!1;break}if(_){if(!o(t,(function(e,t){if(!a(_,t)&&(v===e||s(v,e,r,i,l)))return _.push(t)}))){h=!1;break}}else if(v!==g&&!s(v,g,r,i,l)){h=!1;break}}return l.delete(e),l.delete(t),h}},8351:(e,t,r)=>{var n=r(2705),o=r(1149),a=r(7813),i=r(7114),s=r(8776),l=r(1814),c=n?n.prototype:void 0,u=c?c.valueOf:void 0;e.exports=function(e,t,r,n,c,f,p){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!f(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var d=s;case"[object Set]":var m=1&n;if(d||(d=l),e.size!=t.size&&!m)return!1;var h=p.get(e);if(h)return h==t;n|=2,p.set(e,t);var _=i(d(e),d(t),n,c,f,p);return p.delete(e),_;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},6096:(e,t,r)=>{var n=r(8234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,r,a,i,s){var l=1&r,c=n(e),u=c.length;if(u!=n(t).length&&!l)return!1;for(var f=u;f--;){var p=c[f];if(!(l?p in t:o.call(t,p)))return!1}var d=s.get(e),m=s.get(t);if(d&&m)return d==t&&m==e;var h=!0;s.set(e,t),s.set(t,e);for(var _=l;++f<u;){var v=e[p=c[f]],g=t[p];if(a)var y=l?a(g,v,p,t,e,s):a(v,g,p,e,t,s);if(!(void 0===y?v===g||i(v,g,r,a,s):y)){h=!1;break}_||(_="constructor"==p)}if(h&&!_){var b=e.constructor,w=t.constructor;b==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(h=!1)}return s.delete(e),s.delete(t),h}},1957:(e,t,r)=>{var n="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;e.exports=n},8234:(e,t,r)=>{var n=r(8866),o=r(9551),a=r(3674);e.exports=function(e){return n(e,a,o)}},5050:(e,t,r)=>{var n=r(7019);e.exports=function(e,t){var r=e.__data__;return n(t)?r["string"==typeof t?"string":"hash"]:r.map}},1499:(e,t,r)=>{var n=r(9162),o=r(3674);e.exports=function(e){for(var t=o(e),r=t.length;r--;){var a=t[r],i=e[a];t[r]=[a,i,n(i)]}return t}},852:(e,t,r)=>{var n=r(8458),o=r(7801);e.exports=function(e,t){var r=o(e,t);return n(r)?r:void 0}},9607:(e,t,r)=>{var n=r(2705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,s=n?n.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),r=e[s];try{e[s]=void 0;var n=!0}catch(e){}var o=i.call(e);return n&&(t?e[s]=r:delete e[s]),o}},9551:(e,t,r)=>{var n=r(4963),o=r(479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(e){return null==e?[]:(e=Object(e),n(i(e),(function(t){return a.call(e,t)})))}:o;e.exports=s},4160:(e,t,r)=>{var n=r(8552),o=r(7071),a=r(3818),i=r(8525),s=r(577),l=r(4239),c=r(346),u="[object Map]",f="[object Promise]",p="[object Set]",d="[object WeakMap]",m="[object DataView]",h=c(n),_=c(o),v=c(a),g=c(i),y=c(s),b=l;(n&&b(new n(new ArrayBuffer(1)))!=m||o&&b(new o)!=u||a&&b(a.resolve())!=f||i&&b(new i)!=p||s&&b(new s)!=d)&&(b=function(e){var t=l(e),r="[object Object]"==t?e.constructor:void 0,n=r?c(r):"";if(n)switch(n){case h:return m;case _:return u;case v:return f;case g:return p;case y:return d}return t}),e.exports=b},7801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,r)=>{var n=r(1811),o=r(5694),a=r(1469),i=r(5776),s=r(1780),l=r(327);e.exports=function(e,t,r){for(var c=-1,u=(t=n(t,e)).length,f=!1;++c<u;){var p=l(t[c]);if(!(f=null!=e&&r(e,p)))break;e=e[p]}return f||++c!=u?f:!!(u=null==e?0:e.length)&&s(u)&&i(p,u)&&(a(e)||o(e))}},1789:(e,t,r)=>{var n=r(4536);e.exports=function(){this.__data__=n?n(null):{},this.size=0}},401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},7667:(e,t,r)=>{var n=r(4536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(n){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(t,e)?t[e]:void 0}},1327:(e,t,r)=>{var n=r(4536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return n?void 0!==t[e]:o.call(t,e)}},1866:(e,t,r)=>{var n=r(4536);e.exports=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=n&&void 0===t?"__lodash_hash_undefined__":t,this}},7285:(e,t,r)=>{var n=r(2705),o=r(5694),a=r(1469),i=n?n.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},5776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e<r}},6612:(e,t,r)=>{var n=r(7813),o=r(8612),a=r(5776),i=r(3218);e.exports=function(e,t,r){if(!i(r))return!1;var s=typeof t;return!!("number"==s?o(r)&&a(t,r.length):"string"==s&&t in r)&&n(r[t],e)}},5403:(e,t,r)=>{var n=r(1469),o=r(3448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(n(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!o(e))||i.test(e)||!a.test(e)||null!=t&&e in Object(t)}},7019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},5346:(e,t,r)=>{var n,o=r(4429),a=(n=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";e.exports=function(e){return!!a&&a in e}},5726:e=>{var t=Object.prototype;e.exports=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}},9162:(e,t,r)=>{var n=r(3218);e.exports=function(e){return e==e&&!n(e)}},7040:e=>{e.exports=function(){this.__data__=[],this.size=0}},4125:(e,t,r)=>{var n=r(8470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,r=n(t,e);return!(r<0||(r==t.length-1?t.pop():o.call(t,r,1),--this.size,0))}},2117:(e,t,r)=>{var n=r(8470);e.exports=function(e){var t=this.__data__,r=n(t,e);return r<0?void 0:t[r][1]}},3755:(e,t,r)=>{var n=r(8470);e.exports=function(e){return n(this.__data__,e)>-1}},4705:(e,t,r)=>{var n=r(8470);e.exports=function(e,t){var r=this.__data__,o=n(r,e);return o<0?(++this.size,r.push([e,t])):r[o][1]=t,this}},4785:(e,t,r)=>{var n=r(1989),o=r(8407),a=r(7071);e.exports=function(){this.size=0,this.__data__={hash:new n,map:new(a||o),string:new n}}},1285:(e,t,r)=>{var n=r(5050);e.exports=function(e){var t=n(this,e).delete(e);return this.size-=t?1:0,t}},6e3:(e,t,r)=>{var n=r(5050);e.exports=function(e){return n(this,e).get(e)}},9916:(e,t,r)=>{var n=r(5050);e.exports=function(e){return n(this,e).has(e)}},5265:(e,t,r)=>{var n=r(5050);e.exports=function(e,t){var r=n(this,e),o=r.size;return r.set(e,t),this.size+=r.size==o?0:1,this}},8776:e=>{e.exports=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}},2634:e=>{e.exports=function(e,t){return function(r){return null!=r&&r[e]===t&&(void 0!==t||e in Object(r))}}},4523:(e,t,r)=>{var n=r(8306);e.exports=function(e){var t=n(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}},4536:(e,t,r)=>{var n=r(852)(Object,"create");e.exports=n},6916:(e,t,r)=>{var n=r(5569)(Object.keys,Object);e.exports=n},1167:(e,t,r)=>{e=r.nmd(e);var n=r(1957),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&n.process,s=function(){try{return a&&a.require&&a.require("util").types||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=s},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(r){return e(t(r))}}},5357:(e,t,r)=>{var n=r(6874),o=Math.max;e.exports=function(e,t,r){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,s=o(a.length-t,0),l=Array(s);++i<s;)l[i]=a[t+i];i=-1;for(var c=Array(t+1);++i<t;)c[i]=a[i];return c[t]=r(l),n(e,this,c)}}},5639:(e,t,r)=>{var n=r(1957),o="object"==typeof self&&self&&self.Object===Object&&self,a=n||o||Function("return this")();e.exports=a},619:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},2385:e=>{e.exports=function(e){return this.__data__.has(e)}},1814:e=>{e.exports=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}},61:(e,t,r)=>{var n=r(6560),o=r(1275)(n);e.exports=o},1275:e=>{var t=Date.now;e.exports=function(e){var r=0,n=0;return function(){var o=t(),a=16-(o-n);if(n=o,a>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}},7465:(e,t,r)=>{var n=r(8407);e.exports=function(){this.__data__=new n,this.size=0}},3779:e=>{e.exports=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}},7599:e=>{e.exports=function(e){return this.__data__.get(e)}},4758:e=>{e.exports=function(e){return this.__data__.has(e)}},4309:(e,t,r)=>{var n=r(8407),o=r(7071),a=r(3369);e.exports=function(e,t){var r=this.__data__;if(r instanceof n){var i=r.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new a(i)}return r.set(e,t),this.size=r.size,this}},2351:e=>{e.exports=function(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}},5514:(e,t,r)=>{var n=r(4523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=n((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,r,n,o){t.push(n?o.replace(a,"$1"):r||e)})),t}));e.exports=i},327:(e,t,r)=>{var n=r(3448);e.exports=function(e){if("string"==typeof e||n(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},7990:e=>{var t=/\s/;e.exports=function(e){for(var r=e.length;r--&&t.test(e.charAt(r)););return r}},5703:e=>{e.exports=function(e){return function(){return e}}},7813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},3105:(e,t,r)=>{var n=r(4963),o=r(760),a=r(7206),i=r(1469);e.exports=function(e,t){return(i(e)?n:o)(e,a(t,3))}},7361:(e,t,r)=>{var n=r(7786);e.exports=function(e,t,r){var o=null==e?void 0:n(e,t);return void 0===o?r:o}},9095:(e,t,r)=>{var n=r(13),o=r(222);e.exports=function(e,t){return null!=e&&o(e,t,n)}},6557:e=>{e.exports=function(e){return e}},4721:(e,t,r)=>{var n=r(2118),o=r(8612),a=r(7037),i=r(554),s=r(2628),l=Math.max;e.exports=function(e,t,r,c){e=o(e)?e:s(e),r=r&&!c?i(r):0;var u=e.length;return r<0&&(r=l(u+r,0)),a(e)?r<=u&&e.indexOf(t,r)>-1:!!u&&n(e,t,r)>-1}},5694:(e,t,r)=>{var n=r(9454),o=r(7005),a=Object.prototype,i=a.hasOwnProperty,s=a.propertyIsEnumerable,l=n(function(){return arguments}())?n:function(e){return o(e)&&i.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},8612:(e,t,r)=>{var n=r(3560),o=r(1780);e.exports=function(e){return null!=e&&o(e.length)&&!n(e)}},4144:(e,t,r)=>{e=r.nmd(e);var n=r(5639),o=r(5062),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,s=i&&i.exports===a?n.Buffer:void 0,l=(s?s.isBuffer:void 0)||o;e.exports=l},3560:(e,t,r)=>{var n=r(4239),o=r(3218);e.exports=function(e){if(!o(e))return!1;var t=n(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},1780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},3218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},7005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},7037:(e,t,r)=>{var n=r(4239),o=r(1469),a=r(7005);e.exports=function(e){return"string"==typeof e||!o(e)&&a(e)&&"[object String]"==n(e)}},3448:(e,t,r)=>{var n=r(4239),o=r(7005);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==n(e)}},6719:(e,t,r)=>{var n=r(8749),o=r(7518),a=r(1167),i=a&&a.isTypedArray,s=i?o(i):n;e.exports=s},3674:(e,t,r)=>{var n=r(4636),o=r(280),a=r(8612);e.exports=function(e){return a(e)?n(e):o(e)}},8306:(e,t,r)=>{var n=r(3369);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],a=r.cache;if(a.has(o))return a.get(o);var i=e.apply(this,n);return r.cache=a.set(o,i)||a,i};return r.cache=new(o.Cache||n),r}o.Cache=n,e.exports=o},9601:(e,t,r)=>{var n=r(371),o=r(9152),a=r(5403),i=r(327);e.exports=function(e){return a(e)?n(i(e)):o(e)}},9734:(e,t,r)=>{var n=r(1078),o=r(2689),a=r(5976),i=r(6612),s=a((function(e,t){if(null==e)return[];var r=t.length;return r>1&&i(e,t[0],t[1])?t=[]:r>2&&i(t[0],t[1],t[2])&&(t=[t[0]]),o(e,n(t,1),[])}));e.exports=s},479:e=>{e.exports=function(){return[]}},5062:e=>{e.exports=function(){return!1}},8601:(e,t,r)=>{var n=r(4841);e.exports=function(e){return e?Infinity===(e=n(e))||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},554:(e,t,r)=>{var n=r(8601);e.exports=function(e){var t=n(e),r=t%1;return t==t?r?t-r:t:0}},4841:(e,t,r)=>{var n=r(7561),o=r(3218),a=r(3448),i=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=n(e);var r=s.test(e);return r||l.test(e)?c(e.slice(2),r?2:8):i.test(e)?NaN:+e}},9833:(e,t,r)=>{var n=r(531);e.exports=function(e){return null==e?"":n(e)}},2628:(e,t,r)=>{var n=r(7415),o=r(3674);e.exports=function(e){return null==e?[]:n(e,o(e))}},8490:(e,t,r)=>{"use strict";var n=r(7673),o=r(8575),a=r(7529);const i=parseInt({NODE_ENV:"production"}.PARSE_LINK_HEADER_MAXLEN)||2e3,s=null!={NODE_ENV:"production"}.PARSE_LINK_HEADER_THROW_ON_MAXLEN_EXCEEDED;function l(e){return e&&e.rel}function c(e,t){return t.rel.split(/\s+/).forEach((function(r){e[r]=a(t,{rel:r})})),e}function u(e,t){var r=t.match(/\s*(.+)\s*=\s*"?([^"]+)"?/);return r&&(e[r[1]]=r[2]),e}function f(e){try{var t=e.match(/<?([^>]*)>(.*)/),r=t[1],i=t[2].split(";"),s=o.parse(r),l=n.parse(s.query);i.shift();var c=i.reduce(u,{});return(c=a(l,c)).url=r,c}catch(e){return null}}e.exports=function(e){return function(e){if(!e)return!1;if(e.length>i){if(s)throw new Error("Input string too long, it should be under "+i+" characters.");return!1}return!0}(e)?e.split(/,\s*</).map(f).filter(l).reduce(c,{}):null}},3689:(e,t,r)=>{"use strict";r.r(t),r.d(t,{decode:()=>v,default:()=>w,encode:()=>g,toASCII:()=>b,toUnicode:()=>y,ucs2decode:()=>d,ucs2encode:()=>m});const n=2147483647,o=36,a=/^xn--/,i=/[^\0-\x7E]/,s=/[\x2E\u3002\uFF0E\uFF61]/g,l={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=Math.floor,u=String.fromCharCode;function f(e){throw new RangeError(l[e])}function p(e,t){const r=e.split("@");let n="";r.length>1&&(n=r[0]+"@",e=r[1]);const o=function(e,t){const r=[];let n=e.length;for(;n--;)r[n]=t(e[n]);return r}((e=e.replace(s,".")).split("."),t).join(".");return n+o}function d(e){const t=[];let r=0;const n=e.length;for(;r<n;){const o=e.charCodeAt(r++);if(o>=55296&&o<=56319&&r<n){const n=e.charCodeAt(r++);56320==(64512&n)?t.push(((1023&o)<<10)+(1023&n)+65536):(t.push(o),r--)}else t.push(o)}return t}const m=e=>String.fromCodePoint(...e),h=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},_=function(e,t,r){let n=0;for(e=r?c(e/700):e>>1,e+=c(e/t);e>455;n+=o)e=c(e/35);return c(n+36*e/(e+38))},v=function(e){const t=[],r=e.length;let a=0,i=128,s=72,l=e.lastIndexOf("-");l<0&&(l=0);for(let r=0;r<l;++r)e.charCodeAt(r)>=128&&f("not-basic"),t.push(e.charCodeAt(r));for(let p=l>0?l+1:0;p<r;){let l=a;for(let t=1,i=o;;i+=o){p>=r&&f("invalid-input");const l=(u=e.charCodeAt(p++))-48<10?u-22:u-65<26?u-65:u-97<26?u-97:o;(l>=o||l>c((n-a)/t))&&f("overflow"),a+=l*t;const d=i<=s?1:i>=s+26?26:i-s;if(l<d)break;const m=o-d;t>c(n/m)&&f("overflow"),t*=m}const d=t.length+1;s=_(a-l,d,0==l),c(a/d)>n-i&&f("overflow"),i+=c(a/d),a%=d,t.splice(a++,0,i)}var u;return String.fromCodePoint(...t)},g=function(e){const t=[];let r=(e=d(e)).length,a=128,i=0,s=72;for(const r of e)r<128&&t.push(u(r));let l=t.length,p=l;for(l&&t.push("-");p<r;){let r=n;for(const t of e)t>=a&&t<r&&(r=t);const d=p+1;r-a>c((n-i)/d)&&f("overflow"),i+=(r-a)*d,a=r;for(const r of e)if(r<a&&++i>n&&f("overflow"),r==a){let e=i;for(let r=o;;r+=o){const n=r<=s?1:r>=s+26?26:r-s;if(e<n)break;const a=e-n,i=o-n;t.push(u(h(n+a%i,0))),e=c(a/i)}t.push(u(h(e,0))),s=_(i,d,p==l),i=0,++p}++i,++a}return t.join("")},y=function(e){return p(e,(function(e){return a.test(e)?v(e.slice(4).toLowerCase()):e}))},b=function(e){return p(e,(function(e){return i.test(e)?"xn--"+g(e):e}))},w={version:"2.1.0",ucs2:{decode:d,encode:m},decode:v,encode:g,toASCII:b,toUnicode:y}},2587:e=>{"use strict";function t(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,r,n,o){r=r||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(r);var s=1e3;o&&"number"==typeof o.maxKeys&&(s=o.maxKeys);var l=e.length;s>0&&l>s&&(l=s);for(var c=0;c<l;++c){var u,f,p,d,m=e[c].replace(i,"%20"),h=m.indexOf(n);h>=0?(u=m.substr(0,h),f=m.substr(h+1)):(u=m,f=""),p=decodeURIComponent(u),d=decodeURIComponent(f),t(a,p)?Array.isArray(a[p])?a[p].push(d):a[p]=[a[p],d]:a[p]=d}return a}},2361:e=>{"use strict";var t=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,r,n,o){return r=r||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(o){var a=encodeURIComponent(t(o))+n;return Array.isArray(e[o])?e[o].map((function(e){return a+encodeURIComponent(t(e))})).join(r):a+encodeURIComponent(t(e[o]))})).join(r):o?encodeURIComponent(t(o))+n+encodeURIComponent(t(e)):""}},7673:(e,t,r)=>{"use strict";t.decode=t.parse=r(2587),t.encode=t.stringify=r(2361)},8575:(e,t,r)=>{"use strict";var n=r(3689),o=r(2502);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){return o.isString(e)&&(e=y(e)),e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var i=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,l=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(c),f=["%","/","?",";","#"].concat(u),p=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,h={javascript:!0,"javascript:":!0},_={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=r(7673);function y(e,t,r){if(e&&o.isObject(e)&&e instanceof a)return e;var n=new a;return n.parse(e,t,r),n}a.prototype.parse=function(e,t,r){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),s=-1!==a&&a<e.indexOf("#")?"?":"#",c=e.split(s);c[0]=c[0].replace(/\\/g,"/");var y=e=c.join(s);if(y=y.trim(),!r&&1===e.split("#").length){var b=l.exec(y);if(b)return this.path=y,this.href=y,this.pathname=b[1],b[2]?(this.search=b[2],this.query=t?g.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var w=i.exec(y);if(w){var x=(w=w[0]).toLowerCase();this.protocol=x,y=y.substr(w.length)}if(r||w||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var z="//"===y.substr(0,2);!z||w&&_[w]||(y=y.substr(2),this.slashes=!0)}if(!_[w]&&(z||w&&!v[w])){for(var k,O,j=-1,E=0;E<p.length;E++)-1!==(I=y.indexOf(p[E]))&&(-1===j||I<j)&&(j=I);for(-1!==(O=-1===j?y.lastIndexOf("@"):y.lastIndexOf("@",j))&&(k=y.slice(0,O),y=y.slice(O+1),this.auth=decodeURIComponent(k)),j=-1,E=0;E<f.length;E++){var I;-1!==(I=y.indexOf(f[E]))&&(-1===j||I<j)&&(j=I)}-1===j&&(j=y.length),this.host=y.slice(0,j),y=y.slice(j),this.parseHost(),this.hostname=this.hostname||"";var S="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!S)for(var N=this.hostname.split(/\./),L=(E=0,N.length);E<L;E++){var R=N[E];if(R&&!R.match(d)){for(var F="",A=0,T=R.length;A<T;A++)R.charCodeAt(A)>127?F+="x":F+=R[A];if(!F.match(d)){var C=N.slice(0,E),P=N.slice(E+1),D=R.match(m);D&&(C.push(D[1]),P.unshift(D[2])),P.length&&(y="/"+P.join(".")+y),this.hostname=C.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),S||(this.hostname=n.toASCII(this.hostname));var M=this.port?":"+this.port:"",W=this.hostname||"";this.host=W+M,this.href+=this.host,S&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!h[x])for(E=0,L=u.length;E<L;E++){var U=u[E];if(-1!==y.indexOf(U)){var $=encodeURIComponent(U);$===U&&($=escape(U)),y=y.split(U).join($)}}var q=y.indexOf("#");-1!==q&&(this.hash=y.substr(q),y=y.slice(0,q));var V=y.indexOf("?");if(-1!==V?(this.search=y.substr(V),this.query=y.substr(V+1),t&&(this.query=g.parse(this.query)),y=y.slice(0,V)):t&&(this.search="",this.query={}),y&&(this.pathname=y),v[x]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){M=this.pathname||"";var B=this.search||"";this.path=M+B}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&o.isObject(this.query)&&Object.keys(this.query).length&&(i=g.stringify(this.query));var s=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||v[t])&&!1!==a?(a="//"+(a||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):a||(a=""),n&&"#"!==n.charAt(0)&&(n="#"+n),s&&"?"!==s.charAt(0)&&(s="?"+s),t+a+(r=r.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(s=s.replace("#","%23"))+n},a.prototype.resolve=function(e){return this.resolveObject(y(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(o.isString(e)){var t=new a;t.parse(e,!1,!0),e=t}for(var r=new a,n=Object.keys(this),i=0;i<n.length;i++){var s=n[i];r[s]=this[s]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var l=Object.keys(e),c=0;c<l.length;c++){var u=l[c];"protocol"!==u&&(r[u]=e[u])}return v[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!v[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var d=f[p];r[d]=e[d]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||_[e.protocol])r.pathname=e.pathname;else{for(var m=(e.pathname||"").split("/");m.length&&!(e.host=m.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==m[0]&&m.unshift(""),m.length<2&&m.unshift(""),r.pathname=m.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var h=r.pathname||"",g=r.search||"";r.path=h+g}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var y=r.pathname&&"/"===r.pathname.charAt(0),b=e.host||e.pathname&&"/"===e.pathname.charAt(0),w=b||y||r.host&&e.pathname,x=w,z=r.pathname&&r.pathname.split("/")||[],k=(m=e.pathname&&e.pathname.split("/")||[],r.protocol&&!v[r.protocol]);if(k&&(r.hostname="",r.port=null,r.host&&(""===z[0]?z[0]=r.host:z.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===m[0]?m[0]=e.host:m.unshift(e.host)),e.host=null),w=w&&(""===m[0]||""===z[0])),b)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,z=m;else if(m.length)z||(z=[]),z.pop(),z=z.concat(m),r.search=e.search,r.query=e.query;else if(!o.isNullOrUndefined(e.search))return k&&(r.hostname=r.host=z.shift(),(S=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=S.shift(),r.host=r.hostname=S.shift())),r.search=e.search,r.query=e.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!z.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var O=z.slice(-1)[0],j=(r.host||e.host||z.length>1)&&("."===O||".."===O)||""===O,E=0,I=z.length;I>=0;I--)"."===(O=z[I])?z.splice(I,1):".."===O?(z.splice(I,1),E++):E&&(z.splice(I,1),E--);if(!w&&!x)for(;E--;E)z.unshift("..");!w||""===z[0]||z[0]&&"/"===z[0].charAt(0)||z.unshift(""),j&&"/"!==z.join("/").substr(-1)&&z.push("");var S,N=""===z[0]||z[0]&&"/"===z[0].charAt(0);return k&&(r.hostname=r.host=N?"":z.length?z.shift():"",(S=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=S.shift(),r.host=r.hostname=S.shift())),(w=w||r.host&&z.length)&&!N&&z.unshift(""),z.length?r.pathname=z.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},a.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},2502:e=>{"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},7529:e=>{e.exports=function(){for(var e={},r=0;r<arguments.length;r++){var n=arguments[r];for(var o in n)t.call(n,o)&&(e[o]=n[o])}return e};var t=Object.prototype.hasOwnProperty},7061:(e,t,r)=>{var n=r(8698).default;function o(){"use strict";e.exports=o=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},r=Object.prototype,a=r.hasOwnProperty,i=Object.defineProperty||function(e,t,r){e[t]=r.value},s="function"==typeof Symbol?Symbol:{},l=s.iterator||"@@iterator",c=s.asyncIterator||"@@asyncIterator",u=s.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function p(e,t,r,n){var o=t&&t.prototype instanceof h?t:h,a=Object.create(o.prototype),s=new I(n||[]);return i(a,"_invoke",{value:k(e,r,s)}),a}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=p;var m={};function h(){}function _(){}function v(){}var g={};f(g,l,(function(){return this}));var y=Object.getPrototypeOf,b=y&&y(y(S([])));b&&b!==r&&a.call(b,l)&&(g=b);var w=v.prototype=h.prototype=Object.create(g);function x(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function z(e,t){function r(o,i,s,l){var c=d(e[o],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==n(f)&&a.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,s,l)}),(function(e){r("throw",e,s,l)})):t.resolve(f).then((function(e){u.value=e,s(u)}),(function(e){return r("throw",e,s,l)}))}l(c.arg)}var o;i(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}})}function k(e,t,r){var n="suspendedStart";return function(o,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw a;return{value:void 0,done:!0}}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=O(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=d(e,t,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===m)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function S(e){if(e){var t=e[l];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function t(){for(;++r<e.length;)if(a.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return n.next=n}}return{next:N}}function N(){return{value:void 0,done:!0}}return _.prototype=v,i(w,"constructor",{value:v,configurable:!0}),i(v,"constructor",{value:_,configurable:!0}),_.displayName=f(v,u,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,f(e,u,"GeneratorFunction")),e.prototype=Object.create(w),e},t.awrap=function(e){return{__await:e}},x(z.prototype),f(z.prototype,c,(function(){return this})),t.AsyncIterator=z,t.async=function(e,r,n,o,a){void 0===a&&(a=Promise);var i=new z(p(e,r,n,o),a);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(w),f(w,u,"Generator"),f(w,l,(function(){return this})),f(w,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=S,I.prototype={constructor:I,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&a.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,n){return i.type="throw",i.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=a.call(o,"catchLoc"),l=a.call(o,"finallyLoc");if(s&&l){if(this.prev<o.catchLoc)return r(o.catchLoc,!0);if(this.prev<o.finallyLoc)return r(o.finallyLoc)}else if(s){if(this.prev<o.catchLoc)return r(o.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return r(o.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&a.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,m):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;E(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:S(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),m}},t}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports},8698:e=>{function t(r){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},4687:(e,t,r)=>{var n=r(7061)();e.exports=n;try{regeneratorRuntime=n}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";function e(e,t,r,n,o,a,i){try{var s=e[a](i),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function t(t){return function(){var r=this,n=arguments;return new Promise((function(o,a){var i=t.apply(r,n);function s(t){e(i,o,a,s,l,"next",t)}function l(t){e(i,o,a,s,l,"throw",t)}s(void 0)}))}}var n=r(4687),o=r.n(n),a=r(9483),i=r.n(a);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function l(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t);if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===s(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var c=r(5573),u=r.n(c),f=(r(8490),r(4721)),p=r.n(f),d=(r(9734),r(3105),["like","mention","repeat","pleroma:emoji_reaction","poll"]),m=function(e){return p()(d,e)},h=function(e,t){var r,n={tag:e.id},o=e.status,a=e.from_profile.name;switch(n.title=a,n.icon=e.from_profile.profile_image_url,e.type){case"like":r="favorited_you";break;case"repeat":r="repeated_you";break;case"follow":r="followed_you";break;case"move":r="migrated_to";break;case"follow_request":r="follow_request";break;case"pleroma:report":r="submitted_report";break;case"poll":r="poll_ended"}return"pleroma:emoji_reaction"===e.type?n.body=t.t("notifications.reacted_with",[e.emoji]):r?n.body=t.t("notifications."+r):m(e.type)&&(n.body=e.status.text),o&&o.attachments&&o.attachments.length>0&&!o.nsfw&&o.attachments[0].mimetype.startsWith("image/")&&(n.image=o.attachments[0].url),n};const _=2147483647,v=36,g=/^xn--/,y=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},w=Math.floor;String.fromCharCode;function x(e){throw new RangeError(b[e])}function z(e,t){const r=e.split("@");let n="";r.length>1&&(n=r[0]+"@",e=r[1]);const o=function(e,t){const r=[];let n=e.length;for(;n--;)r[n]=t(e[n]);return r}((e=e.replace(y,".")).split("."),t).join(".");return n+o}const k=function(e,t,r){let n=0;for(e=r?w(e/700):e>>1,e+=w(e/t);e>455;n+=v)e=w(e/35);return w(n+36*e/(e+38))},O=function(e){const t=[],r=e.length;let n=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(let r=0;r<i;++r)e.charCodeAt(r)>=128&&x("not-basic"),t.push(e.charCodeAt(r));for(let l=i>0?i+1:0;l<r;){const i=n;for(let t=1,o=v;;o+=v){l>=r&&x("invalid-input");const i=(s=e.charCodeAt(l++))>=48&&s<58?s-48+26:s>=65&&s<91?s-65:s>=97&&s<123?s-97:v;i>=v&&x("invalid-input"),i>w((_-n)/t)&&x("overflow"),n+=i*t;const c=o<=a?1:o>=a+26?26:o-a;if(i<c)break;const u=v-c;t>w(_/u)&&x("overflow"),t*=u}const c=t.length+1;a=k(n-i,c,0==i),w(n/c)>_-o&&x("overflow"),o+=w(n/c),n%=c,t.splice(n++,0,o)}var s;return String.fromCodePoint(...t)},j=function(e){return z(e,(function(e){return g.test(e)?O(e.slice(4).toLowerCase()):e}))};function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach((function(t){l(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var S=function(e){var t={},r=Object.prototype.hasOwnProperty.call(e,"acct"),n=r&&!Object.prototype.hasOwnProperty.call(e,"avatar");if(t.inLists=null,t.id=String(e.id),t._original=e,r){if(t.screen_name=e.acct,t.fqn=e.fqn,t.statusnet_profile_url=e.url,n)return t;if(t.emoji=e.emojis,t.name=u()(e.display_name),t.name_html=t.name,t.name_unescaped=e.display_name,t.description=e.note,t.description_html=e.note,t.fields=e.fields,t.fields_html=e.fields.map((function(e){return{name:u()(e.name),value:e.value}})),t.fields_text=e.fields.map((function(e){return{name:unescape(e.name.replace(/<[^>]*>/g,"")),value:unescape(e.value.replace(/<[^>]*>/g,""))}})),t.profile_image_url=e.avatar,t.profile_image_url_original=e.avatar,t.cover_photo=e.header,t.friends_count=e.following_count,t.bot=e.bot,e.pleroma){e.pleroma.settings_store&&(t.storage=e.pleroma.settings_store["pleroma-fe"]);var o=e.pleroma.relationship;t.background_image=e.pleroma.background_image,t.favicon=e.pleroma.favicon,t.token=e.pleroma.chat_token,o&&(t.relationship=o),t.allow_following_move=e.pleroma.allow_following_move,t.hide_follows=e.pleroma.hide_follows,t.hide_followers=e.pleroma.hide_followers,t.hide_follows_count=e.pleroma.hide_follows_count,t.hide_followers_count=e.pleroma.hide_followers_count,t.rights={moderator:e.pleroma.is_moderator,admin:e.pleroma.is_admin},t.rights.admin?t.role="admin":t.rights.moderator?t.role="moderator":t.role="member",t.birthday=e.pleroma.birthday,e.pleroma.privileges?t.privileges=e.pleroma.privileges:e.pleroma.is_admin?t.privileges=["users_read","users_manage_invites","users_manage_activation_state","users_manage_tags","users_manage_credentials","users_delete","messages_read","messages_delete","instances_delete","reports_manage_reports","moderation_log_read","announcements_manage_announcements","emoji_manage_emoji","statistics_read"]:e.pleroma.is_moderator?t.privileges=["messages_delete","reports_manage_reports"]:t.privileges=[]}e.source&&(t.description=e.source.note,t.default_scope=e.source.privacy,t.fields=e.source.fields,e.source.pleroma&&(t.no_rich_text=e.source.pleroma.no_rich_text,t.show_role=e.source.pleroma.show_role,t.discoverable=e.source.pleroma.discoverable,t.show_birthday=e.pleroma.show_birthday)),t.is_local=!t.screen_name.includes("@")}else t.screen_name=e.screen_name,t.name=e.name,t.name_html=e.name_html,t.description=e.description,t.description_html=e.description_html,t.profile_image_url=e.profile_image_url,t.profile_image_url_original=e.profile_image_url_original,t.cover_photo=e.cover_photo,t.friends_count=e.friends_count,t.statusnet_profile_url=e.statusnet_profile_url,t.is_local=e.is_local,t.role=e.role,t.show_role=e.show_role,e.rights&&(t.rights={moderator:e.rights.delete_others_notice,admin:e.rights.admin}),t.no_rich_text=e.no_rich_text,t.default_scope=e.default_scope,t.hide_follows=e.hide_follows,t.hide_followers=e.hide_followers,t.hide_follows_count=e.hide_follows_count,t.hide_followers_count=e.hide_followers_count,t.background_image=e.background_image,t.token=e.token,t.relationship={muting:e.muted,blocking:e.statusnet_blocking,followed_by:e.follows_you,following:e.following};if(t.created_at=new Date(e.created_at),t.locked=e.locked,t.followers_count=e.followers_count,t.statuses_count=e.statuses_count,e.pleroma&&(t.follow_request_count=e.pleroma.follow_request_count,t.tags=e.pleroma.tags,t.deactivated=void 0!==e.pleroma.is_active?!e.pleroma.is_active:e.pleroma.deactivated,t.notification_settings=e.pleroma.notification_settings,t.unread_chat_count=e.pleroma.unread_chat_count),t.tags=t.tags||[],t.rights=t.rights||{},t.notification_settings=t.notification_settings||{},t.screen_name_ui=t.screen_name,t.screen_name&&t.screen_name.includes("@")){var a=t.screen_name.split("@"),i=j(a[1]);i!==a[1]?(t.screen_name_ui_contains_non_ascii=!0,t.screen_name_ui=[a[0],i].join("@")):t.screen_name_ui_contains_non_ascii=!1}return t},N=function(e){var t={};return Object.prototype.hasOwnProperty.call(e,"oembed")?t.mimetype=e.mimetype:(t.mimetype=e.pleroma?e.pleroma.mime_type:e.type,t.meta=e.meta,t.id=e.id),t.url=e.url,t.large_thumb_url=e.preview_url,t.description=e.description,t},L=function e(t){var r,n={},o=Object.prototype.hasOwnProperty.call(t,"account");if(o){if(n.favorited=t.favourited,n.fave_num=t.favourites_count,n.repeated=t.reblogged,n.repeat_num=t.reblogs_count,n.bookmarked=t.bookmarked,n.type=t.reblog?"retweet":"status",n.nsfw=t.sensitive,n.raw_html=t.content,n.emojis=t.emojis,n.tags=t.tags,n.edited_at=t.edited_at,t.pleroma){var a=t.pleroma;n.text=a.content?t.pleroma.content["text/plain"]:t.content,n.summary=a.spoiler_text?t.pleroma.spoiler_text["text/plain"]:t.spoiler_text,n.statusnet_conversation_id=t.pleroma.conversation_id,n.is_local=a.local,n.in_reply_to_screen_name=t.pleroma.in_reply_to_account_acct,n.thread_muted=a.thread_muted,n.emoji_reactions=a.emoji_reactions,n.parent_visible=void 0===a.parent_visible||a.parent_visible,n.quote=a.quote?e(a.quote):void 0,n.quote_id=a.quote_id?a.quote_id:n.quote?n.quote.id:void 0,n.quote_url=a.quote_url,n.quote_visible=a.quote_visible}else n.text=t.content,n.summary=t.spoiler_text;n.in_reply_to_status_id=t.in_reply_to_id,n.in_reply_to_user_id=t.in_reply_to_account_id,n.replies_count=t.replies_count,"retweet"===n.type&&(n.retweeted_status=e(t.reblog)),n.summary_raw_html=u()(t.spoiler_text),n.external_url=t.url,n.poll=t.poll,n.poll&&(n.poll.options=(n.poll.options||[]).map((function(e){return I(I({},e),{},{title_html:u()(e.title)})}))),n.pinned=t.pinned,n.muted=t.muted}else n.favorited=t.favorited,n.fave_num=t.fave_num,n.repeated=t.repeated,n.repeat_num=t.repeat_num,n.type=(r=t).is_post_verb?"status":r.retweeted_status?"retweet":"string"==typeof r.uri&&r.uri.match(/(fave|objectType=Favourite)/)||"string"==typeof r.text&&r.text.match(/favorited/)?"favorite":r.text.match(/deleted notice {{tag/)||r.qvitter_delete_notice?"deletion":r.text.match(/started following/)||"follow"===r.activity_type?"follow":"unknown",void 0===t.nsfw?(n.nsfw=F(t),t.retweeted_status&&(n.nsfw=t.retweeted_status.nsfw)):n.nsfw=t.nsfw,n.raw_html=t.statusnet_html,n.text=t.text,n.in_reply_to_status_id=t.in_reply_to_status_id,n.in_reply_to_user_id=t.in_reply_to_user_id,n.in_reply_to_screen_name=t.in_reply_to_screen_name,n.statusnet_conversation_id=t.statusnet_conversation_id,"retweet"===n.type&&(n.retweeted_status=e(t.retweeted_status)),n.summary=t.summary,n.summary_html=t.summary_html,n.external_url=t.external_url,n.is_local=t.is_local;n.id=String(t.id),n.visibility=t.visibility,n.card=t.card,n.created_at=new Date(t.created_at),n.in_reply_to_status_id=n.in_reply_to_status_id?String(n.in_reply_to_status_id):null,n.in_reply_to_user_id=n.in_reply_to_user_id?String(n.in_reply_to_user_id):null,n.user=S(o?t.account:t.user),n.attentions=((o?t.mentions:t.attentions)||[]).map(S),n.attachments=((o?t.media_attachments:t.attachments)||[]).map(N);var i=o?t.reblog:t.retweeted_status;return i&&(n.retweeted_status=e(i)),n.favoritedBy=[],n.rebloggedBy=[],Object.prototype.hasOwnProperty.call(t,"originalStatus")&&Object.assign(n,t.originalStatus),n},R=function(e){var t={};if(Object.prototype.hasOwnProperty.call(e,"ntype")){var r=L(e.notice);t.type=e.ntype,t.seen=Boolean(e.is_seen),t.status="like"===t.type?L(e.notice.favorited_status):r,t.action=r,t.from_profile="pleroma:chat_mention"===t.type?S(e.account):S(e.from_profile)}else t.type={favourite:"like",reblog:"repeat"}[e.type]||e.type,t.seen=e.pleroma.is_seen,t.status=m(t.type)?L(e.status):null,t.action=t.status,t.target="move"!==t.type?null:S(e.target),t.from_profile=S(e.account),t.emoji=e.emoji,t.emoji_url=e.emoji_url,e.report&&(t.report=e.report,t.report.content=e.report.content,t.report.acct=S(e.report.account),t.report.actor=S(e.report.actor),t.report.statuses=e.report.statuses.map(L));return t.created_at=new Date(e.created_at),t.id=parseInt(e.id),t},F=function(e){return(e.tags||[]).includes("nsfw")||!!(e.text||"").match(/#nsfw/i)};const A="undefined"!=typeof window,T="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,C=e=>T?Symbol(e):e,P=e=>"number"==typeof e&&isFinite(e),D=e=>"[object RegExp]"===Z(e),M=e=>ee(e)&&0===Object.keys(e).length;function W(e,t){"undefined"!=typeof console&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const U=Object.assign;let $;const q=()=>$||($="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==r.g?r.g:{});function V(e){return e.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}const B=Object.prototype.hasOwnProperty;function H(e,t){return B.call(e,t)}const G=Array.isArray,Y=e=>"function"==typeof e,X=e=>"string"==typeof e,K=e=>"boolean"==typeof e,J=e=>null!==e&&"object"==typeof e,Q=Object.prototype.toString,Z=e=>Q.call(e),ee=e=>"[object Object]"===Z(e);function te(e,t,r={}){const{domain:n,messages:o,args:a}=r,i=new SyntaxError(String(e));return i.code=e,t&&(i.location=t),i.domain=n,i}String.fromCharCode(8232),String.fromCharCode(8233);const re=[];re[0]={w:[0],i:[3,0],"[":[4],o:[7]},re[1]={w:[1],".":[2],"[":[4],o:[7]},re[2]={w:[2],i:[3,0],0:[3,0]},re[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},re[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},re[5]={"'":[4,0],o:8,l:[5,0]},re[6]={'"':[4,0],o:8,l:[6,0]};const ne=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function oe(e){if(null==e)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}const ae=new Map;function ie(e,t){return J(e)?e[t]:null}const se=e=>e,le=e=>"",ce=e=>0===e.length?"":e.join(""),ue=e=>null==e?"":G(e)||ee(e)&&e.toString===Q?JSON.stringify(e,null,2):String(e);function fe(e,t){return e=Math.abs(e),2===t?e?e>1?1:0:1:e?Math.min(e,2):0}let pe=null;const de=me("function:translate");function me(e){return t=>pe&&pe.emit(e,t)}function he(e,t,r){return[...new Set([r,...G(t)?t:J(t)?Object.keys(t):X(t)?[t]:[r]])]}function _e(e,t,r){const n=X(r)?r:be,o=e;o.__localeChainCache||(o.__localeChainCache=new Map);let a=o.__localeChainCache.get(n);if(!a){a=[];let e=[r];for(;G(e);)e=ve(a,e,t);const i=G(t)||!ee(t)?t:t.default?t.default:null;e=X(i)?[i]:i,G(e)&&ve(a,e,!1),o.__localeChainCache.set(n,a)}return a}function ve(e,t,r){let n=!0;for(let o=0;o<t.length&&K(n);o++){const a=t[o];X(a)&&(n=ge(e,t[o],r))}return n}function ge(e,t,r){let n;const o=t.split("-");do{n=ye(e,o.join("-"),r),o.splice(-1,1)}while(o.length&&!0===n);return n}function ye(e,t,r){let n=!1;if(!e.includes(t)&&(n=!0,t)){n="!"!==t[t.length-1];const o=t.replace(/!/g,"");e.push(o),(G(r)||ee(r))&&r[o]&&(n=r[o])}return n}const be="en-US",we=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;let xe,ze,ke=null;const Oe=e=>{ke=e};let je=null;const Ee=e=>{je=e};let Ie=0;function Se(e,t,r,n,o){const{missing:a,onWarn:i}=e;if(null!==a){const n=a(e,r,t,o);return X(n)?n:t}return t}function Ne(e,t,r){e.__localeChainCache=new Map,e.localeFallbacker(e,r,t)}Object.create(null);let Le=15;const Re=()=>++Le,Fe={INVALID_ARGUMENT:Le,INVALID_DATE_ARGUMENT:Re(),INVALID_ISO_DATE_ARGUMENT:Re(),__EXTEND_POINT__:Re()};function Ae(e){return te(e,null,void 0)}const Te=()=>"",Ce=e=>Y(e);function Pe(e,...t){const{fallbackFormat:r,postTranslation:n,unresolving:o,messageCompiler:a,fallbackLocale:i,messages:s}=e,[l,c]=We(...t),u=(K(c.missingWarn)?c.missingWarn:e.missingWarn,K(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,K(c.escapeParameter)?c.escapeParameter:e.escapeParameter),f=!!c.resolvedMessage,p=X(c.default)||K(c.default)?K(c.default)?a?l:()=>l:c.default:r?a?l:()=>l:"",d=r||""!==p,m=X(c.locale)?c.locale:e.locale;u&&function(e){G(e.list)?e.list=e.list.map((e=>X(e)?V(e):e)):J(e.named)&&Object.keys(e.named).forEach((t=>{X(e.named[t])&&(e.named[t]=V(e.named[t]))}))}(c);let[h,_,v]=f?[l,m,s[m]||{}]:De(e,l,m,i),g=h,y=l;if(f||X(g)||Ce(g)||d&&(g=p,y=g),!(f||(X(g)||Ce(g))&&X(_)))return o?-1:l;let b=!1;const w=Ce(g)?g:Me(e,l,_,g,y,(()=>{b=!0}));if(b)return g;const x=function(e,t,r,n){const{modifiers:o,pluralRules:a,messageResolver:i,fallbackLocale:s,fallbackWarn:l,missingWarn:c,fallbackContext:u}=e,f={locale:t,modifiers:o,pluralRules:a,messages:n=>{let o=i(r,n);if(null==o&&u){const[,,e]=De(u,n,t,s);o=i(e,n)}if(X(o)){let r=!1;const a=Me(e,n,t,o,n,(()=>{r=!0}));return r?Te:a}return Ce(o)?o:Te}};return e.processor&&(f.processor=e.processor),n.list&&(f.list=n.list),n.named&&(f.named=n.named),P(n.plural)&&(f.pluralIndex=n.plural),f}(e,_,v,c),z=function(e,t,r){return t(r)}(0,w,function(e={}){const t=e.locale,r=function(e){const t=P(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(P(e.named.count)||P(e.named.n))?P(e.named.count)?e.named.count:P(e.named.n)?e.named.n:t:t}(e),n=J(e.pluralRules)&&X(t)&&Y(e.pluralRules[t])?e.pluralRules[t]:fe,o=J(e.pluralRules)&&X(t)&&Y(e.pluralRules[t])?fe:void 0,a=e.list||[],i=e.named||{};function s(t){return(Y(e.messages)?e.messages(t):!!J(e.messages)&&e.messages[t])||(e.parent?e.parent.message(t):le)}P(e.pluralIndex)&&function(e,t){t.count||(t.count=e),t.n||(t.n=e)}(r,i);const l=ee(e.processor)&&Y(e.processor.normalize)?e.processor.normalize:ce,c=ee(e.processor)&&Y(e.processor.interpolate)?e.processor.interpolate:ue,u={list:e=>a[e],named:e=>i[e],plural:e=>e[n(r,e.length,o)],linked:(t,...r)=>{const[n,o]=r;let a="text",i="";1===r.length?J(n)?(i=n.modifier||i,a=n.type||a):X(n)&&(i=n||i):2===r.length&&(X(n)&&(i=n||i),X(o)&&(a=o||a));let l=s(t)(u);return"vnode"===a&&G(l)&&i&&(l=l[0]),i?(c=i,e.modifiers?e.modifiers[c]:se)(l,a):l;var c},message:s,type:ee(e.processor)&&X(e.processor.type)?e.processor.type:"text",interpolate:c,normalize:l};return u}(x)),k=n?n(z,l):z;if(__INTLIFY_PROD_DEVTOOLS__){const t={timestamp:Date.now(),key:X(l)?l:Ce(g)?g.key:"",locale:_||(Ce(g)?g.locale:""),format:X(g)?g:Ce(g)?g.source:"",message:k};t.meta=U({},e.__meta,ke||{}),de(t)}return k}function De(e,t,r,n,o,a){const{messages:i,onWarn:s,messageResolver:l,localeFallbacker:c}=e,u=c(e,n,r);let f,p={},d=null,m=r,h=null;for(let r=0;r<u.length&&(f=h=u[r],p=i[f]||{},null===(d=l(p,t))&&(d=p[t]),!X(d)&&!Y(d));r++){const r=Se(e,t,f,0,"translate");r!==t&&(d=r),m=h}return[d,f,p]}function Me(e,t,r,n,o,a){const{messageCompiler:i,warnHtmlMessage:s}=e;if(Ce(n)){const e=n;return e.locale=e.locale||r,e.key=e.key||t,e}if(null==i){const e=()=>n;return e.locale=r,e.key=t,e}const l=i(n,function(e,t,r,n,o,a){return{warnHtmlMessage:o,onError:e=>{throw a&&a(e),e},onCacheKey:e=>((e,t,r)=>{return n={l:e,k:t,s:r},JSON.stringify(n).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027");var n})(t,r,e)}}(0,r,o,0,s,a));return l.locale=r,l.key=t,l.source=n,l}function We(...e){const[t,r,n]=e,o={};if(!X(t)&&!P(t)&&!Ce(t))throw Ae(Fe.INVALID_ARGUMENT);const a=P(t)?String(t):(Ce(t),t);return P(r)?o.plural=r:X(r)?o.default=r:ee(r)&&!M(r)?o.named=r:G(r)&&(o.list=r),P(n)?o.plural=n:X(n)?o.default=n:ee(n)&&U(o,n),[a,o]}const Ue="undefined"!=typeof Intl;function $e(e,...t){const{datetimeFormats:r,unresolving:n,fallbackLocale:o,onWarn:a,localeFallbacker:i}=e,{__datetimeFormatters:s}=e,[l,c,u,f]=Ve(...t),p=(K(u.missingWarn)?u.missingWarn:e.missingWarn,K(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,!!u.part),d=X(u.locale)?u.locale:e.locale,m=i(e,o,d);if(!X(l)||""===l)return new Intl.DateTimeFormat(d,f).format(c);let h,_={},v=null,g=d,y=null;for(let t=0;t<m.length&&(h=y=m[t],_=r[h]||{},v=_[l],!ee(v));t++)Se(e,l,h,0,"datetime format"),g=y;if(!ee(v)||!X(h))return n?-1:l;let b=`${h}__${l}`;M(f)||(b=`${b}__${JSON.stringify(f)}`);let w=s.get(b);return w||(w=new Intl.DateTimeFormat(h,U({},v,f)),s.set(b,w)),p?w.formatToParts(c):w.format(c)}Ue&&Intl.DateTimeFormat,Ue&&Intl.NumberFormat;const qe=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Ve(...e){const[t,r,n,o]=e,a={};let i,s={};if(X(t)){const e=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!e)throw Ae(Fe.INVALID_ISO_DATE_ARGUMENT);const r=e[3]?e[3].trim().startsWith("T")?`${e[1].trim()}${e[3].trim()}`:`${e[1].trim()}T${e[3].trim()}`:e[1].trim();i=new Date(r);try{i.toISOString()}catch(e){throw Ae(Fe.INVALID_ISO_DATE_ARGUMENT)}}else if("[object Date]"===Z(t)){if(isNaN(t.getTime()))throw Ae(Fe.INVALID_DATE_ARGUMENT);i=t}else{if(!P(t))throw Ae(Fe.INVALID_ARGUMENT);i=t}return X(r)?a.key=r:ee(r)&&Object.keys(r).forEach((e=>{qe.includes(e)?s[e]=r[e]:a[e]=r[e]})),X(n)?a.locale=n:ee(n)&&(s=n),ee(o)&&(s=o),[a.key||"",i,a,s]}function Be(e,t,r){const n=e;for(const e in r){const r=`${t}__${e}`;n.__datetimeFormatters.has(r)&&n.__datetimeFormatters.delete(r)}}function He(e,...t){const{numberFormats:r,unresolving:n,fallbackLocale:o,onWarn:a,localeFallbacker:i}=e,{__numberFormatters:s}=e,[l,c,u,f]=Ye(...t),p=(K(u.missingWarn)?u.missingWarn:e.missingWarn,K(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,!!u.part),d=X(u.locale)?u.locale:e.locale,m=i(e,o,d);if(!X(l)||""===l)return new Intl.NumberFormat(d,f).format(c);let h,_={},v=null,g=d,y=null;for(let t=0;t<m.length&&(h=y=m[t],_=r[h]||{},v=_[l],!ee(v));t++)Se(e,l,h,0,"number format"),g=y;if(!ee(v)||!X(h))return n?-1:l;let b=`${h}__${l}`;M(f)||(b=`${b}__${JSON.stringify(f)}`);let w=s.get(b);return w||(w=new Intl.NumberFormat(h,U({},v,f)),s.set(b,w)),p?w.formatToParts(c):w.format(c)}const Ge=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Ye(...e){const[t,r,n,o]=e,a={};let i={};if(!P(t))throw Ae(Fe.INVALID_ARGUMENT);const s=t;return X(r)?a.key=r:ee(r)&&Object.keys(r).forEach((e=>{Ge.includes(e)?i[e]=r[e]:a[e]=r[e]})),X(n)?a.locale=n:ee(n)&&(i=n),ee(o)&&(i=o),[a.key||"",s,a,i]}function Xe(e,t,r){const n=e;for(const e in r){const r=`${t}__${e}`;n.__numberFormatters.has(r)&&n.__numberFormatters.delete(r)}}function Ke(e,t){const r=Object.create(null),n=e.split(",");for(let e=0;e<n.length;e++)r[n[e]]=!0;return t?e=>!!r[e.toLowerCase()]:e=>!!r[e]}function Je(e){if(ut(e)){const t={};for(let r=0;r<e.length;r++){const n=e[r],o=dt(n)?tt(n):Je(n);if(o)for(const e in o)t[e]=o[e]}return t}return dt(e)||ht(e)?e:void 0}"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(q().__INTLIFY_PROD_DEVTOOLS__=!1);const Qe=/;(?![^(]*\))/g,Ze=/:([^]+)/,et=/\/\*.*?\*\//gs;function tt(e){const t={};return e.replace(et,"").split(Qe).forEach((e=>{if(e){const r=e.split(Ze);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}function rt(e){let t="";if(dt(e))t=e;else if(ut(e))for(let r=0;r<e.length;r++){const n=rt(e[r]);n&&(t+=n+" ")}else if(ht(e))for(const r in e)e[r]&&(t+=r+" ");return t.trim()}const nt={},ot=()=>{},at=/^on[^a-z]/,it=e=>at.test(e),st=Object.assign,lt=Object.prototype.hasOwnProperty,ct=(e,t)=>lt.call(e,t),ut=Array.isArray,ft=e=>"[object Map]"===vt(e),pt=e=>"function"==typeof e,dt=e=>"string"==typeof e,mt=e=>"symbol"==typeof e,ht=e=>null!==e&&"object"==typeof e,_t=Object.prototype.toString,vt=e=>_t.call(e),gt=e=>dt(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,yt=e=>{const t=Object.create(null);return r=>t[r]||(t[r]=e(r))},bt=/-(\w)/g,wt=(yt((e=>e.replace(bt,((e,t)=>t?t.toUpperCase():"")))),/\B([A-Z])/g),xt=(yt((e=>e.replace(wt,"-$1").toLowerCase())),yt((e=>e.charAt(0).toUpperCase()+e.slice(1)))),zt=(yt((e=>e?`on${xt(e)}`:"")),(e,t)=>!Object.is(e,t));let kt;class Ot{constructor(e=!1){this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=kt,!e&&kt&&(this.index=(kt.scopes||(kt.scopes=[])).push(this)-1)}run(e){if(this.active){const t=kt;try{return kt=this,e()}finally{kt=t}}}on(){kt=this}off(){kt=this.parent}stop(e){if(this.active){let t,r;for(t=0,r=this.effects.length;t<r;t++)this.effects[t].stop();for(t=0,r=this.cleanups.length;t<r;t++)this.cleanups[t]();if(this.scopes)for(t=0,r=this.scopes.length;t<r;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this.active=!1}}}const jt=e=>{const t=new Set(e);return t.w=0,t.n=0,t},Et=e=>(e.w&Rt)>0,It=e=>(e.n&Rt)>0,St=new WeakMap;let Nt,Lt=0,Rt=1;const Ft=Symbol(""),At=Symbol("");class Tt{constructor(e,t=null,r){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,function(e,t=kt){t&&t.active&&t.effects.push(e)}(this,r)}run(){if(!this.active)return this.fn();let e=Nt,t=Pt;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=Nt,Nt=this,Pt=!0,Rt=1<<++Lt,Lt<=30?(({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Rt})(this):Ct(this),this.fn()}finally{Lt<=30&&(e=>{const{deps:t}=e;if(t.length){let r=0;for(let n=0;n<t.length;n++){const o=t[n];Et(o)&&!It(o)?o.delete(e):t[r++]=o,o.w&=~Rt,o.n&=~Rt}t.length=r}})(this),Rt=1<<--Lt,Nt=this.parent,Pt=t,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Nt===this?this.deferStop=!0:this.active&&(Ct(this),this.onStop&&this.onStop(),this.active=!1)}}function Ct(e){const{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}let Pt=!0;const Dt=[];function Mt(){Dt.push(Pt),Pt=!1}function Wt(){const e=Dt.pop();Pt=void 0===e||e}function Ut(e,t,r){if(Pt&&Nt){let t=St.get(e);t||St.set(e,t=new Map);let n=t.get(r);n||t.set(r,n=jt()),$t(n)}}function $t(e,t){let r=!1;Lt<=30?It(e)||(e.n|=Rt,r=!Et(e)):r=!e.has(Nt),r&&(e.add(Nt),Nt.deps.push(e))}function qt(e,t,r,n,o,a){const i=St.get(e);if(!i)return;let s=[];if("clear"===t)s=[...i.values()];else if("length"===r&&ut(e)){const e=(e=>{const t=parseFloat(e);return isNaN(t)?e:t})(n);i.forEach(((t,r)=>{("length"===r||r>=e)&&s.push(t)}))}else switch(void 0!==r&&s.push(i.get(r)),t){case"add":ut(e)?gt(r)&&s.push(i.get("length")):(s.push(i.get(Ft)),ft(e)&&s.push(i.get(At)));break;case"delete":ut(e)||(s.push(i.get(Ft)),ft(e)&&s.push(i.get(At)));break;case"set":ft(e)&&s.push(i.get(Ft))}if(1===s.length)s[0]&&Vt(s[0]);else{const e=[];for(const t of s)t&&e.push(...t);Vt(jt(e))}}function Vt(e,t){const r=ut(e)?e:[...e];for(const e of r)e.computed&&Bt(e);for(const e of r)e.computed||Bt(e)}function Bt(e,t){(e!==Nt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Ht=Ke("__proto__,__v_isRef,__isVue"),Gt=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(mt)),Yt=Qt(),Xt=Qt(!0),Kt=Jt();function Jt(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const r=Fr(this);for(let e=0,t=this.length;e<t;e++)Ut(r,0,e+"");const n=r[t](...e);return-1===n||!1===n?r[t](...e.map(Fr)):n}})),["push","pop","shift","unshift","splice"].forEach((t=>{e[t]=function(...e){Mt();const r=Fr(this)[t].apply(this,e);return Wt(),r}})),e}function Qt(e=!1,t=!1){return function(r,n,o){if("__v_isReactive"===n)return!e;if("__v_isReadonly"===n)return e;if("__v_isShallow"===n)return t;if("__v_raw"===n&&o===(e?t?Or:kr:t?zr:xr).get(r))return r;const a=ut(r);if(!e&&a&&ct(Kt,n))return Reflect.get(Kt,n,o);const i=Reflect.get(r,n,o);return(mt(n)?Gt.has(n):Ht(n))?i:(e||Ut(r,0,n),t?i:Mr(i)?a&&gt(n)?i:i.value:ht(i)?e?Er(i):jr(i):i)}}function Zt(e=!1){return function(t,r,n,o){let a=t[r];if(Nr(a)&&Mr(a)&&!Mr(n))return!1;if(!e&&(Lr(n)||Nr(n)||(a=Fr(a),n=Fr(n)),!ut(t)&&Mr(a)&&!Mr(n)))return a.value=n,!0;const i=ut(t)&&gt(r)?Number(r)<t.length:ct(t,r),s=Reflect.set(t,r,n,o);return t===Fr(o)&&(i?zt(n,a)&&qt(t,"set",r,n):qt(t,"add",r,n)),s}}const er={get:Yt,set:Zt(),deleteProperty:function(e,t){const r=ct(e,t),n=(e[t],Reflect.deleteProperty(e,t));return n&&r&&qt(e,"delete",t,void 0),n},has:function(e,t){const r=Reflect.has(e,t);return mt(t)&&Gt.has(t)||Ut(e,0,t),r},ownKeys:function(e){return Ut(e,0,ut(e)?"length":Ft),Reflect.ownKeys(e)}},tr={get:Xt,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},rr=e=>e,nr=e=>Reflect.getPrototypeOf(e);function or(e,t,r=!1,n=!1){const o=Fr(e=e.__v_raw),a=Fr(t);r||(t!==a&&Ut(o,0,t),Ut(o,0,a));const{has:i}=nr(o),s=n?rr:r?Cr:Tr;return i.call(o,t)?s(e.get(t)):i.call(o,a)?s(e.get(a)):void(e!==o&&e.get(t))}function ar(e,t=!1){const r=this.__v_raw,n=Fr(r),o=Fr(e);return t||(e!==o&&Ut(n,0,e),Ut(n,0,o)),e===o?r.has(e):r.has(e)||r.has(o)}function ir(e,t=!1){return e=e.__v_raw,!t&&Ut(Fr(e),0,Ft),Reflect.get(e,"size",e)}function sr(e){e=Fr(e);const t=Fr(this);return nr(t).has.call(t,e)||(t.add(e),qt(t,"add",e,e)),this}function lr(e,t){t=Fr(t);const r=Fr(this),{has:n,get:o}=nr(r);let a=n.call(r,e);a||(e=Fr(e),a=n.call(r,e));const i=o.call(r,e);return r.set(e,t),a?zt(t,i)&&qt(r,"set",e,t):qt(r,"add",e,t),this}function cr(e){const t=Fr(this),{has:r,get:n}=nr(t);let o=r.call(t,e);o||(e=Fr(e),o=r.call(t,e)),n&&n.call(t,e);const a=t.delete(e);return o&&qt(t,"delete",e,void 0),a}function ur(){const e=Fr(this),t=0!==e.size,r=e.clear();return t&&qt(e,"clear",void 0,void 0),r}function fr(e,t){return function(r,n){const o=this,a=o.__v_raw,i=Fr(a),s=t?rr:e?Cr:Tr;return!e&&Ut(i,0,Ft),a.forEach(((e,t)=>r.call(n,s(e),s(t),o)))}}function pr(e,t,r){return function(...n){const o=this.__v_raw,a=Fr(o),i=ft(a),s="entries"===e||e===Symbol.iterator&&i,l="keys"===e&&i,c=o[e](...n),u=r?rr:t?Cr:Tr;return!t&&Ut(a,0,l?At:Ft),{next(){const{value:e,done:t}=c.next();return t?{value:e,done:t}:{value:s?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function dr(e){return function(...t){return"delete"!==e&&this}}function mr(){const e={get(e){return or(this,e)},get size(){return ir(this)},has:ar,add:sr,set:lr,delete:cr,clear:ur,forEach:fr(!1,!1)},t={get(e){return or(this,e,!1,!0)},get size(){return ir(this)},has:ar,add:sr,set:lr,delete:cr,clear:ur,forEach:fr(!1,!0)},r={get(e){return or(this,e,!0)},get size(){return ir(this,!0)},has(e){return ar.call(this,e,!0)},add:dr("add"),set:dr("set"),delete:dr("delete"),clear:dr("clear"),forEach:fr(!0,!1)},n={get(e){return or(this,e,!0,!0)},get size(){return ir(this,!0)},has(e){return ar.call(this,e,!0)},add:dr("add"),set:dr("set"),delete:dr("delete"),clear:dr("clear"),forEach:fr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=pr(o,!1,!1),r[o]=pr(o,!0,!1),t[o]=pr(o,!1,!0),n[o]=pr(o,!0,!0)})),[e,r,t,n]}const[hr,_r,vr,gr]=mr();function yr(e,t){const r=t?e?gr:vr:e?_r:hr;return(t,n,o)=>"__v_isReactive"===n?!e:"__v_isReadonly"===n?e:"__v_raw"===n?t:Reflect.get(ct(r,n)&&n in t?r:t,n,o)}const br={get:yr(!1,!1)},wr={get:yr(!0,!1)},xr=new WeakMap,zr=new WeakMap,kr=new WeakMap,Or=new WeakMap;function jr(e){return Nr(e)?e:Ir(e,!1,er,br,xr)}function Er(e){return Ir(e,!0,tr,wr,kr)}function Ir(e,t,r,n,o){if(!ht(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const a=o.get(e);if(a)return a;const i=(s=e).__v_skip||!Object.isExtensible(s)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>vt(e).slice(8,-1))(s));var s;if(0===i)return e;const l=new Proxy(e,2===i?n:r);return o.set(e,l),l}function Sr(e){return Nr(e)?Sr(e.__v_raw):!(!e||!e.__v_isReactive)}function Nr(e){return!(!e||!e.__v_isReadonly)}function Lr(e){return!(!e||!e.__v_isShallow)}function Rr(e){return Sr(e)||Nr(e)}function Fr(e){const t=e&&e.__v_raw;return t?Fr(t):e}function Ar(e){return((e,t,r)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r})})(e,"__v_skip",!0),e}const Tr=e=>ht(e)?jr(e):e,Cr=e=>ht(e)?Er(e):e;function Pr(e){Pt&&Nt&&$t((e=Fr(e)).dep||(e.dep=jt()))}function Dr(e,t){(e=Fr(e)).dep&&Vt(e.dep)}function Mr(e){return!(!e||!0!==e.__v_isRef)}function Wr(e){return Ur(e,!1)}function Ur(e,t){return Mr(e)?e:new $r(e,t)}class $r{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:Fr(e),this._value=t?e:Tr(e)}get value(){return Pr(this),this._value}set value(e){const t=this.__v_isShallow||Lr(e)||Nr(e);e=t?e:Fr(e),zt(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Tr(e),Dr(this))}}const qr={get:(e,t,r)=>{return Mr(n=Reflect.get(e,t,r))?n.value:n;var n},set:(e,t,r,n)=>{const o=e[t];return Mr(o)&&!Mr(r)?(o.value=r,!0):Reflect.set(e,t,r,n)}};var Vr;class Br{constructor(e,t,r,n){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[Vr]=!1,this._dirty=!0,this.effect=new Tt(e,(()=>{this._dirty||(this._dirty=!0,Dr(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!n,this.__v_isReadonly=r}get value(){const e=Fr(this);return Pr(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Hr(e,t,r,n){let o;try{o=n?e(...n):e()}catch(e){Yr(e,t,r)}return o}function Gr(e,t,r,n){if(pt(e)){const a=Hr(e,t,r,n);return a&&(ht(o=a)&&pt(o.then)&&pt(o.catch))&&a.catch((e=>{Yr(e,t,r)})),a}var o;const a=[];for(let o=0;o<e.length;o++)a.push(Gr(e[o],t,r,n));return a}function Yr(e,t,r,n=!0){if(t&&t.vnode,t){let n=t.parent;const o=t.proxy,a=r;for(;n;){const t=n.ec;if(t)for(let r=0;r<t.length;r++)if(!1===t[r](e,o,a))return;n=n.parent}const i=t.appContext.config.errorHandler;if(i)return void Hr(i,null,10,[e,o,a])}!function(e,t,r,n=!0){console.error(e)}(e,0,0,n)}Vr="__v_isReadonly";let Xr=!1,Kr=!1;const Jr=[];let Qr=0;const Zr=[];let en=null,tn=0;const rn=Promise.resolve();let nn=null;function on(e){const t=nn||rn;return e?t.then(this?e.bind(this):e):t}function an(e){Jr.length&&Jr.includes(e,Xr&&e.allowRecurse?Qr+1:Qr)||(null==e.id?Jr.push(e):Jr.splice(function(e){let t=Qr+1,r=Jr.length;for(;t<r;){const n=t+r>>>1;ln(Jr[n])<e?t=n+1:r=n}return t}(e.id),0,e),sn())}function sn(){Xr||Kr||(Kr=!0,nn=rn.then(un))}const ln=e=>null==e.id?1/0:e.id,cn=(e,t)=>{const r=ln(e)-ln(t);if(0===r){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return r};function un(e){Kr=!1,Xr=!0,Jr.sort(cn);try{for(Qr=0;Qr<Jr.length;Qr++){const e=Jr[Qr];e&&!1!==e.active&&Hr(e,null,14)}}finally{Qr=0,Jr.length=0,function(e){if(Zr.length){const e=[...new Set(Zr)];if(Zr.length=0,en)return void en.push(...e);for(en=e,en.sort(((e,t)=>ln(e)-ln(t))),tn=0;tn<en.length;tn++)en[tn]();en=null,tn=0}}(),Xr=!1,nn=null,(Jr.length||Zr.length)&&un(e)}}new Set,new Map;let fn=null;function pn(e,t,r=!1){const n=qn||fn;if(n){const o=null==n.parent?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return r&&pt(t)?t.call(n.proxy):t}}const dn={};function mn(e,t,r){return hn(e,t,r)}function hn(e,t,{immediate:r,deep:n,flush:o,onTrack:a,onTrigger:i}=nt){const s=qn;let l,c,u=!1,f=!1;if(Mr(e)?(l=()=>e.value,u=Lr(e)):Sr(e)?(l=()=>e,n=!0):ut(e)?(f=!0,u=e.some((e=>Sr(e)||Lr(e))),l=()=>e.map((e=>Mr(e)?e.value:Sr(e)?vn(e):pt(e)?Hr(e,s,2):void 0))):l=pt(e)?t?()=>Hr(e,s,2):()=>{if(!s||!s.isUnmounted)return c&&c(),Gr(e,s,3,[d])}:ot,t&&n){const e=l;l=()=>vn(e())}let p,d=e=>{c=v.onStop=()=>{Hr(e,s,4)}};if(Gn){if(d=ot,t?r&&Gr(t,s,3,[l(),f?[]:void 0,d]):l(),"sync"!==o)return ot;{const e=Jn();p=e.__watcherHandles||(e.__watcherHandles=[])}}let m=f?new Array(e.length).fill(dn):dn;const h=()=>{if(v.active)if(t){const e=v.run();(n||u||(f?e.some(((e,t)=>zt(e,m[t]))):zt(e,m)))&&(c&&c(),Gr(t,s,3,[e,m===dn?void 0:f&&m[0]===dn?[]:m,d]),m=e)}else v.run()};let _;h.allowRecurse=!!t,"sync"===o?_=h:"post"===o?_=()=>Ln(h,s&&s.suspense):(h.pre=!0,s&&(h.id=s.uid),_=()=>an(h));const v=new Tt(l,_);t?r?h():m=v.run():"post"===o?Ln(v.run.bind(v),s&&s.suspense):v.run();const g=()=>{v.stop(),s&&s.scope&&((e,t)=>{const r=e.indexOf(t);r>-1&&e.splice(r,1)})(s.scope.effects,v)};return p&&p.push(g),g}function _n(e,t,r){const n=this.proxy,o=dt(e)?e.includes(".")?function(e,t){const r=t.split(".");return()=>{let t=e;for(let e=0;e<r.length&&t;e++)t=t[r[e]];return t}}(n,e):()=>n[e]:e.bind(n,n);let a;pt(t)?a=t:(a=t.handler,r=t);const i=qn;Bn(this);const s=hn(o,a.bind(n),r);return i?Bn(i):Hn(),s}function vn(e,t){if(!ht(e)||e.__v_skip)return e;if((t=t||new Set).has(e))return e;if(t.add(e),Mr(e))vn(e.value,t);else if(ut(e))for(let r=0;r<e.length;r++)vn(e[r],t);else if("[object Set]"===vt(e)||ft(e))e.forEach((e=>{vn(e,t)}));else if((e=>"[object Object]"===vt(e))(e))for(const r in e)vn(e[r],t);return e}Boolean,Boolean;RegExp,RegExp;const gn=e=>(t,r=qn)=>(!Gn||"sp"===e)&&function(e,t,r=qn,n=!1){if(r){const o=r[e]||(r[e]=[]),a=t.__weh||(t.__weh=(...n)=>{if(r.isUnmounted)return;Mt(),Bn(r);const o=Gr(t,r,e,n);return Hn(),Wt(),o});return n?o.unshift(a):o.push(a),a}}(e,((...e)=>t(...e)),r),yn=gn("bm"),bn=gn("m"),wn=(gn("bu"),gn("u"),gn("bum"),gn("um"));gn("sp"),gn("rtg"),gn("rtc");const xn=Symbol(),zn=e=>e?4&e.vnode.shapeFlag?function(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy((t=Ar(e.exposed),Sr(t)?t:new Proxy(t,qr)),{get:(t,r)=>r in t?t[r]:r in kn?kn[r](e):void 0,has:(e,t)=>t in e||t in kn}));var t}(e)||e.proxy:zn(e.parent):null,kn=st(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zn(e.parent),$root:e=>zn(e.root),$emit:e=>e.emit,$options:e=>function(e){const t=e.type,{mixins:r,extends:n}=t,{mixins:o,optionsCache:a,config:{optionMergeStrategies:i}}=e.appContext,s=a.get(t);let l;return s?l=s:o.length||r||n?(l={},o.length&&o.forEach((e=>On(l,e,i,!0))),On(l,t,i)):l=t,ht(t)&&a.set(t,l),l}(e),$forceUpdate:e=>e.f||(e.f=()=>an(e.update)),$nextTick:e=>e.n||(e.n=on.bind(e.proxy)),$watch:e=>_n.bind(e)});function On(e,t,r,n=!1){const{mixins:o,extends:a}=t;a&&On(e,a,r,!0),o&&o.forEach((t=>On(e,t,r,!0)));for(const o in t)if(n&&"expose"===o);else{const n=jn[o]||r&&r[o];e[o]=n?n(e[o],t[o]):t[o]}return e}const jn={data:En,props:Nn,emits:Nn,methods:Nn,computed:Nn,beforeCreate:Sn,created:Sn,beforeMount:Sn,mounted:Sn,beforeUpdate:Sn,updated:Sn,beforeDestroy:Sn,beforeUnmount:Sn,destroyed:Sn,unmounted:Sn,activated:Sn,deactivated:Sn,errorCaptured:Sn,serverPrefetch:Sn,components:Nn,directives:Nn,watch:function(e,t){if(!e)return t;if(!t)return e;const r=st(Object.create(null),e);for(const n in t)r[n]=Sn(e[n],t[n]);return r},provide:En,inject:function(e,t){return Nn(In(e),In(t))}};function En(e,t){return t?e?function(){return st(pt(e)?e.call(this,this):e,pt(t)?t.call(this,this):t)}:t:e}function In(e){if(ut(e)){const t={};for(let r=0;r<e.length;r++)t[e[r]]=e[r];return t}return e}function Sn(e,t){return e?[...new Set([].concat(e,t))]:t}function Nn(e,t){return e?st(st(Object.create(null),e),t):t}const Ln=function(e,t){var r;t&&t.pendingBranch?ut(e)?t.effects.push(...e):t.effects.push(e):(ut(r=e)?Zr.push(...r):en&&en.includes(r,r.allowRecurse?tn+1:tn)||Zr.push(r),sn())},Rn=Symbol(void 0),Fn=Symbol(void 0),An=Symbol(void 0);Symbol(void 0);function Tn(e){return!!e&&!0===e.__v_isVNode}const Cn="__vInternal",Pn=({key:e})=>null!=e?e:null,Dn=({ref:e,ref_key:t,ref_for:r})=>null!=e?dt(e)||Mr(e)||pt(e)?{i:fn,r:e,k:t,f:!!r}:e:null;const Mn=function(e,t=null,r=null,n=0,o=null,a=!1){if(e&&e!==xn||(e=An),Tn(e)){const n=Wn(e,t,!0);return r&&$n(n,r),n.patchFlag|=-2,n}if(i=e,pt(i)&&"__vccOpts"in i&&(e=e.__vccOpts),t){t=function(e){return e?Rr(e)||Cn in e?st({},e):e:null}(t);let{class:e,style:r}=t;e&&!dt(e)&&(t.class=rt(e)),ht(r)&&(Rr(r)&&!ut(r)&&(r=st({},r)),t.style=Je(r))}var i;return function(e,t=null,r=null,n=0,o=null,a=(e===Rn?0:1),i=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Pn(t),ref:t&&Dn(t),scopeId:null,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:fn};return s?($n(l,r),128&a&&e.normalize(l)):r&&(l.shapeFlag|=dt(r)?8:16),l}(e,t,r,n,o,dt(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:ht(e)?4:pt(e)?2:0,a,!0)};function Wn(e,t,r=!1){const{props:n,ref:o,patchFlag:a,children:i}=e,s=t?function(...e){const t={};for(let r=0;r<e.length;r++){const n=e[r];for(const e in n)if("class"===e)t.class!==n.class&&(t.class=rt([t.class,n.class]));else if("style"===e)t.style=Je([t.style,n.style]);else if(it(e)){const r=t[e],o=n[e];!o||r===o||ut(r)&&r.includes(o)||(t[e]=r?[].concat(r,o):o)}else""!==e&&(t[e]=n[e])}return t}(n||{},t):n;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&Pn(s),ref:t&&t.ref?r&&o?ut(o)?o.concat(Dn(t)):[o,Dn(t)]:Dn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Rn?-1===a?16:16|a:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wn(e.ssContent),ssFallback:e.ssFallback&&Wn(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function Un(e=" ",t=0){return Mn(Fn,null,e,t)}function $n(e,t){let r=0;const{shapeFlag:n}=e;if(null==t)t=null;else if(ut(t))r=16;else if("object"==typeof t){if(65&n){const r=t.default;return void(r&&(r._c&&(r._d=!1),$n(e,r()),r._c&&(r._d=!0)))}{r=32;const e=t._;!e&&!(Cn in t)&&(t._ctx=fn)}}else pt(t)?(t={default:t,_ctx:fn},r=32):(t=String(t),64&n?(r=16,t=[Un(t)]):r=8);e.children=t,e.shapeFlag|=r}Object.create(null),new WeakMap,new WeakMap,new WeakMap;let qn=null;const Vn=()=>qn||fn,Bn=e=>{qn=e,e.scope.on()},Hn=()=>{qn&&qn.scope.off(),qn=null};let Gn=!1;const Yn=(e,t)=>function(e,t,r=!1){let n,o;const a=pt(e);return a?(n=e,o=ot):(n=e.get,o=e.set),new Br(n,o,a||!o,r)}(e,0,Gn);function Xn(e,t,r){const n=arguments.length;return 2===n?ht(t)&&!ut(t)?Tn(t)?Mn(e,null,[t]):Mn(e,t):Mn(e,null,t):(n>3?r=Array.prototype.slice.call(arguments,2):3===n&&Tn(r)&&(r=[r]),Mn(e,t,r))}const Kn=Symbol(""),Jn=()=>pn(Kn);let Qn=7;const Zn=()=>++Qn;Zn(),Zn(),Zn(),Zn(),Zn(),Zn();let eo=15;const to=()=>++eo,ro={UNEXPECTED_RETURN_TYPE:eo,INVALID_ARGUMENT:to(),MUST_BE_CALL_SETUP_TOP:to(),NOT_INSLALLED:to(),NOT_AVAILABLE_IN_LEGACY_MODE:to(),REQUIRED_VALUE:to(),INVALID_VALUE:to(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:to(),NOT_INSLALLED_WITH_PROVIDE:to(),UNEXPECTED_ERROR:to(),NOT_COMPATIBLE_LEGACY_VUE_I18N:to(),BRIDGE_SUPPORT_VUE_2_ONLY:to(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:to(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:to(),__EXTEND_POINT__:to()};function no(e,...t){return te(e,null,void 0)}const oo=C("__transrateVNode"),ao=C("__datetimeParts"),io=C("__numberParts"),so=C("__setPluralRules");C("__intlifyMeta");const lo=C("__injectWithOption");function co(e){if(!J(e))return e;for(const t in e)if(H(e,t))if(t.includes(".")){const r=t.split("."),n=r.length-1;let o=e;for(let e=0;e<n;e++)r[e]in o||(o[r[e]]={}),o=o[r[e]];o[r[n]]=e[t],delete e[t],J(o[r[n]])&&co(o[r[n]])}else J(e[t])&&co(e[t]);return e}function uo(e,t){const{messages:r,__i18n:n,messageResolver:o,flatJson:a}=t,i=ee(r)?r:G(n)?{}:{[e]:{}};if(G(n)&&n.forEach((e=>{if("locale"in e&&"resource"in e){const{locale:t,resource:r}=e;t?(i[t]=i[t]||{},po(r,i[t])):po(r,i)}else X(e)&&po(JSON.parse(e),i)})),null==o&&a)for(const e in i)H(i,e)&&co(i[e]);return i}const fo=e=>!J(e)||G(e);function po(e,t){if(fo(e)||fo(t))throw no(ro.INVALID_VALUE);for(const r in e)H(e,r)&&(fo(e[r])||fo(t[r])?t[r]=e[r]:po(e[r],t[r]))}function mo(e){return e.type}function ho(e,t,r){let n=J(t.messages)?t.messages:{};"__i18nGlobal"in r&&(n=uo(e.locale.value,{messages:n,__i18n:r.__i18nGlobal}));const o=Object.keys(n);if(o.length&&o.forEach((t=>{e.mergeLocaleMessage(t,n[t])})),J(t.datetimeFormats)){const r=Object.keys(t.datetimeFormats);r.length&&r.forEach((r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])}))}if(J(t.numberFormats)){const r=Object.keys(t.numberFormats);r.length&&r.forEach((r=>{e.mergeNumberFormat(r,t.numberFormats[r])}))}}function _o(e){return Mn(Fn,null,e,0)}const vo="__INTLIFY_META__";let go=0;function yo(e){return(t,r,n,o)=>e(r,n,Vn()||void 0,o)}function bo(e={},t){const{__root:r}=e,n=void 0===r;let o=!K(e.inheritLocale)||e.inheritLocale;const a=Wr(r&&o?r.locale.value:X(e.locale)?e.locale:be),i=Wr(r&&o?r.fallbackLocale.value:X(e.fallbackLocale)||G(e.fallbackLocale)||ee(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:a.value),s=Wr(uo(a.value,e)),l=Wr(ee(e.datetimeFormats)?e.datetimeFormats:{[a.value]:{}}),c=Wr(ee(e.numberFormats)?e.numberFormats:{[a.value]:{}});let u=r?r.missingWarn:!K(e.missingWarn)&&!D(e.missingWarn)||e.missingWarn,f=r?r.fallbackWarn:!K(e.fallbackWarn)&&!D(e.fallbackWarn)||e.fallbackWarn,p=r?r.fallbackRoot:!K(e.fallbackRoot)||e.fallbackRoot,d=!!e.fallbackFormat,m=Y(e.missing)?e.missing:null,h=Y(e.missing)?yo(e.missing):null,_=Y(e.postTranslation)?e.postTranslation:null,v=r?r.warnHtmlMessage:!K(e.warnHtmlMessage)||e.warnHtmlMessage,g=!!e.escapeParameter;const y=r?r.modifiers:ee(e.modifiers)?e.modifiers:{};let b,w=e.pluralRules||r&&r.pluralRules;b=(()=>{n&&Ee(null);const t={version:"9.2.2",locale:a.value,fallbackLocale:i.value,messages:s.value,modifiers:y,pluralRules:w,missing:null===h?void 0:h,missingWarn:u,fallbackWarn:f,fallbackFormat:d,unresolving:!0,postTranslation:null===_?void 0:_,warnHtmlMessage:v,escapeParameter:g,messageResolver:e.messageResolver,__meta:{framework:"vue"}};t.datetimeFormats=l.value,t.numberFormats=c.value,t.__datetimeFormatters=ee(b)?b.__datetimeFormatters:void 0,t.__numberFormatters=ee(b)?b.__numberFormatters:void 0;const r=function(e={}){const t=X(e.version)?e.version:"9.2.2",r=X(e.locale)?e.locale:be,n=G(e.fallbackLocale)||ee(e.fallbackLocale)||X(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:r,o=ee(e.messages)?e.messages:{[r]:{}},a=ee(e.datetimeFormats)?e.datetimeFormats:{[r]:{}},i=ee(e.numberFormats)?e.numberFormats:{[r]:{}},s=U({},e.modifiers||{},{upper:(e,t)=>"text"===t&&X(e)?e.toUpperCase():"vnode"===t&&J(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>"text"===t&&X(e)?e.toLowerCase():"vnode"===t&&J(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>"text"===t&&X(e)?we(e):"vnode"===t&&J(e)&&"__v_isVNode"in e?we(e.children):e}),l=e.pluralRules||{},c=Y(e.missing)?e.missing:null,u=!K(e.missingWarn)&&!D(e.missingWarn)||e.missingWarn,f=!K(e.fallbackWarn)&&!D(e.fallbackWarn)||e.fallbackWarn,p=!!e.fallbackFormat,d=!!e.unresolving,m=Y(e.postTranslation)?e.postTranslation:null,h=ee(e.processor)?e.processor:null,_=!K(e.warnHtmlMessage)||e.warnHtmlMessage,v=!!e.escapeParameter,g=Y(e.messageCompiler)?e.messageCompiler:void 0,y=Y(e.messageResolver)?e.messageResolver:xe||ie,b=Y(e.localeFallbacker)?e.localeFallbacker:ze||he,w=J(e.fallbackContext)?e.fallbackContext:void 0,x=Y(e.onWarn)?e.onWarn:W,z=e,k=J(z.__datetimeFormatters)?z.__datetimeFormatters:new Map,O=J(z.__numberFormatters)?z.__numberFormatters:new Map,j=J(z.__meta)?z.__meta:{};Ie++;const E={version:t,cid:Ie,locale:r,fallbackLocale:n,messages:o,modifiers:s,pluralRules:l,missing:c,missingWarn:u,fallbackWarn:f,fallbackFormat:p,unresolving:d,postTranslation:m,processor:h,warnHtmlMessage:_,escapeParameter:v,messageCompiler:g,messageResolver:y,localeFallbacker:b,fallbackContext:w,onWarn:x,__meta:j};return E.datetimeFormats=a,E.numberFormats=i,E.__datetimeFormatters=k,E.__numberFormatters=O,__INTLIFY_PROD_DEVTOOLS__&&function(e,t,r){pe&&pe.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:r})}(E,t,j),E}(t);return n&&Ee(r),r})(),Ne(b,a.value,i.value);const x=Yn({get:()=>a.value,set:e=>{a.value=e,b.locale=a.value}}),z=Yn({get:()=>i.value,set:e=>{i.value=e,b.fallbackLocale=i.value,Ne(b,a.value,e)}}),k=Yn((()=>s.value)),O=Yn((()=>l.value)),j=Yn((()=>c.value)),E=(e,t,o,u,f,d)=>{let m;if(a.value,i.value,s.value,l.value,c.value,__INTLIFY_PROD_DEVTOOLS__)try{Oe((()=>{const e=Vn();let t=null;return e&&(t=mo(e)[vo])?{[vo]:t}:null})()),n||(b.fallbackContext=r?je:void 0),m=e(b)}finally{Oe(null),n||(b.fallbackContext=void 0)}else m=e(b);if(P(m)&&-1===m){const[e,n]=t();return r&&p?u(r):f(e)}if(d(m))return m;throw no(ro.UNEXPECTED_RETURN_TYPE)};function I(...e){return E((t=>Reflect.apply(Pe,null,[t,...e])),(()=>We(...e)),0,(t=>Reflect.apply(t.t,t,[...e])),(e=>e),(e=>X(e)))}const S={normalize:function(e){return e.map((e=>X(e)||P(e)||K(e)?_o(String(e)):e))},interpolate:e=>e,type:"vnode"};function N(e){return s.value[e]||{}}go++,r&&A&&(mn(r.locale,(e=>{o&&(a.value=e,b.locale=e,Ne(b,a.value,i.value))})),mn(r.fallbackLocale,(e=>{o&&(i.value=e,b.fallbackLocale=e,Ne(b,a.value,i.value))})));const L={id:go,locale:x,fallbackLocale:z,get inheritLocale(){return o},set inheritLocale(e){o=e,e&&r&&(a.value=r.locale.value,i.value=r.fallbackLocale.value,Ne(b,a.value,i.value))},get availableLocales(){return Object.keys(s.value).sort()},messages:k,get modifiers(){return y},get pluralRules(){return w||{}},get isGlobal(){return n},get missingWarn(){return u},set missingWarn(e){u=e,b.missingWarn=u},get fallbackWarn(){return f},set fallbackWarn(e){f=e,b.fallbackWarn=f},get fallbackRoot(){return p},set fallbackRoot(e){p=e},get fallbackFormat(){return d},set fallbackFormat(e){d=e,b.fallbackFormat=d},get warnHtmlMessage(){return v},set warnHtmlMessage(e){v=e,b.warnHtmlMessage=e},get escapeParameter(){return g},set escapeParameter(e){g=e,b.escapeParameter=e},t:I,getLocaleMessage:N,setLocaleMessage:function(e,t){s.value[e]=t,b.messages=s.value},mergeLocaleMessage:function(e,t){s.value[e]=s.value[e]||{},po(t,s.value[e]),b.messages=s.value},getPostTranslationHandler:function(){return Y(_)?_:null},setPostTranslationHandler:function(e){_=e,b.postTranslation=e},getMissingHandler:function(){return m},setMissingHandler:function(e){null!==e&&(h=yo(e)),m=e,b.missing=h},[so]:function(e){w=e,b.pluralRules=w}};return L.datetimeFormats=O,L.numberFormats=j,L.rt=function(...e){const[t,r,n]=e;if(n&&!J(n))throw no(ro.INVALID_ARGUMENT);return I(t,r,U({resolvedMessage:!0},n||{}))},L.te=function(e,t){const r=N(X(t)?t:a.value);return null!==b.messageResolver(r,e)},L.tm=function(e){const t=function(e){let t=null;const r=_e(b,i.value,a.value);for(let n=0;n<r.length;n++){const o=s.value[r[n]]||{},a=b.messageResolver(o,e);if(null!=a){t=a;break}}return t}(e);return null!=t?t:r&&r.tm(e)||{}},L.d=function(...e){return E((t=>Reflect.apply($e,null,[t,...e])),(()=>Ve(...e)),0,(t=>Reflect.apply(t.d,t,[...e])),(()=>""),(e=>X(e)))},L.n=function(...e){return E((t=>Reflect.apply(He,null,[t,...e])),(()=>Ye(...e)),0,(t=>Reflect.apply(t.n,t,[...e])),(()=>""),(e=>X(e)))},L.getDateTimeFormat=function(e){return l.value[e]||{}},L.setDateTimeFormat=function(e,t){l.value[e]=t,b.datetimeFormats=l.value,Be(b,e,t)},L.mergeDateTimeFormat=function(e,t){l.value[e]=U(l.value[e]||{},t),b.datetimeFormats=l.value,Be(b,e,t)},L.getNumberFormat=function(e){return c.value[e]||{}},L.setNumberFormat=function(e,t){c.value[e]=t,b.numberFormats=c.value,Xe(b,e,t)},L.mergeNumberFormat=function(e,t){c.value[e]=U(c.value[e]||{},t),b.numberFormats=c.value,Xe(b,e,t)},L[lo]=e.__injectWithOption,L[oo]=function(...e){return E((t=>{let r;const n=t;try{n.processor=S,r=Reflect.apply(Pe,null,[n,...e])}finally{n.processor=null}return r}),(()=>We(...e)),0,(t=>t[oo](...e)),(e=>[_o(e)]),(e=>G(e)))},L[ao]=function(...e){return E((t=>Reflect.apply($e,null,[t,...e])),(()=>Ve(...e)),0,(t=>t[ao](...e)),(()=>[]),(e=>X(e)||G(e)))},L[io]=function(...e){return E((t=>Reflect.apply(He,null,[t,...e])),(()=>Ye(...e)),0,(t=>t[io](...e)),(()=>[]),(e=>X(e)||G(e)))},L}function wo(e={},t){{const t=bo(function(e){const t=X(e.locale)?e.locale:be,r=X(e.fallbackLocale)||G(e.fallbackLocale)||ee(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:t,n=Y(e.missing)?e.missing:void 0,o=!K(e.silentTranslationWarn)&&!D(e.silentTranslationWarn)||!e.silentTranslationWarn,a=!K(e.silentFallbackWarn)&&!D(e.silentFallbackWarn)||!e.silentFallbackWarn,i=!K(e.fallbackRoot)||e.fallbackRoot,s=!!e.formatFallbackMessages,l=ee(e.modifiers)?e.modifiers:{},c=e.pluralizationRules,u=Y(e.postTranslation)?e.postTranslation:void 0,f=!X(e.warnHtmlInMessage)||"off"!==e.warnHtmlInMessage,p=!!e.escapeParameterHtml,d=!K(e.sync)||e.sync;let m=e.messages;if(ee(e.sharedMessages)){const t=e.sharedMessages;m=Object.keys(t).reduce(((e,r)=>{const n=e[r]||(e[r]={});return U(n,t[r]),e}),m||{})}const{__i18n:h,__root:_,__injectWithOption:v}=e,g=e.datetimeFormats,y=e.numberFormats;return{locale:t,fallbackLocale:r,messages:m,flatJson:e.flatJson,datetimeFormats:g,numberFormats:y,missing:n,missingWarn:o,fallbackWarn:a,fallbackRoot:i,fallbackFormat:s,modifiers:l,pluralRules:c,postTranslation:u,warnHtmlMessage:f,escapeParameter:p,messageResolver:e.messageResolver,inheritLocale:d,__i18n:h,__root:_,__injectWithOption:v}}(e)),r={id:t.id,get locale(){return t.locale.value},set locale(e){t.locale.value=e},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(e){t.fallbackLocale.value=e},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get formatter(){return{interpolate:()=>[]}},set formatter(e){},get missing(){return t.getMissingHandler()},set missing(e){t.setMissingHandler(e)},get silentTranslationWarn(){return K(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(e){t.missingWarn=K(e)?!e:e},get silentFallbackWarn(){return K(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(e){t.fallbackWarn=K(e)?!e:e},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(e){t.fallbackFormat=e},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(e){t.setPostTranslationHandler(e)},get sync(){return t.inheritLocale},set sync(e){t.inheritLocale=e},get warnHtmlInMessage(){return t.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(e){t.warnHtmlMessage="off"!==e},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(e){t.escapeParameter=e},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(e){},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...e){const[r,n,o]=e,a={};let i=null,s=null;if(!X(r))throw no(ro.INVALID_ARGUMENT);const l=r;return X(n)?a.locale=n:G(n)?i=n:ee(n)&&(s=n),G(o)?i=o:ee(o)&&(s=o),Reflect.apply(t.t,t,[l,i||s||{},a])},rt:(...e)=>Reflect.apply(t.rt,t,[...e]),tc(...e){const[r,n,o]=e,a={plural:1};let i=null,s=null;if(!X(r))throw no(ro.INVALID_ARGUMENT);const l=r;return X(n)?a.locale=n:P(n)?a.plural=n:G(n)?i=n:ee(n)&&(s=n),X(o)?a.locale=o:G(o)?i=o:ee(o)&&(s=o),Reflect.apply(t.t,t,[l,i||s||{},a])},te:(e,r)=>t.te(e,r),tm:e=>t.tm(e),getLocaleMessage:e=>t.getLocaleMessage(e),setLocaleMessage(e,r){t.setLocaleMessage(e,r)},mergeLocaleMessage(e,r){t.mergeLocaleMessage(e,r)},d:(...e)=>Reflect.apply(t.d,t,[...e]),getDateTimeFormat:e=>t.getDateTimeFormat(e),setDateTimeFormat(e,r){t.setDateTimeFormat(e,r)},mergeDateTimeFormat(e,r){t.mergeDateTimeFormat(e,r)},n:(...e)=>Reflect.apply(t.n,t,[...e]),getNumberFormat:e=>t.getNumberFormat(e),setNumberFormat(e,r){t.setNumberFormat(e,r)},mergeNumberFormat(e,r){t.mergeNumberFormat(e,r)},getChoiceIndex:(e,t)=>-1,__onComponentInstanceCreated(t){const{componentInstanceCreatedListener:n}=e;n&&n(t,r)}};return r}}const xo={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>"parent"===e||"global"===e,default:"parent"},i18n:{type:Object}};function zo(e){return Rn}const ko={name:"i18n-t",props:U({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>P(e)||!isNaN(e)}},xo),setup(e,t){const{slots:r,attrs:n}=t,o=e.i18n||Ro({useScope:e.scope,__useComponent:!0});return()=>{const a=Object.keys(r).filter((e=>"_"!==e)),i={};e.locale&&(i.locale=e.locale),void 0!==e.plural&&(i.plural=X(e.plural)?+e.plural:e.plural);const s=function({slots:e},t){return 1===t.length&&"default"===t[0]?(e.default?e.default():[]).reduce(((e,t)=>[...e,...G(t.children)?t.children:[t]]),[]):t.reduce(((t,r)=>{const n=e[r];return n&&(t[r]=n()),t}),{})}(t,a),l=o[oo](e.keypath,s,i),c=U({},n);return Xn(X(e.tag)||J(e.tag)?e.tag:zo(),c,l)}}};function Oo(e,t,r,n){const{slots:o,attrs:a}=t;return()=>{const t={part:!0};let i={};e.locale&&(t.locale=e.locale),X(e.format)?t.key=e.format:J(e.format)&&(X(e.format.key)&&(t.key=e.format.key),i=Object.keys(e.format).reduce(((t,n)=>r.includes(n)?U({},t,{[n]:e.format[n]}):t),{}));const s=n(e.value,t,i);let l=[t.key];G(s)?l=s.map(((e,t)=>{const r=o[e.type],n=r?r({[e.type]:e.value,index:t,parts:s}):[e.value];var a;return G(a=n)&&!X(a[0])&&(n[0].key=`${e.type}-${t}`),n})):X(s)&&(l=[s]);const c=U({},a);return Xn(X(e.tag)||J(e.tag)?e.tag:zo(),c,l)}}const jo={name:"i18n-n",props:U({value:{type:Number,required:!0},format:{type:[String,Object]}},xo),setup(e,t){const r=e.i18n||Ro({useScope:"parent",__useComponent:!0});return Oo(e,t,Ge,((...e)=>r[io](...e)))}},Eo={name:"i18n-d",props:U({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},xo),setup(e,t){const r=e.i18n||Ro({useScope:"parent",__useComponent:!0});return Oo(e,t,qe,((...e)=>r[ao](...e)))}};function Io(e){if(X(e))return{path:e};if(ee(e)){if(!("path"in e))throw no(ro.REQUIRED_VALUE);return e}throw no(ro.INVALID_VALUE)}function So(e){const{path:t,locale:r,args:n,choice:o,plural:a}=e,i={},s=n||{};return X(r)&&(i.locale=r),P(o)&&(i.plural=o),P(a)&&(i.plural=a),[t,s,i]}function No(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[so](t.pluralizationRules||e.pluralizationRules);const r=uo(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(r).forEach((t=>e.mergeLocaleMessage(t,r[t]))),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach((r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r]))),t.numberFormats&&Object.keys(t.numberFormats).forEach((r=>e.mergeNumberFormat(r,t.numberFormats[r]))),e}const Lo=C("global-vue-i18n");function Ro(e={}){const t=Vn();if(null==t)throw no(ro.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&null!=t.appContext.app&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw no(ro.NOT_INSLALLED);const r=function(e){{const t=pn(e.isCE?Lo:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw no(e.isCE?ro.NOT_INSLALLED_WITH_PROVIDE:ro.UNEXPECTED_ERROR);return t}}(t),n=function(e){return"composition"===e.mode?e.global:e.global.__composer}(r),o=mo(t),a=function(e,t){return M(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}(e,o);if(__VUE_I18N_LEGACY_API__&&"legacy"===r.mode&&!e.__useComponent){if(!r.allowComposition)throw no(ro.NOT_AVAILABLE_IN_LEGACY_MODE);return function(e,t,r,n={}){const o="local"===t,a=(null,Ur(null,!0));if(o&&e.proxy&&!e.proxy.$options.i18n&&!e.proxy.$options.__i18n)throw no(ro.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const i=!K(n.inheritLocale)||n.inheritLocale,s=Wr(o&&i?r.locale.value:X(n.locale)?n.locale:be),l=Wr(o&&i?r.fallbackLocale.value:X(n.fallbackLocale)||G(n.fallbackLocale)||ee(n.fallbackLocale)||!1===n.fallbackLocale?n.fallbackLocale:s.value),c=Wr(uo(s.value,n)),u=Wr(ee(n.datetimeFormats)?n.datetimeFormats:{[s.value]:{}}),f=Wr(ee(n.numberFormats)?n.numberFormats:{[s.value]:{}}),p=o?r.missingWarn:!K(n.missingWarn)&&!D(n.missingWarn)||n.missingWarn,d=o?r.fallbackWarn:!K(n.fallbackWarn)&&!D(n.fallbackWarn)||n.fallbackWarn,m=o?r.fallbackRoot:!K(n.fallbackRoot)||n.fallbackRoot,h=!!n.fallbackFormat,_=Y(n.missing)?n.missing:null,v=Y(n.postTranslation)?n.postTranslation:null,g=o?r.warnHtmlMessage:!K(n.warnHtmlMessage)||n.warnHtmlMessage,y=!!n.escapeParameter,b=o?r.modifiers:ee(n.modifiers)?n.modifiers:{},w=n.pluralRules||o&&r.pluralRules;function x(e){return s.value,l.value,c.value,u.value,f.value,e()}const z={get id(){return a.value?a.value.id:-1},locale:Yn({get:()=>a.value?a.value.locale.value:s.value,set:e=>{a.value&&(a.value.locale.value=e),s.value=e}}),fallbackLocale:Yn({get:()=>a.value?a.value.fallbackLocale.value:l.value,set:e=>{a.value&&(a.value.fallbackLocale.value=e),l.value=e}}),messages:Yn((()=>a.value?a.value.messages.value:c.value)),datetimeFormats:Yn((()=>u.value)),numberFormats:Yn((()=>f.value)),get inheritLocale(){return a.value?a.value.inheritLocale:i},set inheritLocale(e){a.value&&(a.value.inheritLocale=e)},get availableLocales(){return a.value?a.value.availableLocales:Object.keys(c.value)},get modifiers(){return a.value?a.value.modifiers:b},get pluralRules(){return a.value?a.value.pluralRules:w},get isGlobal(){return!!a.value&&a.value.isGlobal},get missingWarn(){return a.value?a.value.missingWarn:p},set missingWarn(e){a.value&&(a.value.missingWarn=e)},get fallbackWarn(){return a.value?a.value.fallbackWarn:d},set fallbackWarn(e){a.value&&(a.value.missingWarn=e)},get fallbackRoot(){return a.value?a.value.fallbackRoot:m},set fallbackRoot(e){a.value&&(a.value.fallbackRoot=e)},get fallbackFormat(){return a.value?a.value.fallbackFormat:h},set fallbackFormat(e){a.value&&(a.value.fallbackFormat=e)},get warnHtmlMessage(){return a.value?a.value.warnHtmlMessage:g},set warnHtmlMessage(e){a.value&&(a.value.warnHtmlMessage=e)},get escapeParameter(){return a.value?a.value.escapeParameter:y},set escapeParameter(e){a.value&&(a.value.escapeParameter=e)},t:function(...e){return a.value?x((()=>Reflect.apply(a.value.t,null,[...e]))):x((()=>""))},getPostTranslationHandler:function(){return a.value?a.value.getPostTranslationHandler():v},setPostTranslationHandler:function(e){a.value&&a.value.setPostTranslationHandler(e)},getMissingHandler:function(){return a.value?a.value.getMissingHandler():_},setMissingHandler:function(e){a.value&&a.value.setMissingHandler(e)},rt:function(...e){return a.value?Reflect.apply(a.value.rt,null,[...e]):""},d:function(...e){return a.value?x((()=>Reflect.apply(a.value.d,null,[...e]))):x((()=>""))},n:function(...e){return a.value?x((()=>Reflect.apply(a.value.n,null,[...e]))):x((()=>""))},tm:function(e){return a.value?a.value.tm(e):{}},te:function(e,t){return!!a.value&&a.value.te(e,t)},getLocaleMessage:function(e){return a.value?a.value.getLocaleMessage(e):{}},setLocaleMessage:function(e,t){a.value&&(a.value.setLocaleMessage(e,t),c.value[e]=t)},mergeLocaleMessage:function(e,t){a.value&&a.value.mergeLocaleMessage(e,t)},getDateTimeFormat:function(e){return a.value?a.value.getDateTimeFormat(e):{}},setDateTimeFormat:function(e,t){a.value&&(a.value.setDateTimeFormat(e,t),u.value[e]=t)},mergeDateTimeFormat:function(e,t){a.value&&a.value.mergeDateTimeFormat(e,t)},getNumberFormat:function(e){return a.value?a.value.getNumberFormat(e):{}},setNumberFormat:function(e,t){a.value&&(a.value.setNumberFormat(e,t),f.value[e]=t)},mergeNumberFormat:function(e,t){a.value&&a.value.mergeNumberFormat(e,t)}};return yn((()=>{if(null==e.proxy||null==e.proxy.$i18n)throw no(ro.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const r=a.value=e.proxy.$i18n.__composer;"global"===t?(s.value=r.locale.value,l.value=r.fallbackLocale.value,c.value=r.messages.value,u.value=r.datetimeFormats.value,f.value=r.numberFormats.value):o&&function(e){e.locale.value=s.value,e.fallbackLocale.value=l.value,Object.keys(c.value).forEach((t=>{e.mergeLocaleMessage(t,c.value[t])})),Object.keys(u.value).forEach((t=>{e.mergeDateTimeFormat(t,u.value[t])})),Object.keys(f.value).forEach((t=>{e.mergeNumberFormat(t,f.value[t])})),e.escapeParameter=y,e.fallbackFormat=h,e.fallbackRoot=m,e.fallbackWarn=d,e.missingWarn=p,e.warnHtmlMessage=g}(r)})),z}(t,a,n,e)}if("global"===a)return ho(n,e,o),n;if("parent"===a){let o=function(e,t,r=!1){let n=null;const o=t.root;let a=t.parent;for(;null!=a;){const t=e;if("composition"===e.mode)n=t.__getInstance(a);else if(__VUE_I18N_LEGACY_API__){const e=t.__getInstance(a);null!=e&&(n=e.__composer,r&&n&&!n[lo]&&(n=null))}if(null!=n)break;if(o===a)break;a=a.parent}return n}(r,t,e.__useComponent);return null==o&&(o=n),o}const i=r;let s=i.__getInstance(t);if(null==s){const r=U({},e);"__i18n"in o&&(r.__i18n=o.__i18n),n&&(r.__root=n),s=bo(r),function(e,t,r){bn((()=>{}),t),wn((()=>{e.__deleteInstance(t)}),t)}(i,t),i.__setInstance(t,s)}return s}const Fo=["locale","fallbackLocale","availableLocales"],Ao=["t","rt","d","n","tm"];var To;if(xe=function(e,t){if(!J(e))return null;let r=ae.get(t);if(r||(r=function(e){const t=[];let r,n,o,a,i,s,l,c=-1,u=0,f=0;const p=[];function d(){const t=e[c+1];if(5===u&&"'"===t||6===u&&'"'===t)return c++,o="\\"+t,p[0](),!0}for(p[0]=()=>{void 0===n?n=o:n+=o},p[1]=()=>{void 0!==n&&(t.push(n),n=void 0)},p[2]=()=>{p[0](),f++},p[3]=()=>{if(f>0)f--,u=4,p[0]();else{if(f=0,void 0===n)return!1;if(n=function(e){const t=e.trim();return("0"!==e.charAt(0)||!isNaN(parseInt(e)))&&(r=t,ne.test(r)?function(e){const t=e.charCodeAt(0);return t!==e.charCodeAt(e.length-1)||34!==t&&39!==t?e:e.slice(1,-1)}(t):"*"+t);var r}(n),!1===n)return!1;p[1]()}};null!==u;)if(c++,r=e[c],"\\"!==r||!d()){if(a=oe(r),l=re[u],i=l[a]||l.l||8,8===i)return;if(u=i[0],void 0!==i[1]&&(s=p[i[1]],s&&(o=r,!1===s())))return;if(7===u)return t}}(t),r&&ae.set(t,r)),!r)return null;const n=r.length;let o=e,a=0;for(;a<n;){const e=o[r[a]];if(void 0===e)return null;o=e,a++}return o},ze=_e,function(){let e=!1;"boolean"!=typeof __VUE_I18N_FULL_INSTALL__&&(e=!0,q().__VUE_I18N_FULL_INSTALL__=!0),"boolean"!=typeof __VUE_I18N_LEGACY_API__&&(e=!0,q().__VUE_I18N_LEGACY_API__=!0),"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(q().__INTLIFY_PROD_DEVTOOLS__=!1)}(),__INTLIFY_PROD_DEVTOOLS__){const e=q();e.__INTLIFY__=!0,To=e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__,pe=To}var Co=function(e={},t){const r=__VUE_I18N_LEGACY_API__&&K(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,n=!K(e.globalInjection)||e.globalInjection,o=!__VUE_I18N_LEGACY_API__||!r||!!e.allowComposition,a=new Map,[i,s]=function(e,t,r){const n=new Ot(undefined);{const r=__VUE_I18N_LEGACY_API__&&t?n.run((()=>wo(e))):n.run((()=>bo(e)));if(null==r)throw no(ro.UNEXPECTED_ERROR);return[n,r]}}(e,r),l=C("");{const e={get mode(){return __VUE_I18N_LEGACY_API__&&r?"legacy":"composition"},get allowComposition(){return o},async install(t,...o){t.__VUE_I18N_SYMBOL__=l,t.provide(t.__VUE_I18N_SYMBOL__,e),!r&&n&&function(e,t){const r=Object.create(null);Fo.forEach((e=>{const n=Object.getOwnPropertyDescriptor(t,e);if(!n)throw no(ro.UNEXPECTED_ERROR);const o=Mr(n.value)?{get:()=>n.value.value,set(e){n.value.value=e}}:{get:()=>n.get&&n.get()};Object.defineProperty(r,e,o)})),e.config.globalProperties.$i18n=r,Ao.forEach((r=>{const n=Object.getOwnPropertyDescriptor(t,r);if(!n||!n.value)throw no(ro.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${r}`,n)}))}(t,e.global),__VUE_I18N_FULL_INSTALL__&&function(e,t,...r){const n=ee(r[0])?r[0]:{},o=!!n.useI18nComponentName;(!K(n.globalInstall)||n.globalInstall)&&(e.component(o?"i18n":ko.name,ko),e.component(jo.name,jo),e.component(Eo.name,Eo)),e.directive("t",function(e){const t=t=>{const{instance:r,modifiers:n,value:o}=t;if(!r||!r.$)throw no(ro.UNEXPECTED_ERROR);const a=function(e,t){const r=e;if("composition"===e.mode)return r.__getInstance(t)||e.global;{const n=r.__getInstance(t);return null!=n?n.__composer:e.global.__composer}}(e,r.$),i=Io(o);return[Reflect.apply(a.t,a,[...So(i)]),a]};return{created:(r,n)=>{const[o,a]=t(n);A&&e.global===a&&(r.__i18nWatcher=mn(a.locale,(()=>{n.instance&&n.instance.$forceUpdate()}))),r.__composer=a,r.textContent=o},unmounted:e=>{A&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){const r=e.__composer,n=Io(t);e.textContent=Reflect.apply(r.t,r,[...So(n)])}},getSSRProps:e=>{const[r]=t(e);return{textContent:r}}}}(t))}(t,e,...o),__VUE_I18N_LEGACY_API__&&r&&t.mixin(function(e,t,r){return{beforeCreate(){const n=Vn();if(!n)throw no(ro.UNEXPECTED_ERROR);const o=this.$options;if(o.i18n){const r=o.i18n;o.__i18n&&(r.__i18n=o.__i18n),r.__root=t,this===this.$root?this.$i18n=No(e,r):(r.__injectWithOption=!0,this.$i18n=wo(r))}else o.__i18n?this===this.$root?this.$i18n=No(e,o):this.$i18n=wo({__i18n:o.__i18n,__injectWithOption:!0,__root:t}):this.$i18n=e;o.__i18nGlobal&&ho(t,o,o),e.__onComponentInstanceCreated(this.$i18n),r.__setInstance(n,this.$i18n),this.$t=(...e)=>this.$i18n.t(...e),this.$rt=(...e)=>this.$i18n.rt(...e),this.$tc=(...e)=>this.$i18n.tc(...e),this.$te=(e,t)=>this.$i18n.te(e,t),this.$d=(...e)=>this.$i18n.d(...e),this.$n=(...e)=>this.$i18n.n(...e),this.$tm=e=>this.$i18n.tm(e)},mounted(){},unmounted(){const e=Vn();if(!e)throw no(ro.UNEXPECTED_ERROR);delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,r.__deleteInstance(e),delete this.$i18n}}}(s,s.__composer,e));const a=t.unmount;t.unmount=()=>{e.dispose(),a()}},get global(){return s},dispose(){i.stop()},__instances:a,__getInstance:function(e){return a.get(e)||null},__setInstance:function(e,t){a.set(e,t)},__deleteInstance:function(e){a.delete(e)}};return e}}({locale:"en",fallbackLocale:"en",messages:{ar:r(5464),ca:r(3708),cs:r(122),de:r(414),eo:r(5775),es:r(8438),et:r(9997),eu:r(9975),fi:r(9923),fr:r(8375),ga:r(1746),he:r(9369),hu:r(377),it:r(6710),ja:r(333),ja_easy:r(6534),ko:r(7379),nb:r(8103),nl:r(728),oc:r(3932),pl:r(7028),pt:r(789),ro:r(5032),ru:r(3460),sk:r(6139),te:r(5751),zh:r(4389),en:r(2551)}});function Po(){return clients.matchAll({includeUncontrolled:!0}).then((function(e){return e.filter((function(e){return"window"===e.type}))}))}var Do=function(){var e=t(o().mark((function e(){var t,r;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i().getItem("vuex-lz");case 2:t=e.sent,r=t.config.interfaceLanguage||"en",Co.locale=r;case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Mo=function(){var e=t(o().mark((function e(t){var r,n,a,s,l,c,u,f;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i().getItem("vuex-lz").then((function(e){return e.config.webPushNotifications}));case 2:return r=e.sent,e.next=5,Po();case 5:return n=e.sent,e.next=8,Do();case 8:if(!r||0!==n.length){e.next=20;break}return a=t.data.json(),s="".concat(self.registration.scope,"api/v1/notifications/").concat(a.notification_id),e.next=13,fetch(s,{headers:{Authorization:"Bearer "+a.access_token}});case 13:return l=e.sent,e.next=16,l.json();case 16:c=e.sent,u=R(c),f=h(u,Co),self.registration.showNotification(f.title,f);case 20:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();self.addEventListener("push",function(){var e=t(o().mark((function e(t){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.data&&t.waitUntil(Mo(t));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),self.addEventListener("notificationclick",(function(e){e.notification.close(),e.waitUntil(Po().then((function(e){for(var t=0;t<e.length;t++){var r=e[t];if("/"===r.url&&"focus"in r)return r.focus()}if(clients.openWindow)return clients.openWindow("/")})))}))})()})(); diff --git a/test/fixtures/ccworld-ap-bridge_note.json b/test/fixtures/ccworld-ap-bridge_note.json @@ -0,0 +1 @@ +{"@context":"https://www.w3.org/ns/activitystreams","type":"Note","id":"https://cc.mkdir.uk/ap/note/e5d1d0a1-1ab3-4498-9949-588e3fdea286","attributedTo":"https://cc.mkdir.uk/ap/acct/hiira","inReplyTo":"","quoteUrl":"","content":"おはコンー","published":"2024-01-19T22:08:05Z","to":["https://www.w3.org/ns/activitystreams#Public"],"tag":null,"attachment":[],"object":null} diff --git a/test/fixtures/minds-invalid-mention-post.json b/test/fixtures/minds-invalid-mention-post.json @@ -0,0 +1 @@ +{"@context":"https://www.w3.org/ns/activitystreams","type":"Note","id":"https://www.minds.com/api/activitypub/users/1198929502760083472/entities/urn:comment:1600926863310458883:0:0:0:1600932467852709903","attributedTo":"https://www.minds.com/api/activitypub/users/1198929502760083472","content":"\u003Ca class=\u0022u-url mention\u0022 href=\u0022https://www.minds.com/lain\u0022 target=\u0022_blank\u0022\u003E@lain\u003C/a\u003E corn syrup.","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://www.minds.com/api/activitypub/users/1198929502760083472/followers","https://lain.com/users/lain"],"tag":[{"type":"Mention","href":"https://www.minds.com/api/activitypub/users/464237775479123984","name":"@lain"}],"url":"https://www.minds.com/newsfeed/1600926863310458883?focusedCommentUrn=urn:comment:1600926863310458883:0:0:0:1600932467852709903","published":"2024-02-04T17:34:03+00:00","inReplyTo":"https://lain.com/objects/36254095-c839-4167-bcc2-b361d5de9198","source":{"content":"@lain corn syrup.","mediaType":"text/plain"}} +\ No newline at end of file diff --git a/test/fixtures/minds-pleroma-mentioned-post.json b/test/fixtures/minds-pleroma-mentioned-post.json @@ -0,0 +1 @@ +{"@context":["https://www.w3.org/ns/activitystreams","https://lain.com/schemas/litepub-0.1.jsonld",{"@language":"und"}],"actor":"https://lain.com/users/lain","attachment":[],"attributedTo":"https://lain.com/users/lain","cc":["https://lain.com/users/lain/followers"],"content":"which diet is the best for cognitive dissonance","context":"https://lain.com/contexts/98c8a130-e813-4797-8973-600e80114317","conversation":"https://lain.com/contexts/98c8a130-e813-4797-8973-600e80114317","id":"https://lain.com/objects/36254095-c839-4167-bcc2-b361d5de9198","published":"2024-02-04T17:11:23.931890Z","repliesCount":11,"sensitive":null,"source":{"content":"which diet is the best for cognitive dissonance","mediaType":"text/plain"},"summary":"","tag":[],"to":["https://www.w3.org/ns/activitystreams#Public"],"type":"Note"} +\ No newline at end of file diff --git a/test/fixtures/png_with_transparency.png b/test/fixtures/png_with_transparency.png Binary files differ. diff --git a/test/fixtures/rich_media/google.html b/test/fixtures/rich_media/google.html @@ -0,0 +1,12 @@ +<meta property="og:url" content="https://google.com"> +<meta property="og:type" content="website"> +<meta property="og:title" content="Google"> +<meta property="og:description" content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for."> +<meta property="og:image" content=""> + +<meta name="twitter:card" content="summary_large_image"> +<meta property="twitter:domain" content="google.com"> +<meta property="twitter:url" content="https://google.com"> +<meta name="twitter:title" content="Google"> +<meta name="twitter:description" content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for."> +<meta name="twitter:image" content=""> diff --git a/test/fixtures/rich_media/oembed.html b/test/fixtures/rich_media/oembed.html @@ -1,3 +1,3 @@ <link rel="alternate" type="application/json+oembed" - href="http://example.com/oembed.json" + href="https://example.com/oembed.json" title="Bacon Lollys oEmbed Profile" /> diff --git a/test/fixtures/rich_media/reddit.html b/test/fixtures/rich_media/reddit.html @@ -0,0 +1,392 @@ +<!doctype html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>Twitter/X is getting weirder; where now for security news and analysis? : cybersecurity</title><meta name="keywords" content=" reddit, reddit.com, vote, comment, submit " /><meta name="description" content="I primarily use Twitter/X as a glorified RSS feed of security news and analysis reporting. Lately its getting heavier on ads and weird pushed..." /><meta name="referrer" content="always"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link type="application/opensearchdescription+xml" rel="search" href="/static/opensearch.xml"/><link rel="canonical" href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" /><link rel="amphtml" href="https://amp.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" /><meta name="viewport" content="width=1024"><link rel="shorturl" href="https://redd.it/16nf2ev"/><link rel="dns-prefetch" href="//out.reddit.com"><link rel="preconnect" href="//out.reddit.com"><meta property="og:image" content="https://www.redditstatic.com/new-icon.png"><meta property="og:ttl" content="600"><meta property="og:site_name" content="reddit"><meta property="og:description" content="I primarily use Twitter/X as a glorified RSS feed of security news and analysis reporting. Lately its getting heavier on ads and weird pushed..."><meta property="og:title" content="Twitter/X is getting weirder; where now for security news and analysis?"><meta property="al:android:package" content="com.reddit.frontpage"><meta property="al:ios:app_name" content="Reddit"><meta property="al:ios:url" content="reddit://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/"><meta property="al:ios:app_store_id" content="1064216828"><meta property="twitter:site" content="@reddit"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="Twitter/X is getting weirder; where now for security news and..."><link rel="apple-touch-icon" sizes="57x57" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-57x57.png" /><link rel="apple-touch-icon" sizes="60x60" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-60x60.png" /><link rel="apple-touch-icon" sizes="72x72" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-72x72.png" /><link rel="apple-touch-icon" sizes="76x76" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-76x76.png" /><link rel="apple-touch-icon" sizes="114x114" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-114x114.png" /><link rel="apple-touch-icon" sizes="120x120" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-120x120.png" /><link rel="apple-touch-icon" sizes="144x144" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-144x144.png" /><link rel="apple-touch-icon" sizes="152x152" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-152x152.png" /><link rel="apple-touch-icon" sizes="180x180" href="//www.redditstatic.com/desktop2x/img/favicon/apple-icon-180x180.png" /><link rel="icon" type="image/png" sizes="192x192" href="//www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png" /><link rel="icon" type="image/png" sizes="32x32" href="//www.redditstatic.com/desktop2x/img/favicon/favicon-32x32.png" /><link rel="icon" type="image/png" sizes="96x96" href="//www.redditstatic.com/desktop2x/img/favicon/favicon-96x96.png" /><link rel="icon" type="image/png" sizes="16x16" href="//www.redditstatic.com/desktop2x/img/favicon/favicon-16x16.png" /><link rel="manifest" href="//www.redditstatic.com/desktop2x/img/favicon/manifest.json"/><meta name="msapplication-TileColor" content="#ffffff"/><meta name="msapplication-TileImage" content="//www.redditstatic.com/desktop2x/img/favicon/ms-icon-144x144.png"/><meta name="theme-color" content="#ffffff"/><link rel="alternate" type="application/atom+xml" title="RSS" href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/.rss" /><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/reddit.YXox_dqXzrc.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/expando.gMzRK16vwrQ.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/crosspost-preview.De3P20Yb4PY.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/author-tooltip.1VKQhhDIRMI.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/listing-comments.AZZO7Kj_O88.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/popup-notification.6-JvPBpHWMo.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/about-this-ad-modal.zVecmeeCuWY.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/desktoponboarding.k2RNrAG42v4.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/videoplayer.ANmi3DZjWG4.css" media="all"><link rel="stylesheet" type="text/css" href="//www.redditstatic.com/videoplayercontrols.a_TwaTy76-k.css" media="all"><!--[if gte IE 8]><!--><link rel="stylesheet" href="https://b.thumbs.redditmedia.com/ba_fm376ctS_mGlZGabqddmkhth3jqnccUyhKW7iGBo.css" ref="applied_subreddit_stylesheet" title="applied_subreddit_stylesheet" type="text/css"><!--<![endif]--><!--[if gte IE 9]><!--><script type="text/javascript" src="//www.redditstatic.com/reddit-init.en.a6Ar54Z0rBo.js"></script><!--<![endif]--><!--[if lt IE 9]><script type="text/javascript" src="//www.redditstatic.com/reddit-init-legacy.en.sAcI0xGFcwg.js"></script><![endif]--><script type="text/javascript" src="//www.redditstatic.com/videoplayer.XCrwE8Bi5A4.js"></script><script type="text/javascript" id="config">r.setup({"ajax_domain": "www.reddit.com", "post_site": "cybersecurity", "gold": false, "scraped_image_extensions": ["gif", "jpeg", "jpg", "png", "tiff"], "poisoning_report_mac": null, "requires_eu_cookie_policy": false, "nsfw_media_acknowledged": false, "stats_domain": "", "feature_net_neutrality": false, "cur_screen_name": "", "country_code": "", "facebook_app_id": "322647334569188", "loid": "000000000uhuuh3cqp", "is_sponsor": false, "has_gold_subscription": false, "feature_author_tooltip_users": true, "user_id": false, "pref_email_messages": false, "poisoning_canary": null, "logged": false, "over_18": false, "show_archived_signup_cta": true, "loid_created": 1708312402583, "mweb_blacklist_expressions": ["^/prefs/?", "^/live/?", "/message/compose", "/m/", "^/subreddits/create", "^/gold", "^/advertising", "^/promoted", "^/buttons"], "feature_noreferrer_to_noopener": true, "is_posts_mod": false, "modhash": "", "external_frame": false, "feature_cookie_consent_banner": true, "send_logs": true, "user_subscription_size": 0, "listing_over_18": false, "https_endpoint": "https://www.reddit.com", "extension": null, "embedded": false, "event_target": {"target_id": 2578913527, "target_type": "self", "target_sort": "confidence", "target_fullname": "t3_16nf2ev"}, "use_onetrust": false, "ads_loading_timeout_ms": 5000, "enabled_experiments": {}, "cache_policy": "loggedout_www", "admin_message_acct": "/r/reddit.com", "hidden_post_card_enabled": false, "advertiser_category": null, "events_collector_v2_url": "https://www.reddit.com/api/vote", "debug": false, "has_subscribed": false, "static_root": "//www.redditstatic.com", "server_time": 1708312403.0, "feature_no_subscription_step": "control_1", "feature_swap_steps_two_and_three_recalibration": "control_2", "pref_no_profanity": true, "share_tracking_ts": 1708312403232, "cur_domain": "reddit.com", "browser_supports_d2x": false, "events_collector_url": "https://www.reddit.com/api/vote", "embed_preview_url": "https://rebed.redditmedia.com/embed", "gild_url": "/framedGild", "cur_link": "t3_16nf2ev", "user_in_timeout": false, "share_tracking_hmac": null, "live_orangereds_pref": true, "feature_blocked_user_enabled": false, "ad_serving_events_sample_rate": "1.00", "is_fake": false, "renderstyle": "html", "framed_modal_url": "/framedModal/", "feature_adblock_v2_events_enabled": false, "user_age": false, "vote_hash": "4piNiL72kb0vN4fiRASdIAWORVe57zU0rsH8oo7AucKTKbAJQLfbHHo5RHL3/TKQx1yuwQbqBTpkfx1e/jhijKl6RZROrrFN0hJLyzXBCO0hF9IabySW12sBeNpMhTkrRffaXEgdyVj6LxzXZ2XAHPZPz5b7yVHbKOdgXhJ2ENI=", "link_websocket_url": "", "events_collector_secret": "Ua3epahc7ZiengeeVaeG6eingahke7", "pref_video_autoplay": true, "events_collector_key": "RedditFrontend3", "allow_nonessential_cookies": false, "scraped_domains": ["gfycat.com", "imgur.com"], "expando_preference": "subreddit_default", "store_visits": false, "onetrust_client_id": "14003311-a669-490b-a682-56294eb02bf2", "cur_site": "t5_2u559", "new_window": false, "pref_beta": false, "channels_mod_permissions_enabled": true, "eu_cookie_max_attempts": 3, "pageInfo": {"actionName": "front.GET_comments", "statsVerification": "388228f7328f4f4378f87784f3f47137498db25f", "type": "post_detail", "verification": "388228f7328f4f4378f87784f3f47137498db25f", "statsName": "front.GET_comments"}, "user_websocket_url": null, "signature_header": "X-Signature", "media_domain": "www.redditmedia.com", "whitelist_status": "all_ads", "signature_header_v2": "X-Signature-v2", "cur_listing": "cybersecurity", "email_verified": false, "status_msg": {"fetching": "fetching title...", "loading": "loading...", "submitting": "submitting..."}, "link_limit": 200, "stats_sample_rate": "0", "loid_version": 2, "eu_cookie": "eu_cookie", "is_moderator_somewhere": false, "d2x_domain": "https://new.reddit.com/"})</script><style type="text/css">/* Custom css: use this block to insert special translation-dependent css in the page header */</style></head><body class="single-page comments-page" ><script>var frame = document.createElement('iframe'); frame.style.display = 'none'; frame.referrer = 'no-referrer'; frame.id = 'gtm-jail'; frame.name = JSON.stringify({ subreddit: r.config.post_site, origin: location.origin, url: location.href, userMatching: false, userId: r.config.user_id, advertiserCategory: r.config.advertiser_category, adsStatus: r.config.whitelist_status, }); frame.src = '//' + "www.redditmedia.com" + '/gtm/jail?cb=' + "8CqR7FcToPI"; document.body.appendChild(frame);</script><div id="header" role="banner"><a tabindex="1" href="#content" id="jumpToContent">jump to content</a><div id="sr-header-area"><div class="width-clip"><div class="dropdown srdrop" onclick="open_menu(this)"><span class="selected title">my subreddits</span></div><div class="drop-choices srdrop"><a href="https://www.reddit.com/subreddits/" class="bottom-option choice" >edit subscriptions</a></div><div class="sr-list"><ul class="flat-list sr-bar hover" ><li ><a href="https://www.reddit.com/r/popular/" class="choice" >popular</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/all/" class="choice" >all</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/random/" class="random choice" >random</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/users/" class="choice" >users</a></li></ul><span class="separator">&nbsp;|&nbsp;</span><ul class="flat-list sr-bar hover" id='sr-bar'><li ><a href="https://www.reddit.com/r/AskReddit/" class="choice" >AskReddit</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/pics/" class="choice" >pics</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/funny/" class="choice" >funny</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/movies/" class="choice" >movies</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/gaming/" class="choice" >gaming</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/worldnews/" class="choice" >worldnews</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/news/" class="choice" >news</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/todayilearned/" class="choice" >todayilearned</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/nottheonion/" class="choice" >nottheonion</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/explainlikeimfive/" class="choice" >explainlikeimfive</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/mildlyinteresting/" class="choice" >mildlyinteresting</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/DIY/" class="choice" >DIY</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/videos/" class="choice" >videos</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/OldSchoolCool/" class="choice" >OldSchoolCool</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/TwoXChromosomes/" class="choice" >TwoXChromosomes</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/tifu/" class="choice" >tifu</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/Music/" class="choice" >Music</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/books/" class="choice" >books</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/LifeProTips/" class="choice" >LifeProTips</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/dataisbeautiful/" class="choice" >dataisbeautiful</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/aww/" class="choice" >aww</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/science/" class="choice" >science</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/space/" class="choice" >space</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/Showerthoughts/" class="choice" >Showerthoughts</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/askscience/" class="choice" >askscience</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/Jokes/" class="choice" >Jokes</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/IAmA/" class="choice" >IAmA</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/Futurology/" class="choice" >Futurology</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/sports/" class="choice" >sports</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/UpliftingNews/" class="choice" >UpliftingNews</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/food/" class="choice" >food</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/nosleep/" class="choice" >nosleep</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/creepy/" class="choice" >creepy</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/history/" class="choice" >history</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/gifs/" class="choice" >gifs</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/InternetIsBeautiful/" class="choice" >InternetIsBeautiful</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/GetMotivated/" class="choice" >GetMotivated</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/gadgets/" class="choice" >gadgets</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/announcements/" class="choice" >announcements</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/WritingPrompts/" class="choice" >WritingPrompts</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/philosophy/" class="choice" >philosophy</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/Documentaries/" class="choice" >Documentaries</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/EarthPorn/" class="choice" >EarthPorn</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/photoshopbattles/" class="choice" >photoshopbattles</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/listentothis/" class="choice" >listentothis</a></li><li ><span class="separator">-</span><a href="https://www.reddit.com/r/blog/" class="choice" >blog</a></li></ul></div><a href="https://www.reddit.com/subreddits/" id="sr-more-link" >more &raquo;</a></div></div><div id="header-bottom-left"><a href="/" id="header-img" class="default-header" title="">reddit.com</a>&nbsp;<span class="hover pagename redditname"><a href="https://www.reddit.com/r/cybersecurity/" >cybersecurity</a></span><ul class="tabmenu " ><li class='selected'><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" class="choice" >comments</a></li></ul></div><div id="header-bottom-right"><span class="user">Want to join?&#32;<a href="https://www.reddit.com/login" class="login-required login-link" >Log in</a>&#32;or&#32;<a href="https://www.reddit.com/login" class="login-required" >sign up</a>&#32;in seconds.</span><span class="separator">|</span><ul class="flat-list hover" ><li ><a href="javascript:void(0)" class="pref-lang choice" onclick="return showlang();" >English</a></li></ul></div></div><div class="side"><div class='spacer'><form action="https://www.reddit.com/r/cybersecurity/search" id="search" role="search"><input type="text" name="q" placeholder="search" tabindex="20"><input type="submit" value="" tabindex="22"><div id="searchexpando" class="infobar"><label><input type="checkbox" name="restrict_sr" tabindex="21">limit my search to r/cybersecurity</label><div id="moresearchinfo"><p>use the following search parameters to narrow your results:</p><dl><dt>subreddit:<i>subreddit</i></dt><dd>find submissions in &quot;subreddit&quot;</dd><dt>author:<i>username</i></dt><dd>find submissions by &quot;username&quot;</dd><dt>site:<i>example.com</i></dt><dd>find submissions from &quot;example.com&quot;</dd><dt>url:<i>text</i></dt><dd>search for &quot;text&quot; in url</dd><dt>selftext:<i>text</i></dt><dd>search for &quot;text&quot; in self post contents</dd><dt>self:yes (or self:no)</dt><dd>include (or exclude) self posts</dd><dt>nsfw:yes (or nsfw:no)</dt><dd>include (or exclude) results marked as NSFW</dd></dl><p>e.g.&#32;<code>subreddit:aww site:imgur.com dog</code></p><p><a href="https://www.reddit.com/wiki/search">see the search faq for details.</a></p></div><p><a href="https://www.reddit.com/wiki/search" id="search_showmore">advanced search: by author, subreddit...</a></p></div></form></div><div class='spacer'><div class="linkinfo"><div class="date"><span>this post was submitted on &#32;</span><time datetime="2023-09-20T07:34:36+00:00">20 Sep 2023</time></div><div class="score"><span class="number">241</span>&#32;<span class="word">points</span>&#32;(92% upvoted)</div><div class="shortlink">shortlink: &#32;<input type="text" value="https://redd.it/16nf2ev" readonly="readonly" id="shortlink-text" /></div></div></div><div class='spacer'><form method="post" action="https://www.reddit.com/r/cybersecurity/post/login" id="login_login-main" class="login-form login-form-side"><input type="hidden" name="op" value="login-main" /><input name="user" placeholder="username" type="text" maxlength="20" tabindex="1"/><input name="passwd" placeholder="password" type="password" tabindex="1"/><div class="g-recaptcha" data-sitekey="6LeTnxkTAAAAAN9QEuDZRpn90WwKk_R1TRW_g-JC"></div><div class="status"></div><div id="remember-me"><input type="checkbox" name="rem" id="rem-login-main" tabindex="1" /><label for="rem-login-main">remember me</label><a class="recover-password" href="/password">reset password</a></div><div class="submit"><span class="throbber"></span><button class="btn" type="submit" tabindex="1">login</button></div><div class="clear"></div></form></div><div class='spacer'></div><div class='spacer'><div class="sidebox submit submit-link"><div class="morelink"><a href="https://www.reddit.com/r/cybersecurity/submit" data-event-action="submit" data-type="subreddit" data-event-detail="link" class="login-required access-required" target="_top" >Submit a new link</a><div class="nub"></div></div></div></div><div class='spacer'><div class="sidebox submit submit-text"><div class="morelink"><a href="https://www.reddit.com/r/cybersecurity/submit?selftext=true" data-event-action="submit" data-type="subreddit" data-event-detail="self" class="login-required access-required" target="_top" >Submit a new text post</a><div class="nub"></div></div></div></div><div class='spacer'><a href="/premium" alt="get premium" class="premium-banner-outer"><form action="/premium" class="premium-banner"><div class="premium-banner__logo"></div><div class="premium-banner__title">Get an ad-free experience with special benefits, and directly support Reddit.</div><button class="premium-banner__button">get reddit premium</button></form></a></div><div class='spacer'><div class="titlebox"><h1 class="hover redditname"><a href="https://www.reddit.com/r/cybersecurity/" class="hover" >cybersecurity</a></h1><span class="fancy-toggle-button subscribe-button toggle" style="" data-sr_name="cybersecurity" ><a class="option active add login-required" href="#" tabindex="100" >join</a><a class="option remove" href="#">leave</a></span><span class="subscribers"><span class="number">688,076</span>&#32;<span class="word">readers</span></span><p class="users-online" title="users viewing this subreddit in the past 15 minutes"><span class="number">592</span>&#32;<span class="word">users here now</span></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t5_2u559nsa"><input type="hidden" name="thing_id" value="t5_2u559"/><div class="usertext-body may-blank-within md-container " ><div class="md"><h1><strong>NOTICE:</strong></h1> + +<h1><strong>This sidebar and rules are no longer being updated. To see the current sidebar and rules you must view them on new reddit.</strong></h1> + +<p><a href="https://new.reddit.com/r/cybersecurity">https://new.reddit.com/r/cybersecurity</a></p> + +<p>This security forum is oriented towards private white hat security professionals. Please note, the &#39;old&#39; Reddit is no longer kept up to date. Please use &#39;new&#39; Reddit. </p> + +<ol> +<li><p><strong>No Low Effort / Poor Quality Posts</strong> +&quot;This security forum is oriented towards private white hat security professionals.&quot; If a post has very basic information, it is not appropriate for this sub. For example, &quot;why passwords are important&quot; is too fundamental.</p></li> +<li><p><strong>Must be relevant to security professionals</strong> +This is not a general security subreddit. Posts related to burglar alarms, weapons, and similar concepts are not appropriate for this sub.</p></li> +<li><p><strong>No fundamental security questions or tech support requests</strong> +Basic questions on security concepts and fundamentals and requests for tech support are not appropriate for this subreddit.</p></li> +<li><p><strong>SECURITY FIRST (no editorializing)</strong> +This is the guiding principle for all posts. No editorializing and no political agendas. Posts discussing political issues that affect security are fine, but the post must be geared towards the security implication. Such posts will be heavily monitored and comments may be locked as needed.</p></li> +<li><p><strong>Civility</strong> +We&#39;re all professionals. Be excellent to each other.</p></li> +<li><p><strong>No Advertising</strong> +Want to share information or resources? Message The Mods to find out how! You would rather build a relationship with the <a href="/r/CyberSecurity">/r/CyberSecurity</a> community than get banned! Please message the mods before posting links to your own projects or if you have any questions about the advertising policies</p></li> +<li><p><strong>No Personally-Identifiable Information</strong> +Do not post personally-identifiable information, unless the source has consented to it.</p></li> +</ol> + +<hr/> + +<p><strong>This subreddit is oriented towards computer security professionals</strong></p> + +<p>Need help with a computer security problem? </p> + +<ul> +<li><p><a href="/r/cybersecurity_help">/r/cybersecurity_help</a></p></li> +<li><p><a href="/r/cybersecurity101">/r/cybersecurity101</a></p></li> +</ul> + +<p>Are you looking for a job or looking to hire someone?</p> + +<ul> +<li><a href="/r/cybersecurityjobs">/r/cybersecurityjobs</a> (currently closed)</li> +</ul> + +<p>Are you looking for home defense and security systems (alarms, CCTV, ect)? </p> + +<ul> +<li><a href="/r/Locksmith">/r/Locksmith</a></li> +<li><a href="/r/homedefense">/r/homedefense</a></li> +<li><a href="/r/homeautomation">/r/homeautomation</a></li> +<li><a href="/r/videosurveillance">/r/videosurveillance</a></li> +<li><a href="/r/physec/">/r/physec/</a></li> +</ul> + +<p>Are you a security guard or physical security professional? </p> + +<ul> +<li><a href="/r/ProtectAndServe">/r/ProtectAndServe</a></li> +<li><a href="/r/Secguards">/r/Secguards</a> </li> +</ul> + +<p>Are you here to post an advertisement or spam? </p> + +<ul> +<li><a href="/r/spam">/r/spam</a></li> +</ul> + +<p>Other Security Communities:</p> + +<ul> +<li><a href="/r/ComputerSecurity">/r/ComputerSecurity</a></li> +<li><a href="/r/crypto">/r/crypto</a> </li> +<li><a href="/r/hacking">/r/hacking</a> </li> +<li><a href="/r/netdef">/r/netdef</a><br/></li> +<li><a href="/r/intelligence">/r/intelligence</a></li> +<li><a href="/r/opsec">/r/opsec</a></li> +<li><a href="/r/OperationsSecurity">/r/OperationsSecurity</a></li> +<li><a href="/r/privacy">/r/privacy</a> </li> +<li><a href="/r/redteam">/r/redteam</a></li> +</ul> + +<p>Just for fun:</p> + +<ul> +<li><a href="/r/scambaiting">/r/scambaiting</a></li> +</ul> + +<hr/> + +<hr/> + +<p>We ask all users with a potential conflict of interest (e.g. security product manufacturers and service providers) to disclose their affiliation. This allows subscribers to ask them questions about their areas of expertise while ensuring transparency. For questions about this status, to request a user flair, or if you think that these users have violated this subreddit&#39;s policies, please <a href="http://www.reddit.com/message/compose?to=%2Fr%2Fcybersecurity">message the mods</a>.</p> +</div> +</div></form><div class="bottom"><span class="age">a community for&#32;<time title="Tue May 22 05:07:59 2012 UTC" datetime="2012-05-22T05:07:59+00:00">11 years</time></span></div></div></div><div class='spacer'></div><div class='spacer'><div class="sidecontentbox " ><div class="title"><h1>MODERATORS</h1></div><ul class="content"><li class="message-button centered"><a class="c-btn c-btn-primary login-required" href="/message/compose/?to=/r/cybersecurity">message the mods</a></li></ul></div></div><div class='spacer'><div class="read-next-container"><aside class="read-next"><header class="read-next-header"><div class="read-next-header-title">discussions in&#32;<a href="https://www.reddit.com/r/cybersecurity/?ref=readnext" >r/cybersecurity</a></div><nav class="read-next-nav read-next-nav-left"><span class="read-next-button prev">&lt;</span><span class="read-next-button next">&gt;</span></nav><div class="read-next-nav read-next-nav-right"><span class="read-next-dismiss">X</span></div></header><div class="read-next-list"><div class="listing read-next-listing"><div class="listing-contents"><a id="read-next-link-t3_1au4n18" class="read-next-link may-blank" href="/r/cybersecurity/comments/1au4n18/what_are_some_musthave_rules_and_policies_that/?ref=readnext"><div class="read-next-meta"><span class="score" title="106">106</span>&#32; &middot;&#32;<span class="comments">45 comments</span>&#32;</div><div class="read-next-title">What are some &quot;must-have&quot; rules and policies that you configure on every firewall you worked with?</div></a><a id="read-next-link-t3_1au7265" class="read-next-link may-blank" href="/r/cybersecurity/comments/1au7265/has_it_been_anyone_elses_experience_when_meeting/?ref=readnext"><div class="read-next-meta"><span class="score" title="55">55</span>&#32; &middot;&#32;<span class="comments">27 comments</span>&#32;</div><div class="read-next-title">Has it been anyone else's experience when meeting people in the field and networking that they all got their positions because they knew someone even with zero experience?</div></a><a id="read-next-link-t3_1aty4yv" class="read-next-link may-blank" href="/r/cybersecurity/comments/1aty4yv/when_it_comes_to_cyber_threats_india_not_the_us/?ref=readnext"><div class="read-next-meta"><span class="score" title="116">116</span>&#32; &middot;&#32;<span class="comments">17 comments</span>&#32;</div><div class="read-next-thumbnail"><img src="//b.thumbs.redditmedia.com/fN4jxU3yZomnnLik7d9diWdRnTkbl67V4YjF0oXfSfY.jpg" width='70' height='36' alt=""></div><div class="read-next-title">When it comes to cyber threats, India – not the US – is China’s biggest concern</div></a><a id="read-next-link-t3_1atmron" class="read-next-link may-blank" href="/r/cybersecurity/comments/1atmron/gpt4_can_hack_websites_with_733_success_rate_in/?ref=readnext"><div class="read-next-meta"><span class="score" title="449">449</span>&#32; &middot;&#32;<span class="comments">57 comments</span>&#32;</div><div class="read-next-thumbnail"><img src="//a.thumbs.redditmedia.com/grGQ4Xa2kcPcM6pqkNIDlUWrOa_1Q98cv7xt9EOyyg8.jpg" width='70' height='36' alt=""></div><div class="read-next-title">GPT4 can hack websites with 73.3% success rate in sandboxed environment</div></a><a id="read-next-link-t3_1aubpd0" class="read-next-link may-blank" href="/r/cybersecurity/comments/1aubpd0/bouncing_back_from_a_cyber_attack/?ref=readnext"><div class="read-next-meta"></div><div class="read-next-thumbnail"><img src="//b.thumbs.redditmedia.com/Jefbctam7l-lzDPxyKfR_L5oOV68nxzrg7E89LrTfpQ.jpg" width='70' height='23' alt=""></div><div class="read-next-title">Bouncing back from a cyber attack</div></a><a id="read-next-link-t3_1au92zu" class="read-next-link may-blank" href="/r/cybersecurity/comments/1au92zu/mentorship_monday_post_all_career_education_and/?ref=readnext"><div class="read-next-meta"><span class="score" title="5">5</span>&#32; &middot;&#32;<span class="comments">8 comments</span>&#32;</div><div class="read-next-title">Mentorship Monday - Post All Career, Education and Job questions here!</div></a><a id="read-next-link-t3_1atjev1" class="read-next-link may-blank" href="/r/cybersecurity/comments/1atjev1/what_is_a_security_feature_that_is_really/?ref=readnext"><div class="read-next-meta"><span class="score" title="192">192</span>&#32; &middot;&#32;<span class="comments">296 comments</span>&#32;</div><div class="read-next-title">What is a security feature that is really &quot;security theater&quot;?</div></a><a id="read-next-link-t3_1atltdb" class="read-next-link may-blank" href="/r/cybersecurity/comments/1atltdb/resources_to_learn_threat_hunting/?ref=readnext"><div class="read-next-meta"><span class="score" title="94">94</span>&#32; &middot;&#32;<span class="comments">17 comments</span>&#32;</div><div class="read-next-title">Resources to learn Threat Hunting?</div></a><a id="read-next-link-t3_1atuoz8" class="read-next-link may-blank" href="/r/cybersecurity/comments/1atuoz8/seeking_cybersecurity_awareness_materials_for/?ref=readnext"><div class="read-next-meta"><span class="score" title="15">15</span>&#32; &middot;&#32;<span class="comments">9 comments</span>&#32;</div><div class="read-next-title">Seeking Cybersecurity Awareness Materials for School Teenagers age group students: Any Recommendations?</div></a><a id="read-next-link-t3_1au1z7n" class="read-next-link may-blank" href="/r/cybersecurity/comments/1au1z7n/fbis_mostwanted_zeus_and_icedid_malware/?ref=readnext"><div class="read-next-meta"><span class="score" title="4">4</span>&#32; &middot;&#32;<span class="comments">1 comment</span>&#32;</div><div class="read-next-thumbnail"><img src="//b.thumbs.redditmedia.com/sKOGKVqS9KxTIcMVdCAsY2em1FWOai0QXCxUcxjoW7U.jpg" width='70' height='36' alt=""></div><div class="read-next-title">FBI's Most-Wanted Zeus and IcedID Malware Mastermind Pleads Guilty</div></a></div></div></div></aside></div></div></div><a name="content"></a><div class="content" role="main" ><section class="infobar listingsignupbar"><a href="/login" class="login-required listingsignupbar__container"><h2 class="listingsignupbar__title">Welcome to Reddit,</h2><p class="listingsignupbar__desc">the front page of the internet.</p><div class="listingsignupbar__cta-container"><span class="c-btn c-btn-primary c-pull-left listingsignupbar__cta-button">Become a Redditor</span><p class="listingsignupbar__cta-desc">and join one of thousands of communities.</p></div></a><a href="#" class="listingsignupbar__close" title="close">&times;</a></section><style>body >.content .link .rank, .rank-spacer { width: 1.1ex } body >.content .link .midcol, .midcol-spacer { width: 4.1ex } .adsense-wrap { background-color: #eff7ff; font-size: 18px; padding-left: 5.2ex; padding-right: 5px; }</style><div id="siteTable" class="sitetable linklisting"><div class=" thing id-t3_16nf2ev linkflair odd&#32; link self" id="thing_t3_16nf2ev" onclick="click_thing(this)" data-fullname="t3_16nf2ev" data-type="link" data-gildings="0" data-whitelist-status="all_ads" data-is-gallery="false" data-author="skeedooshski" data-author-fullname="t2_2w3lp8yl" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-timestamp="1695195276000" data-url="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-domain="self.cybersecurity" data-rank="" data-comments-count="98" data-score="241" data-promoted="false" data-nsfw="false" data-spoiler="false" data-oc="false" data-num-crossposts="0" data-context="comments" ><p class="parent"></p><span class="rank"></span><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="score dislikes" title="240">240</div><div class="score unvoted" title="241">241</div><div class="score likes" title="242">242</div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><a class="thumbnail invisible-when-pinned self may-blank " data-event-action="thumbnail" href="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" ></a><div class="entry unvoted"><div class="top-matter"><p class="title"><a class="title may-blank " data-event-action="title" href="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" tabindex="1" >Twitter/X is getting weirder; where now for security news and analysis?</a><span class="flairrichtext flaircolordark linkflairlabel " title="News - General" style="background-color: #0079d3; border-color: #0079d3;"><span>News - General</span></span>&#32;<span class="domain">(<a href="/r/cybersecurity/">self.cybersecurity</a>)</span></p><p class="tagline ">submitted&#32;<time title="Wed Sep 20 07:34:36 2023 UTC" datetime="2023-09-20T07:34:36+00:00" class="live-timestamp">5 months ago</time>&#32;by&#32;<a href="https://www.reddit.com/user/skeedooshski" class="author may-blank id-t2_2w3lp8yl" >skeedooshski</a><span class="userattrs"></span></p></div><div class="expando expando-uninitialized" data-pin-condition="function() {return this.style.display != 'none';}" ><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t3_16nf2evdgw"><input type="hidden" name="thing_id" value="t3_16nf2ev"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I primarily use Twitter/X as a glorified RSS feed of security news and analysis reporting. Lately its getting heavier on ads and weird pushed content. </p> + +<p>I&#39;m not for replacing it with 5 different platforms, but if I was going to use something else, what are peeps using?</p> +</div> +</div></form></div><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-event-action="comments" class="bylink comments may-blank" rel="nofollow" >98 comments</a></li><li class="share"><a class="post-sharing-button" href="javascript: void 0;">share</a></li><li class="link-save-button save-button login-required"><a href="#">save</a></li><li><form action="/post/hide" method="post" class="state-button hide-button"><input type="hidden" name="executed" value="hidden" /><span><a href="javascript:void(0)" class=" " data-event-action="hide" onclick="change_state(this, 'hide', hide_thing);">hide</a></span></form></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li></ul><div class="reportform report-t3_16nf2ev"></div></div><div class="child" ></div><div class="clearleft"></div></div><div class="clearleft"></div></div><div class='commentarea'><div class="panestack-title"><span class="title">all 98 comments</span></div><div class="menuarea"><div class="spacer"><span class="dropdown-title lightdrop">sorted by:&#32;</span><div class="dropdown lightdrop" onclick="open_menu(this)"><span class="selected">best</span></div><div class="drop-choices lightdrop"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=top" class="choice" >top</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=new" class="choice" >new</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=controversial" class="choice" >controversial</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=old" class="choice" >old</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=random" class="hidden choice" >random</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=qa" class="choice" >q&amp;a</a><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/?sort=live" class="hidden choice" >live (beta)</a></div></div><div class="spacer"></div></div><section class="infobar commentsignupbar"><div class="commentsignupbar__container"><a href="/login" class="login-required commentsignupbar__link-wrapper"><textarea class="commentsignupbar__textarea"></textarea><div class="commentsignupbar__textarea-above"><h2 class="commentsignupbar__title">Want to add to the discussion?</h2><p class="commentsignupbar__desc">Post a comment!</p><div class="commentsignupbar__cta-container"><span class="c-btn c-btn-primary commentsignupbar__cta-button">Create an account</span></div></div></a></div></section><div id="siteTable_t3_16nf2ev" class="sitetable nestedlisting"><div class=" thing id-t1_k1f2su1 noncollapsed &#32; comment " id="thing_t1_k1f2su1" onclick="click_thing(this)" data-fullname="t1_k1f2su1" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="goretsky" data-author-fullname="t2_3tihk" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2su1/" ><p class="parent"><a name="k1f2su1"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/goretsky" class="author may-blank id-t2_3tihk" >goretsky</a><span class="flairrichtext flaircolordark flair " title="Aryeh Goretsky" style="background-color: #edeff1; border-color: #edeff1;"><span>Aryeh Goretsky</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="163">163 points</span><span class="score unvoted" title="164">164 points</span><span class="score likes" title="165">165 points</span>&#32;<time title="Wed Sep 20 14:11:13 2023 UTC" datetime="2023-09-20T14:11:13+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(5 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f2su1eco"><input type="hidden" name="thing_id" value="t1_k1f2su1"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Hello,</p> + +<p>I use Reddit for this purpose. I have created several security themed multireddits for the purpose of tracking security-related topics:</p> + +<p><a href="https://old.reddit.com/user/goretsky/m/security/">https://old.reddit.com/user/goretsky/m/security/</a> - tracks about 90 active security-related subreddits, but no vendors or open source projects and is regularly pruned of inactive subreddits.</p> + +<p><a href="https://old.reddit.com/user/goretsky/m/security_vendor/">https://old.reddit.com/user/goretsky/m/security_vendor/</a> - tracks about three dozen security vendor and open source project subreddits. </p> + +<p><a href="https://old.reddit.com/user/goretsky/m/security_inactive/">https://old.reddit.com/user/goretsky/m/security_inactive/</a> - a multireddit specifically for subreddits that were in the first two, but no longer seem to be active (lets me periodically check them for activity) </p> + +<p>You can view these by new, hot, top and so forth to get ideas of what&#39;s current, might be an emerging issue, what was historically significant, and so forth.</p> + +<p>Regards,</p> + +<p>Aryeh Goretsky</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2su1/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2su1/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f2su1"></div></div><div class="child"><div id="siteTable_t1_k1f2su1" class="sitetable listing"><div class=" thing id-t1_k1gtm9x noncollapsed &#32; comment " id="thing_t1_k1gtm9x" onclick="click_thing(this)" data-fullname="t1_k1gtm9x" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="cccanterbury" data-author-fullname="t2_93f0t46r4" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gtm9x/" ><p class="parent"><a name="k1gtm9x"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/cccanterbury" class="author may-blank id-t2_93f0t46r4" >cccanterbury</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 20:17:18 2023 UTC" datetime="2023-09-20T20:17:18+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gtm9x948"><input type="hidden" name="thing_id" value="t1_k1gtm9x"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Wow thanks Aryeh!</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gtm9x/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gtm9x/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2su1" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gtm9x"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1hmfej noncollapsed &#32; comment " id="thing_t1_k1hmfej" onclick="click_thing(this)" data-fullname="t1_k1hmfej" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="kitwillybb" data-author-fullname="t2_fdvexzhhd" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hmfej/" ><p class="parent"><a name="k1hmfej"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/kitwillybb" class="author may-blank id-t2_fdvexzhhd" >kitwillybb</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 23:15:13 2023 UTC" datetime="2023-09-20T23:15:13+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hmfejqzw"><input type="hidden" name="thing_id" value="t1_k1hmfej"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Thanks for this.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hmfej/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hmfej/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2su1" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hmfej"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1i7bji noncollapsed &#32; comment " id="thing_t1_k1i7bji" onclick="click_thing(this)" data-fullname="t1_k1i7bji" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Robbbbbbbbb" data-author-fullname="t2_a6lsi" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i7bji/" ><p class="parent"><a name="k1i7bji"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Robbbbbbbbb" class="author may-blank id-t2_a6lsi" >Robbbbbbbbb</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Thu Sep 21 01:39:52 2023 UTC" datetime="2023-09-21T01:39:52+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1i7bjic0u"><input type="hidden" name="thing_id" value="t1_k1i7bji"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Thanks! Great multireddits</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i7bji/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i7bji/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2su1" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1i7bji"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1mafik noncollapsed &#32; comment " id="thing_t1_k1mafik" onclick="click_thing(this)" data-fullname="t1_k1mafik" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="That_CatDad" data-author-fullname="t2_4d8ihz1f" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mafik/" ><p class="parent"><a name="k1mafik"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/That_CatDad" class="author may-blank id-t2_4d8ihz1f" >That_CatDad</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Thu Sep 21 20:49:59 2023 UTC" datetime="2023-09-21T20:49:59+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1mafikfpn"><input type="hidden" name="thing_id" value="t1_k1mafik"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Well I just discovered multireddits, thank you so much this will definitely change how I use this site</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mafik/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mafik/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2su1" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1mafik"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing noncollapsed &#32; deleted comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ehfna/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 11:30:36 2023 UTC" datetime="2023-09-20T11:30:36+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(6 children)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1ehfna"></div></div><div class="child"><div id="siteTable_deleted" class="sitetable listing"><div class=" thing id-t1_k1gmnbd noncollapsed &#32; comment " id="thing_t1_k1gmnbd" onclick="click_thing(this)" data-fullname="t1_k1gmnbd" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="uncannysalt" data-author-fullname="t2_3wpcoju1" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gmnbd/" ><p class="parent"><a name="k1gmnbd"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/uncannysalt" class="author may-blank id-t2_3wpcoju1" >uncannysalt</a><span class="flairrichtext flaircolorlight flair " title="Security Architect" style="background-color: #373c3f; border-color: #373c3f;"><span>Security Architect</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="12">12 points</span><span class="score unvoted" title="13">13 points</span><span class="score likes" title="14">14 points</span>&#32;<time title="Wed Sep 20 19:38:55 2023 UTC" datetime="2023-09-20T19:38:55+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gmnbdxe8"><input type="hidden" name="thing_id" value="t1_k1gmnbd"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Exactly. Most prolific security folks have feeds available.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gmnbd/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gmnbd/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gmnbd"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1gobsy noncollapsed &#32; comment " id="thing_t1_k1gobsy" onclick="click_thing(this)" data-fullname="t1_k1gobsy" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="th4ntis" data-author-fullname="t2_5i6unrry" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gobsy/" ><p class="parent"><a name="k1gobsy"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/th4ntis" class="author may-blank id-t2_5i6unrry" >th4ntis</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="5">5 points</span><span class="score unvoted" title="6">6 points</span><span class="score likes" title="7">7 points</span>&#32;<time title="Wed Sep 20 19:48:06 2023 UTC" datetime="2023-09-20T19:48:06+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gobsytgn"><input type="hidden" name="thing_id" value="t1_k1gobsy"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I would actually love to do this but need to figure out how. I haven&#39;t looked into it yet but this is on my list of things to do.<br/> +Any recommendations or tips would be helpful.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gobsy/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gobsy/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gobsy"></div></div><div class="child"><div id="siteTable_t1_k1gobsy" class="sitetable listing"><div class=" thing noncollapsed &#32; deleted comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1grrni/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 20:07:09 2023 UTC" datetime="2023-09-20T20:07:09+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1grrni"></div></div><div class="child"><div id="siteTable_deleted" class="sitetable listing"><div class=" thing id-t1_k1mbol3 noncollapsed &#32; comment " id="thing_t1_k1mbol3" onclick="click_thing(this)" data-fullname="t1_k1mbol3" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="th4ntis" data-author-fullname="t2_5i6unrry" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mbol3/" ><p class="parent"><a name="k1mbol3"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/th4ntis" class="author may-blank id-t2_5i6unrry" >th4ntis</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 20:57:08 2023 UTC" datetime="2023-09-21T20:57:08+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1mbol3bgn"><input type="hidden" name="thing_id" value="t1_k1mbol3"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>For someone getting started, any RSS links you recommend?</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mbol3/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1mbol3/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1mbol3"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1k9di0 noncollapsed &#32; comment " id="thing_t1_k1k9di0" onclick="click_thing(this)" data-fullname="t1_k1k9di0" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Bleord" data-author-fullname="t2_6qov61wx" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1k9di0/" ><p class="parent"><a name="k1k9di0"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Bleord" class="author may-blank id-t2_6qov61wx" >Bleord</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 13:40:03 2023 UTC" datetime="2023-09-21T13:40:03+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1k9di0ftw"><input type="hidden" name="thing_id" value="t1_k1k9di0"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Lots of web browsers have it built in.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1k9di0/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1k9di0/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1gobsy" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1k9di0"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eutsw noncollapsed &#32; comment " id="thing_t1_k1eutsw" onclick="click_thing(this)" data-fullname="t1_k1eutsw" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="beagle_bathouse" data-author-fullname="t2_83rlaeff" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eutsw/" ><p class="parent"><a name="k1eutsw"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/beagle_bathouse" class="author may-blank id-t2_83rlaeff" >beagle_bathouse</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="59">59 points</span><span class="score unvoted" title="60">60 points</span><span class="score likes" title="61">61 points</span>&#32;<time title="Wed Sep 20 13:17:09 2023 UTC" datetime="2023-09-20T13:17:09+00:00" class="live-timestamp">5 months ago</time><time class="edited-timestamp" title="last edited 9 days ago" datetime="2024-02-09T18:57:48+00:00">*</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(8 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eutswfzs"><input type="hidden" name="thing_id" value="t1_k1eutsw"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>desert person pet quiet worm hurry absorbed like cause rainstorm</p> + +<p><em>This post was mass deleted and anonymized with <a href="https://redact.dev">Redact</a></em></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eutsw/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eutsw/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eutsw"></div></div><div class="child"><div id="siteTable_t1_k1eutsw" class="sitetable listing"><div class=" thing id-t1_k1fe1am noncollapsed &#32; comment " id="thing_t1_k1fe1am" onclick="click_thing(this)" data-fullname="t1_k1fe1am" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="volume_two" data-author-fullname="t2_dmeg9cabu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fe1am/" ><p class="parent"><a name="k1fe1am"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/volume_two" class="author may-blank id-t2_dmeg9cabu" >volume_two</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="12">12 points</span><span class="score unvoted" title="13">13 points</span><span class="score likes" title="14">14 points</span>&#32;<time title="Wed Sep 20 15:20:53 2023 UTC" datetime="2023-09-20T15:20:53+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fe1am0rj"><input type="hidden" name="thing_id" value="t1_k1fe1am"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Nazis have free speech rights too! And the Constitution guarantees their freedom of speech on X.</p> + +<p>You non-Nazis are the nazis!</p> + +<h1>/S</h1> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fe1am/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fe1am/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1eutsw" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fe1am"></div></div><div class="child"><div id="siteTable_t1_k1fe1am" class="sitetable listing"><div class=" thing id-t1_k1ffalw noncollapsed &#32; comment " id="thing_t1_k1ffalw" onclick="click_thing(this)" data-fullname="t1_k1ffalw" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="beagle_bathouse" data-author-fullname="t2_83rlaeff" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ffalw/" ><p class="parent"><a name="k1ffalw"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/beagle_bathouse" class="author may-blank id-t2_83rlaeff" >beagle_bathouse</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="9">9 points</span><span class="score unvoted" title="10">10 points</span><span class="score likes" title="11">11 points</span>&#32;<time title="Wed Sep 20 15:28:26 2023 UTC" datetime="2023-09-20T15:28:26+00:00" class="live-timestamp">5 months ago</time><time class="edited-timestamp" title="last edited 9 days ago" datetime="2024-02-09T18:57:43+00:00">*</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ffalwqyw"><input type="hidden" name="thing_id" value="t1_k1ffalw"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>wakeful mighty steer fragile quickest rinse weather saw melodic boast</p> + +<p><em>This post was mass deleted and anonymized with <a href="https://redact.dev">Redact</a></em></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ffalw/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ffalw/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fe1am" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ffalw"></div></div><div class="child"><div id="siteTable_t1_k1ffalw" class="sitetable listing"><div class=" thing id-t1_k1fgnqb noncollapsed &#32; comment " id="thing_t1_k1fgnqb" onclick="click_thing(this)" data-fullname="t1_k1fgnqb" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="volume_two" data-author-fullname="t2_dmeg9cabu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fgnqb/" ><p class="parent"><a name="k1fgnqb"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/volume_two" class="author may-blank id-t2_dmeg9cabu" >volume_two</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-1">-1 points</span><span class="score unvoted" title="0">0 points</span><span class="score likes" title="1">1 point</span>&#32;<time title="Wed Sep 20 15:36:36 2023 UTC" datetime="2023-09-20T15:36:36+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fgnqbj60"><input type="hidden" name="thing_id" value="t1_k1fgnqb"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Somebody give this person an upvote!</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fgnqb/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fgnqb/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ffalw" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fgnqb"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fx6xl collapsed collapsed-for-reason &#32; comment " id="thing_t1_k1fx6xl" onclick="click_thing(this)" data-fullname="t1_k1fx6xl" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="stacksmasher" data-author-fullname="t2_4ceji" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fx6xl/" ><p class="parent"><a name="k1fx6xl"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[+]</a><a href="https://www.reddit.com/user/stacksmasher" class="author may-blank id-t2_4ceji" >stacksmasher</a><span class="userattrs"></span>&#32;<span class="collapsed-reason">comment score below threshold</span><span class="score dislikes" title="-8">-8 points</span><span class="score unvoted" title="-7">-7 points</span><span class="score likes" title="-6">-6 points</span>&#32;<time title="Wed Sep 20 17:13:37 2023 UTC" datetime="2023-09-20T17:13:37+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fx6xluja"><input type="hidden" name="thing_id" value="t1_k1fx6xl"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Infosec.exchange is horrible with very little engagement</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fx6xl/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fx6xl/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1eutsw" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fx6xl"></div></div><div class="child"><div id="siteTable_t1_k1fx6xl" class="sitetable listing"><div class=" thing id-t1_k1hdzxo noncollapsed &#32; comment " id="thing_t1_k1hdzxo" onclick="click_thing(this)" data-fullname="t1_k1hdzxo" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="thomasareed" data-author-fullname="t2_ogy3b" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hdzxo/" ><p class="parent"><a name="k1hdzxo"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/thomasareed" class="author may-blank id-t2_ogy3b" >thomasareed</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="5">5 points</span><span class="score unvoted" title="6">6 points</span><span class="score likes" title="7">7 points</span>&#32;<time title="Wed Sep 20 22:18:19 2023 UTC" datetime="2023-09-20T22:18:19+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hdzxo59d"><input type="hidden" name="thing_id" value="t1_k1hdzxo"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Hard disagree. What you get out of it depends on what you put in. If you’re just looking to curate a feed of infosec news, this may not be it. If you’re looking for a group of friends to have interesting discussions with, both infosec-related and not, you can make it that place. But that happens slowly and with participation.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hdzxo/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hdzxo/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fx6xl" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hdzxo"></div></div><div class="child"><div id="siteTable_t1_k1hdzxo" class="sitetable listing"><div class=" thing id-t1_k1hh7ow noncollapsed &#32; comment " id="thing_t1_k1hh7ow" onclick="click_thing(this)" data-fullname="t1_k1hh7ow" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="stacksmasher" data-author-fullname="t2_4ceji" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hh7ow/" ><p class="parent"><a name="k1hh7ow"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/stacksmasher" class="author may-blank id-t2_4ceji" >stacksmasher</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-3">-3 points</span><span class="score unvoted" title="-2">-2 points</span><span class="score likes" title="-1">-1 points</span>&#32;<time title="Wed Sep 20 22:39:33 2023 UTC" datetime="2023-09-20T22:39:33+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hh7owe2s"><input type="hidden" name="thing_id" value="t1_k1hh7ow"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Nope I only use it for data. You know most critical issues are announced on Twitter?</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hh7ow/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hh7ow/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1hdzxo" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hh7ow"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fyt2y noncollapsed &#32; comment " id="thing_t1_k1fyt2y" onclick="click_thing(this)" data-fullname="t1_k1fyt2y" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="beagle_bathouse" data-author-fullname="t2_83rlaeff" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fyt2y/" ><p class="parent"><a name="k1fyt2y"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/beagle_bathouse" class="author may-blank id-t2_83rlaeff" >beagle_bathouse</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="5">5 points</span><span class="score unvoted" title="6">6 points</span><span class="score likes" title="7">7 points</span>&#32;<time title="Wed Sep 20 17:22:55 2023 UTC" datetime="2023-09-20T17:22:55+00:00" class="live-timestamp">5 months ago</time><time class="edited-timestamp" title="last edited 9 days ago" datetime="2024-02-09T18:57:28+00:00">*</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fyt2yioo"><input type="hidden" name="thing_id" value="t1_k1fyt2y"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>erect narrow wipe plant tub nail rain shame angle unpack</p> + +<p><em>This post was mass deleted and anonymized with <a href="https://redact.dev">Redact</a></em></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fyt2y/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fyt2y/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fx6xl" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fyt2y"></div></div><div class="child"><div id="siteTable_t1_k1fyt2y" class="sitetable listing"><div class=" thing id-t1_k1gafku noncollapsed &#32; comment " id="thing_t1_k1gafku" onclick="click_thing(this)" data-fullname="t1_k1gafku" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="stacksmasher" data-author-fullname="t2_4ceji" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gafku/" ><p class="parent"><a name="k1gafku"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/stacksmasher" class="author may-blank id-t2_4ceji" >stacksmasher</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-3">-3 points</span><span class="score unvoted" title="-2">-2 points</span><span class="score likes" title="-1">-1 points</span>&#32;<time title="Wed Sep 20 18:29:55 2023 UTC" datetime="2023-09-20T18:29:55+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gafkuw1o"><input type="hidden" name="thing_id" value="t1_k1gafku"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Agree 1000000000% but the exchange platform is not it</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gafku/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gafku/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fyt2y" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gafku"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1ed9ru noncollapsed &#32; comment " id="thing_t1_k1ed9ru" onclick="click_thing(this)" data-fullname="t1_k1ed9ru" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="sonicoak" data-author-fullname="t2_40lq8qtkt" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ed9ru/" ><p class="parent"><a name="k1ed9ru"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/sonicoak" class="author may-blank id-t2_40lq8qtkt" >sonicoak</a><span class="flairrichtext flaircolorlight flair " title="Governance, Risk, &amp; Compliance" style="background-color: #373c3f; border-color: #373c3f;"><span>Governance, Risk, &amp; Compliance</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="96">96 points</span><span class="score unvoted" title="97">97 points</span><span class="score likes" title="98">98 points</span>&#32;<time title="Wed Sep 20 10:49:11 2023 UTC" datetime="2023-09-20T10:49:11+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(19 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ed9rulb2"><input type="hidden" name="thing_id" value="t1_k1ed9ru"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p><a href="https://infosec.exchange/home">https://infosec.exchange/home</a> , it is a Mastodon server.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ed9ru/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ed9ru/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ed9ru"></div></div><div class="child"><div id="siteTable_t1_k1ed9ru" class="sitetable listing"><div class=" thing id-t1_k1f2191 noncollapsed &#32; comment " id="thing_t1_k1f2191" onclick="click_thing(this)" data-fullname="t1_k1f2191" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Chrishamilton2007" data-author-fullname="t2_5goj3" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2191/" ><p class="parent"><a name="k1f2191"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Chrishamilton2007" class="author may-blank id-t2_5goj3" >Chrishamilton2007</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="80">80 points</span><span class="score unvoted" title="81">81 points</span><span class="score likes" title="82">82 points</span>&#32;<time title="Wed Sep 20 14:06:15 2023 UTC" datetime="2023-09-20T14:06:15+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f21918rv"><input type="hidden" name="thing_id" value="t1_k1f2191"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I dunno, I&#39;m sure Jerry Bell is cool and all but I&#39;m hesitant to point people to what could essentially turn into a private facebook group overnight.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2191/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2191/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ed9ru" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f2191"></div></div><div class="child"><div id="siteTable_t1_k1f2191" class="sitetable listing"><div class=" thing id-t1_k1fckr4 noncollapsed &#32; comment " id="thing_t1_k1fckr4" onclick="click_thing(this)" data-fullname="t1_k1fckr4" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Versed_Percepton" data-author-fullname="t2_94cm2jqqy" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fckr4/" ><p class="parent"><a name="k1fckr4"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Versed_Percepton" class="author may-blank id-t2_94cm2jqqy" >Versed_Percepton</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="20">20 points</span><span class="score unvoted" title="21">21 points</span><span class="score likes" title="22">22 points</span>&#32;<time title="Wed Sep 20 15:12:00 2023 UTC" datetime="2023-09-20T15:12:00+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fckr4d58"><input type="hidden" name="thing_id" value="t1_k1fckr4"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Jerry has <a href="https://Infosec.exchange">Infosec.exchange</a> open and very rarely are there admin issues at the federation level. Also, I have NEVER seen Jerry pull a &#39;shitty admin move&#39; in the couple years I have been on the instance. Let me tell you, there were times I wish he would. But he is just not that type of person.</p> + +<p>He has been working his ass off to expand the instance to support the influx of new users, he is very open about this in his daily feeds too. So, there is no way in hell the instance will become &#39;private&#39; with all the hard work he has put in here.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fckr4/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fckr4/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2191" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fckr4"></div></div><div class="child"><div id="siteTable_t1_k1fckr4" class="sitetable listing"><div class=" thing id-t1_k1flqhj noncollapsed &#32; comment " id="thing_t1_k1flqhj" onclick="click_thing(this)" data-fullname="t1_k1flqhj" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flqhj/" ><p class="parent"><a name="k1flqhj"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 16:06:31 2023 UTC" datetime="2023-09-20T16:06:31+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1flqhjact"><input type="hidden" name="thing_id" value="t1_k1flqhj"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>thank you :)</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flqhj/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flqhj/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fckr4" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1flqhj"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f3k7m noncollapsed &#32; comment " id="thing_t1_k1f3k7m" onclick="click_thing(this)" data-fullname="t1_k1f3k7m" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Gangrif" data-author-fullname="t2_13q213" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3k7m/" ><p class="parent"><a name="k1f3k7m"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Gangrif" class="author may-blank id-t2_13q213" >Gangrif</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="16">16 points</span><span class="score unvoted" title="17">17 points</span><span class="score likes" title="18">18 points</span>&#32;<time title="Wed Sep 20 14:16:09 2023 UTC" datetime="2023-09-20T14:16:09+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f3k7m4bq"><input type="hidden" name="thing_id" value="t1_k1f3k7m"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>for what it’s worth. jerry has been tirelessly administering infosec.exchange for years. and doesn’t seem likely to stop. and if he does…. you can move easily to another instance. defcon runs one, the mastodon folks run one. i run one (though mine is mainly for me.) and they all federate with the others. so you don’t miss out being on you’re own or one other than your friends are on.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3k7m/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3k7m/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2191" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f3k7m"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1h3ys0 noncollapsed &#32; comment " id="thing_t1_k1h3ys0" onclick="click_thing(this)" data-fullname="t1_k1h3ys0" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h3ys0/" ><p class="parent"><a name="k1h3ys0"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 21:17:06 2023 UTC" datetime="2023-09-20T21:17:06+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1h3ys0lx7"><input type="hidden" name="thing_id" value="t1_k1h3ys0"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>yes. After 7 years of being a free and open forum, I have decided to make <a href="https://infosec.exchange">infosec.exchange</a> a private facebook group. I had been on the fence about it until now.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h3ys0/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h3ys0/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f2191" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1h3ys0"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1expm6 noncollapsed &#32; comment " id="thing_t1_k1expm6" onclick="click_thing(this)" data-fullname="t1_k1expm6" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="movement2012" data-author-fullname="t2_tuqrm" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1expm6/" ><p class="parent"><a name="k1expm6"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/movement2012" class="author may-blank id-t2_tuqrm" >movement2012</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="17">17 points</span><span class="score unvoted" title="18">18 points</span><span class="score likes" title="19">19 points</span>&#32;<time title="Wed Sep 20 13:37:17 2023 UTC" datetime="2023-09-20T13:37:17+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(6 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1expm616a"><input type="hidden" name="thing_id" value="t1_k1expm6"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Mastodon feels a bit dry. Are there too few people, or am I not following enough?</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1expm6/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1expm6/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ed9ru" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1expm6"></div></div><div class="child"><div id="siteTable_t1_k1expm6" class="sitetable listing"><div class=" thing noncollapsed &#32; deleted comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f2t7m/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 14:11:17 2023 UTC" datetime="2023-09-20T14:11:17+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1f2t7m"></div></div><div class="child"><div id="siteTable_deleted" class="sitetable listing"><div class=" thing id-t1_k1f4kto noncollapsed &#32; comment " id="thing_t1_k1f4kto" onclick="click_thing(this)" data-fullname="t1_k1f4kto" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Myrion_Phoenix" data-author-fullname="t2_zisex" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f4kto/" ><p class="parent"><a name="k1f4kto"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Myrion_Phoenix" class="author may-blank id-t2_zisex" >Myrion_Phoenix</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 14:22:37 2023 UTC" datetime="2023-09-20T14:22:37+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f4ktohzv"><input type="hidden" name="thing_id" value="t1_k1f4kto"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>It&#39;s also helpful to follow some hashtags (which the Mastodon android app can&#39;t, but f.ex. Tusky can and the web interface also works).</p> + +<p>I follow #fido2 and #cryptography, for example, as well as stuff like #bookstodon.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f4kto/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f4kto/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f4kto"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fvt58 noncollapsed &#32; comment " id="thing_t1_k1fvt58" onclick="click_thing(this)" data-fullname="t1_k1fvt58" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="vitriolix" data-author-fullname="t2_38fl0" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fvt58/" ><p class="parent"><a name="k1fvt58"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/vitriolix" class="author may-blank id-t2_38fl0" >vitriolix</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="14">14 points</span><span class="score unvoted" title="15">15 points</span><span class="score likes" title="16">16 points</span>&#32;<time title="Wed Sep 20 17:05:34 2023 UTC" datetime="2023-09-20T17:05:34+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fvt58i8r"><input type="hidden" name="thing_id" value="t1_k1fvt58"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>checkout the local feeds on a few instances to get lots of good content and find people to follow:</p> + +<p><a href="https://infosec.exchange/public/local">https://infosec.exchange/public/local</a></p> + +<p><a href="https://fosstodon.org/public/local">https://fosstodon.org/public/local</a></p> + +<p><a href="https://hachyderm.io/public/local">https://hachyderm.io/public/local</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fvt58/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fvt58/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1expm6" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fvt58"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fduhp noncollapsed &#32; comment " id="thing_t1_k1fduhp" onclick="click_thing(this)" data-fullname="t1_k1fduhp" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fduhp/" ><p class="parent"><a name="k1fduhp"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 15:19:46 2023 UTC" datetime="2023-09-20T15:19:46+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fduhpwm0"><input type="hidden" name="thing_id" value="t1_k1fduhp"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p><a href="https://elk.zone/infosec.exchange/@fY54DtPKe6rxMF/110757471778047861" rel="nofollow">https://elk.zone/infosec.exchange/@fY54DtPKe6rxMF/110757471778047861</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fduhp/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fduhp/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1expm6" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fduhp"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1hfihx noncollapsed &#32; comment " id="thing_t1_k1hfihx" onclick="click_thing(this)" data-fullname="t1_k1hfihx" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="mkosmo" data-author-fullname="t2_3asub" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfihx/" ><p class="parent"><a name="k1hfihx"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/mkosmo" class="author may-blank id-t2_3asub" >mkosmo</a><span class="flairrichtext flaircolorlight flair " title="Security Architect" style="background-color: #373c3f; border-color: #373c3f;"><span>Security Architect</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 22:28:12 2023 UTC" datetime="2023-09-20T22:28:12+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hfihxyb6"><input type="hidden" name="thing_id" value="t1_k1hfihx"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>The fediverse isn&#39;t nearly as populated as it&#39;s zealots would lead you to believe, unfortunately. Great concept, but just doesn&#39;t have the momentum.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfihx/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfihx/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1expm6" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hfihx"></div></div><div class="child"><div id="siteTable_t1_k1hfihx" class="sitetable listing"><div class=" thing id-t1_k1kb6wr noncollapsed &#32; comment " id="thing_t1_k1kb6wr" onclick="click_thing(this)" data-fullname="t1_k1kb6wr" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="WollCel" data-author-fullname="t2_7q0snzpw" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1kb6wr/" ><p class="parent"><a name="k1kb6wr"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/WollCel" class="author may-blank id-t2_7q0snzpw" >WollCel</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Thu Sep 21 13:52:01 2023 UTC" datetime="2023-09-21T13:52:01+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1kb6wre6m"><input type="hidden" name="thing_id" value="t1_k1kb6wr"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Yeah it’s growing though, it doesn’t help how ideologically splintered instances can get</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1kb6wr/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1kb6wr/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1hfihx" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1kb6wr"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f481h noncollapsed &#32; comment " id="thing_t1_k1f481h" onclick="click_thing(this)" data-fullname="t1_k1f481h" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Zncon" data-author-fullname="t2_hpvos" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f481h/" ><p class="parent"><a name="k1f481h"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Zncon" class="author may-blank id-t2_hpvos" >Zncon</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="9">9 points</span><span class="score unvoted" title="10">10 points</span><span class="score likes" title="11">11 points</span>&#32;<time title="Wed Sep 20 14:20:24 2023 UTC" datetime="2023-09-20T14:20:24+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f481hrvj"><input type="hidden" name="thing_id" value="t1_k1f481h"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>The entire first page (and most of the rest of them) is politics and nonsense at the moment - not exactly an amazing recommendation. =/</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f481h/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f481h/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ed9ru" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f481h"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing noncollapsed &#32; deleted comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fgax9/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 15:34:29 2023 UTC" datetime="2023-09-20T15:34:29+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1fgax9"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1envz7 collapsed collapsed-for-reason &#32; comment " id="thing_t1_k1envz7" onclick="click_thing(this)" data-fullname="t1_k1envz7" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="profshmex" data-author-fullname="t2_6dja5aq1" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1envz7/" ><p class="parent"><a name="k1envz7"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[+]</a><a href="https://www.reddit.com/user/profshmex" class="author may-blank id-t2_6dja5aq1" >profshmex</a><span class="userattrs"></span>&#32;<span class="collapsed-reason">comment score below threshold</span><span class="score dislikes" title="-30">-30 points</span><span class="score unvoted" title="-29">-29 points</span><span class="score likes" title="-28">-28 points</span>&#32;<time title="Wed Sep 20 12:25:02 2023 UTC" datetime="2023-09-20T12:25:02+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1envz78qq"><input type="hidden" name="thing_id" value="t1_k1envz7"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Login creds? Nice try 😉</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1envz7/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1envz7/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ed9ru" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1envz7"></div></div><div class="child"><div id="siteTable_t1_k1envz7" class="sitetable listing"><div class=" thing id-t1_k1f0mqa noncollapsed &#32; comment " id="thing_t1_k1f0mqa" onclick="click_thing(this)" data-fullname="t1_k1f0mqa" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="SteveDinn" data-author-fullname="t2_n2ejp" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0mqa/" ><p class="parent"><a name="k1f0mqa"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/SteveDinn" class="author may-blank id-t2_n2ejp" >SteveDinn</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 13:56:58 2023 UTC" datetime="2023-09-20T13:56:58+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f0mqa639"><input type="hidden" name="thing_id" value="t1_k1f0mqa"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Try <a href="https://infosec.exchange/explore" rel="nofollow">https://infosec.exchange/explore</a> instead.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0mqa/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0mqa/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1envz7" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f0mqa"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f0eas noncollapsed &#32; comment " id="thing_t1_k1f0eas" onclick="click_thing(this)" data-fullname="t1_k1f0eas" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0eas/" ><p class="parent"><a name="k1f0eas"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="49">49 points</span><span class="score unvoted" title="50">50 points</span><span class="score likes" title="51">51 points</span>&#32;<time title="Wed Sep 20 13:55:24 2023 UTC" datetime="2023-09-20T13:55:24+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(8 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f0eas19s"><input type="hidden" name="thing_id" value="t1_k1f0eas"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I run <a href="https://infosec.exchange">https://infosec.exchange</a> - it has about 17000 active members, and among several other security related instances.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0eas/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0eas/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f0eas"></div></div><div class="child"><div id="siteTable_t1_k1f0eas" class="sitetable listing"><div class=" thing id-t1_k1f8o48 noncollapsed &#32; comment " id="thing_t1_k1f8o48" onclick="click_thing(this)" data-fullname="t1_k1f8o48" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Elder_Meow_667" data-author-fullname="t2_ul0ujln5" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f8o48/" ><p class="parent"><a name="k1f8o48"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Elder_Meow_667" class="author may-blank id-t2_ul0ujln5" >Elder_Meow_667</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="3">3 points</span><span class="score unvoted" title="4">4 points</span><span class="score likes" title="5">5 points</span>&#32;<time title="Wed Sep 20 14:48:00 2023 UTC" datetime="2023-09-20T14:48:00+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f8o48gnj"><input type="hidden" name="thing_id" value="t1_k1f8o48"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Jerrrrrry! Hehe</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f8o48/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f8o48/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f0eas" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f8o48"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fsfsq noncollapsed &#32; comment " id="thing_t1_k1fsfsq" onclick="click_thing(this)" data-fullname="t1_k1fsfsq" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Popka_Akoola" data-author-fullname="t2_2ym6xry6" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fsfsq/" ><p class="parent"><a name="k1fsfsq"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Popka_Akoola" class="author may-blank id-t2_2ym6xry6" >Popka_Akoola</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="3">3 points</span><span class="score unvoted" title="4">4 points</span><span class="score likes" title="5">5 points</span>&#32;<time title="Wed Sep 20 16:45:58 2023 UTC" datetime="2023-09-20T16:45:58+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fsfsqxhm"><input type="hidden" name="thing_id" value="t1_k1fsfsq"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>May get downvoted for this but having been one of the earlier adopters into mastodon and infosec exchange specifically, I just don&#39;t see how it&#39;s better than X. I get a lot of crazy things have happened, but 95% of posts I see on infosec exchange are people congratulating themselves and being so proud they left Twitter and the other 5% are people introducing themselves and talking about their day/treating the platform like Twitter.</p> + +<p>I love the idea of Mastodon in general and I have high hopes for it&#39;s future, but I really think people are deluding themselves if they say it has better content at the moment.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fsfsq/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fsfsq/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f0eas" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fsfsq"></div></div><div class="child"><div id="siteTable_t1_k1fsfsq" class="sitetable listing"><div class=" thing id-t1_k1ibs3x noncollapsed &#32; comment " id="thing_t1_k1ibs3x" onclick="click_thing(this)" data-fullname="t1_k1ibs3x" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="syn-ack-fin" data-author-fullname="t2_6nnp3" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ibs3x/" ><p class="parent"><a name="k1ibs3x"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/syn-ack-fin" class="author may-blank id-t2_6nnp3" >syn-ack-fin</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Thu Sep 21 02:11:56 2023 UTC" datetime="2023-09-21T02:11:56+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ibs3xlez"><input type="hidden" name="thing_id" value="t1_k1ibs3x"/><div class="usertext-body may-blank-within md-container " ><div class="md"><blockquote> +<p>I just don’t see how it’s better than X</p> +</blockquote> + +<p>Better is obviously relative, but Mastodon does take more work. The end result is that you have a feed solely with the information you want and not what is pushed on you. Oh and fewer nazis is nice too.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ibs3x/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ibs3x/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fsfsq" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ibs3x"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1foxtg noncollapsed &#32; controversial comment " id="thing_t1_k1foxtg" onclick="click_thing(this)" data-fullname="t1_k1foxtg" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Fallingdamage" data-author-fullname="t2_44txb" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1foxtg/" ><p class="parent"><a name="k1foxtg"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Fallingdamage" class="author may-blank id-t2_44txb" >Fallingdamage</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 16:25:25 2023 UTC" datetime="2023-09-20T16:25:25+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(3 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1foxtgp8a"><input type="hidden" name="thing_id" value="t1_k1foxtg"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Just followed link. Bunch of political posts, ice cream stands and star trek jokes. I think I get better content on <a href="/r/cybersecurity">r/cybersecurity</a> and arstechnica</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1foxtg/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1foxtg/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f0eas" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1foxtg"></div></div><div class="child"><div id="siteTable_t1_k1foxtg" class="sitetable listing"><div class=" thing id-t1_k1fqxd3 noncollapsed &#32; comment " id="thing_t1_k1fqxd3" onclick="click_thing(this)" data-fullname="t1_k1fqxd3" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fqxd3/" ><p class="parent"><a name="k1fqxd3"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 16:37:04 2023 UTC" datetime="2023-09-20T16:37:04+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fqxd39lu"><input type="hidden" name="thing_id" value="t1_k1fqxd3"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I don&#39;t think you were looking at the correct timeline - this is more representative of what we see: <a href="https://infosec.exchange/public/local">https://infosec.exchange/public/local</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fqxd3/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fqxd3/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1foxtg" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fqxd3"></div></div><div class="child"><div id="siteTable_t1_k1fqxd3" class="sitetable listing"><div class=" thing noncollapsed &#32; deleted controversial comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fyl9y/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 17:21:40 2023 UTC" datetime="2023-09-20T17:21:40+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1fyl9y"></div></div><div class="child"><div id="siteTable_deleted" class="sitetable listing"><div class=" thing id-t1_k1fzrwf noncollapsed &#32; comment " id="thing_t1_k1fzrwf" onclick="click_thing(this)" data-fullname="t1_k1fzrwf" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fzrwf/" ><p class="parent"><a name="k1fzrwf"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 17:28:28 2023 UTC" datetime="2023-09-20T17:28:28+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fzrwf2yq"><input type="hidden" name="thing_id" value="t1_k1fzrwf"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Thanks for giving it a look.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fzrwf/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fzrwf/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fzrwf"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fmsen noncollapsed &#32; comment " id="thing_t1_k1fmsen" onclick="click_thing(this)" data-fullname="t1_k1fmsen" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Individual-Ad-9902" data-author-fullname="t2_75h3ss5c" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fmsen/" ><p class="parent"><a name="k1fmsen"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Individual-Ad-9902" class="author may-blank id-t2_75h3ss5c" >Individual-Ad-9902</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 16:12:49 2023 UTC" datetime="2023-09-20T16:12:49+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fmsen3eo"><input type="hidden" name="thing_id" value="t1_k1fmsen"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>SECOND!</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fmsen/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fmsen/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f0eas" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fmsen"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1ee5j5 noncollapsed &#32; comment " id="thing_t1_k1ee5j5" onclick="click_thing(this)" data-fullname="t1_k1ee5j5" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="TradeApe" data-author-fullname="t2_51lfc8p8" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ee5j5/" ><p class="parent"><a name="k1ee5j5"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/TradeApe" class="author may-blank id-t2_51lfc8p8" >TradeApe</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="37">37 points</span><span class="score unvoted" title="38">38 points</span><span class="score likes" title="39">39 points</span>&#32;<time title="Wed Sep 20 10:58:41 2023 UTC" datetime="2023-09-20T10:58:41+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ee5j50pl"><input type="hidden" name="thing_id" value="t1_k1ee5j5"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Infosec.exchange mastodon server</p> + +<p>X feels too much like Rumble or an Alex Jones fan club with the content that gets pushed. Definitely not paying for that.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ee5j5/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ee5j5/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ee5j5"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1ek11e noncollapsed &#32; comment " id="thing_t1_k1ek11e" onclick="click_thing(this)" data-fullname="t1_k1ek11e" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Doc_Hobb" data-author-fullname="t2_5f8eu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ek11e/" ><p class="parent"><a name="k1ek11e"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Doc_Hobb" class="author may-blank id-t2_5f8eu" >Doc_Hobb</a><span class="flairrichtext flaircolorlight flair " title="Vulnerability Researcher" style="background-color: #373c3f; border-color: #373c3f;"><span>Vulnerability Researcher</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="17">17 points</span><span class="score unvoted" title="18">18 points</span><span class="score likes" title="19">19 points</span>&#32;<time title="Wed Sep 20 11:53:33 2023 UTC" datetime="2023-09-20T11:53:33+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ek11e6rl"><input type="hidden" name="thing_id" value="t1_k1ek11e"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I like to use <a href="https://allinfosecnews.com">https://allinfosecnews.com</a> it’s a great collection of feeds</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ek11e/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ek11e/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ek11e"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1he78h noncollapsed &#32; comment " id="thing_t1_k1he78h" onclick="click_thing(this)" data-fullname="t1_k1he78h" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Rebootkid" data-author-fullname="t2_4fhi9" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1he78h/" ><p class="parent"><a name="k1he78h"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Rebootkid" class="author may-blank id-t2_4fhi9" >Rebootkid</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 22:19:37 2023 UTC" datetime="2023-09-20T22:19:37+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1he78hf0b"><input type="hidden" name="thing_id" value="t1_k1he78h"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I&#39;m over on infosec.exchange. Found it very useful.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1he78h/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1he78h/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1he78h"></div></div><div class="child"><div id="siteTable_t1_k1he78h" class="sitetable listing"><div class=" thing id-t1_k1i0icy noncollapsed &#32; comment " id="thing_t1_k1i0icy" onclick="click_thing(this)" data-fullname="t1_k1i0icy" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="hudsoncress" data-author-fullname="t2_18vpapcs" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i0icy/" ><p class="parent"><a name="k1i0icy"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/hudsoncress" class="author may-blank id-t2_18vpapcs" >hudsoncress</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 00:52:19 2023 UTC" datetime="2023-09-21T00:52:19+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1i0icygih"><input type="hidden" name="thing_id" value="t1_k1i0icy"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>This is the way</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i0icy/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1i0icy/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1he78h" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1i0icy"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1erfy3 noncollapsed &#32; comment " id="thing_t1_k1erfy3" onclick="click_thing(this)" data-fullname="t1_k1erfy3" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1erfy3/" ><p class="parent"><a name="k1erfy3"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="10">10 points</span><span class="score unvoted" title="11">11 points</span><span class="score likes" title="12">12 points</span>&#32;<time title="Wed Sep 20 12:52:21 2023 UTC" datetime="2023-09-20T12:52:21+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(3 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1erfy37b8"><input type="hidden" name="thing_id" value="t1_k1erfy3"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>What I find interesting is after I closed my account, over time I realized I was gradually being linked to Twitter less and less by other external websites/ news sites. Now weeks can go by without it happening. </p> + +<p>So if his goal is to make twitter no longer relevant, he&#39;s doing a banger job.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1erfy3/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1erfy3/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1erfy3"></div></div><div class="child"><div id="siteTable_t1_k1erfy3" class="sitetable listing"><div class=" thing id-t1_k1f72xa noncollapsed &#32; comment " id="thing_t1_k1f72xa" onclick="click_thing(this)" data-fullname="t1_k1f72xa" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="itwasaraccoon" data-author-fullname="t2_tyqigoko" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f72xa/" ><p class="parent"><a name="k1f72xa"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/itwasaraccoon" class="author may-blank id-t2_tyqigoko" >itwasaraccoon</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 14:38:09 2023 UTC" datetime="2023-09-20T14:38:09+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f72xa4h4"><input type="hidden" name="thing_id" value="t1_k1f72xa"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Same with me. But I have to admit that the huge security community and information exchange on Twitter used to be super helpful to stay up to date. Its going to take a long time to replicate that somewhere else.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f72xa/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f72xa/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1erfy3" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f72xa"></div></div><div class="child"><div id="siteTable_t1_k1f72xa" class="sitetable listing"><div class=" thing id-t1_k1fz12d noncollapsed &#32; comment " id="thing_t1_k1fz12d" onclick="click_thing(this)" data-fullname="t1_k1fz12d" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="650REDHAIR" data-author-fullname="t2_18ip5p" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fz12d/" ><p class="parent"><a name="k1fz12d"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/650REDHAIR" class="author may-blank id-t2_18ip5p" >650REDHAIR</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 17:24:11 2023 UTC" datetime="2023-09-20T17:24:11+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fz12dbgj"><input type="hidden" name="thing_id" value="t1_k1fz12d"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>My tinfoil hat might be on too tight, but sometimes I wonder if that is by design.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fz12d/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fz12d/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f72xa" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fz12d"></div></div><div class="child"><div id="siteTable_t1_k1fz12d" class="sitetable listing"><div class=" thing id-t1_k1g1jnw noncollapsed &#32; comment " id="thing_t1_k1g1jnw" onclick="click_thing(this)" data-fullname="t1_k1g1jnw" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="itwasaraccoon" data-author-fullname="t2_tyqigoko" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g1jnw/" ><p class="parent"><a name="k1g1jnw"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/itwasaraccoon" class="author may-blank id-t2_tyqigoko" >itwasaraccoon</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 17:38:42 2023 UTC" datetime="2023-09-20T17:38:42+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1g1jnwdk1"><input type="hidden" name="thing_id" value="t1_k1g1jnw"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Have you tried the new Titanium hat instead? People seem to love the color at least.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g1jnw/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g1jnw/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fz12d" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1g1jnw"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1dztic noncollapsed &#32; comment " id="thing_t1_k1dztic" onclick="click_thing(this)" data-fullname="t1_k1dztic" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="AyeSocketFucker" data-author-fullname="t2_9dx76" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1dztic/" ><p class="parent"><a name="k1dztic"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/AyeSocketFucker" class="author may-blank id-t2_9dx76" >AyeSocketFucker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="8">8 points</span><span class="score unvoted" title="9">9 points</span><span class="score likes" title="10">10 points</span>&#32;<time title="Wed Sep 20 07:58:53 2023 UTC" datetime="2023-09-20T07:58:53+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1dzticb63"><input type="hidden" name="thing_id" value="t1_k1dztic"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>It was mastodon, not sure anymore, haven’t used it in awhile</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1dztic/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1dztic/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1dztic"></div></div><div class="child"><div id="siteTable_t1_k1dztic" class="sitetable listing"><div class=" thing id-t1_k1fwapb noncollapsed &#32; comment " id="thing_t1_k1fwapb" onclick="click_thing(this)" data-fullname="t1_k1fwapb" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="vitriolix" data-author-fullname="t2_38fl0" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fwapb/" ><p class="parent"><a name="k1fwapb"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/vitriolix" class="author may-blank id-t2_38fl0" >vitriolix</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="5">5 points</span><span class="score unvoted" title="6">6 points</span><span class="score likes" title="7">7 points</span>&#32;<time title="Wed Sep 20 17:08:24 2023 UTC" datetime="2023-09-20T17:08:24+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(3 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fwapbn9u"><input type="hidden" name="thing_id" value="t1_k1fwapb"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Masto is thriving and growing rapidly, up to 14mil created accounts now (and of course lower monthly actives, but still very active). Every time there is news of more twitter stupidity there is a new spike of signups</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fwapb/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fwapb/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1dztic" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fwapb"></div></div><div class="child"><div id="siteTable_t1_k1fwapb" class="sitetable listing"><div class=" thing id-t1_k1h0z54 noncollapsed &#32; comment " id="thing_t1_k1h0z54" onclick="click_thing(this)" data-fullname="t1_k1h0z54" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h0z54/" ><p class="parent"><a name="k1h0z54"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 20:59:56 2023 UTC" datetime="2023-09-20T20:59:56+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1h0z54yqx"><input type="hidden" name="thing_id" value="t1_k1h0z54"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I tried Mastadon but I found it very difficult to actually see any posts that were actually worthwhile or interesting. It seems their algorithms for content recommendation need a lot of work or don&#39;t exist.</p> + +<p>I don&#39;t care about who posted most recently, I want to know what&#39;s actually worth reading that day.</p> + +<p>Also tried Threads but found it difficult to even find the content I wanted to see.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h0z54/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h0z54/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1fwapb" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1h0z54"></div></div><div class="child"><div id="siteTable_t1_k1h0z54" class="sitetable listing"><div class=" thing id-t1_k1hfmcg noncollapsed &#32; comment " id="thing_t1_k1hfmcg" onclick="click_thing(this)" data-fullname="t1_k1hfmcg" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="coloRD" data-author-fullname="t2_8d2bp" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfmcg/" ><p class="parent"><a name="k1hfmcg"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/coloRD" class="author may-blank id-t2_8d2bp" >coloRD</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 22:28:54 2023 UTC" datetime="2023-09-20T22:28:54+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hfmcg501"><input type="hidden" name="thing_id" value="t1_k1hfmcg"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>it is based more on hashtags and you choosing who to follow than recommender algorithms. In fact many mastodon users often proudly proclaim they do not want to live in an algorithmically generated bubble being fed content.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfmcg/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hfmcg/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1h0z54" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hfmcg"></div></div><div class="child"><div id="siteTable_t1_k1hfmcg" class="sitetable listing"><div class=" thing id-t1_k1jhi39 noncollapsed &#32; comment " id="thing_t1_k1jhi39" onclick="click_thing(this)" data-fullname="t1_k1jhi39" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1jhi39/" ><p class="parent"><a name="k1jhi39"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 09:27:22 2023 UTC" datetime="2023-09-21T09:27:22+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1jhi39r43"><input type="hidden" name="thing_id" value="t1_k1jhi39"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>It is a double edged sword though as it makes it more difficult to find that content you want to follow - I don&#39;t think algorithms are inherently bad as long as they can&#39;t be manipulated.</p> + +<p>That being said, Reddit mostly managed without algorithms thanks to voting &amp; community driven recommendations, but Mastadon doesn&#39;t have that.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1jhi39/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1jhi39/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1hfmcg" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1jhi39"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1h5u7u noncollapsed &#32; comment " id="thing_t1_k1h5u7u" onclick="click_thing(this)" data-fullname="t1_k1h5u7u" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="AnIrregularRegular" data-author-fullname="t2_164qs4" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h5u7u/" ><p class="parent"><a name="k1h5u7u"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/AnIrregularRegular" class="author may-blank id-t2_164qs4" >AnIrregularRegular</a><span class="flairrichtext flaircolorlight flair " title="Blue Team" style="background-color: #373c3f; border-color: #373c3f;"><span>Blue Team</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 21:28:06 2023 UTC" datetime="2023-09-20T21:28:06+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1h5u7ub0u"><input type="hidden" name="thing_id" value="t1_k1h5u7u"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Honestly I’ve yet to run into a great Twitter replacement. Honestly Reddit is maybe the best for stuff before it hits blogs/news which is why I loved Twitter. Go follow sysadmin and MSP and they often see stuff before security people do.</p> + +<p>Mastodon is alright but just didn’t scratch the itch the same(also like to follow a lot of foreign policy/natsec peeps who won’t do Mastodon).</p> + +<p>Recently got into Bluesky and it’s okay. Not Twitter but also I think has a lot of potential.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h5u7u/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h5u7u/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1h5u7u"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1hk3lb noncollapsed &#32; comment " id="thing_t1_k1hk3lb" onclick="click_thing(this)" data-fullname="t1_k1hk3lb" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="LordCommanderTaurusG" data-author-fullname="t2_v693a42" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hk3lb/" ><p class="parent"><a name="k1hk3lb"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/LordCommanderTaurusG" class="author may-blank id-t2_v693a42" >LordCommanderTaurusG</a><span class="flairrichtext flaircolorlight flair " title="Blue Team" style="background-color: #373c3f; border-color: #373c3f;"><span>Blue Team</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 22:59:01 2023 UTC" datetime="2023-09-20T22:59:01+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hk3lbwhi"><input type="hidden" name="thing_id" value="t1_k1hk3lb"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Have you tried Threads?</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hk3lb/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hk3lb/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hk3lb"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1hvox4 noncollapsed &#32; comment " id="thing_t1_k1hvox4" onclick="click_thing(this)" data-fullname="t1_k1hvox4" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Tetmohawk" data-author-fullname="t2_2x2zoj2" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hvox4/" ><p class="parent"><a name="k1hvox4"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Tetmohawk" class="author may-blank id-t2_2x2zoj2" >Tetmohawk</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Thu Sep 21 00:19:26 2023 UTC" datetime="2023-09-21T00:19:26+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1hvox4c5j"><input type="hidden" name="thing_id" value="t1_k1hvox4"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I see no ads. Pretty close to never. Here&#39;s how:</p> + +<p>(1) Use a DNS filter like CleanBrowsing.com and set it to filter ads and tracking.</p> + +<p>(2) Put Twitter in its own container. You can do this easily in Firefox. That way cookies and other stuff related to ads is isolated from every other website. </p> + +<p>(3) Use a Firefox add-on. I use both Privacy badger and uBlock origin.</p> + +<p>I don&#39;t see ads on almost any site with this method. At work I get ads all the time and it&#39;s annoying. Not sure how y&#39;all lived like this for so long. Ads haven&#39;t been a part of my life for years. Now you know why.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hvox4/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1hvox4/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1hvox4"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eii4j noncollapsed &#32; comment " id="thing_t1_k1eii4j" onclick="click_thing(this)" data-fullname="t1_k1eii4j" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="mobo_dojo" data-author-fullname="t2_70dgodgm" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eii4j/" ><p class="parent"><a name="k1eii4j"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/mobo_dojo" class="author may-blank id-t2_70dgodgm" >mobo_dojo</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 11:40:21 2023 UTC" datetime="2023-09-20T11:40:21+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eii4j0n0"><input type="hidden" name="thing_id" value="t1_k1eii4j"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Newsboat</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eii4j/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eii4j/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eii4j"></div></div><div class="child"><div id="siteTable_t1_k1eii4j" class="sitetable listing"><div class=" thing id-t1_k1ftwx9 noncollapsed &#32; comment " id="thing_t1_k1ftwx9" onclick="click_thing(this)" data-fullname="t1_k1ftwx9" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="irkine" data-author-fullname="t2_katin" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ftwx9/" ><p class="parent"><a name="k1ftwx9"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/irkine" class="author may-blank id-t2_katin" >irkine</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 16:54:33 2023 UTC" datetime="2023-09-20T16:54:33+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ftwx9dzw"><input type="hidden" name="thing_id" value="t1_k1ftwx9"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>What does your feed list look like for security? :)</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ftwx9/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ftwx9/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1eii4j" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ftwx9"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fdb6p noncollapsed &#32; comment " id="thing_t1_k1fdb6p" onclick="click_thing(this)" data-fullname="t1_k1fdb6p" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Versed_Percepton" data-author-fullname="t2_94cm2jqqy" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fdb6p/" ><p class="parent"><a name="k1fdb6p"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Versed_Percepton" class="author may-blank id-t2_94cm2jqqy" >Versed_Percepton</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="3">3 points</span><span class="score unvoted" title="4">4 points</span><span class="score likes" title="5">5 points</span>&#32;<time title="Wed Sep 20 15:16:29 2023 UTC" datetime="2023-09-20T15:16:29+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fdb6pxm7"><input type="hidden" name="thing_id" value="t1_k1fdb6p"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>The closest thing to Twitter would be mastodon right now. You just need to decide on your home instance, build your profile like you would anywhere else, and start finding topics, hashtags, and people/groups to follow. Then filter out the junk(you can black list on keywords) so you can rebuild your RSS like you have it setup on Twitter. </p> + +<p>There are a dozen or so Infosec instances to choose from, I like <a href="https://Infosec.Exchange" rel="nofollow">Infosec.Exchange</a> as its stable and a smooth experience. It has a solid Admin team and has no issues talking to the federation. The membership on the instance is pretty open and welcoming.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fdb6p/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fdb6p/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fdb6p"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fn2i6 noncollapsed &#32; comment " id="thing_t1_k1fn2i6" onclick="click_thing(this)" data-fullname="t1_k1fn2i6" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Individual-Ad-9902" data-author-fullname="t2_75h3ss5c" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fn2i6/" ><p class="parent"><a name="k1fn2i6"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Individual-Ad-9902" class="author may-blank id-t2_75h3ss5c" >Individual-Ad-9902</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 16:14:27 2023 UTC" datetime="2023-09-20T16:14:27+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fn2i6urt"><input type="hidden" name="thing_id" value="t1_k1fn2i6"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Infosec.exchange on Mastodon is a very good place, and I get a lot of good information from my curated group on Linkedin. Dr. Chase Cunningham has a good weekly wrap up. And then there is always Cyber Protection Magazine.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fn2i6/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fn2i6/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fn2i6"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1encn2 noncollapsed &#32; comment " id="thing_t1_k1encn2" onclick="click_thing(this)" data-fullname="t1_k1encn2" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="eat_the_pennies" data-author-fullname="t2_vrscons4" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1encn2/" ><p class="parent"><a name="k1encn2"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/eat_the_pennies" class="author may-blank id-t2_vrscons4" >eat_the_pennies</a><span class="flairrichtext flaircolorlight flair " title="System Administrator" style="background-color: #373c3f; border-color: #373c3f;"><span>System Administrator</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 12:20:49 2023 UTC" datetime="2023-09-20T12:20:49+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(7 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1encn2edi"><input type="hidden" name="thing_id" value="t1_k1encn2"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I&#39;m hoping Bluesky gets more popular once it actually opens. I was able to join yesterday and there&#39;s a small community of infosec people who share news there.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1encn2/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1encn2/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1encn2"></div></div><div class="child"><div id="siteTable_t1_k1encn2" class="sitetable listing"><div class=" thing id-t1_k1f55vs noncollapsed &#32; comment " id="thing_t1_k1f55vs" onclick="click_thing(this)" data-fullname="t1_k1f55vs" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="SpaceMaxil" data-author-fullname="t2_iw8rdehp" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f55vs/" ><p class="parent"><a name="k1f55vs"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/SpaceMaxil" class="author may-blank id-t2_iw8rdehp" >SpaceMaxil</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 14:26:15 2023 UTC" datetime="2023-09-20T14:26:15+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f55vsbw3"><input type="hidden" name="thing_id" value="t1_k1f55vs"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Seems the chatty security folks are pretty split on Mastadon vs BlueSky. But most of the good leaks still end up on Twitter first.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f55vs/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f55vs/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1encn2" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f55vs"></div></div><div class="child"><div id="siteTable_t1_k1f55vs" class="sitetable listing"><div class=" thing id-t1_k1f6e6p noncollapsed &#32; comment " id="thing_t1_k1f6e6p" onclick="click_thing(this)" data-fullname="t1_k1f6e6p" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="eat_the_pennies" data-author-fullname="t2_vrscons4" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f6e6p/" ><p class="parent"><a name="k1f6e6p"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/eat_the_pennies" class="author may-blank id-t2_vrscons4" >eat_the_pennies</a><span class="flairrichtext flaircolorlight flair " title="System Administrator" style="background-color: #373c3f; border-color: #373c3f;"><span>System Administrator</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 14:33:58 2023 UTC" datetime="2023-09-20T14:33:58+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(3 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f6e6phz7"><input type="hidden" name="thing_id" value="t1_k1f6e6p"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Mastodon would&#39;ve taken off by now if it really was ideal imo. The hesitancy leads me to believe people are really holding out for Bluesky to be Twitter 2.0</p> + +<p>Who knows if we&#39;ll ever get to that point though</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f6e6p/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f6e6p/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f55vs" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f6e6p"></div></div><div class="child"><div id="siteTable_t1_k1f6e6p" class="sitetable listing"><div class=" thing id-t1_k1f743s noncollapsed &#32; comment " id="thing_t1_k1f743s" onclick="click_thing(this)" data-fullname="t1_k1f743s" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="SpaceMaxil" data-author-fullname="t2_iw8rdehp" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f743s/" ><p class="parent"><a name="k1f743s"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/SpaceMaxil" class="author may-blank id-t2_iw8rdehp" >SpaceMaxil</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 14:38:21 2023 UTC" datetime="2023-09-20T14:38:21+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f743sn6p"><input type="hidden" name="thing_id" value="t1_k1f743s"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Folks are also looking for apps that work across fediverses. Seems to have potential.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f743s/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f743s/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f6e6p" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f743s"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1flu07 noncollapsed &#32; comment " id="thing_t1_k1flu07" onclick="click_thing(this)" data-fullname="t1_k1flu07" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="look_ima_frog" data-author-fullname="t2_hbyptyxz" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flu07/" ><p class="parent"><a name="k1flu07"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/look_ima_frog" class="author may-blank id-t2_hbyptyxz" >look_ima_frog</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 16:07:07 2023 UTC" datetime="2023-09-20T16:07:07+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1flu07ulq"><input type="hidden" name="thing_id" value="t1_k1flu07"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I&#39;m like a lot of people who have tried mastodon and nope out. </p> + +<p>I get the idea, but I still don&#39;t care to use it. User experience is not good. I have enough to learn and fix for my work, dealing with an overwrought platform isn&#39;t on the list right now.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flu07/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1flu07/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1f6e6p" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1flu07"></div></div><div class="child"><div id="siteTable_t1_k1flu07" class="sitetable listing"><div class=" thing id-t1_k1gstv3 noncollapsed &#32; comment " id="thing_t1_k1gstv3" onclick="click_thing(this)" data-fullname="t1_k1gstv3" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Slythela" data-author-fullname="t2_ixk2h" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gstv3/" ><p class="parent"><a name="k1gstv3"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Slythela" class="author may-blank id-t2_ixk2h" >Slythela</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 20:12:56 2023 UTC" datetime="2023-09-20T20:12:56+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gstv3860"><input type="hidden" name="thing_id" value="t1_k1gstv3"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I&#39;m the same way. I was pretty pumped to have another platform, I&#39;m pretty over this website and I&#39;ve never been into twitter. It&#39;s just not really there yet though, and it feels more like a facebook feed than anything else, even on the infosec ones.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gstv3/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gstv3/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1flu07" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gstv3"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1ewj8c noncollapsed &#32; comment " id="thing_t1_k1ewj8c" onclick="click_thing(this)" data-fullname="t1_k1ewj8c" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="flylikegaruda" data-author-fullname="t2_1189kv" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewj8c/" ><p class="parent"><a name="k1ewj8c"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/flylikegaruda" class="author may-blank id-t2_1189kv" >flylikegaruda</a><span class="flairrichtext flaircolorlight flair " title="Red Team" style="background-color: #373c3f; border-color: #373c3f;"><span>Red Team</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 13:29:00 2023 UTC" datetime="2023-09-20T13:29:00+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ewj8c5y7"><input type="hidden" name="thing_id" value="t1_k1ewj8c"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Yes, but I get more cat pics than security. I am no fan of cats!</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewj8c/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewj8c/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1encn2" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ewj8c"></div></div><div class="child"><div id="siteTable_t1_k1ewj8c" class="sitetable listing"><div class=" thing id-t1_k1f3pc2 noncollapsed &#32; comment " id="thing_t1_k1f3pc2" onclick="click_thing(this)" data-fullname="t1_k1f3pc2" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="eat_the_pennies" data-author-fullname="t2_vrscons4" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3pc2/" ><p class="parent"><a name="k1f3pc2"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/eat_the_pennies" class="author may-blank id-t2_vrscons4" >eat_the_pennies</a><span class="flairrichtext flaircolorlight flair " title="System Administrator" style="background-color: #373c3f; border-color: #373c3f;"><span>System Administrator</span></span><span class="userattrs"></span>&#32;<span class="score dislikes" title="2">2 points</span><span class="score unvoted" title="3">3 points</span><span class="score likes" title="4">4 points</span>&#32;<time title="Wed Sep 20 14:17:05 2023 UTC" datetime="2023-09-20T14:17:05+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f3pc255m"><input type="hidden" name="thing_id" value="t1_k1f3pc2"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Unfortunate, cats are a huge part of my life :)</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3pc2/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3pc2/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ewj8c" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f3pc2"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1e9gx9 noncollapsed &#32; controversial comment " id="thing_t1_k1e9gx9" onclick="click_thing(this)" data-fullname="t1_k1e9gx9" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="asecuredlife" data-author-fullname="t2_57r4boy9" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e9gx9/" ><p class="parent"><a name="k1e9gx9"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/asecuredlife" class="author may-blank id-t2_57r4boy9" >asecuredlife</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 10:05:13 2023 UTC" datetime="2023-09-20T10:05:13+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(4 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1e9gx9755"><input type="hidden" name="thing_id" value="t1_k1e9gx9"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Weirder? Twitter has always been a weird place.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e9gx9/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e9gx9/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1e9gx9"></div></div><div class="child"><div id="siteTable_t1_k1e9gx9" class="sitetable listing"><div class=" thing id-t1_k1eb9de noncollapsed &#32; comment " id="thing_t1_k1eb9de" onclick="click_thing(this)" data-fullname="t1_k1eb9de" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="skeedooshski" data-author-fullname="t2_2w3lp8yl" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eb9de/" ><p class="parent"><a name="k1eb9de"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/skeedooshski" class="author submitter may-blank id-t2_2w3lp8yl" >skeedooshski</a><span class="userattrs">[<a class="submitter" title="submitter" href="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/">S</a>]</span>&#32;<span class="score dislikes" title="20">20 points</span><span class="score unvoted" title="21">21 points</span><span class="score likes" title="22">22 points</span>&#32;<time title="Wed Sep 20 10:26:28 2023 UTC" datetime="2023-09-20T10:26:28+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eb9dedum"><input type="hidden" name="thing_id" value="t1_k1eb9de"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Hence the weirdER :). Initially a part of its appeal, but increasingly not the case as of lately.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eb9de/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eb9de/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1e9gx9" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eb9de"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eszi4 noncollapsed &#32; comment " id="thing_t1_k1eszi4" onclick="click_thing(this)" data-fullname="t1_k1eszi4" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="ComfortableProperty9" data-author-fullname="t2_3s11dgpn" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eszi4/" ><p class="parent"><a name="k1eszi4"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/ComfortableProperty9" class="author may-blank id-t2_3s11dgpn" >ComfortableProperty9</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="5">5 points</span><span class="score unvoted" title="6">6 points</span><span class="score likes" title="7">7 points</span>&#32;<time title="Wed Sep 20 13:03:51 2023 UTC" datetime="2023-09-20T13:03:51+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eszi4s4l"><input type="hidden" name="thing_id" value="t1_k1eszi4"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>It went to shit right as I got my feed cultivated exactly like I wanted it.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eszi4/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eszi4/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1e9gx9" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eszi4"></div></div><div class="child"><div id="siteTable_t1_k1eszi4" class="sitetable listing"><div class=" thing id-t1_k1eubmi noncollapsed &#32; comment " id="thing_t1_k1eubmi" onclick="click_thing(this)" data-fullname="t1_k1eubmi" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="missed_sla" data-author-fullname="t2_1pw5guwr" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eubmi/" ><p class="parent"><a name="k1eubmi"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/missed_sla" class="author may-blank id-t2_1pw5guwr" >missed_sla</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 13:13:34 2023 UTC" datetime="2023-09-20T13:13:34+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eubmisqg"><input type="hidden" name="thing_id" value="t1_k1eubmi"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Twitter is a hydra of insane conservatives now. Block one and 5 more are shoved into your face. My block list hundreds long and growing every time I load up that goddamn website. Honestly don&#39;t know why I do anymore, it&#39;s usually about 30 seconds before I close it again.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eubmi/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eubmi/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1eszi4" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eubmi"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1ewh6y noncollapsed &#32; comment " id="thing_t1_k1ewh6y" onclick="click_thing(this)" data-fullname="t1_k1ewh6y" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="WummageSail" data-author-fullname="t2_14ajti" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewh6y/" ><p class="parent"><a name="k1ewh6y"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/WummageSail" class="author may-blank id-t2_14ajti" >WummageSail</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 13:28:36 2023 UTC" datetime="2023-09-20T13:28:36+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1ewh6yuvf"><input type="hidden" name="thing_id" value="t1_k1ewh6y"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p><a href="https://risky.biz/" rel="nofollow">https://risky.biz/</a> podcast</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewh6y/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1ewh6y/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1ewh6y"></div></div><div class="child"><div id="siteTable_t1_k1ewh6y" class="sitetable listing"><div class=" thing id-t1_k1fhicr noncollapsed &#32; comment " id="thing_t1_k1fhicr" onclick="click_thing(this)" data-fullname="t1_k1fhicr" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="skeedooshski" data-author-fullname="t2_2w3lp8yl" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fhicr/" ><p class="parent"><a name="k1fhicr"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/skeedooshski" class="author submitter may-blank id-t2_2w3lp8yl" >skeedooshski</a><span class="userattrs">[<a class="submitter" title="submitter" href="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/">S</a>]</span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 15:41:40 2023 UTC" datetime="2023-09-20T15:41:40+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fhicruwc"><input type="hidden" name="thing_id" value="t1_k1fhicr"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>It is awesome</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fhicr/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fhicr/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1ewh6y" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fhicr"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1firy2 noncollapsed &#32; comment " id="thing_t1_k1firy2" onclick="click_thing(this)" data-fullname="t1_k1firy2" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Maidentyone" data-author-fullname="t2_ampb5p3" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1firy2/" ><p class="parent"><a name="k1firy2"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Maidentyone" class="author may-blank id-t2_ampb5p3" >Maidentyone</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 15:49:07 2023 UTC" datetime="2023-09-20T15:49:07+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1firy2u0d"><input type="hidden" name="thing_id" value="t1_k1firy2"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I use Feedly it has excellent security feed, plus you can add your own (rss) feeds</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1firy2/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1firy2/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1firy2"></div></div><div class="child"><div id="siteTable_t1_k1firy2" class="sitetable listing"><div class=" thing id-t1_k1fopgv noncollapsed &#32; comment " id="thing_t1_k1fopgv" onclick="click_thing(this)" data-fullname="t1_k1fopgv" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="skeedooshski" data-author-fullname="t2_2w3lp8yl" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fopgv/" ><p class="parent"><a name="k1fopgv"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/skeedooshski" class="author submitter may-blank id-t2_2w3lp8yl" >skeedooshski</a><span class="userattrs">[<a class="submitter" title="submitter" href="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/">S</a>]</span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 16:24:03 2023 UTC" datetime="2023-09-20T16:24:03+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fopgvyrw"><input type="hidden" name="thing_id" value="t1_k1fopgv"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>That&#39;s an interesting one. I&#39;ll have a look as I&#39;d be keen on adding the risky business RSS feed to something like that.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fopgv/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fopgv/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1firy2" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fopgv"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1g2003 noncollapsed &#32; comment " id="thing_t1_k1g2003" onclick="click_thing(this)" data-fullname="t1_k1g2003" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="gamed0g" data-author-fullname="t2_f84b7" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g2003/" ><p class="parent"><a name="k1g2003"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/gamed0g" class="author may-blank id-t2_f84b7" >gamed0g</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 17:41:17 2023 UTC" datetime="2023-09-20T17:41:17+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1g2003bvb"><input type="hidden" name="thing_id" value="t1_k1g2003"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>+1 for Feedly. It has loads of options to configure and refine your feeds</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g2003/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1g2003/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1firy2" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1g2003"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fiuv1 noncollapsed &#32; comment " id="thing_t1_k1fiuv1" onclick="click_thing(this)" data-fullname="t1_k1fiuv1" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="HansGuntherboon" data-author-fullname="t2_mx14j" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fiuv1/" ><p class="parent"><a name="k1fiuv1"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/HansGuntherboon" class="author may-blank id-t2_mx14j" >HansGuntherboon</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="1">1 point</span><span class="score unvoted" title="2">2 points</span><span class="score likes" title="3">3 points</span>&#32;<time title="Wed Sep 20 15:49:36 2023 UTC" datetime="2023-09-20T15:49:36+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fiuv16ta"><input type="hidden" name="thing_id" value="t1_k1fiuv1"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p><a href="https://infosec.exchange" rel="nofollow">https://infosec.exchange</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fiuv1/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fiuv1/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fiuv1"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing noncollapsed &#32; deleted controversial comment " onclick="click_thing(this)" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1etkxx/" ><p class="parent"></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><em>[deleted]</em>&#32;<time title="Wed Sep 20 13:08:13 2023 UTC" datetime="2023-09-20T13:08:13+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(3 children)</a></p><div class="usertext grayed"><input type="hidden" name="thing_id" value=""/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>[deleted]</p> +</div> +</div></div><ul class="flat-list buttons"></ul><div class="reportform report-t1_k1etkxx"></div></div><div class="child"><div id="siteTable_deleted" class="sitetable listing"><div class=" thing id-t1_k1f0w8k noncollapsed &#32; comment " id="thing_t1_k1f0w8k" onclick="click_thing(this)" data-fullname="t1_k1f0w8k" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="moker" data-author-fullname="t2_31fvu" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0w8k/" ><p class="parent"><a name="k1f0w8k"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/moker" class="author may-blank id-t2_31fvu" >moker</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="7">7 points</span><span class="score unvoted" title="8">8 points</span><span class="score likes" title="9">9 points</span>&#32;<time title="Wed Sep 20 13:58:43 2023 UTC" datetime="2023-09-20T13:58:43+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f0w8kcn0"><input type="hidden" name="thing_id" value="t1_k1f0w8k"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Nah, that is not correct. You can join <a href="https://infosec.exchange">infosec.exchange</a> and follow anyone on <a href="https://infosec.exchange">infosec.exchange</a> or any of the other mastodon instances with that one account.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0w8k/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f0w8k/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f0w8k"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f3wf5 noncollapsed &#32; comment " id="thing_t1_k1f3wf5" onclick="click_thing(this)" data-fullname="t1_k1f3wf5" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Gangrif" data-author-fullname="t2_13q213" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3wf5/" ><p class="parent"><a name="k1f3wf5"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Gangrif" class="author may-blank id-t2_13q213" >Gangrif</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="4">4 points</span><span class="score unvoted" title="5">5 points</span><span class="score likes" title="6">6 points</span>&#32;<time title="Wed Sep 20 14:18:22 2023 UTC" datetime="2023-09-20T14:18:22+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f3wf5u1j"><input type="hidden" name="thing_id" value="t1_k1f3wf5"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>no, you’re doing it wrong. you pick a home server based on your preferences. they all federate with eachother. i run my own and the experience has been awesome. you do need to give it time and start following folks to really get involved though.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3wf5/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f3wf5/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f3wf5"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f1tdt noncollapsed &#32; comment " id="thing_t1_k1f1tdt" onclick="click_thing(this)" data-fullname="t1_k1f1tdt" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="bjh13" data-author-fullname="t2_3s36b" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1tdt/" ><p class="parent"><a name="k1f1tdt"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/bjh13" class="author may-blank id-t2_3s36b" >bjh13</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="9">9 points</span><span class="score unvoted" title="10">10 points</span><span class="score likes" title="11">11 points</span>&#32;<time title="Wed Sep 20 14:04:48 2023 UTC" datetime="2023-09-20T14:04:48+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f1tdtky4"><input type="hidden" name="thing_id" value="t1_k1f1tdt"/><div class="usertext-body may-blank-within md-container " ><div class="md"><blockquote> +<p>Oh, your people are on 8 different servers so you need 8 different accounts</p> +</blockquote> + +<p>The whole point of being federated is one account allows you to follow people on any of the other servers, so no you don&#39;t need 8 different accounts.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1tdt/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1tdt/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f1tdt"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eji5w noncollapsed &#32; controversial comment " id="thing_t1_k1eji5w" onclick="click_thing(this)" data-fullname="t1_k1eji5w" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="ThePorko" data-author-fullname="t2_1vnpf8ey" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eji5w/" ><p class="parent"><a name="k1eji5w"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/ThePorko" class="author may-blank id-t2_1vnpf8ey" >ThePorko</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-2">-2 points</span><span class="score unvoted" title="-1">-1 points</span><span class="score likes" title="0">0 points</span>&#32;<time title="Wed Sep 20 11:49:10 2023 UTC" datetime="2023-09-20T11:49:10+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eji5w59w"><input type="hidden" name="thing_id" value="t1_k1eji5w"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I have never used twitter for that, too much garbage on there. I tend to do podcasts and youtube media.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eji5w/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eji5w/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eji5w"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1e0j6k noncollapsed &#32; controversial comment " id="thing_t1_k1e0j6k" onclick="click_thing(this)" data-fullname="t1_k1e0j6k" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e0j6k/" ><p class="parent"><a name="k1e0j6k"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="-1">-1 points</span><span class="score unvoted" title="0">0 points</span><span class="score likes" title="1">1 point</span>&#32;<time title="Wed Sep 20 08:08:18 2023 UTC" datetime="2023-09-20T08:08:18+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1e0j6khpt"><input type="hidden" name="thing_id" value="t1_k1e0j6k"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>/g/</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e0j6k/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e0j6k/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1e0j6k"></div></div><div class="child"><div id="siteTable_t1_k1e0j6k" class="sitetable listing"><div class=" thing id-t1_k1e2rvb noncollapsed &#32; comment " id="thing_t1_k1e2rvb" onclick="click_thing(this)" data-fullname="t1_k1e2rvb" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e2rvb/" ><p class="parent"><a name="k1e2rvb"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><span>[deleted]</span>&#32;<span class="score dislikes" title="6">6 points</span><span class="score unvoted" title="7">7 points</span><span class="score likes" title="8">8 points</span>&#32;<time title="Wed Sep 20 08:37:53 2023 UTC" datetime="2023-09-20T08:37:53+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1e2rvbuyx"><input type="hidden" name="thing_id" value="t1_k1e2rvb"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Isn&#39;t the /sec/ general completely dead or at the very least only filled with &quot;How to become 1337 haxxor&quot;?</p> + +<p>It&#39;s been some time since I checked.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e2rvb/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1e2rvb/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1e0j6k" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1e2rvb"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1etfwl noncollapsed &#32; comment " id="thing_t1_k1etfwl" onclick="click_thing(this)" data-fullname="t1_k1etfwl" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="chicagoandy" data-author-fullname="t2_92ggj" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1etfwl/" ><p class="parent"><a name="k1etfwl"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/chicagoandy" class="author may-blank id-t2_92ggj" >chicagoandy</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-1">-1 points</span><span class="score unvoted" title="0">0 points</span><span class="score likes" title="1">1 point</span>&#32;<time title="Wed Sep 20 13:07:11 2023 UTC" datetime="2023-09-20T13:07:11+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1etfwlrm3"><input type="hidden" name="thing_id" value="t1_k1etfwl"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Um... Reddit.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1etfwl/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1etfwl/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1etfwl"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1f1b06 noncollapsed &#32; comment " id="thing_t1_k1f1b06" onclick="click_thing(this)" data-fullname="t1_k1f1b06" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Chrishamilton2007" data-author-fullname="t2_5goj3" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1b06/" ><p class="parent"><a name="k1f1b06"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Chrishamilton2007" class="author may-blank id-t2_5goj3" >Chrishamilton2007</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-1">-1 points</span><span class="score unvoted" title="0">0 points</span><span class="score likes" title="1">1 point</span>&#32;<time title="Wed Sep 20 14:01:25 2023 UTC" datetime="2023-09-20T14:01:25+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1f1b06o27"><input type="hidden" name="thing_id" value="t1_k1f1b06"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>You can use reddit.</p> + +<p><a href="https://www.reddit.com/r/CASB+HackBloc+Malware+REMath+ReverseEngineering+blackhat+blueteamsec+computerforensics+crypto+netsec+netsecstudents+cyber+pwned+rootkit+vrd+xss+InfoSecInsiders/top/?sort=top&amp;t=day" rel="nofollow">https://www.reddit.com/r/CASB+HackBloc+Malware+REMath+ReverseEngineering+blackhat+blueteamsec+computerforensics+crypto+netsec+netsecstudents+cyber+pwned+rootkit+vrd+xss+InfoSecInsiders/top/?sort=top&amp;t=day</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1b06/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1f1b06/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1f1b06"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1h24vs noncollapsed &#32; comment " id="thing_t1_k1h24vs" onclick="click_thing(this)" data-fullname="t1_k1h24vs" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Bllago" data-author-fullname="t2_5e3g42ih" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h24vs/" ><p class="parent"><a name="k1h24vs"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Bllago" class="author may-blank id-t2_5e3g42ih" >Bllago</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="-1">-1 points</span><span class="score unvoted" title="0">0 points</span><span class="score likes" title="1">1 point</span>&#32;<time title="Wed Sep 20 21:06:31 2023 UTC" datetime="2023-09-20T21:06:31+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1h24vsydi"><input type="hidden" name="thing_id" value="t1_k1h24vs"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Twitter is full of CSAM. Everyone needs to leave it.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h24vs/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h24vs/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1h24vs"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eqh9b collapsed collapsed-for-reason &#32; comment " id="thing_t1_k1eqh9b" onclick="click_thing(this)" data-fullname="t1_k1eqh9b" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="KidBeene" data-author-fullname="t2_bfou7" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eqh9b/" ><p class="parent"><a name="k1eqh9b"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[+]</a><a href="https://www.reddit.com/user/KidBeene" class="author may-blank id-t2_bfou7" >KidBeene</a><span class="userattrs"></span>&#32;<span class="collapsed-reason">comment score below threshold</span><span class="score dislikes" title="-11">-11 points</span><span class="score unvoted" title="-10">-10 points</span><span class="score likes" title="-9">-9 points</span>&#32;<time title="Wed Sep 20 12:45:06 2023 UTC" datetime="2023-09-20T12:45:06+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(2 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eqh9blt7"><input type="hidden" name="thing_id" value="t1_k1eqh9b"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>You were using Twitter for industry news? LOL Oh man... how much time do you have in the day?</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eqh9b/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eqh9b/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eqh9b"></div></div><div class="child"><div id="siteTable_t1_k1eqh9b" class="sitetable listing"><div class=" thing id-t1_k1euxho noncollapsed &#32; comment " id="thing_t1_k1euxho" onclick="click_thing(this)" data-fullname="t1_k1euxho" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="beagle_bathouse" data-author-fullname="t2_83rlaeff" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1euxho/" ><p class="parent"><a name="k1euxho"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/beagle_bathouse" class="author may-blank id-t2_83rlaeff" >beagle_bathouse</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="3">3 points</span><span class="score unvoted" title="4">4 points</span><span class="score likes" title="5">5 points</span>&#32;<time title="Wed Sep 20 13:17:52 2023 UTC" datetime="2023-09-20T13:17:52+00:00" class="live-timestamp">5 months ago</time><time class="edited-timestamp" title="last edited 9 days ago" datetime="2024-02-09T18:57:46+00:00">*</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(1 child)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1euxhodgx"><input type="hidden" name="thing_id" value="t1_k1euxho"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>poor smell rhythm ink offend abounding person alive elderly dog</p> + +<p><em>This post was mass deleted and anonymized with <a href="https://redact.dev">Redact</a></em></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1euxho/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1euxho/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1eqh9b" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1euxho"></div></div><div class="child"><div id="siteTable_t1_k1euxho" class="sitetable listing"><div class=" thing id-t1_k1gitjf noncollapsed &#32; comment " id="thing_t1_k1gitjf" onclick="click_thing(this)" data-fullname="t1_k1gitjf" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="KidBeene" data-author-fullname="t2_bfou7" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gitjf/" ><p class="parent"><a name="k1gitjf"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/KidBeene" class="author may-blank id-t2_bfou7" >KidBeene</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 19:17:57 2023 UTC" datetime="2023-09-20T19:17:57+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gitjfetc"><input type="hidden" name="thing_id" value="t1_k1gitjf"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Yeah, the thing that is wrong is using twitter for industry news.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gitjf/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gitjf/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="false" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li><a href="#k1euxho" data-event-action="parent" class="bylink" rel="nofollow" >parent</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gitjf"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div></div></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1eu1yr noncollapsed &#32; comment " id="thing_t1_k1eu1yr" onclick="click_thing(this)" data-fullname="t1_k1eu1yr" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="TulkasDeTX" data-author-fullname="t2_8wfrrqxs" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eu1yr/" ><p class="parent"><a name="k1eu1yr"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/TulkasDeTX" class="author may-blank id-t2_8wfrrqxs" >TulkasDeTX</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 13:11:39 2023 UTC" datetime="2023-09-20T13:11:39+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1eu1yrkr4"><input type="hidden" name="thing_id" value="t1_k1eu1yr"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I still get good infosec content, but yeah I&#39;m basically for the same thing, where to go when troll-land finally goes down</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eu1yr/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1eu1yr/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1eu1yr"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1fbj2l noncollapsed &#32; comment " id="thing_t1_k1fbj2l" onclick="click_thing(this)" data-fullname="t1_k1fbj2l" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="True2this" data-author-fullname="t2_efgrr" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fbj2l/" ><p class="parent"><a name="k1fbj2l"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/True2this" class="author may-blank id-t2_efgrr" >True2this</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 15:05:35 2023 UTC" datetime="2023-09-20T15:05:35+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1fbj2l8uk"><input type="hidden" name="thing_id" value="t1_k1fbj2l"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Are you looking for just news feeds or something deeper? I use the open threat exchange from AlienVault. Good community - <a href="https://otx.alienvault.com" rel="nofollow">https://otx.alienvault.com</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fbj2l/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1fbj2l/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1fbj2l"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1gzblu noncollapsed &#32; comment " id="thing_t1_k1gzblu" onclick="click_thing(this)" data-fullname="t1_k1gzblu" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="manintheflask" data-author-fullname="t2_waj3n" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gzblu/" ><p class="parent"><a name="k1gzblu"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/manintheflask" class="author may-blank id-t2_waj3n" >manintheflask</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 20:50:49 2023 UTC" datetime="2023-09-20T20:50:49+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1gzblu0hg"><input type="hidden" name="thing_id" value="t1_k1gzblu"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>I find this start[.]me URL pretty useful:<br/> +<a href="https://start.me/p/wMrA5z/cyber-threat-intelligence" rel="nofollow">https://start.me/p/wMrA5z/cyber-threat-intelligence</a></p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gzblu/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1gzblu/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1gzblu"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1h1jio noncollapsed &#32; comment " id="thing_t1_k1h1jio" onclick="click_thing(this)" data-fullname="t1_k1h1jio" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="netbroom" data-author-fullname="t2_gcsmap2" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h1jio/" ><p class="parent"><a name="k1h1jio"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/netbroom" class="author may-blank id-t2_gcsmap2" >netbroom</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Wed Sep 20 21:03:09 2023 UTC" datetime="2023-09-20T21:03:09+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1h1jios3b"><input type="hidden" name="thing_id" value="t1_k1h1jio"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Pulsedive has a free dashboard for infosec news</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h1jio/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1h1jio/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1h1jio"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1j6zad noncollapsed &#32; comment " id="thing_t1_k1j6zad" onclick="click_thing(this)" data-fullname="t1_k1j6zad" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="flusteredJonnies" data-author-fullname="t2_9ljkm" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j6zad/" ><p class="parent"><a name="k1j6zad"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/flusteredJonnies" class="author may-blank id-t2_9ljkm" >flusteredJonnies</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 07:09:09 2023 UTC" datetime="2023-09-21T07:09:09+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1j6zad1ny"><input type="hidden" name="thing_id" value="t1_k1j6zad"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>Dude I was getting the WEIRDEST content on X before I had to delete it because it was absurd. I only follow infosec people. Like half of my timeline became fight videos randomly. Like videos of people fighting liveleak style. Stuff that was so violent I surely thought would violate some policy, but had TONS of engagement.</p> + +<p>Not sure what they changed over there but no matter how often I scrolled past or reported or did behaviors to show the algo I was not interested in the content, it was all over my TL for like a month. Deleted the app as it just insisted on pushing me weird or violent content. Bummed because it was a great news source for a while.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j6zad/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j6zad/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1j6zad"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k1j868n noncollapsed &#32; comment " id="thing_t1_k1j868n" onclick="click_thing(this)" data-fullname="t1_k1j868n" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="VAsHachiRoku" data-author-fullname="t2_8dcuztg" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j868n/" ><p class="parent"><a name="k1j868n"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/VAsHachiRoku" class="author may-blank id-t2_8dcuztg" >VAsHachiRoku</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Thu Sep 21 07:23:59 2023 UTC" datetime="2023-09-21T07:23:59+00:00" class="live-timestamp">5 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k1j868nr5h"><input type="hidden" name="thing_id" value="t1_k1j868n"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p>We pay for threat intel company feeds like Mandiant, along with news and other information. Easier to have it come from a trusted source rather than many toxic places like X and Reddit. These both can draw in people with their own personal agendas and messages.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j868n/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k1j868n/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k1j868n"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div><div class=" thing id-t1_k27x83v noncollapsed &#32; comment " id="thing_t1_k27x83v" onclick="click_thing(this)" data-fullname="t1_k27x83v" data-type="comment" data-gildings="0" data-subreddit="cybersecurity" data-subreddit-prefixed="r/cybersecurity" data-subreddit-fullname="t5_2u559" data-subreddit-type="public" data-author="Reshi-Snoo" data-author-fullname="t2_hj8duxb7" data-replies="0" data-permalink="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k27x83v/" ><p class="parent"><a name="k27x83v"></a></p><div class="midcol unvoted" ><div class="arrow up login-required access-required" data-event-action="upvote" role="button" aria-label="upvote" tabindex="0" ></div><div class="arrow down login-required access-required" data-event-action="downvote" role="button" aria-label="downvote" tabindex="0" ></div></div><div class="entry unvoted"><p class="tagline"><a href="javascript:void(0)" class="expand" onclick="return togglecomment(this)">[–]</a><a href="https://www.reddit.com/user/Reshi-Snoo" class="author may-blank id-t2_hj8duxb7" >Reshi-Snoo</a><span class="userattrs"></span>&#32;<span class="score dislikes" title="0">0 points</span><span class="score unvoted" title="1">1 point</span><span class="score likes" title="2">2 points</span>&#32;<time title="Tue Sep 26 01:01:08 2023 UTC" datetime="2023-09-26T01:01:08+00:00" class="live-timestamp">4 months ago</time>&nbsp;<a href="javascript:void(0)" class="numchildren" onclick="return togglecomment(this)">(0 children)</a></p><form action="#" class="usertext warn-on-unload" onsubmit="return post_form(this, 'editusertext')" id="form-t1_k27x83v9b2"><input type="hidden" name="thing_id" value="t1_k27x83v"/><div class="usertext-body may-blank-within md-container " ><div class="md"><p><a href="https://vulnu.mattjay.com" rel="nofollow">Vulnerable U</a></p> + +<p>Unsupervised learning</p> + +<p>Tl;drsec </p> + +<p>Are my favorite newsletters.</p> +</div> +</div></form><ul class="flat-list buttons"><li class="first"><a href="https://www.reddit.com/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k27x83v/" data-event-action="permalink" class="bylink" rel="nofollow" >permalink</a></li><li><a href="javascript:void(0)" data-comment="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/k27x83v/" data-media="www.redditmedia.com" data-link="/r/cybersecurity/comments/16nf2ev/twitterx_is_getting_weirder_where_now_for/" data-root="true" data-title="Twitter/X is getting weirder; where now for security news and analysis?" class="embed-comment" >embed</a></li><li class="comment-save-button save-button login-required"><a href="javascript:void(0)">save</a></li><li class="report-button login-required"><a href="javascript:void(0)" class="reportbtn access-required" data-event-action="report">report</a></li><li class="reply-button login-required"><a class="access-required" href="javascript:void(0)" data-event-action="comment" onclick="return reply(this)">reply</a></li></ul><div class="reportform report-t1_k27x83v"></div></div><div class="child"></div><div class="clearleft"></div></div><div class="clearleft"></div></div><script id="archived-popup" type="text/template"><div class="interstitial"><img class="interstitial-image" src="//www.redditstatic.com/interstitial-image-archived.png" alt="archived" height="150" width="150"><div class="interstitial-message md-container"><div class="md"><h3>This is an archived post. You won't be able to vote or comment.</h3><p>Posts&#32;are&#32;automatically&#32;archived&#32;after&#32;6&#32;months.</p></div></div><div class="buttons"><a href="/" class="c-btn c-btn-primary">Got It</a></div></div></script><script id="about-this-ad-popup" type="text/template"><h1 class="modal-title">About this ad</h1><div class="about-this-ad-body"></div><hr><div>Learn more about&nbsp;<a target="_blank" href="https://support.reddithelp.com/hc/en-us/articles/12731820767764-Control-the-ads-you-see-on-Reddit">controlling the ads you see on Reddit</a>&nbsp;or&nbsp;<a target="_blank" href="https://reddit.com/settings/privacy">manage your account settings.</a></div></script></div><script id="archived-popup" type="text/template"><div class="interstitial"><img class="interstitial-image" src="//www.redditstatic.com/interstitial-image-archived.png" alt="archived" height="150" width="150"><div class="interstitial-message md-container"><div class="md"><h3>This is an archived post. You won't be able to vote or comment.</h3><p>Posts&#32;are&#32;automatically&#32;archived&#32;after&#32;6&#32;months.</p></div></div><div class="buttons"><a href="/" class="c-btn c-btn-primary">Got It</a></div></div></script><script id="about-this-ad-popup" type="text/template"><h1 class="modal-title">About this ad</h1><div class="about-this-ad-body"></div><hr><div>Learn more about&nbsp;<a target="_blank" href="https://support.reddithelp.com/hc/en-us/articles/12731820767764-Control-the-ads-you-see-on-Reddit">controlling the ads you see on Reddit</a>&nbsp;or&nbsp;<a target="_blank" href="https://reddit.com/settings/privacy">manage your account settings.</a></div></script></div><div class="footer-parent"><div by-zero class="footer rounded"><div class="col"><ul class="flat-vert hover" ><li class="flat-vert title">about</li><li ><a href="https://redditblog.com" class="choice" >blog</a></li><li ><span class="separator"></span><a href="https://www.redditinc.com" class="choice" >about</a></li><li ><span class="separator"></span><a href="https://www.redditinc.com/advertising" class="choice" >advertising</a></li><li ><span class="separator"></span><a href="https://www.redditinc.com/careers" class="choice" >careers</a></li></ul></div><div class="col"><ul class="flat-vert hover" ><li class="flat-vert title">help</li><li ><a href="https://www.reddit.com/rules/" class="choice" >site rules</a></li><li ><span class="separator"></span><a href="https://www.reddithelp.com" class="choice" >Reddit help center</a></li><li ><span class="separator"></span><a href="https://www.reddit.com/wiki/reddiquette/" class="choice" >reddiquette</a></li><li ><span class="separator"></span><a href="https://www.reddit.com/help/healthycommunities/" class="choice" >mod guidelines</a></li><li ><span class="separator"></span><a href="https://www.reddit.com/contact/" class="choice" >contact us</a></li></ul></div><div class="col"><ul class="flat-vert hover" ><li class="flat-vert title">apps &amp; tools</li><li ><a href="https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8" class="choice" >Reddit for iPhone</a></li><li ><span class="separator"></span><a href="https://play.google.com/store/apps/details?id=com.reddit.frontpage" class="choice" >Reddit for Android</a></li><li ><span class="separator"></span><a href="#" class="mweb-redirect-btn choice" >mobile website</a></li></ul></div><div class="col"><ul class="flat-vert hover" ><li class="flat-vert title">&lt;3</li><li ><a href="https://www.reddit.com/premium/" class="buygold choice" >reddit premium</a></li></ul></div></div><p class="bottommenu">Use of this site constitutes acceptance of our&#32;<a href="https://www.reddit.com/help/useragreement" >User Agreement</a>&#32;and&#32;<a href="https://www.reddit.com/help/privacypolicy" >Privacy Policy</a>. &copy; 2024 reddit inc. All rights reserved.</p><p class="bottommenu">REDDIT and the ALIEN Logo are registered trademarks of reddit inc.</p></div><script>var BETA_HOST = 'beta.reddit.com'; if (location.host === BETA_HOST) { r.config.https_endpoint = 'https://' + BETA_HOST; }</script><script id="login-popup" type="text/template"><!-- Login form function --><div id="desktop-onboarding-browse" class="c-step-sign-up"><div class="desktop-onboarding-step desktop-onboarding-step_sign-up"><div class="desktop-onboarding__col desktop-onboarding__col_sign-up_form"><div class="reddit-logo"><img width='200px' src="//www.redditstatic.com/logo.svg" /></div><h2 class="desktop-onboarding__title">Sign up to get your own personalized Reddit experience!</h2><p class="desktop-onboarding__description">By having a Reddit account, you can join, vote, and comment on all your favorite Reddit content. Sign up in just seconds.</p><div class="desktop-onboarding-sign-up__form-container c-is-create"><div class="desktop-onboarding-sign-up__form desktop-onboarding-sign-up__form_create"><h3 class="desktop-onboarding-sign-up__form-title">Enter email</h3><form class="sign-up-form" id="desktop-onboarding-sign-up-form" autocomplete="off"><div class="c-form-group "><label for="email" class="screenreader-only">email:</label><input name="email" id="desktop-onboarding-email" class="c-form-control" type="text" autofocus placeholder="email address" data-validate-url="/api/check_email.json" data-validate-on="keyup change blur" /><div class="c-form-control-feedback-wrapper "><span class="c-form-control-feedback c-form-control-feedback-throbber"></span><span class="c-form-control-feedback c-form-control-feedback-error" title=""></span><span class="c-form-control-feedback c-form-control-feedback-success"></span></div></div><button type="submit" class="c-btn c-btn-primary desktop-onboarding__next-button">Next</button><p class="desktop-onboarding-sign-up__form-note"><span>Already have an account?</span><a href="." class="desktop-onboarding-sign-up__form-toggler" data-form="login">Log In</a><a href="javascript: void 0;" class="skip-for-now">Skip for now</a></p></form></div><div class="desktop-onboarding-sign-up__form desktop-onboarding-sign-up__form_login"><h3 class="desktop-onboarding-sign-up__form-title">Log In</h3><form id="login-form" method="post" action="https://www.reddit.com/r/cybersecurity/post/login" class="form-v2 onboarding-login"><input type="hidden" name="op" value="login"><div class="c-form-group "><label for="user_login" class="screenreader-only">username</label><input value="" name="user" id="user_login" autofocus class="c-form-control" type="text" maxlength="20" tabindex="3" placeholder="username" ><div class="c-form-control-feedback-wrapper "><span class="c-form-control-feedback c-form-control-feedback-throbber"></span><span class="c-form-control-feedback c-form-control-feedback-error" title=""></span><span class="c-form-control-feedback c-form-control-feedback-success"></span></div></div><div class="c-form-group "><label for="passwd_login" class="screenreader-only">password</label><input id="passwd_login" class="c-form-control" name="passwd" type="password" tabindex="3" placeholder="password" ><div class="c-form-control-feedback-wrapper "><span class="c-form-control-feedback c-form-control-feedback-throbber"></span><span class="c-form-control-feedback c-form-control-feedback-error" title=""></span><span class="c-form-control-feedback c-form-control-feedback-success"></span></div></div><div class="desktop-onboarding-sign-up__form-note"><span>Don't have an account?</span><a href="." class="desktop-onboarding-sign-up__form-toggler" data-form="create">Sign up</a>&nbsp|<a href="/password">Reset password</a></div><input type="hidden" value="yes" name="rem"/><div class="spacer"><div class="c-form-group g-recaptcha" data-sitekey="6LeTnxkTAAAAAN9QEuDZRpn90WwKk_R1TRW_g-JC"></div><span class="error BAD_CAPTCHA field-captcha" style="display:none"></span></div><div class="c-clearfix c-submit-group"><span class="c-form-throbber"></span><button type="submit" class="c-btn c-btn-primary c-pull-right" tabindex="3">log in</button></div><div><div class="c-alert c-alert-danger"></div><span class="status"></span></div></form></div></div><footer>By signing up, you agree to our&#32;<a href="https://www.reddit.com/help/useragreement/" >Terms</a>&#32;and that you have read our&#32;<a href="https://www.reddit.com/help/privacypolicy/" >Privacy Policy</a>&#32;and&#32;<a href="https://www.reddit.com/help/contentpolicy/" >Content Policy</a>.</footer></div><div class="desktop-onboarding__col desktop-onboarding__col_sign-up_image"></div></div><div class="desktop-onboarding-step desktop-onboarding-step_subreddit-picker"><div class="subreddit-picker-header"><h2 class="desktop-onboarding__title">Find the good stuff</h2><p class="desktop-onboarding__description">Reddit is filled with interest based communities, offering something for everyone. Check out some communities and we recommend you join at least 5.</p></div><div class="subreddit-picker"><ul class="subreddit-picker__categories"></ul><ul class="subreddit-picker__subreddits"></ul><div class="subreddit-picker__fail"><span>Something went wrong.</span><a href=".">Try Again?</a></div><div class="subreddit-picker__category-fail"><span>Something went wrong.</span><a href=".">Try Again?</a></div></div><footer><div class="subreddit-picker-progress"><div class="subreddit-picker-progress__track"><div class="subreddit-picker-progress__bar"></div></div><span class="subreddit-picker-progress__num">0</span><span>/</span><span class="subreddit-picker-progress__denom">5</span><span>&nbsp;<span class="subreddit-subscription-count">recommended communities</span></span></div><span class="desktop-onboarding__step-number">Step 2 of 3</span><div class="desktop-onboarding__buttons"><button class="c-btn desktop-onboarding__back-button">Back</button><button class="c-btn c-btn-primary desktop-onboarding__next-button">Next</button></div><div class="registration-error"></div></footer></div><div class="desktop-onboarding-step desktop-onboarding-step_username"><div class="desktop-onboarding__col desktop-onboarding__col_username_form"><h2 class="desktop-onboarding__title">Choose your username</h2><p class="desktop-onboarding__description">Your username is how other community members will see you. This name will be used to credit you for things you share on Reddit. What should we call you?</p><div class=desktop-onboarding-username-form><form id="register-form" method="post" action="https://www.reddit.com/r/cybersecurity/post/reg" autocomplete="off" class="form-v2 onboarding-login"><input type="hidden" name="op" value="reg"><input type="hidden" id="desktop-onboarding-register-email" name="email" value=""><input type="hidden" id="desktop-onboarding-subreddits" name="sr" value=""><div class="c-form-group "><label class="desktop-onboarding-sign-up__form-title" for="user_reg">Choose username</label><input value="" name="user" id="user_reg" autofocus class="c-form-control" type="text" maxlength="20" tabindex="2" placeholder="username" data-validate-url="/api/check_username.json" data-validate-min="3" autocomplete="new-username" ><div class="c-form-control-feedback-wrapper "><span class="c-form-control-feedback c-form-control-feedback-throbber"></span><span class="c-form-control-feedback c-form-control-feedback-error" title=""></span><span class="c-form-control-feedback c-form-control-feedback-success"></span></div></div><div class="c-form-group "><label for="passwd_reg" class="desktop-onboarding-sign-up__form-title">Set password</label><input id="passwd_reg" class="c-form-control" name="passwd" type="password" tabindex="2" placeholder="password" data-validate-url='/api/check_password.json' autocomplete='new-password'><div class="c-form-control-feedback-wrapper "><span class="c-form-control-feedback c-form-control-feedback-throbber"></span><span class="c-form-control-feedback c-form-control-feedback-error" title=""></span><span class="c-form-control-feedback c-form-control-feedback-success"></span></div></div><input type="hidden" name="passwd2" id="passwd2_reg" class="c-form-control"><input type="hidden" value="yes" name="rem"/><div class="spacer"><div class="c-form-group g-recaptcha" data-sitekey="6LeTnxkTAAAAAN9QEuDZRpn90WwKk_R1TRW_g-JC"></div><span class="error BAD_CAPTCHA field-captcha" style="display:none"></span></div><div><div class="c-alert c-alert-danger"></div><span class="status"></span><span class="error RATELIMIT field-ratelimit" style="display:none"></span><span class="error RATELIMIT field-vdelay" style="display:none"></span></div></form></div></div><div class="desktop-onboarding__col desktop-onboarding__col_username_picker"><div class="username-generator"><p class="desktop-onboarding__description">Having a hard time picking a name?<br />Here are some available suggestions.</p><div class="username-generator__suggestions"></div><a href="javascript: void 0;" class="username-generator__refresh-button">Refresh suggestions</a></div><footer><span class="desktop-onboarding__step-number">Step 3 of 3</span><div class="desktop-onboarding__buttons"><button class="c-btn desktop-onboarding__back-button">Back</button><button class="c-btn c-btn-primary desktop-onboarding__next-button">Submit</button></div></footer></div></div></div></script><script id="lang-popup" type="text/template"><form action="https://www.reddit.com/post/unlogged_options" method="post" id="pref-form" class="pretty-form short-text prefoptions"><input type="hidden" name="uh" value="" /><table class="content preftable"><tr><th>interface language</th><td class="prefright"><select id="lang" name="lang"><option selected='selected' value="en">English [en]</option><option value="af">Afrikaans [af] (*)</option><option value="ar">العربية [ar] (*)</option><option value="be">Беларуская мова [be] (*)</option><option value="bg">български език [bg]</option><option value="bn-IN">বাংলা [bn-IN] (*)</option><option value="bn-bd">বাংলা [bn-bd] (*)</option><option value="bs">Bosanski [bs] (*)</option><option value="ca">català [ca]</option><option value="cs">česky [cs]</option><option value="cy">Cymraeg [cy] (*)</option><option value="da">dansk [da]</option><option value="de">Deutsch [de]</option><option value="el">Ελληνικά [el]</option><option value="en-au">English (Australia) [en-au]</option><option value="en-ca">English (Canadian) [en-ca]</option><option value="en-gb">English (Great Britain) [en-gb]</option><option value="en-us">English [en-us]</option><option value="eo">Esperanto [eo] (*)</option><option value="es">español [es]</option><option value="es-ar">español [es-ar]</option><option value="es-cl">español [es-cl]</option><option value="es-mx">Español [es-mx]</option><option value="et">eesti keel [et] (*)</option><option value="eu">Euskara [eu]</option><option value="fa">فارسی [fa]</option><option value="fi">suomi [fi]</option><option value="fil">Filipino [fil] (*)</option><option value="fr">français [fr]</option><option value="fr-ca">Français [fr-ca]</option><option value="fy-NL">Frysk [fy-NL] (*)</option><option value="ga-ie">Gaeilge [ga-ie] (*)</option><option value="gd">Gàidhlig [gd]</option><option value="gl">Galego [gl] (*)</option><option value="he">עברית [he] (*)</option><option value="hi">मानक हिन्दी [hi] (*)</option><option value="hr">hrvatski [hr]</option><option value="hu">Magyar [hu]</option><option value="hy">Հայերեն լեզու [hy]</option><option value="id">Bahasa Indonesia [id] (*)</option><option value="is">íslenska [is]</option><option value="it">italiano (Italy) [it]</option><option value="ja">日本語 [ja]</option><option value="kn_IN">ಕನ್ನಡ [kn_IN]</option><option value="ko">한국어 [ko]</option><option value="la">Latin [la] (*)</option><option value="leet">1337 [leet]</option><option value="lol">LOL [lol]</option><option value="lt">lietuvių kalba [lt] (*)</option><option value="lv">latviešu valoda [lv]</option><option value="ms">Bahasa Melayu [ms] (*)</option><option value="mt-MT">Malti [mt-MT]</option><option value="nl">Nederlands [nl]</option><option value="nn">Nynorsk [nn]</option><option value="no">Norsk [no]</option><option value="pir">Arrrrrrrr! [pir] (*)</option><option value="pl">polski [pl]</option><option value="pt">português [pt] (*)</option><option value="pt-pt">português [pt-pt]</option><option value="pt_BR">português brasileiro [pt_BR]</option><option value="ro">română [ro]</option><option value="ru">русский [ru]</option><option value="sk">slovenčina [sk]</option><option value="sl">slovenščina [sl] (*)</option><option value="sr">српски језик [sr]</option><option value="sr-la">Srpski [sr-la]</option><option value="sv">Svenska [sv]</option><option value="ta">தமிழ் [ta]</option><option value="th">ภาษาไทย [th]</option><option value="tr">Türkçe [tr]</option><option value="uk">українська мова [uk]</option><option value="vi">Tiếng Việt [vi]</option><option value="zh">中文 [zh]</option><option value="zh-cn">简化字 [zh-cn]</option></select>&#32;<span class="details hover">(*) incomplete &#32;<a href="https://www.reddit.com/r/i18n/wiki/getting_started">volunteer to translate</a></span></td></tr><tr><th>location</th><td class="preflight"><a href="https://www.reddit.com/settings/account/">set location preferences</a></td></tr><tr><td><input type="submit" class="btn save-preferences" value="save options"/></td></tr></table></form></script><img id="hsts_pixel" src="//reddit.com/static/pixel.png"><p class="debuginfo"><span class="icon">&pi;</span>&nbsp;<span class="content">Rendered by PID 29 on&#32; reddit-service-r2-slowlane-65c5c76ff5-v258h &#32;at 2024-02-19 03:13:22.575220+00:00 running 5b0a0b2 country code: US.</span></p><script type="text/javascript" src="//www.redditstatic.com/reddit.en.lSSjgFdIksE.js"></script><script type="text/javascript" src="//www.redditstatic.com/spoiler-text.vsLMfxcst1g.js"></script><script type="text/javascript" src="//www.redditstatic.com/onetrust.6tPW2jUogoc.js"></script></body></html> +\ No newline at end of file diff --git a/test/fixtures/rich_media/yahoo.html b/test/fixtures/rich_media/yahoo.html @@ -0,0 +1,12 @@ +<meta property="og:url" content="https://yahoo.com"> +<meta property="og:type" content="website"> +<meta property="og:title" content="Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos"> +<meta property="og:description" content="Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!"> +<meta property="og:image" content="https://s.yimg.com/cv/apiv2/social/images/yahoo_default_logo.png"> + +<meta name="twitter:card" content="summary_large_image"> +<meta property="twitter:domain" content="yahoo.com"> +<meta property="twitter:url" content="https://yahoo.com"> +<meta name="twitter:title" content="Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos"> +<meta name="twitter:description" content="Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!"> +<meta name="twitter:image" content="https://s.yimg.com/cv/apiv2/social/images/yahoo_default_logo.png"> diff --git a/test/fixtures/tesla_mock/smithereen_non_anonymous_poll.json b/test/fixtures/tesla_mock/smithereen_non_anonymous_poll.json @@ -0,0 +1 @@ +{"type":"Question","id":"https://friends.grishka.me/posts/54642","attributedTo":"https://friends.grishka.me/users/1","content":"<p>здесь тоже можно что-то написать отдельно от опроса</p>","published":"2021-09-04T00:22:16Z","url":"https://friends.grishka.me/posts/54642","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://friends.grishka.me/users/1/followers"],"replies":{"type":"Collection","id":"https://friends.grishka.me/posts/54642/replies","first":{"type":"CollectionPage","items":[],"partOf":"https://friends.grishka.me/posts/54642/replies","next":"https://friends.grishka.me/posts/54642/replies?page=1"}},"sensitive":false,"likes":"https://friends.grishka.me/posts/54642/likes","name":"тестовый опрос","oneOf":[{"type":"Note","id":"https://friends.grishka.me/posts/54642#options/76","name":"тестовый ответ 1","replies":{"type":"Collection","id":"https://friends.grishka.me/activitypub/objects/polls/24/options/76/votes","totalItems":4,"items":[]}},{"type":"Note","id":"https://friends.grishka.me/posts/54642#options/77","name":"тестовый ответ 2","replies":{"type":"Collection","id":"https://friends.grishka.me/activitypub/objects/polls/24/options/77/votes","totalItems":4,"items":[]}},{"type":"Note","id":"https://friends.grishka.me/posts/54642#options/78","name":"тестовый ответ 3","replies":{"type":"Collection","id":"https://friends.grishka.me/activitypub/objects/polls/24/options/78/votes","totalItems":6,"items":[]}}],"votersCount":14,"nonAnonymous":true,"@context":["https://www.w3.org/ns/activitystreams",{"sensitive":"as:sensitive","toot":"http://joinmastodon.org/ns#","sm":"http://smithereen.software/ns#","votersCount":"toot:votersCount","nonAnonymous":"sm:nonAnonymous"}]} +\ No newline at end of file diff --git a/test/fixtures/tesla_mock/smithereen_user.json b/test/fixtures/tesla_mock/smithereen_user.json @@ -0,0 +1 @@ +{"type":"Person","id":"https://friends.grishka.me/users/1","name":"Григорий Клюшников","icon":{"type":"Image","image":{"type":"Image","url":"https://friends.grishka.me/i/6QLsOws97AWp5N_osd74C1IC1ijnFopyCBD9MSEeXNQ/q:93/bG9jYWw6Ly8vcy91cGxvYWRzL2F2YXRhcnMvNTYzODRhODEwODk5ZTRjMzI4YmY4YmQwM2Q2MWM3NmMud2VicA.jpg","mediaType":"image/jpeg","width":1280,"height":960},"width":573,"height":572,"cropRegion":[0.26422762870788574,0.3766937553882599,0.7113820910453796,0.9728997349739075],"url":"https://friends.grishka.me/i/ql_49PQcETAWgY_nC-Qj63H_Oa6FyOAEoWFkUSSkUvQ/c:573:572:nowe:338:362/q:93/bG9jYWw6Ly8vcy91cGxvYWRzL2F2YXRhcnMvNTYzODRhODEwODk5ZTRjMzI4YmY4YmQwM2Q2MWM3NmMud2VicA.jpg","mediaType":"image/jpeg"},"summary":"<p>Делаю эту хрень, пытаюсь вырвать социальные сети из жадных лап корпораций</p>\n<p></p>\n<p></p>\n<p></p>\n<p></p>\n<p></p>\n<p></p>\n<p></p>\n<p>This server does NOT support direct messages. Please write me <a href=\"https://t.me/grishka\">on Telegram</a> or <a href=\"https://matrix.to/#/@grishk:matrix.org\">Matrix</a>.</p>","url":"https://friends.grishka.me/grishka","preferredUsername":"grishka","inbox":"https://friends.grishka.me/users/1/inbox","outbox":"https://friends.grishka.me/users/1/outbox","followers":"https://friends.grishka.me/users/1/followers","following":"https://friends.grishka.me/users/1/following","endpoints":{"sharedInbox":"https://friends.grishka.me/activitypub/sharedInbox","collectionSimpleQuery":"https://friends.grishka.me/users/1/collectionQuery"},"publicKey":{"id":"https://friends.grishka.me/users/1#main-key","owner":"https://friends.grishka.me/users/1","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjlakm+i/d9ER/hIeR7KfiFW+SdLZj2SkKIeM8cmR+YFJuh9ghFqXrkFEjcaqUnAFqe5gYDNSQACnDLA8y4DnzjfGNIohKAnRoa9x6GORmfKQvcnjaTZ53S1NvUiPPyc0Pv/vfCtY/Ab0CEXe5BLqL38oZn817Jf7pBrPRTYH7m012kvwAUTT6k0Y8lPITBEG7nzYbbuGcrN9Y/RDdwE08jmBXlZ45bahRH3VNXVpQE17dCzJB+7k+iJ1R7YCoI+DuMlBYGXGE2KVk46NZTuLnOjFV9SyXfWX4/SrJM4oxev+SX2N75tQgmNZmVVHeqg2ZcbC0WCfNjJOi2HHS9MujwIDAQAB\n-----END PUBLIC KEY-----\n"},"wall":"https://friends.grishka.me/users/1/wall","firstName":"Григорий","lastName":"Клюшников","middleName":"Александрович","vcard:bday":"1993-01-22","gender":"http://schema.org#Male","supportsFriendRequests":true,"friends":"https://friends.grishka.me/users/1/friends","groups":"https://friends.grishka.me/users/1/groups","capabilities":{"supportsFriendRequests":true},"@context":["https://www.w3.org/ns/activitystreams",{"sm":"http://smithereen.software/ns#","cropRegion":{"@id":"sm:cropRegion","@container":"@list"},"wall":{"@id":"sm:wall","@type":"@id"},"collectionSimpleQuery":"sm:collectionSimpleQuery","sc":"http://schema.org#","firstName":"sc:givenName","lastName":"sc:familyName","middleName":"sc:additionalName","gender":{"@id":"sc:gender","@type":"sc:GenderType"},"maidenName":"sm:maidenName","friends":{"@id":"sm:friends","@type":"@id"},"groups":{"@id":"sm:groups","@type":"@id"},"vcard":"http://www.w3.org/2006/vcard/ns#","capabilities":"litepub:capabilities","supportsFriendRequests":"sm:supportsFriendRequests","litepub":"http://litepub.social/ns#"},"https://w3id.org/security/v1"]} +\ No newline at end of file diff --git a/test/mix/pleroma_test.exs b/test/mix/pleroma_test.exs @@ -39,7 +39,7 @@ defmodule Mix.PleromaTest do describe "get_option/3" do test "get from options" do - assert get_option([domain: "some-domain.com"], :domain, "Promt") == "some-domain.com" + assert get_option([domain: "some-domain.com"], :domain, "Prompt") == "some-domain.com" end test "get from prompt" do diff --git a/test/mix/tasks/pleroma/config_test.exs b/test/mix/tasks/pleroma/config_test.exs @@ -140,7 +140,6 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do federating: true, federation_incoming_replies_max_depth: 100, federation_reachability_timeout_days: 7, - federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher], allow_relay: true, public: true, quarantined_instances: [], @@ -183,8 +182,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do assert File.exists?(temp_file) {:ok, file} = File.read(temp_file) - assert file == - "import Config\n\nconfig :pleroma, :instance,\n name: \"Pleroma\",\n email: \"example@example.com\",\n notify_email: \"noreply@example.com\",\n description: \"A Pleroma instance, an alternative fediverse server\",\n limit: 5000,\n chat_limit: 5000,\n remote_limit: 100_000,\n upload_limit: 16_000_000,\n avatar_upload_limit: 2_000_000,\n background_upload_limit: 4_000_000,\n banner_upload_limit: 4_000_000,\n poll_limits: %{\n max_expiration: 31_536_000,\n max_option_chars: 200,\n max_options: 20,\n min_expiration: 0\n },\n registrations_open: true,\n federating: true,\n federation_incoming_replies_max_depth: 100,\n federation_reachability_timeout_days: 7,\n federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n allow_relay: true,\n public: true,\n quarantined_instances: [],\n managed_config: true,\n static_dir: \"instance/static/\",\n allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n autofollowed_nicknames: [],\n max_pinned_statuses: 1,\n attachment_links: false,\n max_report_comment_size: 1000,\n safe_dm_mentions: false,\n healthcheck: false,\n remote_post_retention_days: 90,\n skip_thread_containment: true,\n limit_to_local_content: :unauthenticated,\n user_bio_length: 5000,\n user_name_length: 100,\n max_account_fields: 10,\n max_remote_account_fields: 20,\n account_field_name_length: 512,\n account_field_value_length: 2048,\n external_user_synchronization: true,\n extended_nickname_format: true,\n multi_factor_authentication: [\n totp: [digits: 6, period: 30],\n backup_codes: [number: 2, length: 6]\n ]\n" + assert file =~ "import Config\n" + assert file =~ "A Pleroma instance, an alternative fediverse server" end end diff --git a/test/mix/tasks/pleroma/ecto/migrate_test.exs b/test/mix/tasks/pleroma/ecto/migrate_test.exs @@ -9,7 +9,7 @@ defmodule Mix.Tasks.Pleroma.Ecto.MigrateTest do test "ecto.migrate info message" do level = Logger.level() - Logger.configure(level: :warn) + Logger.configure(level: :warning) assert capture_log(fn -> Mix.Tasks.Pleroma.Ecto.Migrate.run() diff --git a/test/mix/tasks/pleroma/ecto/rollback_test.exs b/test/mix/tasks/pleroma/ecto/rollback_test.exs @@ -9,11 +9,11 @@ defmodule Mix.Tasks.Pleroma.Ecto.RollbackTest do test "ecto.rollback info message" do level = Logger.level() - Logger.configure(level: :warn) + Logger.configure(level: :warning) assert capture_log(fn -> Mix.Tasks.Pleroma.Ecto.Rollback.run(["--env", "test"]) - end) =~ "[info] Rollback succesfully" + end) =~ "[info] Rollback successfully" Logger.configure(level: level) end diff --git a/test/mix/tasks/pleroma/robots_txt_test.exs b/test/mix/tasks/pleroma/robots_txt_test.exs @@ -26,7 +26,7 @@ defmodule Mix.Tasks.Pleroma.RobotsTxtTest do assert file == "User-Agent: *\nDisallow: /\n" end - test "to existance folder" do + test "to existing folder" do path = "test/fixtures/" file_path = path <> "robots.txt" clear_config([:instance, :static_dir], path) diff --git a/test/pleroma/activity/ir/topics_test.exs b/test/pleroma/activity/ir/topics_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity.Ir.TopicsTest do - use Pleroma.DataCase, async: true + use Pleroma.DataCase alias Pleroma.Activity alias Pleroma.Activity.Ir.Topics diff --git a/test/pleroma/activity_test.exs b/test/pleroma/activity_test.exs @@ -145,7 +145,7 @@ defmodule Pleroma.ActivityTest do setup do: clear_config([:instance, :limit_to_local_content]) - @tag :skip_on_mac + @tag :skip_darwin test "finds utf8 text in statuses", %{ japanese_activity: japanese_activity, user: user diff --git a/test/pleroma/bookmark_folder_test.exs b/test/pleroma/bookmark_folder_test.exs @@ -0,0 +1,60 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.BookmarkFolderTest do + use Pleroma.DataCase, async: true + import Pleroma.Factory + alias Pleroma.BookmarkFolder + + describe "create/3" do + test "with valid params" do + user = insert(:user) + {:ok, folder} = BookmarkFolder.create(user.id, "Read later", "🕓") + assert folder.user_id == user.id + assert folder.name == "Read later" + assert folder.emoji == "🕓" + end + + test "with invalid params" do + {:error, changeset} = BookmarkFolder.create(nil, "", "not an emoji") + refute changeset.valid? + + assert changeset.errors == [ + emoji: {"Invalid emoji", []}, + user_id: {"can't be blank", [validation: :required]}, + name: {"can't be blank", [validation: :required]} + ] + end + end + + test "update/3" do + user = insert(:user) + {:ok, folder} = BookmarkFolder.create(user.id, "Read ltaer") + {:ok, folder} = BookmarkFolder.update(folder.id, "Read later") + assert folder.name == "Read later" + end + + test "for_user/1" do + user = insert(:user) + other_user = insert(:user) + + {:ok, _} = BookmarkFolder.create(user.id, "Folder 1") + {:ok, _} = BookmarkFolder.create(user.id, "Folder 2") + {:ok, _} = BookmarkFolder.create(other_user.id, "Folder 3") + + folders = BookmarkFolder.for_user(user.id) + + assert length(folders) == 2 + end + + test "belongs_to_user?/2" do + user = insert(:user) + other_user = insert(:user) + + {:ok, folder} = BookmarkFolder.create(user.id, "Folder") + + assert true == BookmarkFolder.belongs_to_user?(folder.id, user.id) + assert false == BookmarkFolder.belongs_to_user?(folder.id, other_user.id) + end +end diff --git a/test/pleroma/bookmark_test.exs b/test/pleroma/bookmark_test.exs @@ -6,15 +6,17 @@ defmodule Pleroma.BookmarkTest do use Pleroma.DataCase, async: true import Pleroma.Factory alias Pleroma.Bookmark + alias Pleroma.BookmarkFolder alias Pleroma.Web.CommonAPI - describe "create/2" do + describe "create/3" do test "with valid params" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{status: "Some cool information"}) {:ok, bookmark} = Bookmark.create(user.id, activity.id) assert bookmark.user_id == user.id assert bookmark.activity_id == activity.id + assert bookmark.folder_id == nil end test "with invalid params" do @@ -26,6 +28,19 @@ defmodule Pleroma.BookmarkTest do activity_id: {"can't be blank", [validation: :required]} ] end + + test "update existing bookmark folder" do + user = insert(:user) + {:ok, activity} = CommonAPI.post(user, %{status: "Some cool information"}) + + {:ok, bookmark} = Bookmark.create(user.id, activity.id) + assert bookmark.folder_id == nil + + {:ok, bookmark_folder} = BookmarkFolder.create(user.id, "Read later") + + {:ok, bookmark} = Bookmark.create(user.id, activity.id, bookmark_folder.id) + assert bookmark.folder_id == bookmark_folder.id + end end describe "destroy/2" do diff --git a/test/pleroma/config/deprecation_warnings_test.exs b/test/pleroma/config/deprecation_warnings_test.exs @@ -125,13 +125,12 @@ defmodule Pleroma.Config.DeprecationWarningsTest do media_removal: ["some.removal", {"some.other.instance", "Some reason"}] ) - expected_config = [ + expected_config = {:media_removal, [{"some.removal", ""}, {"some.other.instance", "Some reason"}]} - ] capture_log(fn -> DeprecationWarnings.warn() end) - assert Config.get([:mrf_simple]) == expected_config + assert expected_config in Config.get([:mrf_simple]) end test "doesn't give a warning with correct config" do @@ -215,7 +214,7 @@ defmodule Pleroma.Config.DeprecationWarningsTest do ``` config :pleroma, :mrf, - transparency_exclusions: [{"instance.tld", "Reason to exlude transparency"}] + transparency_exclusions: [{"instance.tld", "Reason to exclude transparency"}] ``` """ end @@ -327,11 +326,11 @@ defmodule Pleroma.Config.DeprecationWarningsTest do end) =~ "Your config is using old namespace for activity expiration configuration." end - test "check_uploders_s3_public_endpoint/0" do + test "check_uploaders_s3_public_endpoint/0" do clear_config([Pleroma.Uploaders.S3], public_endpoint: "https://fake.amazonaws.com/bucket/") assert capture_log(fn -> - DeprecationWarnings.check_uploders_s3_public_endpoint() + DeprecationWarnings.check_uploaders_s3_public_endpoint() end) =~ "Your config is using the old setting for controlling the URL of media uploaded to your S3 bucket." end diff --git a/test/pleroma/config_db_test.exs b/test/pleroma/config_db_test.exs @@ -321,7 +321,7 @@ defmodule Pleroma.ConfigDBTest do }) == {:proxy_url, {:socks5, {127, 0, 0, 1}, 1234}} end - test "tuple with n childs" do + test "tuple with n children" do assert ConfigDB.to_elixir_types(%{ "tuple" => [ "v1", @@ -399,7 +399,7 @@ defmodule Pleroma.ConfigDBTest do assert ConfigDB.to_elixir_types(a: 1, b: 2, c: "string") == [a: 1, b: 2, c: "string"] end - test "complex keyword with nested mixed childs" do + test "complex keyword with nested mixed children" do assert ConfigDB.to_elixir_types([ %{"tuple" => [":uploader", "Pleroma.Uploaders.Local"]}, %{"tuple" => [":filters", ["Pleroma.Upload.Filter.Dedupe"]]}, @@ -443,13 +443,13 @@ defmodule Pleroma.ConfigDBTest do test "common keyword" do assert ConfigDB.to_elixir_types([ - %{"tuple" => [":level", ":warn"]}, + %{"tuple" => [":level", ":warning"]}, %{"tuple" => [":meta", [":all"]]}, %{"tuple" => [":path", ""]}, %{"tuple" => [":val", nil]}, %{"tuple" => [":webhook_url", "https://hooks.slack.com/services/YOUR-KEY-HERE"]} ]) == [ - level: :warn, + level: :warning, meta: [:all], path: "", val: nil, diff --git a/test/pleroma/conversation/participation_test.exs b/test/pleroma/conversation/participation_test.exs @@ -57,7 +57,7 @@ defmodule Pleroma.Conversation.ParticipationTest do assert Participation.unread_count(other_user) == 0 end - test "for a new conversation, it sets the recipents of the participation" do + test "for a new conversation, it sets the recipients of the participation" do user = insert(:user) other_user = insert(:user) third_user = insert(:user) diff --git a/test/pleroma/emoji/loader_test.exs b/test/pleroma/emoji/loader_test.exs @@ -72,7 +72,7 @@ defmodule Pleroma.Emoji.LoaderTest do assert group == "special file" end - test "no mathing returns nil", %{groups: groups} do + test "no matching returns nil", %{groups: groups} do group = groups |> Loader.match_extra("/emoji/some_undefined.png") diff --git a/test/pleroma/emoji_test.exs b/test/pleroma/emoji_test.exs @@ -6,26 +6,26 @@ defmodule Pleroma.EmojiTest do use ExUnit.Case, async: true alias Pleroma.Emoji - describe "is_unicode_emoji?/1" do + describe "unicode?/1" do test "tells if a string is an unicode emoji" do - refute Emoji.is_unicode_emoji?("X") - refute Emoji.is_unicode_emoji?("ね") + refute Emoji.unicode?("X") + refute Emoji.unicode?("ね") # Only accept fully-qualified (RGI) emoji # See http://www.unicode.org/reports/tr51/ - refute Emoji.is_unicode_emoji?("❤") - refute Emoji.is_unicode_emoji?("☂") + refute Emoji.unicode?("❤") + refute Emoji.unicode?("☂") - assert Emoji.is_unicode_emoji?("🥺") - assert Emoji.is_unicode_emoji?("🤰") - assert Emoji.is_unicode_emoji?("❤️") - assert Emoji.is_unicode_emoji?("🏳️‍⚧️") - assert Emoji.is_unicode_emoji?("🫵") + assert Emoji.unicode?("🥺") + assert Emoji.unicode?("🤰") + assert Emoji.unicode?("❤️") + assert Emoji.unicode?("🏳️‍⚧️") + assert Emoji.unicode?("🫵") # Additionally, we accept regional indicators. - assert Emoji.is_unicode_emoji?("🇵") - assert Emoji.is_unicode_emoji?("🇴") - assert Emoji.is_unicode_emoji?("🇬") + assert Emoji.unicode?("🇵") + assert Emoji.unicode?("🇴") + assert Emoji.unicode?("🇬") end end diff --git a/test/pleroma/formatter_test.exs b/test/pleroma/formatter_test.exs @@ -324,7 +324,7 @@ defmodule Pleroma.FormatterTest do assert {_text, [], ^expected_tags} = Formatter.linkify(text) end - test "parses mulitple tags in html" do + test "parses multiple tags in html" do text = "<p>#tag1 #tag2 #tag3 #tag4</p>" expected_tags = [ @@ -347,7 +347,7 @@ defmodule Pleroma.FormatterTest do assert {_text, [], ^expected_tags} = Formatter.linkify(text) end - test "parses mulitple tags on mulitple lines in html" do + test "parses multiple tags on multiple lines in html" do text = "<p>testing...</p><p>#tag1 #tag2 #tag3 #tag4</p><p>paragraph</p><p>#tag5 #tag6 #tag7 #tag8</p>" diff --git a/test/pleroma/healthcheck_test.exs b/test/pleroma/healthcheck_test.exs @@ -9,14 +9,16 @@ defmodule Pleroma.HealthcheckTest do test "system_info/0" do result = Healthcheck.system_info() |> Map.from_struct() - assert Map.keys(result) == [ + keys = Map.keys(result) + + assert Keyword.equal?(keys, [ :active, :healthy, :idle, :job_queue_stats, :memory_used, :pool_size - ] + ]) end describe "check_health/1" do @@ -25,7 +27,7 @@ defmodule Pleroma.HealthcheckTest do refute result.healthy end - test "chech_health/1" do + test "check_health/1" do result = Healthcheck.check_health(%Healthcheck{pool_size: 10, active: 9}) assert result.healthy end diff --git a/test/pleroma/html_test.exs b/test/pleroma/html_test.exs @@ -202,7 +202,7 @@ defmodule Pleroma.HTMLTest do }) object = Object.normalize(activity, fetch: false) - {:ok, url} = HTML.extract_first_external_url_from_object(object) + url = HTML.extract_first_external_url_from_object(object) assert url == "https://github.com/komeiji-satori/Dress" end @@ -217,7 +217,7 @@ defmodule Pleroma.HTMLTest do }) object = Object.normalize(activity, fetch: false) - {:ok, url} = HTML.extract_first_external_url_from_object(object) + url = HTML.extract_first_external_url_from_object(object) assert url == "https://github.com/syuilo/misskey/blob/develop/docs/setup.en.md" @@ -233,7 +233,7 @@ defmodule Pleroma.HTMLTest do }) object = Object.normalize(activity, fetch: false) - {:ok, url} = HTML.extract_first_external_url_from_object(object) + url = HTML.extract_first_external_url_from_object(object) assert url == "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=72255140" end @@ -249,7 +249,7 @@ defmodule Pleroma.HTMLTest do }) object = Object.normalize(activity, fetch: false) - {:ok, url} = HTML.extract_first_external_url_from_object(object) + url = HTML.extract_first_external_url_from_object(object) assert url == "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=72255140" end @@ -261,7 +261,7 @@ defmodule Pleroma.HTMLTest do object = Object.normalize(activity, fetch: false) - assert {:ok, nil} = HTML.extract_first_external_url_from_object(object) + assert nil == HTML.extract_first_external_url_from_object(object) end test "skips attachment links" do @@ -275,7 +275,7 @@ defmodule Pleroma.HTMLTest do object = Object.normalize(activity, fetch: false) - assert {:ok, nil} = HTML.extract_first_external_url_from_object(object) + assert nil == HTML.extract_first_external_url_from_object(object) end end end diff --git a/test/pleroma/http/adapter_helper/gun_test.exs b/test/pleroma/http/adapter_helper/gun_test.exs @@ -36,7 +36,7 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do assert opts[:certificates_verification] end - test "https url with non standart port" do + test "https url with non-standard port" do uri = URI.parse("https://example.com:115") opts = Gun.options([receive_conn: false], uri) @@ -44,7 +44,7 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do assert opts[:certificates_verification] end - test "merges with defaul http adapter config" do + test "merges with default http adapter config" do defaults = Gun.options([receive_conn: false], URI.parse("https://example.com")) assert Keyword.has_key?(defaults, :a) assert Keyword.has_key?(defaults, :b) diff --git a/test/pleroma/http/adapter_helper/hackney_test.exs b/test/pleroma/http/adapter_helper/hackney_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do - use ExUnit.Case, async: true + use ExUnit.Case use Pleroma.Tests.Helpers alias Pleroma.HTTP.AdapterHelper.Hackney diff --git a/test/pleroma/http/web_push_test.exs b/test/pleroma/http/web_push_test.exs @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.WebPushTest do + use ExUnit.Case + + import Tesla.Mock + alias Pleroma.HTTP + + @push_url "https://some-push-server/" + + setup do + mock(fn + %{ + method: :post, + url: @push_url, + headers: headers + } -> + if {"content-type", "octet-stream"} in headers do + %Tesla.Env{ + status: 200 + } + else + %Tesla.Env{ + status: 403 + } + end + end) + + :ok + end + + test "post" do + response = + HTTP.WebPush.post( + @push_url, + "encrypted payload", + %{"authorization" => "WebPush"}, + [] + ) + + assert {:ok, %{status: 200}} = response + end +end diff --git a/test/pleroma/instances/instance_test.exs b/test/pleroma/instances/instance_test.exs @@ -31,14 +31,6 @@ defmodule Pleroma.Instances.InstanceTest do assert {:ok, instance} = Instance.set_reachable(instance.host) refute instance.unreachable_since end - - test "does NOT create an Instance record in case of no existing matching record" do - host = "domain.org" - assert nil == Instance.set_reachable(host) - - assert [] = Repo.all(Ecto.Query.from(i in Instance)) - assert Instance.reachable?(host) - end end describe "set_unreachable/1" do diff --git a/test/pleroma/integration/mastodon_websocket_test.exs b/test/pleroma/integration/mastodon_websocket_test.exs @@ -268,17 +268,6 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do end) end - test "accepts valid token on Sec-WebSocket-Protocol header", %{token: token} do - assert {:ok, _} = start_socket("?stream=user", [{"Sec-WebSocket-Protocol", token.token}]) - - capture_log(fn -> - assert {:error, %WebSockex.RequestError{code: 401}} = - start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) - - Process.sleep(30) - end) - end - test "accepts valid token on client-sent event", %{token: token} do assert {:ok, pid} = start_socket() diff --git a/test/pleroma/maps_test.exs b/test/pleroma/maps_test.exs @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MapsTest do + use Pleroma.DataCase, async: true + + alias Pleroma.Maps + + describe "filter_empty_values/1" do + assert %{"bar" => "b", "ray" => ["foo"], "objs" => %{"a" => "b"}} == + Maps.filter_empty_values(%{ + "foo" => nil, + "fooz" => "", + "bar" => "b", + "rei" => [], + "ray" => ["foo"], + "obj" => %{}, + "objs" => %{"a" => "b"} + }) + end +end diff --git a/test/pleroma/mfa/totp_test.exs b/test/pleroma/mfa/totp_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.MFA.TOTPTest do alias Pleroma.MFA.TOTP + import Pleroma.Tests.Helpers, only: [uri_equal?: 2] + test "create provisioning_uri to generate qrcode" do uri = TOTP.provisioning_uri("test-secrcet", "test@example.com", @@ -15,7 +17,9 @@ defmodule Pleroma.MFA.TOTPTest do period: 60 ) - assert uri == + assert uri_equal?( + uri, "otpauth://totp/test@example.com?digits=8&issuer=Plerome-42&period=60&secret=test-secrcet" + ) end end diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs @@ -6,7 +6,6 @@ defmodule Pleroma.NotificationTest do use Pleroma.DataCase, async: false import Pleroma.Factory - import Mock alias Pleroma.FollowingRelationship alias Pleroma.Notification @@ -18,8 +17,6 @@ defmodule Pleroma.NotificationTest do alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.NotificationView - alias Pleroma.Web.Push - alias Pleroma.Web.Streamer setup do Mox.stub_with(Pleroma.UnstubbedConfigMock, Pleroma.Config) @@ -175,158 +172,7 @@ defmodule Pleroma.NotificationTest do assert [user2.id, user3.id, user1.id] == Enum.map(notifications, & &1.user_id) end - describe "CommonApi.post/2 notification-related functionality" do - test_with_mock "creates but does NOT send notification to blocker user", - Push, - [:passthrough], - [] do - user = insert(:user) - blocker = insert(:user) - {:ok, _user_relationship} = User.block(blocker, user) - - {:ok, _activity} = CommonAPI.post(user, %{status: "hey @#{blocker.nickname}!"}) - - blocker_id = blocker.id - assert [%Notification{user_id: ^blocker_id}] = Repo.all(Notification) - refute called(Push.send(:_)) - end - - test_with_mock "creates but does NOT send notification to notification-muter user", - Push, - [:passthrough], - [] do - user = insert(:user) - muter = insert(:user) - {:ok, _user_relationships} = User.mute(muter, user) - - {:ok, _activity} = CommonAPI.post(user, %{status: "hey @#{muter.nickname}!"}) - - muter_id = muter.id - assert [%Notification{user_id: ^muter_id}] = Repo.all(Notification) - refute called(Push.send(:_)) - end - - test_with_mock "creates but does NOT send notification to thread-muter user", - Push, - [:passthrough], - [] do - user = insert(:user) - thread_muter = insert(:user) - - {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{thread_muter.nickname}!"}) - - {:ok, _} = CommonAPI.add_mute(thread_muter, activity) - - {:ok, _same_context_activity} = - CommonAPI.post(user, %{ - status: "hey-hey-hey @#{thread_muter.nickname}!", - in_reply_to_status_id: activity.id - }) - - [pre_mute_notification, post_mute_notification] = - Repo.all(from(n in Notification, where: n.user_id == ^thread_muter.id, order_by: n.id)) - - pre_mute_notification_id = pre_mute_notification.id - post_mute_notification_id = post_mute_notification.id - - assert called( - Push.send( - :meck.is(fn - %Notification{id: ^pre_mute_notification_id} -> true - _ -> false - end) - ) - ) - - refute called( - Push.send( - :meck.is(fn - %Notification{id: ^post_mute_notification_id} -> true - _ -> false - end) - ) - ) - end - end - describe "create_notification" do - @tag needs_streamer: true - test "it creates a notification for user and send to the 'user' and the 'user:notification' stream" do - %{user: user, token: oauth_token} = oauth_access(["read"]) - - task = - Task.async(fn -> - {:ok, _topic} = Streamer.get_topic_and_add_socket("user", user, oauth_token) - assert_receive {:render_with_user, _, _, _, _}, 4_000 - end) - - task_user_notification = - Task.async(fn -> - {:ok, _topic} = - Streamer.get_topic_and_add_socket("user:notification", user, oauth_token) - - assert_receive {:render_with_user, _, _, _, _}, 4_000 - end) - - activity = insert(:note_activity) - - notify = Notification.create_notification(activity, user) - assert notify.user_id == user.id - Task.await(task) - Task.await(task_user_notification) - end - - test "it creates a notification for user if the user blocks the activity author" do - activity = insert(:note_activity) - author = User.get_cached_by_ap_id(activity.data["actor"]) - user = insert(:user) - {:ok, _user_relationship} = User.block(user, author) - - assert Notification.create_notification(activity, user) - end - - test "it creates a notification for the user if the user mutes the activity author" do - muter = insert(:user) - muted = insert(:user) - {:ok, _} = User.mute(muter, muted) - muter = Repo.get(User, muter.id) - {:ok, activity} = CommonAPI.post(muted, %{status: "Hi @#{muter.nickname}"}) - - notification = Notification.create_notification(activity, muter) - - assert notification.id - assert notification.seen - end - - test "notification created if user is muted without notifications" do - muter = insert(:user) - muted = insert(:user) - - {:ok, _user_relationships} = User.mute(muter, muted, %{notifications: false}) - - {:ok, activity} = CommonAPI.post(muted, %{status: "Hi @#{muter.nickname}"}) - - assert Notification.create_notification(activity, muter) - end - - test "it creates a notification for an activity from a muted thread" do - muter = insert(:user) - other_user = insert(:user) - {:ok, activity} = CommonAPI.post(muter, %{status: "hey"}) - CommonAPI.add_mute(muter, activity) - - {:ok, activity} = - CommonAPI.post(other_user, %{ - status: "Hi @#{muter.nickname}", - in_reply_to_status_id: activity.id - }) - - notification = Notification.create_notification(activity, muter) - - assert notification.id - assert notification.seen - end - test "it disables notifications from strangers" do follower = insert(:user) @@ -603,9 +449,7 @@ defmodule Pleroma.NotificationTest do status: "hey yet again @#{other_user.nickname}!" }) - [_, read_notification] = Notification.set_read_up_to(other_user, n2.id) - - assert read_notification.activity.object + Notification.set_read_up_to(other_user, n2.id) [n3, n2, n1] = Notification.for_user(other_user) @@ -680,7 +524,7 @@ defmodule Pleroma.NotificationTest do status: "hey @#{other_user.nickname}!" }) - {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert other_user in enabled_receivers end @@ -712,7 +556,7 @@ defmodule Pleroma.NotificationTest do {:ok, activity} = Transmogrifier.handle_incoming(create_activity) - {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert other_user in enabled_receivers end @@ -739,7 +583,7 @@ defmodule Pleroma.NotificationTest do {:ok, activity} = Transmogrifier.handle_incoming(create_activity) - {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert other_user not in enabled_receivers end @@ -756,8 +600,7 @@ defmodule Pleroma.NotificationTest do {:ok, activity_two} = CommonAPI.favorite(third_user, activity_one.id) - {enabled_receivers, _disabled_receivers} = - Notification.get_notified_from_activity(activity_two) + enabled_receivers = Notification.get_notified_from_activity(activity_two) assert other_user not in enabled_receivers end @@ -779,7 +622,7 @@ defmodule Pleroma.NotificationTest do |> Map.put("to", [other_user.ap_id | like_data["to"]]) |> ActivityPub.persist(local: true) - {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(like) + enabled_receivers = Notification.get_notified_from_activity(like) assert other_user not in enabled_receivers end @@ -796,39 +639,36 @@ defmodule Pleroma.NotificationTest do {:ok, activity_two} = CommonAPI.repeat(activity_one.id, third_user) - {enabled_receivers, _disabled_receivers} = - Notification.get_notified_from_activity(activity_two) + enabled_receivers = Notification.get_notified_from_activity(activity_two) assert other_user not in enabled_receivers end - test "it returns blocking recipient in disabled recipients list" do + test "it does not return blocking recipient in recipients list" do user = insert(:user) other_user = insert(:user) {:ok, _user_relationship} = User.block(other_user, user) {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{other_user.nickname}!"}) - {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert [] == enabled_receivers - assert [other_user] == disabled_receivers end - test "it returns notification-muting recipient in disabled recipients list" do + test "it does not return notification-muting recipient in recipients list" do user = insert(:user) other_user = insert(:user) {:ok, _user_relationships} = User.mute(other_user, user) {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{other_user.nickname}!"}) - {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert [] == enabled_receivers - assert [other_user] == disabled_receivers end - test "it returns thread-muting recipient in disabled recipients list" do + test "it does not return thread-muting recipient in recipients list" do user = insert(:user) other_user = insert(:user) @@ -842,14 +682,12 @@ defmodule Pleroma.NotificationTest do in_reply_to_status_id: activity.id }) - {enabled_receivers, disabled_receivers} = - Notification.get_notified_from_activity(same_context_activity) + enabled_receivers = Notification.get_notified_from_activity(same_context_activity) - assert [other_user] == disabled_receivers refute other_user in enabled_receivers end - test "it returns non-following domain-blocking recipient in disabled recipients list" do + test "it does not return non-following domain-blocking recipient in recipients list" do blocked_domain = "blocked.domain" user = insert(:user, %{ap_id: "https://#{blocked_domain}/@actor"}) other_user = insert(:user) @@ -858,10 +696,9 @@ defmodule Pleroma.NotificationTest do {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{other_user.nickname}!"}) - {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert [] == enabled_receivers - assert [other_user] == disabled_receivers end test "it returns following domain-blocking recipient in enabled recipients list" do @@ -874,10 +711,9 @@ defmodule Pleroma.NotificationTest do {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{other_user.nickname}!"}) - {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + enabled_receivers = Notification.get_notified_from_activity(activity) assert [other_user] == enabled_receivers - assert [] == disabled_receivers end test "it sends edited notifications to those who repeated a status" do @@ -897,11 +733,10 @@ defmodule Pleroma.NotificationTest do status: "hey @#{other_user.nickname}! mew mew" }) - {enabled_receivers, _disabled_receivers} = - Notification.get_notified_from_activity(edit_activity) + enabled_receivers = Notification.get_notified_from_activity(edit_activity) assert repeated_user in enabled_receivers - assert other_user not in enabled_receivers + refute other_user in enabled_receivers end end @@ -1189,13 +1024,13 @@ defmodule Pleroma.NotificationTest do assert Notification.for_user(user) == [] end - test "it returns notifications from a muted user when with_muted is set", %{user: user} do + test "it doesn't return notifications from a muted user when with_muted is set", %{user: user} do muted = insert(:user) {:ok, _user_relationships} = User.mute(user, muted) {:ok, _activity} = CommonAPI.post(muted, %{status: "hey @#{user.nickname}"}) - assert length(Notification.for_user(user, %{with_muted: true})) == 1 + assert Enum.empty?(Notification.for_user(user, %{with_muted: true})) end test "it doesn't return notifications from a blocked user when with_muted is set", %{ diff --git a/test/pleroma/object/fetcher_test.exs b/test/pleroma/object/fetcher_test.exs @@ -101,8 +101,7 @@ defmodule Pleroma.Object.FetcherTest do test "it returns thread depth exceeded error if thread depth is exceeded" do clear_config([:instance, :federation_incoming_replies_max_depth], 0) - assert {:error, "Max thread distance exceeded."} = - Fetcher.fetch_object_from_id(@ap_id, depth: 1) + assert {:error, :allowed_depth} = Fetcher.fetch_object_from_id(@ap_id, depth: 1) end test "it fetches object if max thread depth is restricted to 0 and depth is not specified" do @@ -220,14 +219,14 @@ defmodule Pleroma.Object.FetcherTest do end test "handle HTTP 410 Gone response" do - assert {:error, "Object has been deleted"} == + assert {:error, :not_found} == Fetcher.fetch_and_contain_remote_object_from_id( "https://mastodon.example.org/users/userisgone" ) end test "handle HTTP 404 response" do - assert {:error, "Object has been deleted"} == + assert {:error, :not_found} == Fetcher.fetch_and_contain_remote_object_from_id( "https://mastodon.example.org/users/userisgone404" ) diff --git a/test/pleroma/object_test.exs b/test/pleroma/object_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.ObjectTest do use Oban.Testing, repo: Pleroma.Repo import ExUnit.CaptureLog + import Mox import Pleroma.Factory import Tesla.Mock @@ -15,10 +16,12 @@ defmodule Pleroma.ObjectTest do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.Tests.ObanHelpers + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.CommonAPI setup do mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + ConfigMock |> stub_with(Pleroma.Test.StaticConfig) :ok end diff --git a/test/pleroma/otp_version_test.exs b/test/pleroma/otp_version_test.exs @@ -28,7 +28,7 @@ defmodule Pleroma.OTPVersionTest do "23.0" end - test "with non existance file" do + test "with nonexistent file" do assert OTPVersion.get_version_from_files([ "test/fixtures/warnings/otp_version/non-exising", "test/fixtures/warnings/otp_version/22.4" diff --git a/test/pleroma/repo/migrations/autolinker_to_linkify_test.exs b/test/pleroma/repo/migrations/autolinker_to_linkify_test.exs @@ -29,13 +29,13 @@ defmodule Pleroma.Repo.Migrations.AutolinkerToLinkifyTest do %{value: new_opts} = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Formatter}) - assert new_opts == [ + assert Keyword.equal?(new_opts, class: false, extra: true, new_window: false, rel: "testing", strip_prefix: false - ] + ) clear_config(Pleroma.Formatter, new_opts) assert new_opts == Pleroma.Config.get(Pleroma.Formatter) @@ -67,6 +67,6 @@ defmodule Pleroma.Repo.Migrations.AutolinkerToLinkifyTest do strip_prefix: false ] - assert migration.transform_opts(old_opts) == expected_opts + assert Keyword.equal?(migration.transform_opts(old_opts), expected_opts) end end diff --git a/test/pleroma/repo/migrations/fix_malformed_formatter_config_test.exs b/test/pleroma/repo/migrations/fix_malformed_formatter_config_test.exs @@ -26,13 +26,13 @@ defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfigTest do %{value: new_opts} = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Formatter}) - assert new_opts == [ + assert Keyword.equal?(new_opts, class: false, extra: true, new_window: false, rel: "F", strip_prefix: false - ] + ) clear_config(Pleroma.Formatter, new_opts) assert new_opts == Pleroma.Config.get(Pleroma.Formatter) diff --git a/test/pleroma/reverse_proxy_test.exs b/test/pleroma/reverse_proxy_test.exs @@ -306,7 +306,7 @@ defmodule Pleroma.ReverseProxyTest do end describe "response content disposition header" do - test "not atachment", %{conn: conn} do + test "not attachment", %{conn: conn} do disposition_headers_mock([ {"content-type", "image/gif"}, {"content-length", "0"} diff --git a/test/pleroma/rule_test.exs b/test/pleroma/rule_test.exs @@ -0,0 +1,57 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.RuleTest do + use Pleroma.DataCase, async: true + + alias Pleroma.Repo + alias Pleroma.Rule + + test "getting a list of rules sorted by priority" do + %{id: id1} = Rule.create(%{text: "Example rule"}) + %{id: id2} = Rule.create(%{text: "Second rule", priority: 2}) + %{id: id3} = Rule.create(%{text: "Third rule", priority: 1}) + + rules = + Rule.query() + |> Repo.all() + + assert [%{id: ^id1}, %{id: ^id3}, %{id: ^id2}] = rules + end + + test "creating rules" do + %{id: id} = Rule.create(%{text: "Example rule"}) + + assert %{text: "Example rule"} = Rule.get(id) + end + + test "editing rules" do + %{id: id} = Rule.create(%{text: "Example rule"}) + + Rule.update(%{text: "There are no rules", priority: 2}, id) + + assert %{text: "There are no rules", priority: 2} = Rule.get(id) + end + + test "deleting rules" do + %{id: id} = Rule.create(%{text: "Example rule"}) + + Rule.delete(id) + + assert [] = + Rule.query() + |> Pleroma.Repo.all() + end + + test "getting rules by ids" do + %{id: id1} = Rule.create(%{text: "Example rule"}) + %{id: id2} = Rule.create(%{text: "Second rule"}) + %{id: _id3} = Rule.create(%{text: "Third rule"}) + + rules = Rule.get([id1, id2]) + + assert Enum.all?(rules, &(&1.id in [id1, id2])) + assert length(rules) == 2 + end +end diff --git a/test/pleroma/scheduled_activity_test.exs b/test/pleroma/scheduled_activity_test.exs @@ -3,19 +3,23 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ScheduledActivityTest do - use Pleroma.DataCase + use Pleroma.DataCase, async: true alias Pleroma.ScheduledActivity + alias Pleroma.Test.StaticConfig + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + import Mox import Pleroma.Factory - setup do: clear_config([ScheduledActivity, :enabled]) - - setup [:ensure_local_uploader] - describe "creation" do test "scheduled activities with jobs when ScheduledActivity enabled" do - clear_config([ScheduledActivity, :enabled], true) + ConfigMock + |> stub(:get, fn + [ScheduledActivity, :enabled] -> true + path -> StaticConfig.get(path) + end) + user = insert(:user) today = @@ -34,7 +38,12 @@ defmodule Pleroma.ScheduledActivityTest do end test "scheduled activities without jobs when ScheduledActivity disabled" do - clear_config([ScheduledActivity, :enabled], false) + ConfigMock + |> stub(:get, fn + [ScheduledActivity, :enabled] -> false + path -> StaticConfig.get(path) + end) + user = insert(:user) today = @@ -53,6 +62,9 @@ defmodule Pleroma.ScheduledActivityTest do end test "when daily user limit is exceeded" do + ConfigMock + |> stub_with(StaticConfig) + user = insert(:user) today = @@ -69,6 +81,9 @@ defmodule Pleroma.ScheduledActivityTest do end test "when total user limit is exceeded" do + ConfigMock + |> stub_with(StaticConfig) + user = insert(:user) today = @@ -89,6 +104,9 @@ defmodule Pleroma.ScheduledActivityTest do end test "when scheduled_at is earlier than 5 minute from now" do + ConfigMock + |> stub_with(StaticConfig) + user = insert(:user) scheduled_at = diff --git a/test/pleroma/search/database_search_test.exs b/test/pleroma/search/database_search_test.exs @@ -35,21 +35,6 @@ defmodule Pleroma.Search.DatabaseSearchTest do assert [] = Search.search(nil, "wednesday") end - test "using plainto_tsquery on postgres < 11" do - old_version = :persistent_term.get({Pleroma.Repo, :postgres_version}) - :persistent_term.put({Pleroma.Repo, :postgres_version}, 10.0) - on_exit(fn -> :persistent_term.put({Pleroma.Repo, :postgres_version}, old_version) end) - - user = insert(:user) - {:ok, post} = CommonAPI.post(user, %{status: "it's wednesday my dudes"}) - {:ok, _post2} = CommonAPI.post(user, %{status: "it's wednesday my bros"}) - - # plainto doesn't understand complex queries - assert [result] = Search.search(nil, "wednesday -dudes") - - assert result.id == post.id - end - test "using websearch_to_tsquery" do user = insert(:user) {:ok, _post} = CommonAPI.post(user, %{status: "it's wednesday my dudes"}) diff --git a/test/pleroma/signature_test.exs b/test/pleroma/signature_test.exs @@ -43,10 +43,7 @@ defmodule Pleroma.SignatureTest do end test "it returns error when not found user" do - assert capture_log(fn -> - assert Signature.fetch_public_key(make_fake_conn("https://test-ap-id")) == - {:error, :error} - end) =~ "[error] Could not decode user" + assert Signature.fetch_public_key(make_fake_conn("https://test-ap-id")) == {:error, :error} end test "it returns error if public key is nil" do @@ -116,7 +113,7 @@ defmodule Pleroma.SignatureTest do test "it calls webfinger for 'acct:' accounts" do with_mock(Pleroma.Web.WebFinger, - finger: fn _ -> %{"ap_id" => "https://gensokyo.2hu/users/raymoo"} end + finger: fn _ -> {:ok, %{"ap_id" => "https://gensokyo.2hu/users/raymoo"}} end ) do assert Signature.key_id_to_actor_id("acct:raymoo@gensokyo.2hu") == {:ok, "https://gensokyo.2hu/users/raymoo"} diff --git a/test/pleroma/upload/filter/analyze_metadata_test.exs b/test/pleroma/upload/filter/analyze_metadata_test.exs @@ -20,6 +20,20 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadataTest do assert meta.blurhash end + test "it blurhashes images with an alpha component" do + upload = %Pleroma.Upload{ + name: "an… image.jpg", + content_type: "image/jpeg", + path: Path.absname("test/fixtures/png_with_transparency.png"), + tempfile: Path.absname("test/fixtures/png_with_transparency.png") + } + + {:ok, :filtered, meta} = AnalyzeMetadata.filter(upload) + + assert %{width: 320, height: 320} = meta + assert meta.blurhash == "eXJi-E:SwCEm5rCmn$+YWYn+15K#5A$xxCi{SiV]s*W:Efa#s.jE-T" + end + test "adds the dimensions for videos" do upload = %Pleroma.Upload{ name: "coolvideo.mp4", diff --git a/test/pleroma/upload/filter/exiftool/read_description_test.exs b/test/pleroma/upload/filter/exiftool/read_description_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.Exiftool.ReadDescriptionTest do - use Pleroma.DataCase, async: true + use Pleroma.DataCase alias Pleroma.Upload.Filter @uploads %Pleroma.Upload{ diff --git a/test/pleroma/upload_test.exs b/test/pleroma/upload_test.exs @@ -6,10 +6,19 @@ defmodule Pleroma.UploadTest do use Pleroma.DataCase import ExUnit.CaptureLog + import Mox + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Upload alias Pleroma.Uploaders.Uploader + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + @upload_file %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image_tmp.jpg"), @@ -236,6 +245,8 @@ defmodule Pleroma.UploadTest do describe "Setting a custom base_url for uploaded media" do setup do: clear_config([Pleroma.Upload, :base_url], "https://cache.pleroma.social") + # This seems to be backwards. Skipped for that reason + @tag skip: true test "returns a media url with configured base_url" do base_url = Pleroma.Config.get([Pleroma.Upload, :base_url]) diff --git a/test/pleroma/uploaders/s3_test.exs b/test/pleroma/uploaders/s3_test.exs @@ -3,22 +3,27 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Uploaders.S3Test do - use Pleroma.DataCase + use Pleroma.DataCase, async: true + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Uploaders.S3 + alias Pleroma.Uploaders.S3.ExAwsMock - import Mock + import Mox import ExUnit.CaptureLog - setup do - clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.S3) - clear_config([Pleroma.Upload, :base_url], "https://s3.amazonaws.com") - clear_config([Pleroma.Uploaders.S3]) - clear_config([Pleroma.Uploaders.S3, :bucket], "test_bucket") - end - describe "get_file/1" do - test "it returns path to local folder for files" do + test "it returns url for files" do + ConfigMock + |> expect(:get, 6, fn key -> + [ + {Pleroma.Upload, + [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]}, + {Pleroma.Uploaders.S3, [bucket: "test_bucket"]} + ] + |> get_in(key) + end) + assert S3.get_file("test_image.jpg") == { :ok, {:url, "https://s3.amazonaws.com/test_bucket/test_image.jpg"} @@ -26,13 +31,16 @@ defmodule Pleroma.Uploaders.S3Test do end test "it returns path without bucket when truncated_namespace set to ''" do - clear_config([Pleroma.Uploaders.S3], - bucket: "test_bucket", - bucket_namespace: "myaccount", - truncated_namespace: "" - ) - - clear_config([Pleroma.Upload, :base_url], "https://s3.amazonaws.com") + ConfigMock + |> expect(:get, 6, fn key -> + [ + {Pleroma.Upload, + [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]}, + {Pleroma.Uploaders.S3, + [bucket: "test_bucket", truncated_namespace: "", bucket_namespace: "myaccount"]} + ] + |> get_in(key) + end) assert S3.get_file("test_image.jpg") == { :ok, @@ -41,10 +49,15 @@ defmodule Pleroma.Uploaders.S3Test do end test "it returns path with bucket namespace when namespace is set" do - clear_config([Pleroma.Uploaders.S3], - bucket: "test_bucket", - bucket_namespace: "family" - ) + ConfigMock + |> expect(:get, 6, fn key -> + [ + {Pleroma.Upload, + [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]}, + {Pleroma.Uploaders.S3, [bucket: "test_bucket", bucket_namespace: "family"]} + ] + |> get_in(key) + end) assert S3.get_file("test_image.jpg") == { :ok, @@ -62,28 +75,42 @@ defmodule Pleroma.Uploaders.S3Test do tempfile: Path.absname("test/instance_static/add/shortcode.png") } + ConfigMock + |> expect(:get, fn [Pleroma.Uploaders.S3] -> + [ + bucket: "test_bucket" + ] + end) + [file_upload: file_upload] end test "save file", %{file_upload: file_upload} do - with_mock ExAws, request: fn _ -> {:ok, :ok} end do - assert S3.put_file(file_upload) == {:ok, {:file, "test_folder/image-tet.jpg"}} - end + ExAwsMock + |> expect(:request, fn _req -> {:ok, %{status_code: 200}} end) + + assert S3.put_file(file_upload) == {:ok, {:file, "test_folder/image-tet.jpg"}} end test "returns error", %{file_upload: file_upload} do - with_mock ExAws, request: fn _ -> {:error, "S3 Upload failed"} end do - assert capture_log(fn -> - assert S3.put_file(file_upload) == {:error, "S3 Upload failed"} - end) =~ "Elixir.Pleroma.Uploaders.S3: {:error, \"S3 Upload failed\"}" - end + ExAwsMock + |> expect(:request, fn _req -> {:error, "S3 Upload failed"} end) + + assert capture_log(fn -> + assert S3.put_file(file_upload) == {:error, "S3 Upload failed"} + end) =~ "Elixir.Pleroma.Uploaders.S3: {:error, \"S3 Upload failed\"}" end end describe "delete_file/1" do - test_with_mock "deletes file", ExAws, request: fn _req -> {:ok, %{status_code: 204}} end do + test "deletes file" do + ExAwsMock + |> expect(:request, fn _req -> {:ok, %{status_code: 204}} end) + + ConfigMock + |> expect(:get, fn [Pleroma.Uploaders.S3, :bucket] -> "test_bucket" end) + assert :ok = S3.delete_file("image.jpg") - assert_called(ExAws.request(:_)) end end end diff --git a/test/pleroma/user/backup_async_test.exs b/test/pleroma/user/backup_async_test.exs @@ -0,0 +1,51 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.User.BackupAsyncTest do + use Pleroma.DataCase, async: true + + import Pleroma.Factory + import Mox + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + alias Pleroma.User.Backup + alias Pleroma.User.Backup.ProcessorMock + + setup do + user = insert(:user, %{nickname: "cofe", name: "Cofe", ap_id: "http://cofe.io/users/cofe"}) + + {:ok, backup} = user |> Backup.new() |> Repo.insert() + %{backup: backup} + end + + @tag capture_log: true + test "it handles unrecoverable exceptions", %{backup: backup} do + ProcessorMock + |> expect(:do_process, fn _, _ -> + raise "mock exception" + end) + + ConfigMock + |> stub_with(Pleroma.Config) + + {:error, %{backup: backup, reason: :exit}} = Backup.process(backup, ProcessorMock) + + assert backup.state == :failed + end + + @tag capture_log: true + test "it handles timeouts", %{backup: backup} do + ProcessorMock + |> expect(:do_process, fn _, _ -> + Process.sleep(:timer.seconds(4)) + end) + + ConfigMock + |> expect(:get, fn [Pleroma.User.Backup, :process_wait_time] -> :timer.seconds(2) end) + + {:error, %{backup: backup, reason: :timeout}} = Backup.process(backup, ProcessorMock) + + assert backup.state == :failed + end +end diff --git a/test/pleroma/user/backup_test.exs b/test/pleroma/user/backup_test.exs @@ -9,10 +9,14 @@ defmodule Pleroma.User.BackupTest do import Mock import Pleroma.Factory import Swoosh.TestAssertions + import Mox alias Pleroma.Bookmark alias Pleroma.Tests.ObanHelpers + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + alias Pleroma.Uploaders.S3.ExAwsMock alias Pleroma.User.Backup + alias Pleroma.User.Backup.ProcessorMock alias Pleroma.Web.CommonAPI alias Pleroma.Workers.BackupWorker @@ -20,6 +24,14 @@ defmodule Pleroma.User.BackupTest do clear_config([Pleroma.Upload, :uploader]) clear_config([Backup, :limit_days]) clear_config([Pleroma.Emails.Mailer, :enabled], true) + + ConfigMock + |> stub_with(Pleroma.Config) + + ProcessorMock + |> stub_with(Pleroma.User.Backup.Processor) + + :ok end test "it does not requrie enabled email" do @@ -154,6 +166,7 @@ defmodule Pleroma.User.BackupTest do test "it creates a zip archive with user data" do user = insert(:user, %{nickname: "cofe", name: "Cofe", ap_id: "http://cofe.io/users/cofe"}) + %{ap_id: other_ap_id} = other_user = insert(:user) {:ok, %{object: %{data: %{"id" => id1}}} = status1} = CommonAPI.post(user, %{status: "status1"}) @@ -170,6 +183,8 @@ defmodule Pleroma.User.BackupTest do Bookmark.create(user.id, status2.id) Bookmark.create(user.id, status3.id) + CommonAPI.follow(user, other_user) + assert {:ok, backup} = user |> Backup.new() |> Repo.insert() assert {:ok, path} = Backup.export(backup, self()) assert {:ok, zipfile} = :zip.zip_open(String.to_charlist(path), [:memory]) @@ -249,6 +264,16 @@ defmodule Pleroma.User.BackupTest do "type" => "OrderedCollection" } = Jason.decode!(json) + assert {:ok, {'following.json', json}} = :zip.zip_get('following.json', zipfile) + + assert %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "id" => "following.json", + "orderedItems" => [^other_ap_id], + "totalItems" => 1, + "type" => "OrderedCollection" + } = Jason.decode!(json) + :zip.zip_close(zipfile) File.rm!(path) end @@ -302,24 +327,6 @@ defmodule Pleroma.User.BackupTest do end end - test "it handles unrecoverable exceptions" do - user = insert(:user, %{nickname: "cofe", name: "Cofe", ap_id: "http://cofe.io/users/cofe"}) - - assert {:ok, backup} = user |> Backup.new() |> Repo.insert() - - with_mock Backup, [:passthrough], do_process: fn _, _ -> raise "mock exception" end do - {:error, %{backup: backup, reason: :exit}} = Backup.process(backup) - - assert backup.state == :failed - end - - with_mock Backup, [:passthrough], do_process: fn _, _ -> Process.sleep(:timer.seconds(32)) end do - {:error, %{backup: backup, reason: :timeout}} = Backup.process(backup) - - assert backup.state == :failed - end - end - describe "it uploads and deletes a backup archive" do setup do clear_config([Pleroma.Upload, :base_url], "https://s3.amazonaws.com") @@ -345,14 +352,14 @@ defmodule Pleroma.User.BackupTest do clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.S3) clear_config([Pleroma.Uploaders.S3, :streaming_enabled], false) - with_mock ExAws, - request: fn - %{http_method: :put} -> {:ok, :ok} - %{http_method: :delete} -> {:ok, %{status_code: 204}} - end do - assert {:ok, %Pleroma.Upload{}} = Backup.upload(backup, path) - assert {:ok, _backup} = Backup.delete(backup) - end + ExAwsMock + |> expect(:request, 2, fn + %{http_method: :put} -> {:ok, :ok} + %{http_method: :delete} -> {:ok, %{status_code: 204}} + end) + + assert {:ok, %Pleroma.Upload{}} = Backup.upload(backup, path) + assert {:ok, _backup} = Backup.delete(backup) end test "Local", %{path: path, backup: backup} do diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs @@ -226,7 +226,7 @@ defmodule Pleroma.UserTest do assert [] = User.get_follow_requests(followed) end - test "follow_all follows mutliple users" do + test "follow_all follows multiple users" do user = insert(:user) followed_zero = insert(:user) followed_one = insert(:user) @@ -250,7 +250,7 @@ defmodule Pleroma.UserTest do refute User.following?(user, reverse_blocked) end - test "follow_all follows mutliple users without duplicating" do + test "follow_all follows multiple users without duplicating" do user = insert(:user) followed_zero = insert(:user) followed_one = insert(:user) @@ -873,7 +873,7 @@ defmodule Pleroma.UserTest do end end - describe "get_or_fetch/1 remote users with tld, while BE is runned on subdomain" do + describe "get_or_fetch/1 remote users with tld, while BE is running on a subdomain" do setup do: clear_config([Pleroma.Web.WebFinger, :update_nickname_on_user_fetch], true) test "for mastodon" do @@ -1018,13 +1018,13 @@ defmodule Pleroma.UserTest do @tag capture_log: true test "returns nil if no user could be fetched" do - {:error, fetched_user} = User.get_or_fetch_by_nickname("nonexistant@social.heldscal.la") - assert fetched_user == "not found nonexistant@social.heldscal.la" + {:error, fetched_user} = User.get_or_fetch_by_nickname("nonexistent@social.heldscal.la") + assert fetched_user == "not found nonexistent@social.heldscal.la" end - test "returns nil for nonexistant local user" do - {:error, fetched_user} = User.get_or_fetch_by_nickname("nonexistant") - assert fetched_user == "not found nonexistant" + test "returns nil for nonexistent local user" do + {:error, fetched_user} = User.get_or_fetch_by_nickname("nonexistent") + assert fetched_user == "not found nonexistent" end test "updates an existing user, if stale" do @@ -1132,7 +1132,7 @@ defmodule Pleroma.UserTest do assert cs.valid? end - test "it sets the follower_adress" do + test "it sets the follower_address" do cs = User.remote_user_changeset(@valid_remote) # remote users get a fake local follower address assert cs.changes.follower_address == @@ -1951,8 +1951,8 @@ defmodule Pleroma.UserTest do end end - test "get_public_key_for_ap_id fetches a user that's not in the db" do - assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin") + test "get_public_key_for_ap_id returns correctly for user that's not in the db" do + assert :error = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin") end describe "per-user rich-text filtering" do @@ -2424,20 +2424,20 @@ defmodule Pleroma.UserTest do end end - describe "is_internal_user?/1" do + describe "internal?/1" do test "non-internal user returns false" do user = insert(:user) - refute User.is_internal_user?(user) + refute User.internal?(user) end test "user with no nickname returns true" do user = insert(:user, %{nickname: nil}) - assert User.is_internal_user?(user) + assert User.internal?(user) end test "user with internal-prefixed nickname returns true" do user = insert(:user, %{nickname: "internal.test"}) - assert User.is_internal_user?(user) + assert User.internal?(user) end end @@ -2683,13 +2683,23 @@ defmodule Pleroma.UserTest do end describe "full_nickname/1" do - test "returns fully qualified nickname for local and remote users" do - local_user = - insert(:user, nickname: "local_user", ap_id: "https://somehost.com/users/local_user") + test "returns fully qualified nickname for local users" do + local_user = insert(:user, nickname: "local_user") + assert User.full_nickname(local_user) == "local_user@localhost" + end + + test "returns fully qualified nickname for local users when using different domain for webfinger" do + clear_config([Pleroma.Web.WebFinger, :domain], "plemora.dev") + + local_user = insert(:user, nickname: "local_user") + + assert User.full_nickname(local_user) == "local_user@plemora.dev" + end + + test "returns fully qualified nickname for remote users" do remote_user = insert(:user, nickname: "remote@host.com", local: false) - assert User.full_nickname(local_user) == "local_user@somehost.com" assert User.full_nickname(remote_user) == "remote@host.com" end @@ -2884,6 +2894,20 @@ defmodule Pleroma.UserTest do end end + describe "get_familiar_followers/3" do + test "returns familiar followers for a pair of users" do + user1 = insert(:user) + %{id: id2} = user2 = insert(:user) + user3 = insert(:user) + _user4 = insert(:user) + + User.follow(user1, user2) + User.follow(user2, user3) + + assert [%{id: ^id2}] = User.get_familiar_followers(user3, user1) + end + end + describe "account endorsements" do test "it pins people" do user = insert(:user) @@ -2918,4 +2942,51 @@ defmodule Pleroma.UserTest do refute User.endorses?(user, pinned_user) end end + + test "it checks fields links for a backlink" do + user = insert(:user, ap_id: "https://social.example.org/users/lain") + + fields = [ + %{"name" => "Link", "value" => "http://example.com/rel_me/null"}, + %{"name" => "Verified link", "value" => "http://example.com/rel_me/link"}, + %{"name" => "Not a link", "value" => "i'm not a link"} + ] + + user + |> User.update_and_set_cache(%{raw_fields: fields}) + + ObanHelpers.perform_all() + + user = User.get_cached_by_id(user.id) + + assert [ + %{"verified_at" => nil}, + %{"verified_at" => verified_at}, + %{"verified_at" => nil} + ] = user.fields + + assert is_binary(verified_at) + end + + test "updating fields does not invalidate previously validated links" do + user = insert(:user, ap_id: "https://social.example.org/users/lain") + + user + |> User.update_and_set_cache(%{ + raw_fields: [%{"name" => "verified link", "value" => "http://example.com/rel_me/link"}] + }) + + ObanHelpers.perform_all() + + %User{fields: [%{"verified_at" => verified_at}]} = user = User.get_cached_by_id(user.id) + + user + |> User.update_and_set_cache(%{ + raw_fields: [%{"name" => "Verified link", "value" => "http://example.com/rel_me/link"}] + }) + + user = User.get_cached_by_id(user.id) + + assert [%{"verified_at" => ^verified_at}] = user.fields + end end diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs @@ -221,7 +221,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do user = insert(:user) {:ok, post} = CommonAPI.post(user, %{status: "test", visibility: "local"}) - assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + assert Pleroma.Web.ActivityPub.Visibility.local_public?(post) object = Object.normalize(post, fetch: false) uuid = String.split(object.data["id"], "/") |> List.last() @@ -238,7 +238,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do user = insert(:user) {:ok, post} = CommonAPI.post(user, %{status: "test", visibility: "local"}) - assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + assert Pleroma.Web.ActivityPub.Visibility.local_public?(post) object = Object.normalize(post, fetch: false) uuid = String.split(object.data["id"], "/") |> List.last() @@ -259,7 +259,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do {:ok, post} = CommonAPI.post(user, %{status: "test @#{reader.nickname}", visibility: "local"}) - assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + assert Pleroma.Web.ActivityPub.Visibility.local_public?(post) object = Object.normalize(post, fetch: false) uuid = String.split(object.data["id"], "/") |> List.last() @@ -436,7 +436,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do user = insert(:user) {:ok, post} = CommonAPI.post(user, %{status: "test", visibility: "local"}) - assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + assert Pleroma.Web.ActivityPub.Visibility.local_public?(post) uuid = String.split(post.data["id"], "/") |> List.last() @@ -452,7 +452,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do user = insert(:user) {:ok, post} = CommonAPI.post(user, %{status: "test", visibility: "local"}) - assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + assert Pleroma.Web.ActivityPub.Visibility.local_public?(post) uuid = String.split(post.data["id"], "/") |> List.last() @@ -895,6 +895,23 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do assert Activity.get_by_ap_id(data["id"]) end + test "it rejects an invalid incoming activity", %{conn: conn, data: data} do + user = insert(:user, is_active: false) + + data = + data + |> Map.put("bcc", [user.ap_id]) + |> Kernel.put_in(["object", "bcc"], [user.ap_id]) + + conn = + conn + |> assign(:valid_signature, true) + |> put_req_header("content-type", "application/activity+json") + |> post("/users/#{user.nickname}/inbox", data) + + assert "Invalid request." == json_response(conn, 400) + end + test "it accepts messages with to as string instead of array", %{conn: conn, data: data} do user = insert(:user) diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do alias Pleroma.Config alias Pleroma.Notification alias Pleroma.Object + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Utils @@ -19,11 +20,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do import ExUnit.CaptureLog import Mock + import Mox import Pleroma.Factory import Tesla.Mock setup do mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + :ok end @@ -1022,7 +1028,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do refute repeat_activity in activities end - test "see your own posts even when they adress actors from blocked domains" do + test "see your own posts even when they address actors from blocked domains" do user = insert(:user) domain = "dogwhistle.zone" @@ -2681,6 +2687,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do assert user.name == " " end + @tag capture_log: true test "pin_data_from_featured_collection will ignore unsupported values" do assert %{} == ActivityPub.pin_data_from_featured_collection(%{ diff --git a/test/pleroma/web/activity_pub/mrf/ensure_re_prepended_test.exs b/test/pleroma/web/activity_pub/mrf/ensure_re_prepended_test.exs @@ -24,7 +24,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrependedTest do assert res["object"]["summary"] == "re: object-summary" end - test "it adds `re:` to summary object when child summary containts re-subject of parent summary " do + test "it adds `re:` to summary object when child summary contains re-subject of parent summary " do message = %{ "type" => "Create", "object" => %{ diff --git a/test/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs b/test/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicyTest do - use Pleroma.DataCase, async: true + use Pleroma.DataCase alias Pleroma.User alias Pleroma.Web.ActivityPub.MRF.FollowBotPolicy diff --git a/test/pleroma/web/activity_pub/mrf/force_mention_test.exs b/test/pleroma/web/activity_pub/mrf/force_mention_test.exs @@ -0,0 +1,73 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionTest do + use Pleroma.DataCase + require Pleroma.Constants + + alias Pleroma.Web.ActivityPub.MRF.ForceMention + + import Pleroma.Factory + + test "adds mention to a reply" do + lain = + insert(:user, ap_id: "https://lain.com/users/lain", nickname: "lain@lain.com", local: false) + + niobleoum = + insert(:user, + ap_id: "https://www.minds.com/api/activitypub/users/1198929502760083472", + nickname: "niobleoum@minds.com", + local: false + ) + + status = File.read!("test/fixtures/minds-pleroma-mentioned-post.json") |> Jason.decode!() + + status_activity = %{ + "type" => "Create", + "actor" => lain.ap_id, + "object" => status + } + + Pleroma.Web.ActivityPub.Transmogrifier.handle_incoming(status_activity) + + reply = File.read!("test/fixtures/minds-invalid-mention-post.json") |> Jason.decode!() + + reply_activity = %{ + "type" => "Create", + "actor" => niobleoum.ap_id, + "object" => reply + } + + {:ok, %{"object" => %{"tag" => tag}}} = ForceMention.filter(reply_activity) + + assert Enum.find(tag, fn %{"href" => href} -> href == lain.ap_id end) + end + + test "adds mention to a quote" do + user1 = insert(:user, ap_id: "https://misskey.io/users/83ssedkv53") + user2 = insert(:user, ap_id: "https://misskey.io/users/7rkrarq81i") + + status = File.read!("test/fixtures/tesla_mock/misskey.io_8vs6wxufd0.json") |> Jason.decode!() + + status_activity = %{ + "type" => "Create", + "actor" => user1.ap_id, + "object" => status + } + + Pleroma.Web.ActivityPub.Transmogrifier.handle_incoming(status_activity) + + quote_post = File.read!("test/fixtures/quote_post/misskey_quote_post.json") |> Jason.decode!() + + quote_activity = %{ + "type" => "Create", + "actor" => user2.ap_id, + "object" => quote_post + } + + {:ok, %{"object" => %{"tag" => tag}}} = ForceMention.filter(quote_activity) + + assert Enum.find(tag, fn %{"href" => href} -> href == user1.ap_id end) + end +end 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 @@ -7,10 +7,12 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicyTest do use Pleroma.Tests.Helpers alias Pleroma.HTTP + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.ActivityPub.MRF alias Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy import Mock + import Mox @message %{ "type" => "Create", @@ -42,6 +44,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicyTest do } } + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + setup do: clear_config([:media_proxy, :enabled], true) test "it prefetches media proxy URIs" do diff --git a/test/pleroma/web/activity_pub/mrf/steal_emoji_policy_test.exs b/test/pleroma/web/activity_pub/mrf/steal_emoji_policy_test.exs @@ -60,6 +60,59 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicyTest do |> File.exists?() end + test "works with unknown extension", %{path: path} do + message = %{ + "type" => "Create", + "object" => %{ + "emoji" => [{"firedfox", "https://example.org/emoji/firedfox"}], + "actor" => "https://example.org/users/admin" + } + } + + fullpath = Path.join(path, "firedfox.png") + + Tesla.Mock.mock(fn %{method: :get, url: "https://example.org/emoji/firedfox"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.jpg")} + end) + + clear_config(:mrf_steal_emoji, hosts: ["example.org"], size_limit: 284_468) + + refute "firedfox" in installed() + refute File.exists?(path) + + assert {:ok, _message} = StealEmojiPolicy.filter(message) + + assert "firedfox" in installed() + assert File.exists?(path) + assert File.exists?(fullpath) + end + + test "rejects invalid shortcodes", %{path: path} do + message = %{ + "type" => "Create", + "object" => %{ + "emoji" => [{"fired/fox", "https://example.org/emoji/firedfox"}], + "actor" => "https://example.org/users/admin" + } + } + + fullpath = Path.join(path, "fired/fox.png") + + Tesla.Mock.mock(fn %{method: :get, url: "https://example.org/emoji/firedfox"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.jpg")} + end) + + clear_config(:mrf_steal_emoji, hosts: ["example.org"], size_limit: 284_468) + + refute "firedfox" in installed() + refute File.exists?(path) + + assert {:ok, _message} = StealEmojiPolicy.filter(message) + + refute "fired/fox" in installed() + refute File.exists?(fullpath) + end + test "reject regex shortcode", %{message: message} do refute "firedfox" in installed() diff --git a/test/pleroma/web/activity_pub/mrf_test.exs b/test/pleroma/web/activity_pub/mrf_test.exs @@ -1,10 +1,13 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRFTest do - use ExUnit.Case, async: true + use ExUnit.Case use Pleroma.Tests.Helpers + + import ExUnit.CaptureLog + alias Pleroma.Web.ActivityPub.MRF test "subdomains_regex/1" do @@ -61,6 +64,14 @@ defmodule Pleroma.Web.ActivityPub.MRFTest do refute MRF.subdomain_match?(regexes, "EXAMPLE.COM") refute MRF.subdomain_match?(regexes, "example.com") end + + @tag capture_log: true + test "logs sensible error on accidental wildcard" do + assert_raise Regex.CompileError, fn -> + assert capture_log(MRF.subdomains_regex(["*unsafe.tld"])) =~ + "MRF: Invalid subdomain Regex: *unsafe.tld" + end + end end describe "instance_list_from_tuples/1" do diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -93,6 +93,17 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest %{valid?: true} = ArticleNotePageValidator.cast_and_validate(note) end + test "a Note from Convergence AP Bridge validates" do + insert(:user, ap_id: "https://cc.mkdir.uk/ap/acct/hiira") + + note = + "test/fixtures/ccworld-ap-bridge_note.json" + |> File.read!() + |> Jason.decode!() + + %{valid?: true} = ArticleNotePageValidator.cast_and_validate(note) + end + test "a note with an attachment should work", _ do insert(:user, %{ap_id: "https://owncast.localhost.localdomain/federation/user/streamer"}) 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 @@ -5,9 +5,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidatorTest do use Pleroma.DataCase, async: true + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator + import Mox import Pleroma.Factory describe "attachments" do @@ -116,6 +118,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidatorTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) {:ok, attachment} = @@ -159,7 +164,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidatorTest do assert attachment.mediaType == "image/jpeg" end - test "it transforms image dimentions to our internal format" do + test "it transforms image dimensions to our internal format" do attachment = %{ "type" => "Document", "name" => "Hello world", diff --git a/test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs b/test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs @@ -5,11 +5,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do use Pleroma.DataCase alias Pleroma.Object + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.CommonAPI + import Mox import Pleroma.Factory describe "chat message create activities" do @@ -82,6 +84,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) valid_chat_message = @@ -103,6 +108,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) valid_chat_message = @@ -124,6 +132,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) valid_chat_message = @@ -136,6 +147,21 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do assert object["attachment"] end + test "validates for a basic object with content but attachment set to empty array", %{ + user: user, + recipient: recipient + } do + {:ok, valid_chat_message, _} = Builder.chat_message(user, recipient.ap_id, "Hello!") + + valid_chat_message = + valid_chat_message + |> Map.put("attachment", []) + + assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) + + assert object == Map.drop(valid_chat_message, ["attachment"]) + end + test "does not validate if the message has no content", %{ valid_chat_message: valid_chat_message } do diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs @@ -25,6 +25,17 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do setup_all do: clear_config([:instance, :federating], true) + describe "should_federate?/1" do + test "it returns false when the inbox is nil" do + refute Publisher.should_federate?(nil, false) + refute Publisher.should_federate?(nil, true) + end + + test "it returns true when public is true" do + assert Publisher.should_federate?(false, true) + end + end + describe "gather_webfinger_links/1" do test "it returns links" do user = insert(:user) @@ -205,6 +216,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do refute called(Instances.set_reachable(inbox)) end + @tag capture_log: true test_with_mock "calls `Instances.set_unreachable` on target inbox on non-2xx HTTP response code", Instances, [:passthrough], @@ -212,7 +224,8 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do actor = insert(:user) inbox = "http://404.site/users/nick1/inbox" - assert {:error, _} = Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) + assert {:discard, _} = + Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) assert called(Instances.set_unreachable(inbox)) end @@ -268,7 +281,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do describe "publish/2" do test_with_mock "doesn't publish a non-public activity to quarantined instances.", - Pleroma.Web.Federator.Publisher, + Pleroma.Web.ActivityPub.Publisher, [:passthrough], [] do Config.put([:instance, :quarantined_instances], [{"domain.com", "some reason"}]) @@ -295,7 +308,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do assert res == :ok assert not called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ + Publisher.enqueue_one(%{ inbox: "https://domain.com/users/nick1/inbox", actor_id: actor.id, id: note_activity.data["id"] @@ -304,7 +317,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do end test_with_mock "Publishes a non-public activity to non-quarantined instances.", - Pleroma.Web.Federator.Publisher, + Pleroma.Web.ActivityPub.Publisher, [:passthrough], [] do Config.put([:instance, :quarantined_instances], [{"somedomain.com", "some reason"}]) @@ -331,16 +344,43 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do assert res == :ok assert called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://domain.com/users/nick1/inbox", - actor_id: actor.id, - id: note_activity.data["id"] - }) + Publisher.enqueue_one( + %{ + inbox: "https://domain.com/users/nick1/inbox", + actor_id: actor.id, + id: note_activity.data["id"] + }, + priority: 1 + ) + ) + end + + test_with_mock "Publishes to directly addressed actors with higher priority.", + Pleroma.Web.ActivityPub.Publisher, + [:passthrough], + [] do + note_activity = insert(:direct_note_activity) + + actor = Pleroma.User.get_by_ap_id(note_activity.data["actor"]) + + res = Publisher.publish(actor, note_activity) + + assert res == :ok + + assert called( + Publisher.enqueue_one( + %{ + inbox: :_, + actor_id: actor.id, + id: note_activity.data["id"] + }, + priority: 0 + ) ) end test_with_mock "publishes an activity with BCC to all relevant peers.", - Pleroma.Web.Federator.Publisher, + Pleroma.Web.ActivityPub.Publisher, [:passthrough], [] do follower = @@ -364,7 +404,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do assert res == :ok assert called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ + Publisher.enqueue_one(%{ inbox: "https://domain.com/users/nick1/inbox", actor_id: actor.id, id: note_activity.data["id"] @@ -373,7 +413,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do end test_with_mock "publishes a delete activity to peers who signed fetch requests to the create acitvity/object.", - Pleroma.Web.Federator.Publisher, + Pleroma.Web.ActivityPub.Publisher, [:passthrough], [] do fetcher = @@ -414,19 +454,25 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do assert res == :ok assert called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://domain.com/users/nick1/inbox", - actor_id: actor.id, - id: delete.data["id"] - }) + Publisher.enqueue_one( + %{ + inbox: "https://domain.com/users/nick1/inbox", + actor_id: actor.id, + id: delete.data["id"] + }, + priority: 1 + ) ) assert called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://domain2.com/users/nick1/inbox", - actor_id: actor.id, - id: delete.data["id"] - }) + Publisher.enqueue_one( + %{ + inbox: "https://domain2.com/users/nick1/inbox", + actor_id: actor.id, + id: delete.data["id"] + }, + priority: 1 + ) ) end end diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -17,11 +17,19 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects + alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.CommonAPI + alias Pleroma.Web.CommonAPI.ActivityDraft import Mock import Pleroma.Factory + defp get_announces_of_object(%{data: %{"id" => id}} = _object) do + Pleroma.Activity.Queries.by_type("Announce") + |> Pleroma.Activity.Queries.by_object_id(id) + |> Pleroma.Repo.all() + end + describe "handle_after_transaction" do test "it streams out notifications and streams" do author = insert(:user, local: true) @@ -819,31 +827,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, announce, _} = SideEffects.handle(announce) assert Repo.get_by(Notification, user_id: poster.id, activity_id: announce.id) end - - test "it streams out the announce", %{announce: announce} do - with_mocks([ - { - Pleroma.Web.Streamer, - [], - [ - stream: fn _, _ -> nil end - ] - }, - { - Pleroma.Web.Push, - [], - [ - send: fn _ -> nil end - ] - } - ]) do - {:ok, announce, _} = SideEffects.handle(announce) - - assert called(Pleroma.Web.Streamer.stream(["user", "list"], announce)) - - assert called(Pleroma.Web.Push.send(:_)) - end - end end describe "removing a follower" do @@ -915,4 +898,85 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do assert User.get_follow_state(user, followed, nil) == nil end end + + describe "Group actors" do + setup do + poster = + insert(:user, + local: false, + nickname: "poster@example.com", + ap_id: "https://example.com/users/poster" + ) + + group = insert(:user, actor_type: "Group") + + make_create = fn mentioned_users -> + mentions = mentioned_users |> Enum.map(fn u -> "@#{u.nickname}" end) |> Enum.join(" ") + {:ok, draft} = ActivityDraft.create(poster, %{status: "#{mentions} hey"}) + + create_activity_data = + Utils.make_create_data(draft.changes |> Map.put(:published, nil), %{}) + |> put_in(["object", "id"], "https://example.com/object") + |> put_in(["id"], "https://example.com/activity") + + assert Enum.all?(mentioned_users, fn u -> u.ap_id in create_activity_data["to"] end) + + create_activity_data + end + + %{poster: poster, group: group, make_create: make_create} + end + + test "group should boost it", %{make_create: make_create, group: group} do + create_activity_data = make_create.([group]) + {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) + + {:ok, _create_activity, _meta} = + SideEffects.handle(create_activity, + local: false, + object_data: create_activity_data["object"] + ) + + object = Object.normalize(create_activity, fetch: false) + assert [announce] = get_announces_of_object(object) + assert announce.actor == group.ap_id + end + + test "remote group should not boost it", %{make_create: make_create, group: group} do + remote_group = + insert(:user, actor_type: "Group", local: false, nickname: "remotegroup@example.com") + + create_activity_data = make_create.([group, remote_group]) + {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) + + {:ok, _create_activity, _meta} = + SideEffects.handle(create_activity, + local: false, + object_data: create_activity_data["object"] + ) + + object = Object.normalize(create_activity, fetch: false) + assert [announce] = get_announces_of_object(object) + assert announce.actor == group.ap_id + end + + test "group should not boost it if group is blocking poster", %{ + make_create: make_create, + group: group, + poster: poster + } do + {:ok, _} = CommonAPI.block(group, poster) + create_activity_data = make_create.([group]) + {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) + + {:ok, _create_activity, _meta} = + SideEffects.handle(create_activity, + local: false, + object_data: create_activity_data["object"] + ) + + object = Object.normalize(create_activity, fetch: false) + assert [] = get_announces_of_object(object) + end + end end diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -221,6 +221,19 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do "<p><span class=\"h-card\"><a href=\"http://localtesting.pleroma.lol/users/lain\" class=\"u-url mention\">@<span>lain</span></a></span></p>" end + test "it works for incoming notices with a nil contentMap (firefish)" do + data = + File.read!("test/fixtures/mastodon-post-activity-contentmap.json") + |> Jason.decode!() + |> Map.put("contentMap", nil) + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"], fetch: false) + + assert object.data["content"] == + "<p><span class=\"h-card\"><a href=\"http://localtesting.pleroma.lol/users/lain\" class=\"u-url mention\">@<span>lain</span></a></span></p>" + 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") |> Jason.decode!() @@ -508,7 +521,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do [data: data] end - test "returns not modified object when hasn't containts inReplyTo field", %{data: data} do + test "returns not modified object when has no inReplyTo field", %{data: data} do assert Transmogrifier.fix_in_reply_to(data) == data end diff --git a/test/pleroma/web/activity_pub/transmogrifier/undo_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/undo_handling_test.exs @@ -32,7 +32,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.UndoHandlingTest do assert activity.data["type"] == "Undo" end - test "it returns an error for incoming unlikes wihout a like activity" do + test "it returns an error for incoming unlikes without a like activity" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{status: "leave a like pls"}) diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -128,10 +128,11 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do message = File.read!("test/fixtures/fep-e232.json") |> Jason.decode!() - assert {:ok, activity} = Transmogrifier.handle_incoming(message) - - object = Object.normalize(activity) - assert [%{"type" => "Mention"}, %{"type" => "Link"}] = object.data["tag"] + assert capture_log(fn -> + assert {:ok, activity} = Transmogrifier.handle_incoming(message) + object = Object.normalize(activity) + assert [%{"type" => "Mention"}, %{"type" => "Link"}] = object.data["tag"] + end) =~ "Object rejected while fetching" end test "it accepts quote posts" do @@ -409,7 +410,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert capture_log(fn -> {:error, _} = Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" + end) =~ "Object rejected while fetching" end test "it rejects activities which reference objects that have an incorrect attribution (variant 1)" do @@ -424,7 +425,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert capture_log(fn -> {:error, _} = Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" + end) =~ "Object rejected while fetching" end test "it rejects activities which reference objects that have an incorrect attribution (variant 2)" do @@ -439,7 +440,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert capture_log(fn -> {:error, _} = Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" + end) =~ "Object rejected while fetching" end end diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs @@ -16,6 +16,41 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do require Pleroma.Constants + describe "strip_report_status_data/1" do + test "does not break on issues with the reported activities" do + reporter = insert(:user) + target_account = insert(:user) + {:ok, activity} = CommonAPI.post(target_account, %{status: "foobar"}) + context = Utils.generate_context_id() + content = "foobar" + post_id = activity.data["id"] + + res = + Utils.make_flag_data( + %{ + actor: reporter, + context: context, + account: target_account, + statuses: [%{"id" => post_id}], + content: content + }, + %{} + ) + + res = + res + |> Map.put("object", res["object"] ++ [nil, 1, 5, "123"]) + + {:ok, activity} = Pleroma.Web.ActivityPub.ActivityPub.insert(res) + + [user_id, object | _] = activity.data["object"] + + {:ok, stripped} = Utils.strip_report_status_data(activity) + + assert stripped.data["object"] == [user_id, object["id"]] + end + end + describe "fetch the latest Follow" do test "fetches the latest Follow activity" do %Activity{data: %{"type" => "Follow"}} = activity = insert(:follow_activity) @@ -118,7 +153,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do assert Enum.sort(cc) == expected_cc end - test "does not adress actor's follower address if the activity is not public", %{ + test "does not address actor's follower address if the activity is not public", %{ user: user, other_user: other_user, third_user: third_user @@ -587,7 +622,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do end describe "get_cached_emoji_reactions/1" do - test "returns the normalized data or an emtpy list" do + test "returns the normalized data or an empty list" do object = insert(:note) assert Utils.get_cached_emoji_reactions(object) == [] diff --git a/test/pleroma/web/activity_pub/views/user_view_test.exs b/test/pleroma/web/activity_pub/views/user_view_test.exs @@ -76,12 +76,28 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do assert %{"invisible" => true} = UserView.render("service.json", %{user: user}) end + test "service has a few essential fields" do + user = insert(:user) + result = UserView.render("service.json", %{user: user}) + assert result["id"] + assert result["type"] == "Application" + assert result["inbox"] + assert result["outbox"] + end + test "renders AKAs" do akas = ["https://i.tusooa.xyz/users/test-pleroma"] user = insert(:user, also_known_as: akas) assert %{"alsoKnownAs" => ^akas} = UserView.render("user.json", %{user: user}) end + test "renders full nickname" do + clear_config([Pleroma.Web.WebFinger, :domain], "plemora.dev") + + user = insert(:user, nickname: "user") + assert %{"webfinger" => "acct:user@plemora.dev"} = UserView.render("user.json", %{user: user}) + end + describe "endpoints" do test "local users have a usable endpoints structure" do user = insert(:user) diff --git a/test/pleroma/web/activity_pub/visibility_test.exs b/test/pleroma/web/activity_pub/visibility_test.exs @@ -52,60 +52,60 @@ defmodule Pleroma.Web.ActivityPub.VisibilityTest do } end - test "is_direct?", %{ + test "direct?", %{ public: public, private: private, direct: direct, unlisted: unlisted, list: list } do - assert Visibility.is_direct?(direct) - refute Visibility.is_direct?(public) - refute Visibility.is_direct?(private) - refute Visibility.is_direct?(unlisted) - assert Visibility.is_direct?(list) + assert Visibility.direct?(direct) + refute Visibility.direct?(public) + refute Visibility.direct?(private) + refute Visibility.direct?(unlisted) + assert Visibility.direct?(list) end - test "is_public?", %{ + test "public?", %{ public: public, private: private, direct: direct, unlisted: unlisted, list: list } do - refute Visibility.is_public?(direct) - assert Visibility.is_public?(public) - refute Visibility.is_public?(private) - assert Visibility.is_public?(unlisted) - refute Visibility.is_public?(list) + refute Visibility.public?(direct) + assert Visibility.public?(public) + refute Visibility.public?(private) + assert Visibility.public?(unlisted) + refute Visibility.public?(list) end - test "is_private?", %{ + test "private?", %{ public: public, private: private, direct: direct, unlisted: unlisted, list: list } do - refute Visibility.is_private?(direct) - refute Visibility.is_private?(public) - assert Visibility.is_private?(private) - refute Visibility.is_private?(unlisted) - refute Visibility.is_private?(list) + refute Visibility.private?(direct) + refute Visibility.private?(public) + assert Visibility.private?(private) + refute Visibility.private?(unlisted) + refute Visibility.private?(list) end - test "is_list?", %{ + test "list?", %{ public: public, private: private, direct: direct, unlisted: unlisted, list: list } do - refute Visibility.is_list?(direct) - refute Visibility.is_list?(public) - refute Visibility.is_list?(private) - refute Visibility.is_list?(unlisted) - assert Visibility.is_list?(list) + refute Visibility.list?(direct) + refute Visibility.list?(public) + refute Visibility.list?(private) + refute Visibility.list?(unlisted) + assert Visibility.list?(list) end test "visible_for_user? Activity", %{ @@ -227,7 +227,7 @@ defmodule Pleroma.Web.ActivityPub.VisibilityTest do } do Repo.delete(user) Pleroma.User.invalidate_cache(user) - refute Visibility.is_private?(direct) + refute Visibility.private?(direct) end test "get_visibility", %{ diff --git a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs @@ -15,6 +15,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.ModerationLog alias Pleroma.Repo alias Pleroma.Tests.ObanHelpers + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.CommonAPI @@ -1077,6 +1078,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do describe "/api/pleroma/backups" do test "it creates a backup", %{conn: conn} do + ConfigMock + |> Mox.stub_with(Pleroma.Config) + admin = %{id: admin_id, nickname: admin_nickname} = insert(:user, is_admin: true) token = insert(:oauth_admin_token, user: admin) user = %{id: user_id, nickname: user_nickname} = insert(:user) diff --git a/test/pleroma/web/admin_api/controllers/config_controller_test.exs b/test/pleroma/web/admin_api/controllers/config_controller_test.exs @@ -873,7 +873,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest do %{ "tuple" => [ ":_", - "Phoenix.Endpoint.Cowboy2Handler", + "Plug.Cowboy.Handler", %{"tuple" => ["Pleroma.Web.Endpoint", []]} ] } @@ -937,7 +937,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest do %{ "tuple" => [ ":_", - "Phoenix.Endpoint.Cowboy2Handler", + "Plug.Cowboy.Handler", %{"tuple" => ["Pleroma.Web.Endpoint", []]} ] } diff --git a/test/pleroma/web/admin_api/controllers/media_proxy_cache_controller_test.exs b/test/pleroma/web/admin_api/controllers/media_proxy_cache_controller_test.exs @@ -5,9 +5,11 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do use Pleroma.Web.ConnCase - import Pleroma.Factory import Mock + import Mox + import Pleroma.Factory + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.MediaProxy setup do: clear_config([:media_proxy]) @@ -128,6 +130,9 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do "http://example.com/media/fb1f4d.jpg" ] + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + with_mocks [ {MediaProxy.Invalidation.Script, [], [ @@ -150,6 +155,9 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do "http://example.com/media/fb1f4d.jpg" ] + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + with_mocks [{MediaProxy.Invalidation.Script, [], [purge: fn _, _ -> {"ok", 0} end]}] do conn |> put_req_header("content-type", "application/json") diff --git a/test/pleroma/web/admin_api/controllers/o_auth_app_controller_test.exs b/test/pleroma/web/admin_api/controllers/o_auth_app_controller_test.exs @@ -163,7 +163,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do assert response == "" end - test "with non existance id", %{conn: conn} do + test "with nonexistent id", %{conn: conn} do response = conn |> delete("/api/pleroma/admin/oauth_app/0") diff --git a/test/pleroma/web/admin_api/controllers/report_controller_test.exs b/test/pleroma/web/admin_api/controllers/report_controller_test.exs @@ -11,6 +11,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do alias Pleroma.ModerationLog alias Pleroma.Repo alias Pleroma.ReportNote + alias Pleroma.Rule alias Pleroma.Web.CommonAPI setup do @@ -436,6 +437,34 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do "error" => "Invalid credentials." } end + + test "returns reports with specified role_id", %{conn: conn} do + [reporter, target_user] = insert_pair(:user) + + %{id: rule_id} = Rule.create(%{text: "Example rule"}) + + rule_id = to_string(rule_id) + + {:ok, %{id: report_id}} = + CommonAPI.report(reporter, %{ + account_id: target_user.id, + comment: "", + rule_ids: [rule_id] + }) + + {:ok, _report} = + CommonAPI.report(reporter, %{ + account_id: target_user.id, + comment: "" + }) + + response = + conn + |> get("/api/pleroma/admin/reports?rule_id=#{rule_id}") + |> json_response_and_validate_schema(:ok) + + assert %{"reports" => [%{"id" => ^report_id}]} = response + end end describe "POST /api/pleroma/admin/reports/:id/notes" do diff --git a/test/pleroma/web/admin_api/controllers/rule_controller_test.exs b/test/pleroma/web/admin_api/controllers/rule_controller_test.exs @@ -0,0 +1,82 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.RuleControllerTest do + use Pleroma.Web.ConnCase, async: true + + import Pleroma.Factory + + alias Pleroma.Rule + + 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/rules" do + test "sorts rules by priority", %{conn: conn} do + %{id: id1} = Rule.create(%{text: "Example rule"}) + %{id: id2} = Rule.create(%{text: "Second rule", priority: 2}) + %{id: id3} = Rule.create(%{text: "Third rule", priority: 1}) + + id1 = to_string(id1) + id2 = to_string(id2) + id3 = to_string(id3) + + response = + conn + |> get("/api/pleroma/admin/rules") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id1}, %{"id" => ^id3}, %{"id" => ^id2}] = response + end + end + + describe "POST /api/pleroma/admin/rules" do + test "creates a rule", %{conn: conn} do + %{"id" => id} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/rules", %{text: "Example rule"}) + |> json_response_and_validate_schema(:ok) + + assert %{text: "Example rule"} = Rule.get(id) + end + end + + describe "PATCH /api/pleroma/admin/rules" do + test "edits a rule", %{conn: conn} do + %{id: id} = Rule.create(%{text: "Example rule"}) + + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/pleroma/admin/rules/#{id}", %{text: "There are no rules", priority: 2}) + |> json_response_and_validate_schema(:ok) + + assert %{text: "There are no rules", priority: 2} = Rule.get(id) + end + end + + describe "DELETE /api/pleroma/admin/rules" do + test "deletes a rule", %{conn: conn} do + %{id: id} = Rule.create(%{text: "Example rule"}) + + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/pleroma/admin/rules/#{id}") + |> json_response_and_validate_schema(:ok) + + assert [] = + Rule.query() + |> Pleroma.Repo.all() + end + end +end diff --git a/test/pleroma/web/admin_api/views/report_view_test.exs b/test/pleroma/web/admin_api/views/report_view_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do import Pleroma.Factory + alias Pleroma.Rule alias Pleroma.Web.AdminAPI alias Pleroma.Web.AdminAPI.Report alias Pleroma.Web.AdminAPI.ReportView @@ -38,7 +39,8 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do statuses: [], notes: [], state: "open", - id: activity.id + id: activity.id, + rules: [] } result = @@ -76,7 +78,8 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do statuses: [StatusView.render("show.json", %{activity: activity})], state: "open", notes: [], - id: report_activity.id + id: report_activity.id, + rules: [] } result = @@ -168,4 +171,22 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do assert report2.id == rendered |> Enum.at(0) |> Map.get(:id) assert report1.id == rendered |> Enum.at(1) |> Map.get(:id) end + + test "renders included rules" do + user = insert(:user) + other_user = insert(:user) + + %{id: rule_id, text: text} = Rule.create(%{text: "Example rule"}) + + rule_id = to_string(rule_id) + + {:ok, activity} = + CommonAPI.report(user, %{ + account_id: other_user.id, + rule_ids: [rule_id] + }) + + assert %{rules: [%{id: ^rule_id, text: ^text}]} = + ReportView.render("show.json", Report.extract_report_info(activity)) + end end diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs @@ -12,6 +12,8 @@ defmodule Pleroma.Web.CommonAPITest do alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.Rule + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Transmogrifier @@ -20,17 +22,32 @@ defmodule Pleroma.Web.CommonAPITest do alias Pleroma.Web.CommonAPI alias Pleroma.Workers.PollWorker - import Pleroma.Factory - import Mock import Ecto.Query, only: [from: 2] + import Mock + import Mox + import Pleroma.Factory + require Pleroma.Activity.Queries require Pleroma.Constants + defp get_announces_of_object(%{data: %{"id" => id}} = _object) do + Pleroma.Activity.Queries.by_type("Announce") + |> Pleroma.Activity.Queries.by_object_id(id) + |> Pleroma.Repo.all() + end + setup_all do Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) :ok end + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + setup do: clear_config([:instance, :safe_dm_mentions]) setup do: clear_config([:instance, :limit]) setup do: clear_config([:instance, :max_pinned_statuses]) @@ -490,7 +507,7 @@ defmodule Pleroma.Web.CommonAPITest do {:ok, convo_reply} = CommonAPI.post(user, %{status: ".", in_reply_to_conversation_id: participation.id}) - assert Visibility.is_direct?(convo_reply) + assert Visibility.direct?(convo_reply) assert activity.data["context"] == convo_reply.data["context"] end @@ -908,7 +925,7 @@ defmodule Pleroma.Web.CommonAPITest do {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) {:ok, %Activity{} = announce_activity} = CommonAPI.repeat(activity.id, user) - assert Visibility.is_public?(announce_activity) + assert Visibility.public?(announce_activity) end test "can't repeat a repeat" do @@ -930,7 +947,7 @@ defmodule Pleroma.Web.CommonAPITest do {:ok, %Activity{} = announce_activity} = CommonAPI.repeat(activity.id, user, %{visibility: "private"}) - assert Visibility.is_private?(announce_activity) + assert Visibility.private?(announce_activity) refute Visibility.visible_for_user?(announce_activity, nil) end @@ -943,7 +960,7 @@ defmodule Pleroma.Web.CommonAPITest do {:ok, %Activity{} = announce_activity} = CommonAPI.repeat(activity.id, author) - assert Visibility.is_private?(announce_activity) + assert Visibility.private?(announce_activity) refute Visibility.visible_for_user?(announce_activity, nil) assert Visibility.visible_for_user?(activity, follower) @@ -1347,6 +1364,33 @@ defmodule Pleroma.Web.CommonAPITest do assert first_report.data["state"] == "resolved" assert second_report.data["state"] == "resolved" end + + test "creates a report with provided rules" do + reporter = insert(:user) + target_user = insert(:user) + + %{id: rule_id} = Rule.create(%{text: "There are no rules"}) + + reporter_ap_id = reporter.ap_id + target_ap_id = target_user.ap_id + + report_data = %{ + account_id: target_user.id, + rule_ids: [rule_id] + } + + assert {:ok, flag_activity} = CommonAPI.report(reporter, report_data) + + assert %Activity{ + actor: ^reporter_ap_id, + data: %{ + "type" => "Flag", + "object" => [^target_ap_id], + "state" => "open", + "rules" => [^rule_id] + } + } = flag_activity + end end describe "reblog muting" do @@ -1588,7 +1632,7 @@ defmodule Pleroma.Web.CommonAPITest do with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1603,7 +1647,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"deleted_activity_id" => ^activity_id}} = activity} = CommonAPI.delete(activity_id, user) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1619,7 +1663,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Announce"}} = activity} = CommonAPI.repeat(activity_id, user) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1637,7 +1681,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unrepeat(activity_id, user) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1652,7 +1696,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Like"}} = activity} = CommonAPI.favorite(user, activity.id) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1667,7 +1711,7 @@ defmodule Pleroma.Web.CommonAPITest do with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, activity} = CommonAPI.unfavorite(activity.id, user) - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1681,7 +1725,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "EmojiReact"}} = activity} = CommonAPI.react_with_emoji(activity.id, user, "👍") - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1697,7 +1741,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") - assert Visibility.is_local_public?(activity) + assert Visibility.local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1826,4 +1870,54 @@ defmodule Pleroma.Web.CommonAPITest do assert Map.has_key?(updated_object.data, "updated") end end + + describe "Group actors" do + setup do + poster = insert(:user) + group = insert(:user, actor_type: "Group") + other_group = insert(:user, actor_type: "Group") + %{poster: poster, group: group, other_group: other_group} + end + + test "it boosts public posts", %{poster: poster, group: group} do + {:ok, post} = CommonAPI.post(poster, %{status: "hey @#{group.nickname}"}) + + announces = get_announces_of_object(post.object) + assert [_] = announces + end + + test "it does not boost private posts", %{poster: poster, group: group} do + {:ok, private_post} = + CommonAPI.post(poster, %{status: "hey @#{group.nickname}", visibility: "private"}) + + assert [] = get_announces_of_object(private_post.object) + end + + test "remote groups do not boost any posts", %{poster: poster} do + remote_group = + insert(:user, actor_type: "Group", local: false, nickname: "remote@example.com") + + {:ok, post} = CommonAPI.post(poster, %{status: "hey @#{User.full_nickname(remote_group)}"}) + assert remote_group.ap_id in post.data["to"] + + announces = get_announces_of_object(post.object) + assert [] = announces + end + + test "multiple groups mentioned", %{poster: poster, group: group, other_group: other_group} do + {:ok, post} = + CommonAPI.post(poster, %{status: "hey @#{group.nickname} @#{other_group.nickname}"}) + + announces = get_announces_of_object(post.object) + assert [_, _] = announces + end + + test "it does not boost if group is blocking poster", %{poster: poster, group: group} do + {:ok, _} = CommonAPI.block(group, poster) + {:ok, post} = CommonAPI.post(poster, %{status: "hey @#{group.nickname}"}) + + announces = get_announces_of_object(post.object) + assert [] = announces + end + end end diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs @@ -1,69 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Endpoint.MetricsExporterTest do - # Modifies AppEnv, has to stay synchronous - 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_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 diff --git a/test/pleroma/web/fallback_test.exs b/test/pleroma/web/fallback_test.exs @@ -6,20 +6,6 @@ defmodule Pleroma.Web.FallbackTest do use Pleroma.Web.ConnCase import Pleroma.Factory - describe "neither preloaded data nor metadata attached to" do - test "GET /registration/:token", %{conn: conn} do - response = get(conn, "/registration/foo") - - assert html_response(response, 200) =~ "<!--server-generated-meta-->" - end - - test "GET /*path", %{conn: conn} do - assert conn - |> get("/foo") - |> html_response(200) =~ "<!--server-generated-meta-->" - end - end - test "GET /*path adds a title", %{conn: conn} do clear_config([:instance, :name], "a cool title") @@ -29,21 +15,28 @@ defmodule Pleroma.Web.FallbackTest do end describe "preloaded data and metadata attached to" do - test "GET /:maybe_nickname_or_id", %{conn: conn} do + test "GET /:maybe_nickname_or_id with existing user", %{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) =~ "<!--server-generated-meta-->" - refute html_response(user_present, 200) =~ "<!--server-generated-meta-->" - assert html_response(user_present, 200) =~ "initial-results" - assert html_response(user_present, 200) =~ "<title>a cool title</title>" + resp = get(conn, "/#{user.nickname}") + + assert html_response(resp, 200) =~ "<title>a cool title</title>" + refute html_response(resp, 200) =~ "<!--server-generated-meta-->" + assert html_response(resp, 200) =~ "initial-results" + end + + test "GET /:maybe_nickname_or_id with missing user", %{conn: conn} do + clear_config([:instance, :name], "a cool title") + + resp = get(conn, "/foo") + + assert html_response(resp, 200) =~ "<title>a cool title</title>" + refute html_response(resp, 200) =~ "initial-results" end test "GET /*path", %{conn: conn} do - assert conn + refute conn |> get("/foo") |> html_response(200) =~ "<!--server-generated-meta-->" @@ -65,10 +58,12 @@ defmodule Pleroma.Web.FallbackTest do end test "GET /main/all", %{conn: conn} do + clear_config([:instance, :name], "a cool title") public_page = get(conn, "/main/all") refute html_response(public_page, 200) =~ "<!--server-generated-meta-->" assert html_response(public_page, 200) =~ "initial-results" + assert html_response(public_page, 200) =~ "<title>a cool title</title>" end end diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs @@ -40,6 +40,44 @@ defmodule Pleroma.Web.FederatorTest do %{activity: activity, relay_mock: relay_mock} end + test "to shared inbox when multiple actors from same instance are recipients" do + user = insert(:user) + + shared_inbox = "https://domain.com/inbox" + + follower_one = + insert(:user, %{ + local: false, + nickname: "nick1@domain.com", + ap_id: "https://domain.com/users/nick1", + inbox: "https://domain.com/users/nick1/inbox", + shared_inbox: shared_inbox + }) + + follower_two = + insert(:user, %{ + local: false, + nickname: "nick2@domain.com", + ap_id: "https://domain.com/users/nick2", + inbox: "https://domain.com/users/nick2/inbox", + shared_inbox: shared_inbox + }) + + {:ok, _, _} = Pleroma.User.follow(follower_one, user) + {:ok, _, _} = Pleroma.User.follow(follower_two, user) + + {:ok, _activity} = CommonAPI.post(user, %{status: "Happy Friday everyone!"}) + + ObanHelpers.perform(all_enqueued(worker: PublisherWorker)) + + inboxes = + all_enqueued(worker: PublisherWorker) + |> Enum.filter(&(get_in(&1, [Access.key(:args), Access.key("op")]) == "publish_one")) + |> Enum.map(&get_in(&1, [Access.key(:args), Access.key("params"), Access.key("inbox")])) + + assert [shared_inbox] == inboxes + end + test "with relays active, it publishes to the relay", %{ activity: activity, relay_mock: relay_mock diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -1360,7 +1360,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do assert user.registration_reason == "I'm a cool dude, bro" end - test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do + test "returns error when user already registered", %{conn: conn, valid_params: valid_params} do _user = insert(:user, email: "lain@example.org") app_token = insert(:oauth_token, user: nil) @@ -1495,7 +1495,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do |> Plug.Conn.put_req_header("authorization", "Bearer " <> token) |> put_req_header("content-type", "multipart/form-data") |> post("/api/v1/accounts", %{ - nickname: "nickanme", + nickname: "nickname", agreement: true, email: "email@example.com", fullname: "Lain", @@ -1781,7 +1781,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do assert %{language: "ru_RU"} = Pleroma.User.get_by_nickname("foo") end - test "createing an account without language parameter should fallback to cookie/header language", + test "creating an account without language parameter should fallback to cookie/header language", %{conn: conn} do params = %{ username: "foo2", @@ -2172,6 +2172,55 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do end end + describe "familiar followers" do + setup do: oauth_access(["read:follows"]) + + test "fetch user familiar followers", %{user: user, conn: conn} do + %{id: id1} = other_user1 = insert(:user) + %{id: id2} = other_user2 = insert(:user) + _ = insert(:user) + + User.follow(user, other_user1) + User.follow(other_user1, other_user2) + + assert [%{"accounts" => [%{"id" => ^id1}], "id" => ^id2}] = + conn + |> put_req_header("content-type", "application/json") + |> get("/api/v1/accounts/familiar_followers?id[]=#{id2}") + |> json_response_and_validate_schema(200) + end + + test "returns empty array if followers are hidden", %{user: user, conn: conn} do + other_user1 = insert(:user, hide_follows: true) + %{id: id2} = other_user2 = insert(:user) + _ = insert(:user) + + User.follow(user, other_user1) + User.follow(other_user1, other_user2) + + assert [%{"accounts" => [], "id" => ^id2}] = + conn + |> put_req_header("content-type", "application/json") + |> get("/api/v1/accounts/familiar_followers?id[]=#{id2}") + |> json_response_and_validate_schema(200) + end + + test "it respects hide_followers", %{user: user, conn: conn} do + other_user1 = insert(:user) + %{id: id2} = other_user2 = insert(:user, hide_followers: true) + _ = insert(:user) + + User.follow(user, other_user1) + User.follow(other_user1, other_user2) + + assert [%{"accounts" => [], "id" => ^id2}] = + conn + |> put_req_header("content-type", "application/json") + |> get("/api/v1/accounts/familiar_followers?id[]=#{id2}") + |> json_response_and_validate_schema(200) + end + end + describe "remove from followers" do setup do: oauth_access(["follow"]) diff --git a/test/pleroma/web/mastodon_api/controllers/directory_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/directory_controller_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.DirectoryControllerTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase alias Pleroma.Web.CommonAPI import Pleroma.Factory diff --git a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do # TODO: Should not need Cachex use Pleroma.Web.ConnCase + alias Pleroma.Rule alias Pleroma.User import Pleroma.Factory @@ -40,7 +41,8 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do "banner_upload_limit" => _, "background_image" => from_config_background, "shout_limit" => _, - "description_limit" => _ + "description_limit" => _, + "rules" => _ } = result assert result["pleroma"]["metadata"]["account_activation_required"] != nil @@ -106,4 +108,48 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do |> get("/api/v1/instance") |> json_response_and_validate_schema(200) end + + test "get instance contact information", %{conn: conn} do + user = insert(:user, %{local: true}) + + clear_config([:instance, :contact_username], user.nickname) + + conn = get(conn, "/api/v1/instance") + + assert result = json_response_and_validate_schema(conn, 200) + + assert result["contact_account"]["id"] == user.id + end + + test "get instance information v2", %{conn: conn} do + clear_config([:auth, :oauth_consumer_strategies], []) + + assert get(conn, "/api/v2/instance") + |> json_response_and_validate_schema(200) + end + + test "get instance rules", %{conn: conn} do + Rule.create(%{text: "Example rule", hint: "Rule description", priority: 1}) + Rule.create(%{text: "Third rule", priority: 2}) + Rule.create(%{text: "Second rule", priority: 1}) + + conn = get(conn, "/api/v1/instance") + + assert result = json_response_and_validate_schema(conn, 200) + + assert [ + %{ + "text" => "Example rule", + "hint" => "Rule description" + }, + %{ + "text" => "Second rule", + "hint" => "" + }, + %{ + "text" => "Third rule", + "hint" => "" + } + ] = result["rules"] + end end diff --git a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs @@ -6,8 +6,10 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do use Pleroma.Web.ConnCase import ExUnit.CaptureLog + import Mox alias Pleroma.Object + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -15,6 +17,9 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do setup do: oauth_access(["write:media"]) setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + image = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image.jpg"), @@ -145,6 +150,9 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do setup do: oauth_access(["write:media"]) setup %{user: actor} do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + file = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image.jpg"), @@ -177,6 +185,9 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do setup do: oauth_access(["read:media"]) setup %{user: actor} do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + file = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image.jpg"), diff --git a/test/pleroma/web/mastodon_api/controllers/report_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/report_controller_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.ReportControllerTest do alias Pleroma.Activity alias Pleroma.Repo + alias Pleroma.Rule alias Pleroma.Web.CommonAPI import Pleroma.Factory @@ -81,6 +82,44 @@ defmodule Pleroma.Web.MastodonAPI.ReportControllerTest do |> json_response_and_validate_schema(200) end + test "submit a report with rule_ids", %{ + conn: conn, + target_user: target_user + } do + %{id: rule_id} = Rule.create(%{text: "There are no rules"}) + + rule_id = to_string(rule_id) + + assert %{"action_taken" => false, "id" => id} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/reports", %{ + "account_id" => target_user.id, + "forward" => "false", + "rule_ids" => [rule_id] + }) + |> json_response_and_validate_schema(200) + + assert %Activity{data: %{"rules" => [^rule_id]}} = Activity.get_report(id) + end + + test "rules field is empty if provided wrong rule id", %{ + conn: conn, + target_user: target_user + } do + assert %{"id" => id} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/reports", %{ + "account_id" => target_user.id, + "forward" => "false", + "rule_ids" => ["-1"] + }) + |> json_response_and_validate_schema(200) + + assert %Activity{data: %{"rules" => []}} = Activity.get_report(id) + end + test "account_id is required", %{ conn: conn, activity: activity diff --git a/test/pleroma/web/mastodon_api/controllers/scheduled_activity_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/scheduled_activity_controller_test.exs @@ -3,15 +3,25 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do - use Pleroma.Web.ConnCase + use Pleroma.Web.ConnCase, async: true alias Pleroma.Repo alias Pleroma.ScheduledActivity + alias Pleroma.UnstubbedConfigMock, as: ConfigMock - import Pleroma.Factory import Ecto.Query + import Mox + import Pleroma.Factory - setup do: clear_config([ScheduledActivity, :enabled]) + setup do + ConfigMock + |> stub(:get, fn + [ScheduledActivity, :enabled] -> true + path -> Pleroma.Test.StaticConfig.get(path) + end) + + :ok + end test "shows scheduled activities" do %{user: user, conn: conn} = oauth_access(["read:statuses"]) @@ -55,7 +65,6 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do end test "updates a scheduled activity" do - clear_config([ScheduledActivity, :enabled], true) %{user: user, conn: conn} = oauth_access(["write:statuses"]) scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) @@ -103,7 +112,6 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do end test "deletes a scheduled activity" do - clear_config([ScheduledActivity, :enabled], true) %{user: user, conn: conn} = oauth_access(["write:statuses"]) scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) diff --git a/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs @@ -42,7 +42,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do end end - @tag :skip_on_mac + @tag :skip_darwin test "search", %{conn: conn} do user = insert(:user) user_two = insert(:user, %{nickname: "shp@shitposter.club"}) @@ -322,26 +322,20 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do end test "search fetches remote statuses and prefers them over other results", %{conn: conn} do - old_version = :persistent_term.get({Pleroma.Repo, :postgres_version}) - :persistent_term.put({Pleroma.Repo, :postgres_version}, 10.0) - on_exit(fn -> :persistent_term.put({Pleroma.Repo, :postgres_version}, old_version) end) - - capture_log(fn -> - {:ok, %{id: activity_id}} = - CommonAPI.post(insert(:user), %{ - status: "check out http://mastodon.example.org/@admin/99541947525187367" - }) + {:ok, %{id: activity_id}} = + CommonAPI.post(insert(:user), %{ + status: "check out http://mastodon.example.org/@admin/99541947525187367" + }) - results = - conn - |> get("/api/v1/search?q=http://mastodon.example.org/@admin/99541947525187367") - |> json_response_and_validate_schema(200) + %{"url" => result_url, "id" => result_id} = + conn + |> get("/api/v1/search?q=http://mastodon.example.org/@admin/99541947525187367") + |> json_response_and_validate_schema(200) + |> Map.get("statuses") + |> List.first() - assert [ - %{"url" => "http://mastodon.example.org/@admin/99541947525187367"}, - %{"id" => ^activity_id} - ] = results["statuses"] - end) + refute match?(^result_id, activity_id) + assert match?(^result_url, "http://mastodon.example.org/@admin/99541947525187367") end test "search doesn't show statuses that it shouldn't", %{conn: conn} 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 @@ -12,6 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.ScheduledActivity + alias Pleroma.Tests.Helpers alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -19,16 +20,24 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do alias Pleroma.Web.CommonAPI alias Pleroma.Workers.ScheduledActivityWorker + import Mox import Pleroma.Factory setup do: clear_config([:instance, :federating]) setup do: clear_config([:instance, :allow_relay]) - setup do: clear_config([:rich_media, :enabled]) setup do: clear_config([:mrf, :policies]) setup do: clear_config([:mrf_keyword, :reject]) setup do - Mox.stub_with(Pleroma.UnstubbedConfigMock, Pleroma.Config) + Pleroma.UnstubbedConfigMock + |> stub_with(Pleroma.Config) + + Pleroma.StaticStubbedConfigMock + |> stub(:get, fn + [:rich_media, :enabled] -> false + path -> Pleroma.Test.StaticConfig.get(path) + end) + :ok end @@ -37,7 +46,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do test "posting a status does not increment reblog_count when relaying", %{conn: conn} do clear_config([:instance, :federating], true) - Config.get([:instance, :allow_relay], true) + clear_config([:instance, :allow_relay], true) response = conn @@ -320,59 +329,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do assert real_status == fake_status end - test "fake statuses' preview card is not cached", %{conn: conn} do - clear_config([:rich_media, :enabled], true) - - Tesla.Mock.mock(fn - %{ - method: :get, - url: "https://example.com/twitter-card" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/twitter_card.html")} - - env -> - apply(HttpRequestMock, :request, [env]) - end) - - conn1 = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/statuses", %{ - "status" => "https://example.com/ogp", - "preview" => true - }) - - conn2 = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/statuses", %{ - "status" => "https://example.com/twitter-card", - "preview" => true - }) - - assert %{"card" => %{"title" => "The Rock"}} = json_response_and_validate_schema(conn1, 200) - - assert %{"card" => %{"title" => "Small Island Developing States Photo Submission"}} = - json_response_and_validate_schema(conn2, 200) - end - - test "posting a status with OGP link preview", %{conn: conn} do - Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) - clear_config([:rich_media, :enabled], true) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/statuses", %{ - "status" => "https://example.com/ogp" - }) - - assert %{"id" => id, "card" => %{"title" => "The Rock"}} = - json_response_and_validate_schema(conn, 200) - - assert Activity.get_by_id(id) - end - test "posting a direct status", %{conn: conn} do user2 = insert(:user) content = "direct cofe @#{user2.nickname}" @@ -1687,87 +1643,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do end end - describe "cards" do - setup do - clear_config([:rich_media, :enabled], true) - - oauth_access(["read:statuses"]) - end - - test "returns rich-media card", %{conn: conn, user: user} do - Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) - - {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp"}) - - card_data = %{ - "image" => "http://ia.media-imdb.com/images/rock.jpg", - "provider_name" => "example.com", - "provider_url" => "https://example.com", - "title" => "The Rock", - "type" => "link", - "url" => "https://example.com/ogp", - "description" => - "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.", - "pleroma" => %{ - "opengraph" => %{ - "image" => "http://ia.media-imdb.com/images/rock.jpg", - "title" => "The Rock", - "type" => "video.movie", - "url" => "https://example.com/ogp", - "description" => - "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer." - } - } - } - - response = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(200) - - assert response == card_data - - # works with private posts - {:ok, activity} = - CommonAPI.post(user, %{status: "https://example.com/ogp", visibility: "direct"}) - - response_two = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(200) - - assert response_two == card_data - end - - test "replaces missing description with an empty string", %{conn: conn, user: user} do - Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) - - {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp-missing-data"}) - - response = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(:ok) - - assert response == %{ - "type" => "link", - "title" => "Pleroma", - "description" => "", - "image" => nil, - "provider_name" => "example.com", - "provider_url" => "https://example.com", - "url" => "https://example.com/ogp-missing-data", - "pleroma" => %{ - "opengraph" => %{ - "title" => "Pleroma", - "type" => "website", - "url" => "https://example.com/ogp-missing-data" - } - } - } - end - end - test "bookmarks" do bookmarks_uri = "/api/v1/bookmarks" @@ -1812,6 +1687,60 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do json_response_and_validate_schema(bookmarks, 200) end + test "bookmark folders" do + %{conn: conn, user: user} = oauth_access(["write:bookmarks", "read:bookmarks"]) + + {:ok, folder} = Pleroma.BookmarkFolder.create(user.id, "folder") + author = insert(:user) + + folder_bookmarks_uri = "/api/v1/bookmarks?folder_id=#{folder.id}" + + {:ok, activity1} = CommonAPI.post(author, %{status: "heweoo?"}) + {:ok, activity2} = CommonAPI.post(author, %{status: "heweoo!"}) + + # Add bookmark with a folder + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses/#{activity1.id}/bookmark", %{folder_id: folder.id}) + + assert json_response_and_validate_schema(response, 200)["bookmarked"] == true + + assert json_response_and_validate_schema(response, 200)["pleroma"]["bookmark_folder"] == + folder.id + + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses/#{activity2.id}/bookmark") + + assert json_response_and_validate_schema(response, 200)["bookmarked"] == true + assert json_response_and_validate_schema(response, 200)["pleroma"]["bookmark_folder"] == nil + + bookmarks = + get(conn, folder_bookmarks_uri) + |> json_response_and_validate_schema(200) + + assert length(bookmarks) == 1 + + # Update folder for existing bookmark + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses/#{activity2.id}/bookmark", %{folder_id: folder.id}) + + assert json_response_and_validate_schema(response, 200)["bookmarked"] == true + + assert json_response_and_validate_schema(response, 200)["pleroma"]["bookmark_folder"] == + folder.id + + bookmarks = + get(conn, folder_bookmarks_uri) + |> json_response_and_validate_schema(200) + + assert length(bookmarks) == 2 + end + describe "conversation muting" do setup do: oauth_access(["write:mutes"]) @@ -2170,7 +2099,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do # Using the header for pagination works correctly [next, _] = get_resp_header(result, "link") |> hd() |> String.split(", ") - [_, max_id] = Regex.run(~r/max_id=([^&]+)/, next) + [next_url, _next_rel] = String.split(next, ";") + next_url = String.trim_trailing(next_url, ">") |> String.trim_leading("<") + + max_id = Helpers.get_query_parameter(next_url, "max_id") assert max_id == third_favorite.id diff --git a/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SubscriptionControllerTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase, async: false import Pleroma.Factory @@ -35,17 +35,20 @@ defmodule Pleroma.Web.MastodonAPI.SubscriptionControllerTest do defmacro assert_error_when_disable_push(do: yield) do quote do - vapid_details = Application.get_env(:web_push_encryption, :vapid_details, []) - Application.put_env(:web_push_encryption, :vapid_details, []) - assert %{"error" => "Web push subscription is disabled on this Pleroma instance"} == unquote(yield) - - Application.put_env(:web_push_encryption, :vapid_details, vapid_details) end end describe "when disabled" do + setup do + vapid_config = Application.get_env(:web_push_encryption, :vapid_details) + + Application.put_env(:web_push_encryption, :vapid_details, []) + + on_exit(fn -> Application.put_env(:web_push_encryption, :vapid_details, vapid_config) end) + end + test "POST returns error", %{conn: conn} do assert_error_when_disable_push do conn diff --git a/test/pleroma/web/mastodon_api/mastodon_api_test.exs b/test/pleroma/web/mastodon_api/mastodon_api_test.exs @@ -7,11 +7,13 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do alias Pleroma.Notification alias Pleroma.ScheduledActivity + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.MastodonAPI import Pleroma.Factory + import Mox describe "follow/3" do test "returns error when followed user is deactivated" do @@ -88,6 +90,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do describe "get_scheduled_activities/2" do test "returns user scheduled activities" do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + user = insert(:user) today = diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -4,13 +4,22 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do alias Pleroma.Repo + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User use Pleroma.Web.ConnCase import Mock + import Mox import Pleroma.Factory + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + describe "updating credentials" do setup do: oauth_access(["write:accounts"]) setup :request_content_type @@ -502,10 +511,15 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do |> json_response_and_validate_schema(200) assert account_data["fields"] == [ - %{"name" => "<a href=\"http://google.com\">foo</a>", "value" => "bar"}, + %{ + "name" => "<a href=\"http://google.com\">foo</a>", + "value" => "bar", + "verified_at" => nil + }, %{ "name" => "link.io", - "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>) + "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>), + "verified_at" => nil } ] @@ -564,8 +578,8 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do |> json_response_and_validate_schema(200) assert account_data["fields"] == [ - %{"name" => ":firefox:", "value" => "is best 2hu"}, - %{"name" => "they wins", "value" => ":blank:"} + %{"name" => ":firefox:", "value" => "is best 2hu", "verified_at" => nil}, + %{"name" => "they wins", "value" => ":blank:", "verified_at" => nil} ] assert account_data["source"]["fields"] == [ @@ -593,10 +607,11 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do |> json_response_and_validate_schema(200) assert account["fields"] == [ - %{"name" => "foo", "value" => "bar"}, + %{"name" => "foo", "value" => "bar", "verified_at" => nil}, %{ "name" => "link", - "value" => ~S(<a href="http://cofe.io" rel="ugc">http://cofe.io</a>) + "value" => ~S(<a href="http://cofe.io" rel="ugc">http://cofe.io</a>), + "verified_at" => nil } ] @@ -618,7 +633,7 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do |> json_response_and_validate_schema(200) assert account["fields"] == [ - %{"name" => "foo", "value" => ""} + %{"name" => "foo", "value" => "", "verified_at" => nil} ] end @@ -723,4 +738,20 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do assert account["source"]["pleroma"]["actor_type"] == "Person" end end + + describe "Mark account as group" do + setup do: oauth_access(["write:accounts"]) + setup :request_content_type + + test "changing actor_type to Group makes account a Group and enables bot indicator for backward compatibility", + %{conn: conn} do + account = + conn + |> patch("/api/v1/accounts/update_credentials", %{actor_type: "Group"}) + |> json_response_and_validate_schema(200) + + assert account["bot"] + assert account["source"]["pleroma"]["actor_type"] == "Group" + end + end end diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -5,11 +5,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do use Pleroma.DataCase, async: false + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.AccountView + import Mox import Pleroma.Factory import Tesla.Mock @@ -35,7 +37,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do inserted_at: ~N[2017-08-15 15:47:06.597036], emoji: %{"karjalanpiirakka" => "/file.png"}, raw_bio: "valid html. a\nb\nc\nd\nf '&<>\"", - also_known_as: ["https://shitposter.zone/users/shp"] + also_known_as: ["https://shitposter.zone/users/shp"], + last_status_at: NaiveDateTime.utc_now() }) expected = %{ @@ -74,7 +77,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do fields: [] }, fqn: "shp@shitposter.club", - last_status_at: nil, + last_status_at: user.last_status_at |> NaiveDateTime.to_date() |> Date.to_iso8601(), pleroma: %{ ap_id: user.ap_id, also_known_as: ["https://shitposter.zone/users/shp"], @@ -752,6 +755,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do clear_config([:media_proxy, :enabled], true) clear_config([:media_preview_proxy, :enabled]) + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + user = insert(:user, avatar: %{"url" => [%{"href" => "https://evil.website/avatar.png"}]}, @@ -759,7 +765,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do emoji: %{"joker_smile" => "https://evil.website/society.png"} ) - with media_preview_enabled <- [false, true] do + Enum.each([true, false], fn media_preview_enabled -> clear_config([:media_preview_proxy, :enabled], media_preview_enabled) AccountView.render("show.json", %{user: user, skip_visibility_check: true}) @@ -777,7 +783,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do true end) |> assert() - end + end) end test "renders mute expiration date" do diff --git a/test/pleroma/web/mastodon_api/views/poll_view_test.exs b/test/pleroma/web/mastodon_api/views/poll_view_test.exs @@ -43,7 +43,8 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do %{title: "why are you even asking?", votes_count: 0} ], votes_count: 0, - voters_count: 0 + voters_count: 0, + pleroma: %{non_anonymous: false} } result = PollView.render("show.json", %{object: object}) @@ -165,4 +166,11 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do ] } = PollView.render("show.json", %{object: object}) end + + test "that poll is non anonymous" do + object = Object.normalize("https://friends.grishka.me/posts/54642", fetch: true) + result = PollView.render("show.json", %{object: object}) + + assert result[:pleroma][:non_anonymous] == true + end end diff --git a/test/pleroma/web/mastodon_api/views/scheduled_activity_view_test.exs b/test/pleroma/web/mastodon_api/views/scheduled_activity_view_test.exs @@ -4,12 +4,16 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityViewTest do use Pleroma.DataCase, async: true + alias Pleroma.ScheduledActivity + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.ScheduledActivityView alias Pleroma.Web.MastodonAPI.StatusView + + import Mox import Pleroma.Factory test "A scheduled activity with a media attachment" do @@ -27,6 +31,9 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityViewTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) attrs = %{ diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -11,17 +11,20 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do alias Pleroma.HTML alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView + alias Pleroma.Web.RichMedia.Card require Bitwise + import Mox + import OpenApiSpex.TestAssertions import Pleroma.Factory import Tesla.Mock - import OpenApiSpex.TestAssertions setup do mock(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -198,6 +201,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec()) end + @tag capture_log: true test "returns a temporary ap_id based user for activities missing db users" do user = insert(:user) @@ -338,7 +342,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do emoji_reactions: [], parent_visible: false, pinned_at: nil, - quotes_count: 0 + quotes_count: 0, + bookmark_folder: nil } } @@ -728,56 +733,105 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do describe "rich media cards" do test "a rich media card without a site name renders correctly" do - page_url = "http://example.com" + page_url = "https://example.com" - card = %{ - url: page_url, - image: page_url <> "/example.jpg", - title: "Example website" - } + {:ok, card} = + Card.create(page_url, %{image: page_url <> "/example.jpg", title: "Example website"}) - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + assert match?(%{provider_name: "example.com"}, StatusView.render("card.json", card)) end test "a rich media card without a site name or image renders correctly" do - page_url = "http://example.com" + page_url = "https://example.com" - card = %{ - url: page_url, - title: "Example website" + fields = %{ + "url" => page_url, + "title" => "Example website" } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + {:ok, card} = Card.create(page_url, fields) + + assert match?(%{provider_name: "example.com"}, StatusView.render("card.json", card)) end test "a rich media card without an image renders correctly" do - page_url = "http://example.com" + page_url = "https://example.com" - card = %{ - url: page_url, - site_name: "Example site name", - title: "Example website" + fields = %{ + "url" => page_url, + "site_name" => "Example site name", + "title" => "Example website" } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + {:ok, card} = Card.create(page_url, fields) + + assert match?(%{provider_name: "example.com"}, StatusView.render("card.json", card)) + end + + test "a rich media card without descriptions returns the fields with empty strings" do + page_url = "https://example.com" + + fields = %{ + "url" => page_url, + "site_name" => "Example site name", + "title" => "Example website" + } + + {:ok, card} = Card.create(page_url, fields) + + assert match?( + %{description: "", image_description: ""}, + StatusView.render("card.json", card) + ) end test "a rich media card with all relevant data renders correctly" do - page_url = "http://example.com" - - card = %{ - url: page_url, - site_name: "Example site name", - title: "Example website", - image: page_url <> "/example.jpg", - description: "Example description" + page_url = "https://example.com" + + fields = %{ + "url" => page_url, + "site_name" => "Example site name", + "title" => "Example website", + "image" => page_url <> "/example.jpg", + "description" => "Example description" } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + {:ok, card} = Card.create(page_url, fields) + + assert match?(%{provider_name: "example.com"}, StatusView.render("card.json", card)) + end + + test "a rich media card has all media proxied" do + clear_config([:media_proxy, :enabled], true) + clear_config([:media_preview_proxy, :enabled]) + + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + page_url = "https://example.com" + + fields = %{ + "url" => page_url, + "site_name" => "Example site name", + "title" => "Example website", + "image" => page_url <> "/example.jpg", + "audio" => page_url <> "/example.ogg", + "video" => page_url <> "/example.mp4", + "description" => "Example description" + } + + {:ok, card} = Card.create(page_url, fields) + + %{ + provider_name: "example.com", + image: image, + pleroma: %{opengraph: og} + } = StatusView.render("card.json", card) + + assert String.match?(image, ~r/\/proxy\//) + assert String.match?(og["image"], ~r/\/proxy\//) + assert String.match?(og["audio"], ~r/\/proxy\//) + assert String.match?(og["video"], ~r/\/proxy\//) end end diff --git a/test/pleroma/web/media_proxy/media_proxy_controller_test.exs b/test/pleroma/web/media_proxy/media_proxy_controller_test.exs @@ -9,9 +9,17 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do import Mox alias Pleroma.ReverseProxy.ClientMock + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.MediaProxy alias Plug.Conn + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + describe "Media Proxy" do setup do clear_config([:media_proxy, :enabled], true) @@ -174,7 +182,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 500, body: ""} end) @@ -189,7 +197,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "application/pdf"}]} end) @@ -209,7 +217,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do clear_config([:media_preview_proxy, :min_content_length], 1_000_000_000) Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{ status: 200, body: "", @@ -234,7 +242,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/gif"}]} end) @@ -252,7 +260,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} end) @@ -272,7 +280,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do clear_config([:media_preview_proxy, :min_content_length], 100_000) Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{ status: 200, body: "", @@ -294,7 +302,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do assert_dependencies_installed() Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/png"}]} %{method: :get, url: ^media_proxy_url} -> @@ -316,7 +324,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do assert_dependencies_installed() Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} %{method: :get, url: ^media_proxy_url} -> @@ -336,7 +344,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "HEAD", url: ^media_proxy_url} -> + %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} %{method: :get, url: ^media_proxy_url} -> diff --git a/test/pleroma/web/media_proxy_test.exs b/test/pleroma/web/media_proxy_test.exs @@ -7,9 +7,19 @@ defmodule Pleroma.Web.MediaProxyTest do use Pleroma.Tests.Helpers alias Pleroma.Config + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.Endpoint alias Pleroma.Web.MediaProxy + import Mox + + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + defp decode_result(encoded) do {:ok, decoded} = MediaProxy.decode_url(encoded) decoded @@ -222,7 +232,12 @@ defmodule Pleroma.Web.MediaProxyTest do test "ensure Pleroma.Upload base_url is always whitelisted" do media_url = "https://media.pleroma.social" - clear_config([Pleroma.Upload, :base_url], media_url) + + ConfigMock + |> stub(:get, fn + [Pleroma.Upload, :base_url] -> media_url + path -> Pleroma.Test.StaticConfig.get(path) + end) url = "#{media_url}/static/logo.png" encoded = MediaProxy.url(url) diff --git a/test/pleroma/web/metadata/providers/open_graph_test.exs b/test/pleroma/web/metadata/providers/open_graph_test.exs @@ -4,9 +4,19 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do use Pleroma.DataCase + import Mox import Pleroma.Factory + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.Metadata.Providers.OpenGraph + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + setup do: clear_config([Pleroma.Web.Metadata, :unfurl_nsfw]) test "it renders all supported types of attachments and skips unknown types" do diff --git a/test/pleroma/web/o_auth/mfa_controller_test.exs b/test/pleroma/web/o_auth/mfa_controller_test.exs @@ -214,7 +214,7 @@ defmodule Pleroma.Web.OAuth.MFAControllerTest do assert response == %{"error" => "Invalid code"} end - test "returns error when client credentails is wrong ", %{conn: conn, user: user} do + test "returns error when client credentials is wrong ", %{conn: conn, user: user} do otp_token = TOTP.generate_token(user.multi_factor_authentication_settings.totp.secret) mfa_token = insert(:mfa_token, user: user) diff --git a/test/pleroma/web/o_auth/token/utils_test.exs b/test/pleroma/web/o_auth/token/utils_test.exs @@ -13,7 +13,7 @@ defmodule Pleroma.Web.OAuth.Token.UtilsTest do Utils.fetch_app(%Plug.Conn{params: %{"client_id" => 1, "client_secret" => "x"}}) end - test "returns App by params credentails" do + test "returns App by params credentials" do app = insert(:oauth_app) assert {:ok, load_app} = @@ -24,7 +24,7 @@ defmodule Pleroma.Web.OAuth.Token.UtilsTest do assert load_app == app end - test "returns App by header credentails" do + test "returns App by header credentials" do app = insert(:oauth_app) header = "Basic " <> Base.encode64("#{app.client_id}:#{app.client_secret}") diff --git a/test/pleroma/web/o_status/o_status_controller_test.exs b/test/pleroma/web/o_status/o_status_controller_test.exs @@ -196,7 +196,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do |> get("/notice/#{like_activity.id}") |> response(200) - assert resp =~ "<!--server-generated-meta-->" + refute resp =~ ~r(<meta content="[^"]*" property="og:url") end test "404s a private notice", %{conn: conn} do diff --git a/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs @@ -5,12 +5,17 @@ defmodule Pleroma.Web.PleromaAPI.BackupControllerTest do use Pleroma.Web.ConnCase + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User.Backup alias Pleroma.Web.PleromaAPI.BackupView setup do clear_config([Pleroma.Upload, :uploader]) clear_config([Backup, :limit_days]) + + ConfigMock + |> Mox.stub_with(Pleroma.Config) + oauth_access(["read:backups"]) end diff --git a/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs @@ -0,0 +1,161 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only +defmodule Pleroma.Web.PleromaAPI.BookmarkFolderControllerTest do + use Pleroma.Web.ConnCase + + alias Pleroma.BookmarkFolder + # alias Pleroma.Object + # alias Pleroma.Tests.Helpers + # alias Pleroma.UnstubbedConfigMock, as: ConfigMock + # alias Pleroma.User + # alias Pleroma.Web.ActivityPub.ActivityPub + # alias Pleroma.Web.CommonAPI + + # import Mox + import Pleroma.Factory + + describe "GET /api/v1/pleroma/bookmark_folders" do + setup do: oauth_access(["read:bookmarks"]) + + test "it lists bookmark folders", %{conn: conn, user: user} do + {:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder") + + folder_id = folder.id + + result = + conn + |> get("/api/v1/pleroma/bookmark_folders") + |> json_response_and_validate_schema(200) + + assert [ + %{ + "id" => ^folder_id, + "name" => "Bookmark folder", + "emoji" => nil, + "emoji_url" => nil + } + ] = result + end + end + + describe "POST /api/v1/pleroma/bookmark_folders" do + setup do: oauth_access(["write:bookmarks"]) + + test "it creates a bookmark folder", %{conn: conn} do + result = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/bookmark_folders", %{ + name: "Bookmark folder", + emoji: "📁" + }) + |> json_response_and_validate_schema(200) + + assert %{ + "name" => "Bookmark folder", + "emoji" => "📁", + "emoji_url" => nil + } = result + end + + test "it creates a bookmark folder with custom emoji", %{conn: conn} do + result = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/bookmark_folders", %{ + name: "Bookmark folder", + emoji: ":firefox:" + }) + |> json_response_and_validate_schema(200) + + assert %{ + "name" => "Bookmark folder", + "emoji" => ":firefox:", + "emoji_url" => "http://localhost:4001/emoji/Firefox.gif" + } = result + end + + test "it returns error for invalid emoji", %{conn: conn} do + result = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/bookmark_folders", %{ + name: "Bookmark folder", + emoji: "not an emoji" + }) + |> json_response_and_validate_schema(422) + + assert %{"error" => "Invalid emoji"} = result + end + end + + describe "PATCH /api/v1/pleroma/bookmark_folders/:id" do + setup do: oauth_access(["write:bookmarks"]) + + test "it updates a bookmark folder", %{conn: conn, user: user} do + {:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder") + + result = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}", %{ + name: "bookmark folder" + }) + |> json_response_and_validate_schema(200) + + assert %{ + "name" => "bookmark folder" + } = result + end + + test "it returns error when updating others' folders", %{conn: conn} do + other_user = insert(:user) + + {:ok, folder} = BookmarkFolder.create(other_user.id, "Bookmark folder") + + result = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}", %{ + name: "bookmark folder" + }) + |> json_response_and_validate_schema(403) + + assert %{ + "error" => "Access denied" + } = result + end + end + + describe "DELETE /api/v1/pleroma/bookmark_folders/:id" do + setup do: oauth_access(["write:bookmarks"]) + + test "it deleting a bookmark folder", %{conn: conn, user: user} do + {:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder") + + assert conn + |> delete("/api/v1/pleroma/bookmark_folders/#{folder.id}") + |> json_response_and_validate_schema(200) + + folders = BookmarkFolder.for_user(user.id) + + assert length(folders) == 0 + end + + test "it returns error when deleting others' folders", %{conn: conn} do + other_user = insert(:user) + + {:ok, folder} = BookmarkFolder.create(other_user.id, "Bookmark folder") + + result = + conn + |> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}") + |> json_response_and_validate_schema(403) + + assert %{ + "error" => "Access denied" + } = result + end + end +end diff --git a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs @@ -7,10 +7,13 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do alias Pleroma.Chat alias Pleroma.Chat.MessageReference alias Pleroma.Object + alias Pleroma.Tests.Helpers + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI + import Mox import Pleroma.Factory describe "POST /api/v1/pleroma/chats/:id/messages/:message_id/read" do @@ -112,6 +115,9 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) other_user = insert(:user) @@ -207,36 +213,63 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do result = json_response_and_validate_schema(response, 200) [next, prev] = get_resp_header(response, "link") |> hd() |> String.split(", ") - api_endpoint = "/api/v1/pleroma/chats/" + api_endpoint = Pleroma.Web.Endpoint.url() <> "/api/v1/pleroma/chats/" + + [next_url, next_rel] = String.split(next, ";") + next_url = String.trim_trailing(next_url, ">") |> String.trim_leading("<") + + next_url_sorted = Helpers.uri_query_sort(next_url) assert String.match?( - next, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*; rel=\"next\"$) + next_url_sorted, + ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*&offset=\d+$) ) + assert next_rel =~ "next" + + [prev_url, prev_rel] = String.split(prev, ";") + prev_url = String.trim_trailing(prev_url, ">") |> String.trim_leading("<") + + prev_url_sorted = Helpers.uri_query_sort(prev_url) + assert String.match?( - prev, - ~r(#{api_endpoint}.*/messages\?limit=\d+&min_id=.*; rel=\"prev\"$) + prev_url_sorted, + ~r(#{api_endpoint}.*/messages\?limit=\d+&min_id=.*&offset=\d+$) ) + assert prev_rel =~ "prev" + assert length(result) == 20 - response = - get(conn, "/api/v1/pleroma/chats/#{chat.id}/messages?max_id=#{List.last(result)["id"]}") + response = get(conn, "#{api_endpoint}#{chat.id}/messages?max_id=#{List.last(result)["id"]}") result = json_response_and_validate_schema(response, 200) [next, prev] = get_resp_header(response, "link") |> hd() |> String.split(", ") + [next_url, next_rel] = String.split(next, ";") + next_url = String.trim_trailing(next_url, ">") |> String.trim_leading("<") + + next_url_sorted = Helpers.uri_query_sort(next_url) + assert String.match?( - next, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*; rel=\"next\"$) + next_url_sorted, + ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*&offset=\d+$) ) + assert next_rel =~ "next" + + [prev_url, prev_rel] = String.split(prev, ";") + prev_url = String.trim_trailing(prev_url, ">") |> String.trim_leading("<") + + prev_url_sorted = Helpers.uri_query_sort(prev_url) + assert String.match?( - prev, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*&min_id=.*; rel=\"prev\"$) + prev_url_sorted, + ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*&min_id=.*&offset=\d+$) ) + assert prev_rel =~ "prev" + assert length(result) == 10 end 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 @@ -116,7 +116,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - %{method: :get, url: "https://example.com/api/pleroma/emoji/packs?page=2&page_size=1"} -> + %{method: :get, url: "https://example.com/api/v1/pleroma/emoji/packs?page=2&page_size=1"} -> json(resp) end) @@ -199,7 +199,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" + url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack&page_size=" <> _n } -> conn |> get("/api/pleroma/emoji/pack?name=test_pack") @@ -208,7 +208,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/archive?name=test_pack" + url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=test_pack" } -> conn |> get("/api/pleroma/emoji/packs/archive?name=test_pack") @@ -217,7 +217,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/pack?name=test_pack_nonshared" + url: + "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack_nonshared&page_size=" <> + _n } -> conn |> get("/api/pleroma/emoji/pack?name=test_pack_nonshared") @@ -305,14 +307,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/pack?name=pack_bad_sha" + url: "https://example.com/api/v1/pleroma/emoji/pack?name=pack_bad_sha&page_size=" <> _n } -> {:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha") %Tesla.Env{status: 200, body: Jason.encode!(pack)} %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/archive?name=pack_bad_sha" + url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=pack_bad_sha" } -> %Tesla.Env{ status: 200, @@ -342,7 +344,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" + url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack&page_size=" <> _n } -> {:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack") %Tesla.Env{status: 200, body: Jason.encode!(pack)} diff --git a/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs @@ -16,7 +16,7 @@ defmodule Pleroma.Web.PleromaApi.InstancesControllerTest do {:ok, %Pleroma.Instances.Instance{unreachable_since: constant_unreachable}} = Instances.set_consistently_unreachable(constant) - _eventual_unrechable = Instances.set_unreachable(eventual) + _eventual_unreachable = Instances.set_unreachable(eventual) %{constant_unreachable: constant_unreachable, constant: constant} end diff --git a/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs @@ -5,8 +5,11 @@ defmodule Pleroma.Web.PleromaAPI.MascotControllerTest do use Pleroma.Web.ConnCase, async: true + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User + import Mox + test "mascot upload" do %{conn: conn} = oauth_access(["write:accounts"]) @@ -29,6 +32,9 @@ defmodule Pleroma.Web.PleromaAPI.MascotControllerTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + conn = conn |> put_req_header("content-type", "multipart/form-data") @@ -53,6 +59,9 @@ defmodule Pleroma.Web.PleromaAPI.MascotControllerTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + ret_conn = conn |> put_req_header("content-type", "multipart/form-data") diff --git a/test/pleroma/web/pleroma_api/controllers/notification_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/notification_controller_test.exs @@ -21,13 +21,11 @@ defmodule Pleroma.Web.PleromaAPI.NotificationControllerTest do {:ok, [notification1]} = Notification.create_notifications(activity1) {:ok, [notification2]} = Notification.create_notifications(activity2) - response = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/notifications/read", %{id: notification1.id}) - |> json_response_and_validate_schema(:ok) + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/notifications/read", %{id: notification1.id}) + |> json_response_and_validate_schema(:ok) - assert %{"pleroma" => %{"is_seen" => true}} = response assert Repo.get(Notification, notification1.id).seen refute Repo.get(Notification, notification2.id).seen end @@ -40,14 +38,17 @@ defmodule Pleroma.Web.PleromaAPI.NotificationControllerTest do [notification3, notification2, notification1] = Notification.for_user(user1, %{limit: 3}) - [response1, response2] = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/notifications/read", %{max_id: notification2.id}) - |> json_response_and_validate_schema(:ok) + refute Repo.get(Notification, notification1.id).seen + refute Repo.get(Notification, notification2.id).seen + refute Repo.get(Notification, notification3.id).seen + + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/notifications/read", %{max_id: notification2.id}) + |> json_response_and_validate_schema(:ok) + + [notification3, notification2, notification1] = Notification.for_user(user1, %{limit: 3}) - assert %{"pleroma" => %{"is_seen" => true}} = response1 - assert %{"pleroma" => %{"is_seen" => true}} = response2 assert Repo.get(Notification, notification1.id).seen assert Repo.get(Notification, notification2.id).seen refute Repo.get(Notification, notification3.id).seen diff --git a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs @@ -18,7 +18,8 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do "title" => "lain radio episode 1", "artist" => "lain", "album" => "lain radio", - "length" => "180000" + "length" => "180000", + "externalLink" => "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) assert %{"title" => "lain radio episode 1"} = json_response_and_validate_schema(conn, 200) @@ -33,21 +34,24 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do CommonAPI.listen(user, %{ title: "lain radio episode 1", artist: "lain", - album: "lain radio" + album: "lain radio", + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) {:ok, _activity} = CommonAPI.listen(user, %{ title: "lain radio episode 2", artist: "lain", - album: "lain radio" + album: "lain radio", + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+2" }) {:ok, _activity} = CommonAPI.listen(user, %{ title: "lain radio episode 3", artist: "lain", - album: "lain radio" + album: "lain radio", + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+3" }) conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/scrobbles") diff --git a/test/pleroma/web/pleroma_api/views/backup_view_test.exs b/test/pleroma/web/pleroma_api/views/backup_view_test.exs @@ -4,10 +4,21 @@ defmodule Pleroma.Web.PleromaAPI.BackupViewTest do use Pleroma.DataCase, async: true + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User.Backup alias Pleroma.Web.PleromaAPI.BackupView + + import Mox import Pleroma.Factory + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + test "it renders the ID" do user = insert(:user) backup = Backup.new(user) 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 @@ -3,21 +3,29 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do - use Pleroma.DataCase + alias Pleroma.NullCache + use Pleroma.DataCase, async: true alias Pleroma.Chat alias Pleroma.Chat.MessageReference alias Pleroma.Object + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView + import Mox import Pleroma.Factory + setup do: clear_config([:rich_media, :enabled], true) + test "it displays a chat message" do user = insert(:user) recipient = insert(:user) + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + file = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image.jpg"), @@ -35,6 +43,15 @@ defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do cm_ref = MessageReference.for_chat_and_object(chat, object) + id = cm_ref.id + + Pleroma.CachexMock + |> stub(:get, fn + :chat_message_id_idempotency_key_cache, ^id -> {:ok, "123"} + cache, key -> NullCache.get(cache, key) + end) + |> stub(:fetch, fn :rich_media_cache, _, _ -> {:ok, {:ok, %{}}} end) + chat_message = MessageReferenceView.render("show.json", chat_message_reference: cm_ref) assert chat_message[:id] == cm_ref.id @@ -46,12 +63,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do assert match?([%{shortcode: "firefox"}], chat_message[:emojis]) assert chat_message[:idempotency_key] == "123" - clear_config([:rich_media, :enabled], true) - - Tesla.Mock.mock_global(fn - %{url: "https://example.com/ogp"} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")} - end) + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) {:ok, activity} = CommonAPI.post_chat_message(recipient, user, "gkgkgk https://example.com/ogp", diff --git a/test/pleroma/web/plugs/ensure_privileged_plug_test.exs b/test/pleroma/web/plugs/ensure_privileged_plug_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.EnsurePrivilegedPlugTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase alias Pleroma.Web.Plugs.EnsurePrivilegedPlug import Pleroma.Factory diff --git a/test/pleroma/web/plugs/frontend_static_plug_test.exs b/test/pleroma/web/plugs/frontend_static_plug_test.exs @@ -4,7 +4,11 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do use Pleroma.Web.ConnCase + import Mock + import Mox + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock @dir "test/tmp/instance_static" @@ -66,6 +70,9 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do File.mkdir_p!("#{path}/proxy/rr/ss") File.write!("#{path}/proxy/rr/ss/Ek7w8WPVcAApOvN.jpg:large", "FB image") + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + url = Pleroma.Web.MediaProxy.encode_url("https://pbs.twimg.com/media/Ek7w8WPVcAApOvN.jpg:large") @@ -82,6 +89,7 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do "api", "main", "ostatus_subscribe", + "authorize_interaction", "oauth", "objects", "activities", diff --git a/test/pleroma/web/plugs/uploaded_media_plug_test.exs b/test/pleroma/web/plugs/uploaded_media_plug_test.exs @@ -4,10 +4,18 @@ defmodule Pleroma.Web.Plugs.UploadedMediaPlugTest do use Pleroma.Web.ConnCase, async: true + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.Upload + import Mox + defp upload_file(context) do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + Pleroma.DataCase.ensure_local_uploader(context) + File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") file = %Plug.Upload{ @@ -23,6 +31,13 @@ defmodule Pleroma.Web.Plugs.UploadedMediaPlugTest do setup_all :upload_file + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + test "does not send Content-Disposition header when name param is not set", %{ attachment_url: attachment_url } do diff --git a/test/pleroma/web/push/impl_test.exs b/test/pleroma/web/push/impl_test.exs @@ -5,10 +5,12 @@ defmodule Pleroma.Web.Push.ImplTest do use Pleroma.DataCase, async: true + import Mox import Pleroma.Factory alias Pleroma.Notification alias Pleroma.Object + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI @@ -257,6 +259,9 @@ defmodule Pleroma.Web.Push.ImplTest do filename: "an_image.jpg" } + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) {:ok, chat} = CommonAPI.post_chat_message(user, recipient, nil, media_id: upload.id) diff --git a/test/pleroma/web/rich_media/card_test.exs b/test/pleroma/web/rich_media/card_test.exs @@ -0,0 +1,71 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.RichMedia.CardTest do + use Pleroma.DataCase, async: true + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + alias Pleroma.Web.CommonAPI + alias Pleroma.Web.RichMedia.Card + + import Mox + import Pleroma.Factory + import Tesla.Mock + + setup do + mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) + + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + :ok + end + + setup do: clear_config([:rich_media, :enabled], true) + + test "crawls URL in activity" do + user = insert(:user) + + url = "https://example.com/ogp" + url_hash = Card.url_to_hash(url) + + {:ok, activity} = + CommonAPI.post(user, %{ + status: "[test](#{url})", + content_type: "text/markdown" + }) + + assert %Card{url_hash: ^url_hash, fields: _} = Card.get_by_activity(activity) + end + + test "recrawls URLs on status edits/updates" do + original_url = "https://google.com/" + original_url_hash = Card.url_to_hash(original_url) + updated_url = "https://yahoo.com/" + updated_url_hash = Card.url_to_hash(updated_url) + + user = insert(:user) + {:ok, activity} = CommonAPI.post(user, %{status: "I like this site #{original_url}"}) + + # Force a backfill + Card.get_by_activity(activity) + + assert match?( + %Card{url_hash: ^original_url_hash, fields: _}, + Card.get_by_activity(activity) + ) + + {:ok, _} = CommonAPI.update(user, activity, %{status: "I like this site #{updated_url}"}) + + activity = Pleroma.Activity.get_by_id(activity.id) + + # Force a backfill + Card.get_by_activity(activity) + + assert match?( + %Card{url_hash: ^updated_url_hash, fields: _}, + Card.get_by_activity(activity) + ) + end +end diff --git a/test/pleroma/web/rich_media/helpers_test.exs b/test/pleroma/web/rich_media/helpers_test.exs @@ -1,84 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.RichMedia.HelpersTest do - use Pleroma.DataCase - - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.RichMedia.Helpers - - import Pleroma.Factory - import Tesla.Mock - - setup do - mock(fn env -> apply(HttpRequestMock, :request, [env]) end) - - :ok - end - - setup do: clear_config([:rich_media, :enabled]) - - test "refuses to crawl incomplete URLs" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.post(user, %{ - status: "[test](example.com/ogp)", - content_type: "text/markdown" - }) - - clear_config([:rich_media, :enabled], true) - - assert %{} == Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - end - - test "refuses to crawl malformed URLs" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.post(user, %{ - status: "[test](example.com[]/ogp)", - content_type: "text/markdown" - }) - - clear_config([:rich_media, :enabled], true) - - assert %{} == Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - end - - test "crawls valid, complete URLs" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.post(user, %{ - status: "[test](https://example.com/ogp)", - content_type: "text/markdown" - }) - - clear_config([:rich_media, :enabled], true) - - assert %{page_url: "https://example.com/ogp", rich_media: _} = - Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - end - - test "refuses to crawl URLs of private network from posts" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.post(user, %{status: "http://127.0.0.1:4000/notice/9kCP7VNyPJXFOXDrgO"}) - - {:ok, activity2} = CommonAPI.post(user, %{status: "https://10.111.10.1/notice/9kCP7V"}) - {:ok, activity3} = CommonAPI.post(user, %{status: "https://172.16.32.40/notice/9kCP7V"}) - {:ok, activity4} = CommonAPI.post(user, %{status: "https://192.168.10.40/notice/9kCP7V"}) - {:ok, activity5} = CommonAPI.post(user, %{status: "https://pleroma.local/notice/9kCP7V"}) - - clear_config([:rich_media, :enabled], true) - - assert %{} = Helpers.fetch_data_for_activity(activity) - assert %{} = Helpers.fetch_data_for_activity(activity2) - assert %{} = Helpers.fetch_data_for_activity(activity3) - assert %{} = Helpers.fetch_data_for_activity(activity4) - assert %{} = Helpers.fetch_data_for_activity(activity5) - end -end diff --git a/test/pleroma/web/rich_media/parser/ttl/aws_signed_url_test.exs b/test/pleroma/web/rich_media/parser/ttl/aws_signed_url_test.exs @@ -3,8 +3,22 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do - # Relies on Cachex, needs to be synchronous - use Pleroma.DataCase + use Pleroma.DataCase, async: false + use Oban.Testing, repo: Pleroma.Repo + + import Mox + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + alias Pleroma.Web.RichMedia.Card + + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + clear_config([:rich_media, :enabled], true) + + :ok + end test "s3 signed url is parsed correct for expiration time" do url = "https://pleroma.social/amz" @@ -22,7 +36,7 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do expire_time = Timex.parse!(timestamp, "{ISO:Basic:Z}") |> Timex.to_unix() |> Kernel.+(valid_till) - assert {:ok, expire_time} == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url) + assert expire_time == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url) end test "s3 signed url is parsed and correct ttl is set for rich media" do @@ -43,26 +57,29 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do <meta name="twitter:site" content="Pleroma" /> <meta name="twitter:title" content="Pleroma" /> <meta name="twitter:description" content="Pleroma" /> - <meta name="twitter:image" content="#{Map.get(metadata, :image)}" /> + <meta name="twitter:image" content="#{Map.get(metadata, "image")}" /> """ Tesla.Mock.mock(fn %{ method: :get, - url: "https://pleroma.social/amz" + url: ^url } -> %Tesla.Env{status: 200, body: body} + + %{method: :head} -> + %Tesla.Env{status: 200} end) - Cachex.put(:rich_media_cache, url, metadata) + Card.get_or_backfill_by_url(url) + + assert_enqueued(worker: Pleroma.Workers.RichMediaExpirationWorker, args: %{"url" => url}) - Pleroma.Web.RichMedia.Parser.set_ttl_based_on_image(metadata, url) + [%Oban.Job{scheduled_at: scheduled_at}] = all_enqueued() - {:ok, cache_ttl} = Cachex.ttl(:rich_media_cache, url) + timestamp_dt = Timex.parse!(timestamp, "{ISO:Basic:Z}") - # as there is delay in setting and pulling the data from cache we ignore 1 second - # make it 2 seconds for flakyness - assert_in_delta(valid_till * 1000, cache_ttl, 2000) + assert DateTime.diff(scheduled_at, timestamp_dt) == valid_till end defp construct_s3_url(timestamp, valid_till) do @@ -71,11 +88,11 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do defp construct_metadata(timestamp, valid_till, url) do %{ - image: construct_s3_url(timestamp, valid_till), - site: "Pleroma", - title: "Pleroma", - description: "Pleroma", - url: url + "image" => construct_s3_url(timestamp, valid_till), + "site" => "Pleroma", + "title" => "Pleroma", + "description" => "Pleroma", + "url" => url } end end diff --git a/test/pleroma/web/rich_media/parser/ttl/opengraph_test.exs b/test/pleroma/web/rich_media/parser/ttl/opengraph_test.exs @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.RichMedia.Parser.TTL.OpengraphTest do + use Pleroma.DataCase + use Oban.Testing, repo: Pleroma.Repo + + import Mox + + alias Pleroma.UnstubbedConfigMock, as: ConfigMock + alias Pleroma.Web.RichMedia.Card + + setup do + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + + clear_config([:rich_media, :enabled], true) + + :ok + end + + test "OpenGraph TTL value is honored" do + url = "https://reddit.com/r/somepost" + + Tesla.Mock.mock(fn + %{ + method: :get, + url: ^url + } -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/reddit.html")} + + %{method: :head} -> + %Tesla.Env{status: 200} + end) + + Card.get_or_backfill_by_url(url) + + assert_enqueued(worker: Pleroma.Workers.RichMediaExpirationWorker, args: %{"url" => url}) + end +end diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs @@ -3,95 +3,26 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.ParserTest do - use ExUnit.Case, async: true + use Pleroma.DataCase alias Pleroma.Web.RichMedia.Parser - setup do - Tesla.Mock.mock(fn - %{ - method: :get, - url: "http://example.com/ogp" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")} - - %{ - method: :get, - url: "http://example.com/non-ogp" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/non_ogp_embed.html")} - - %{ - method: :get, - url: "http://example.com/ogp-missing-title" - } -> - %Tesla.Env{ - status: 200, - body: File.read!("test/fixtures/rich_media/ogp-missing-title.html") - } - - %{ - method: :get, - url: "http://example.com/twitter-card" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/twitter_card.html")} - - %{ - method: :get, - url: "http://example.com/oembed" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/oembed.html")} - - %{ - method: :get, - url: "http://example.com/oembed.json" - } -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/oembed.json")} - - %{method: :get, url: "http://example.com/empty"} -> - %Tesla.Env{status: 200, body: "hello"} - - %{method: :get, url: "http://example.com/malformed"} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/malformed-data.html")} - - %{method: :get, url: "http://example.com/error"} -> - {:error, :overload} - - %{ - method: :head, - url: "http://example.com/huge-page" - } -> - %Tesla.Env{ - status: 200, - headers: [{"content-length", "2000001"}, {"content-type", "text/html"}] - } - - %{ - method: :head, - url: "http://example.com/pdf-file" - } -> - %Tesla.Env{ - status: 200, - headers: [{"content-length", "1000000"}, {"content-type", "application/pdf"}] - } - - %{method: :head} -> - %Tesla.Env{status: 404, body: "", headers: []} - end) + import Tesla.Mock - :ok + setup do + mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) end test "returns error when no metadata present" do - assert {:error, _} = Parser.parse("http://example.com/empty") + assert {:error, _} = Parser.parse("https://example.com/empty") end test "doesn't just add a title" do - assert {:error, {:invalid_metadata, _}} = Parser.parse("http://example.com/non-ogp") + assert {:error, {:invalid_metadata, _}} = Parser.parse("https://example.com/non-ogp") end test "parses ogp" do - assert Parser.parse("http://example.com/ogp") == + assert Parser.parse("https://example.com/ogp") == {:ok, %{ "image" => "http://ia.media-imdb.com/images/rock.jpg", @@ -99,12 +30,12 @@ defmodule Pleroma.Web.RichMedia.ParserTest do "description" => "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.", "type" => "video.movie", - "url" => "http://example.com/ogp" + "url" => "https://example.com/ogp" }} end test "falls back to <title> when ogp:title is missing" do - assert Parser.parse("http://example.com/ogp-missing-title") == + assert Parser.parse("https://example.com/ogp-missing-title") == {:ok, %{ "image" => "http://ia.media-imdb.com/images/rock.jpg", @@ -112,12 +43,12 @@ defmodule Pleroma.Web.RichMedia.ParserTest do "description" => "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.", "type" => "video.movie", - "url" => "http://example.com/ogp-missing-title" + "url" => "https://example.com/ogp-missing-title" }} end test "parses twitter card" do - assert Parser.parse("http://example.com/twitter-card") == + assert Parser.parse("https://example.com/twitter-card") == {:ok, %{ "card" => "summary", @@ -125,12 +56,12 @@ defmodule Pleroma.Web.RichMedia.ParserTest do "image" => "https://farm6.staticflickr.com/5510/14338202952_93595258ff_z.jpg", "title" => "Small Island Developing States Photo Submission", "description" => "View the album on Flickr.", - "url" => "http://example.com/twitter-card" + "url" => "https://example.com/twitter-card" }} end test "parses OEmbed and filters HTML tags" do - assert Parser.parse("http://example.com/oembed") == + assert Parser.parse("https://example.com/oembed") == {:ok, %{ "author_name" => "\u202E\u202D\u202Cbees\u202C", @@ -150,7 +81,7 @@ defmodule Pleroma.Web.RichMedia.ParserTest do "thumbnail_width" => 150, "title" => "Bacon Lollys", "type" => "photo", - "url" => "http://example.com/oembed", + "url" => "https://example.com/oembed", "version" => "1.0", "web_page" => "https://www.flickr.com/photos/bees/2362225867/", "web_page_short_url" => "https://flic.kr/p/4AK2sc", @@ -159,18 +90,41 @@ defmodule Pleroma.Web.RichMedia.ParserTest do end test "rejects invalid OGP data" do - assert {:error, _} = Parser.parse("http://example.com/malformed") + assert {:error, _} = Parser.parse("https://example.com/malformed") end test "returns error if getting page was not successful" do - assert {:error, :overload} = Parser.parse("http://example.com/error") + assert {:error, :overload} = Parser.parse("https://example.com/error") end test "does a HEAD request to check if the body is too large" do - assert {:error, :body_too_large} = Parser.parse("http://example.com/huge-page") + assert {:error, :body_too_large} = Parser.parse("https://example.com/huge-page") end test "does a HEAD request to check if the body is html" do - assert {:error, {:content_type, _}} = Parser.parse("http://example.com/pdf-file") + assert {:error, {:content_type, _}} = Parser.parse("https://example.com/pdf-file") + end + + test "refuses to crawl incomplete URLs" do + url = "example.com/ogp" + assert :error == Parser.parse(url) + end + + test "refuses to crawl malformed URLs" do + url = "example.com[]/ogp" + assert :error == Parser.parse(url) + end + + test "refuses to crawl URLs of private network from posts" do + [ + "http://127.0.0.1:4000/notice/9kCP7VNyPJXFOXDrgO", + "https://10.111.10.1/notice/9kCP7V", + "https://172.16.32.40/notice/9kCP7V", + "https://192.168.10.40/notice/9kCP7V", + "https://pleroma.local/notice/9kCP7V" + ] + |> Enum.each(fn url -> + assert :error == Parser.parse(url) + end) end end diff --git a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs b/test/pleroma/web/twitter_api/remote_follow_controller_test.exs @@ -3,16 +3,18 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase alias Pleroma.MFA alias Pleroma.MFA.TOTP + alias Pleroma.UnstubbedConfigMock, as: ConfigMock alias Pleroma.User alias Pleroma.Web.CommonAPI + import Ecto.Query import ExUnit.CaptureLog + import Mox import Pleroma.Factory - import Ecto.Query setup_all do: clear_config([:instance, :federating], true) setup do: clear_config([:user, :deny_follow_blocked]) @@ -135,7 +137,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do |> html_response(200) assert response =~ "Error fetching user" - end) =~ "Object has been deleted" + end) =~ ":not_found" end end @@ -429,6 +431,9 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do test "with media proxy" do clear_config([:media_proxy, :enabled], true) + ConfigMock + |> stub_with(Pleroma.Test.StaticConfig) + user = insert(:user, %{ local: false, @@ -455,4 +460,38 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do assert avatar_url == "#{Pleroma.Web.Endpoint.url()}/localuser/avatar.png" end end + + describe "GET /authorize_interaction - authorize_interaction/2" do + test "redirects to /ostatus_subscribe", %{conn: conn} do + Tesla.Mock.mock(fn + %{method: :get, url: "https://mastodon.social/users/emelie"} -> + %Tesla.Env{ + status: 200, + headers: [{"content-type", "application/activity+json"}], + body: File.read!("test/fixtures/tesla_mock/emelie.json") + } + + %{method: :get, url: "https://mastodon.social/users/emelie/collections/featured"} -> + %Tesla.Env{ + status: 200, + headers: [{"content-type", "application/activity+json"}], + body: + File.read!("test/fixtures/users_mock/masto_featured.json") + |> String.replace("{{domain}}", "mastodon.social") + |> String.replace("{{nickname}}", "emelie") + } + end) + + conn = + conn + |> get( + remote_follow_path(conn, :authorize_interaction, %{ + uri: "https://mastodon.social/users/emelie" + }) + ) + + assert redirected_to(conn) == + remote_follow_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"}) + end + end end diff --git a/test/pleroma/web/web_finger/web_finger_controller_test.exs b/test/pleroma/web/web_finger/web_finger_controller_test.exs @@ -23,8 +23,15 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do assert response.status == 200 - assert response.resp_body == - ~s(<?xml version="1.0" encoding="UTF-8"?><XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link rel="lrdd" template="#{Pleroma.Web.Endpoint.url()}/.well-known/webfinger?resource={uri}" type="application/xrd+xml" /></XRD>) + response_xml = + response.resp_body + |> Floki.parse_document!(html_parser: Floki.HTMLParser.Mochiweb, attributes_as_maps: true) + + expected_xml = + ~s(<?xml version="1.0" encoding="UTF-8"?><XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link rel="lrdd" template="#{Pleroma.Web.Endpoint.url()}/.well-known/webfinger?resource={uri}" type="application/xrd+xml" /></XRD>) + |> Floki.parse_document!(html_parser: Floki.HTMLParser.Mochiweb, attributes_as_maps: true) + + assert match?(^response_xml, expected_xml) end test "Webfinger JRD" do @@ -48,12 +55,7 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do ] end - test "reach user on tld, while pleroma is runned on subdomain" do - Pleroma.Web.Endpoint.config_change( - [{Pleroma.Web.Endpoint, url: [host: "sub.example.com"]}], - [] - ) - + test "reach user on tld, while pleroma is running on subdomain" do clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com") clear_config([Pleroma.Web.WebFinger, :domain], "example.com") @@ -68,13 +70,6 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do assert response["subject"] == "acct:#{user.nickname}@example.com" assert response["aliases"] == ["https://sub.example.com/users/#{user.nickname}"] - - on_exit(fn -> - Pleroma.Web.Endpoint.config_change( - [{Pleroma.Web.Endpoint, url: [host: "localhost"]}], - [] - ) - end) end test "it returns 404 when user isn't found (JSON)" do diff --git a/test/pleroma/workers/purge_expired_token_test.exs b/test/pleroma/workers/purge_expired_token_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PurgeExpiredTokenTest do - use Pleroma.DataCase, async: true + use Pleroma.DataCase use Oban.Testing, repo: Pleroma.Repo import Pleroma.Factory diff --git a/test/pleroma/workers/receiver_worker_test.exs b/test/pleroma/workers/receiver_worker_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.ReceiverWorkerTest do - use Pleroma.DataCase, async: true + use Pleroma.DataCase use Oban.Testing, repo: Pleroma.Repo import Mock diff --git a/test/pleroma/workers/remote_fetcher_worker_test.exs b/test/pleroma/workers/remote_fetcher_worker_test.exs @@ -0,0 +1,69 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.RemoteFetcherWorkerTest do + use Pleroma.DataCase + use Oban.Testing, repo: Pleroma.Repo + + alias Pleroma.Workers.RemoteFetcherWorker + + @deleted_object_one "https://deleted-404.example.com/" + @deleted_object_two "https://deleted-410.example.com/" + @unauthorized_object "https://unauthorized.example.com/" + @depth_object "https://depth.example.com/" + + describe "RemoteFetcherWorker" do + setup do + Tesla.Mock.mock(fn + %{method: :get, url: @deleted_object_one} -> + %Tesla.Env{ + status: 404 + } + + %{method: :get, url: @deleted_object_two} -> + %Tesla.Env{ + status: 410 + } + + %{method: :get, url: @unauthorized_object} -> + %Tesla.Env{ + status: 403 + } + + %{method: :get, url: @depth_object} -> + %Tesla.Env{ + status: 200 + } + end) + end + + test "does not requeue a deleted object" do + assert {:discard, _} = + RemoteFetcherWorker.perform(%Oban.Job{ + args: %{"op" => "fetch_remote", "id" => @deleted_object_one} + }) + + assert {:discard, _} = + RemoteFetcherWorker.perform(%Oban.Job{ + args: %{"op" => "fetch_remote", "id" => @deleted_object_two} + }) + end + + test "does not requeue an unauthorized object" do + assert {:discard, _} = + RemoteFetcherWorker.perform(%Oban.Job{ + args: %{"op" => "fetch_remote", "id" => @unauthorized_object} + }) + end + + test "does not requeue an object that exceeded depth" do + clear_config([:instance, :federation_incoming_replies_max_depth], 0) + + assert {:discard, _} = + RemoteFetcherWorker.perform(%Oban.Job{ + args: %{"op" => "fetch_remote", "id" => @depth_object, "depth" => 1} + }) + end + end +end diff --git a/test/support/cachex_proxy.ex b/test/support/cachex_proxy.ex @@ -27,9 +27,15 @@ defmodule Pleroma.CachexProxy do defdelegate fetch!(cache, key, func), to: Cachex @impl true + defdelegate fetch(cache, key, func), to: Cachex + + @impl true defdelegate expire_at(cache, str, num), to: Cachex @impl true + defdelegate expire(cache, str, num), to: Cachex + + @impl true defdelegate exists?(cache, key), to: Cachex @impl true diff --git a/test/support/cluster.ex b/test/support/cluster.ex @@ -127,7 +127,10 @@ defmodule Pleroma.Cluster do defp start_slave({node_host, override_configs}) do log(node_host, "booting federated VM") - {:ok, node} = :slave.start(~c"127.0.0.1", node_name(node_host), vm_args()) + + {:ok, node} = + do_start_slave(%{host: "127.0.0.1", name: node_name(node_host), args: vm_args()}) + add_code_paths(node) load_apps_and_transfer_configuration(node, override_configs) ensure_apps_started(node) @@ -219,4 +222,14 @@ defmodule Pleroma.Cluster do |> Enum.at(0) |> String.to_atom() end + + defp do_start_slave(%{host: host, name: name, args: args} = opts) do + peer_module = Application.get_env(__MODULE__, :peer_module) + + if peer_module == :peer do + peer_module.start(opts) + else + peer_module.start(host, name, args) + end + end end diff --git a/test/support/data_case.ex b/test/support/data_case.ex @@ -115,6 +115,7 @@ defmodule Pleroma.DataCase do Mox.stub_with(Pleroma.Web.ActivityPub.ActivityPubMock, Pleroma.Web.ActivityPub.ActivityPub) Mox.stub_with(Pleroma.Web.FederatorMock, Pleroma.Web.Federator) Mox.stub_with(Pleroma.ConfigMock, Pleroma.Config) + Mox.stub_with(Pleroma.StaticStubbedConfigMock, Pleroma.Test.StaticConfig) end def ensure_local_uploader(context) do diff --git a/test/support/factory.ex b/test/support/factory.ex @@ -212,7 +212,7 @@ defmodule Pleroma.Factory do end def direct_note_factory do - user2 = insert(:user) + user2 = insert(:user, local: false, inbox: "http://example.com/inbox") %Pleroma.Object{data: data} = note_factory() %Pleroma.Object{data: Map.merge(data, %{"to" => [user2.ap_id]})} diff --git a/test/support/helpers.ex b/test/support/helpers.ex @@ -10,6 +10,39 @@ defmodule Pleroma.Tests.Helpers do require Logger + @doc "Accepts two URLs/URIs and sorts the query parameters before comparing" + def uri_equal?(a, b) do + a_sorted = uri_query_sort(a) + b_sorted = uri_query_sort(b) + + match?(^a_sorted, b_sorted) + end + + @doc "Accepts a URL/URI and sorts the query parameters" + def uri_query_sort(uri) do + parsed = URI.parse(uri) + + sorted_query = + String.split(parsed.query, "&") + |> Enum.sort() + |> Enum.join("&") + + parsed + |> Map.put(:query, sorted_query) + |> URI.to_string() + end + + @doc "Returns the value of the specified query parameter for the provided URL" + def get_query_parameter(url, param) do + url + |> URI.parse() + |> Map.get(:query) + |> URI.query_decoder() + |> Enum.to_list() + |> Enum.into(%{}, fn {x, y} -> {x, y} end) + |> Map.get(param) + end + defmacro clear_config(config_path) do quote do clear_config(unquote(config_path)) do @@ -41,7 +74,7 @@ defmodule Pleroma.Tests.Helpers do # NOTE: `clear_config([section, key], value)` != `clear_config([section], key: value)` (!) # Displaying a warning to prevent unintentional clearing of all but one keys in section if Keyword.keyword?(temp_setting) and length(temp_setting) == 1 do - Logger.warn( + Logger.warning( "Please change `clear_config([section], key: value)` to `clear_config([section, key], value)`" ) end diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex @@ -21,7 +21,7 @@ defmodule HttpRequestMock do else error -> with {:error, message} <- error do - Logger.warn(to_string(message)) + Logger.warning(to_string(message)) end {_, _r} = error @@ -178,7 +178,7 @@ defmodule HttpRequestMock do end def get( - "https://social.heldscal.la/.well-known/webfinger?resource=nonexistant@social.heldscal.la", + "https://social.heldscal.la/.well-known/webfinger?resource=nonexistent@social.heldscal.la", _, _, [{"accept", "application/xrd+xml,application/jrd+json"}] @@ -186,7 +186,7 @@ defmodule HttpRequestMock do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/nonexistant@social.heldscal.la.xml") + body: File.read!("test/fixtures/tesla_mock/nonexistent@social.heldscal.la.xml") }} end @@ -1059,7 +1059,7 @@ defmodule HttpRequestMock do }} end - def get("http://example.com/malformed", _, _, _) do + def get("https://example.com/malformed", _, _, _) do {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/malformed-data.html")}} end @@ -1464,6 +1464,63 @@ defmodule HttpRequestMock do }} end + def get("https://google.com/", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/google.html")}} + end + + def get("https://yahoo.com/", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/yahoo.html")}} + end + + def get("https://example.com/error", _, _, _), do: {:error, :overload} + + def get("https://example.com/ogp-missing-title", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/rich_media/ogp-missing-title.html") + }} + end + + def get("https://example.com/oembed", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/oembed.html")}} + end + + def get("https://example.com/oembed.json", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/oembed.json")}} + end + + def get("https://example.com/twitter-card", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/twitter_card.html")}} + end + + def get("https://example.com/non-ogp", _, _, _) do + {:ok, + %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/non_ogp_embed.html")}} + end + + def get("https://example.com/empty", _, _, _) do + {:ok, %Tesla.Env{status: 200, body: "hello"}} + end + + def get("https://friends.grishka.me/posts/54642", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/smithereen_non_anonymous_poll.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://friends.grishka.me/users/1", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/smithereen_user.json"), + headers: activitypub_object_headers() + }} + end + def get(url, query, body, headers) do {:error, "Mock response not implemented for GET #{inspect(url)}, #{query}, #{inspect(body)}, #{inspect(headers)}"} @@ -1537,14 +1594,41 @@ defmodule HttpRequestMock do # Most of the rich media mocks are missing HEAD requests, so we just return 404. @rich_media_mocks [ + "https://example.com/empty", + "https://example.com/error", + "https://example.com/malformed", + "https://example.com/non-ogp", + "https://example.com/oembed", + "https://example.com/oembed.json", "https://example.com/ogp", "https://example.com/ogp-missing-data", - "https://example.com/twitter-card" + "https://example.com/ogp-missing-title", + "https://example.com/twitter-card", + "https://google.com/", + "https://pleroma.local/notice/9kCP7V", + "https://yahoo.com/" ] + def head(url, _query, _body, _headers) when url in @rich_media_mocks do {:ok, %Tesla.Env{status: 404, body: ""}} end + def head("https://example.com/pdf-file", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + headers: [{"content-length", "1000000"}, {"content-type", "application/pdf"}] + }} + end + + def head("https://example.com/huge-page", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + headers: [{"content-length", "2000001"}, {"content-type", "text/html"}] + }} + end + def head(url, query, body, headers) do {:error, "Mock response not implemented for HEAD #{inspect(url)}, #{query}, #{inspect(body)}, #{inspect(headers)}"} diff --git a/test/support/mocks.ex b/test/support/mocks.ex @@ -27,5 +27,10 @@ Mox.defmock(Pleroma.Web.FederatorMock, for: Pleroma.Web.Federator.Publishing) Mox.defmock(Pleroma.ConfigMock, for: Pleroma.Config.Getting) Mox.defmock(Pleroma.UnstubbedConfigMock, for: Pleroma.Config.Getting) +Mox.defmock(Pleroma.StaticStubbedConfigMock, for: Pleroma.Config.Getting) Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging) + +Mox.defmock(Pleroma.User.Backup.ProcessorMock, for: Pleroma.User.Backup.ProcessorAPI) + +Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI) diff --git a/test/support/null_cache.ex b/test/support/null_cache.ex @@ -29,6 +29,9 @@ defmodule Pleroma.NullCache do end @impl true + def fetch(_, key, func), do: func.(key) + + @impl true def get_and_update(_, _, func) do func.(nil) end @@ -37,6 +40,9 @@ defmodule Pleroma.NullCache do def expire_at(_, _, _), do: {:ok, true} @impl true + def expire(_, _, _), do: {:ok, true} + + @impl true def exists?(_, _), do: {:ok, false} @impl true diff --git a/test/test_helper.exs b/test/test_helper.exs @@ -4,8 +4,15 @@ Code.put_compiler_option(:warnings_as_errors, true) -os_exclude = if :os.type() == {:unix, :darwin}, do: [skip_on_mac: true], else: [] -ExUnit.start(exclude: [:federated, :erratic] ++ os_exclude) +ExUnit.configure(max_cases: System.schedulers_online()) + +ExUnit.start(exclude: [:federated, :erratic]) + +if match?({:unix, :darwin}, :os.type()) do + excluded = ExUnit.configuration() |> Keyword.get(:exclude, []) + excluded = excluded ++ [:skip_darwin] + ExUnit.configure(exclude: excluded) +end Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, :manual) @@ -18,3 +25,16 @@ ExUnit.after_suite(fn _results -> uploads = Pleroma.Config.get([Pleroma.Uploaders.Local, :uploads], "test/uploads") File.rm_rf!(uploads) end) + +defmodule Pleroma.Test.StaticConfig do + @moduledoc """ + This module provides a Config that is completely static, built at startup time from the environment. It's safe to use in testing as it will not modify any state. + """ + + @behaviour Pleroma.Config.Getting + @config Application.get_all_env(:pleroma) + + def get(path, default \\ nil) do + get_in(@config, path) || default + end +end diff --git a/uploads/.gitignore b/uploads/.gitignore @@ -1,3 +0,0 @@ -# Git will ignore everything in this directory except this file. -* -!.gitignore